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