1 package org.opendaylight.controller.md.sal.binding.impl.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;
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;
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");
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());
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());
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());
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());
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));