Moved binding MD-SAL APIs to binding folder
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / test / java / org / opendaylight / controller / md / sal / binding / impl / test / Bug1418AugmentationTest.java
1 /*
2  * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.md.sal.binding.impl.test;
10
11 import static org.junit.Assert.assertTrue;
12 import static org.opendaylight.controller.md.sal.binding.test.AssertCollections.assertContains;
13 import static org.opendaylight.controller.md.sal.binding.test.AssertCollections.assertEmpty;
14 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.TOP_FOO_KEY;
15 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.complexUsesAugment;
16 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.leafOnlyUsesAugment;
17 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.top;
18 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.topLevelList;
19
20 import org.junit.Test;
21 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
22 import org.opendaylight.controller.md.sal.binding.test.AbstractDataChangeListenerTest;
23 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
24 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyUsesAugment;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.complex.from.grouping.ListViaUses;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.complex.from.grouping.ListViaUsesKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelList;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListKey;
33 import org.opendaylight.yangtools.yang.binding.DataObject;
34 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35
36 public class Bug1418AugmentationTest extends AbstractDataChangeListenerTest{
37     private static final InstanceIdentifier<Top> TOP = InstanceIdentifier.create(Top.class);
38     private static final InstanceIdentifier<TopLevelList> TOP_FOO = TOP.child(TopLevelList.class, TOP_FOO_KEY);
39     private static final InstanceIdentifier<TreeLeafOnlyUsesAugment> SIMPLE_AUGMENT =
40             TOP.child(TopLevelList.class, TOP_FOO_KEY).augmentation(TreeLeafOnlyUsesAugment.class);
41     private static final InstanceIdentifier<TreeComplexUsesAugment> COMPLEX_AUGMENT =
42             TOP.child(TopLevelList.class, TOP_FOO_KEY).augmentation(TreeComplexUsesAugment.class);
43     private static final ListViaUsesKey LIST_VIA_USES_KEY =
44             new ListViaUsesKey("list key");
45     private static final ListViaUsesKey LIST_VIA_USES_KEY_MOD =
46             new ListViaUsesKey("list key modified");
47
48     @Test
49     public void leafOnlyAugmentationCreatedTest() {
50         final TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT,
51                 AsyncDataBroker.DataChangeScope.SUBTREE);
52         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
53         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP, top());
54         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP_FOO, topLevelList(new TopLevelListKey(TOP_FOO_KEY)));
55         writeTx.put(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT, leafOnlyUsesAugment("test leaf"));
56         assertCommit(writeTx.submit());
57         assertTrue(listener.hasEvent());
58         final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
59         assertContains(event.getCreatedData(), SIMPLE_AUGMENT);
60         assertEmpty(event.getUpdatedData());
61         assertEmpty(event.getOriginalData());
62         assertEmpty(event.getRemovedPaths());
63     }
64
65     @Test
66     public void leafOnlyAugmentationUpdatedTest() {
67         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
68         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP, top());
69         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP_FOO, topLevelList(new TopLevelListKey(TOP_FOO_KEY)));
70         writeTx.put(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT, leafOnlyUsesAugment("test leaf"));
71         assertCommit(writeTx.submit());
72         final TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT,
73                 AsyncDataBroker.DataChangeScope.SUBTREE);
74         writeTx = getDataBroker().newWriteOnlyTransaction();
75         writeTx.put(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT, leafOnlyUsesAugment("test leaf changed"));
76         assertCommit(writeTx.submit());
77         assertTrue(listener.hasEvent());
78         final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
79         assertContains(event.getUpdatedData(), SIMPLE_AUGMENT);
80         assertContains(event.getOriginalData(), SIMPLE_AUGMENT);
81         assertEmpty(event.getCreatedData());
82         assertEmpty(event.getRemovedPaths());
83     }
84
85     @Test
86     public void leafOnlyAugmentationDeletedTest() {
87         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
88         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP, top());
89         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP_FOO, topLevelList(new TopLevelListKey(TOP_FOO_KEY)));
90         writeTx.put(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT, leafOnlyUsesAugment("test leaf"));
91         assertCommit(writeTx.submit());
92         final TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT,
93                 AsyncDataBroker.DataChangeScope.SUBTREE);
94         writeTx = getDataBroker().newWriteOnlyTransaction();
95         writeTx.delete(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT);
96         assertCommit(writeTx.submit());
97         assertTrue(listener.hasEvent());
98         final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
99         assertContains(event.getRemovedPaths(), SIMPLE_AUGMENT);
100         assertContains(event.getOriginalData(), SIMPLE_AUGMENT);
101         assertEmpty(event.getCreatedData());
102         assertEmpty(event.getUpdatedData());
103     }
104
105     @Test
106     public void complexAugmentationCreatedTest() {
107         final TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT,
108                 AsyncDataBroker.DataChangeScope.SUBTREE);
109         final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
110         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP, top());
111         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP_FOO, topLevelList(new TopLevelListKey(TOP_FOO_KEY)));
112         writeTx.put(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT, complexUsesAugment(LIST_VIA_USES_KEY));
113         assertCommit(writeTx.submit());
114         assertTrue(listener.hasEvent());
115         final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
116         assertContains(event.getCreatedData(), COMPLEX_AUGMENT);
117         assertContains(event.getCreatedData(), COMPLEX_AUGMENT.child(ListViaUses.class, LIST_VIA_USES_KEY));
118         assertEmpty(event.getUpdatedData());
119         assertEmpty(event.getOriginalData());
120         assertEmpty(event.getRemovedPaths());
121     }
122
123     @Test
124     public void complexAugmentationUpdatedTest() {
125         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
126         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP, top());
127         writeTx.put(LogicalDatastoreType.CONFIGURATION, TOP_FOO, topLevelList(new TopLevelListKey(TOP_FOO_KEY)));
128         writeTx.put(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT, complexUsesAugment(LIST_VIA_USES_KEY));
129         assertCommit(writeTx.submit());
130         final TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT,
131                 AsyncDataBroker.DataChangeScope.SUBTREE);
132         writeTx = getDataBroker().newWriteOnlyTransaction();
133         writeTx.put(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT, complexUsesAugment(LIST_VIA_USES_KEY_MOD));
134         assertCommit(writeTx.submit());
135         assertTrue(listener.hasEvent());
136         final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
137         assertContains(event.getUpdatedData(), COMPLEX_AUGMENT);
138         assertContains(event.getCreatedData(), COMPLEX_AUGMENT.child(ListViaUses.class, LIST_VIA_USES_KEY_MOD));
139         assertContains(event.getRemovedPaths(), COMPLEX_AUGMENT.child(ListViaUses.class, LIST_VIA_USES_KEY));
140         assertContains(event.getOriginalData(), COMPLEX_AUGMENT);
141         assertContains(event.getOriginalData(), COMPLEX_AUGMENT.child(ListViaUses.class, LIST_VIA_USES_KEY));
142     }
143 }