2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.controller.md.sal.binding.impl.test;
11 import org.junit.Test;
12 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
13 import org.opendaylight.controller.md.sal.binding.test.AbstractDataChangeListenerTest;
14 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
15 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
16 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeComplexUsesAugment;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeLeafOnlyUsesAugment;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ListViaUses;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ListViaUsesKey;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.Top;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelList;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListKey;
24 import org.opendaylight.yangtools.yang.binding.DataObject;
25 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import static org.junit.Assert.assertTrue;
28 import static org.opendaylight.controller.md.sal.binding.test.AssertCollections.assertContains;
29 import static org.opendaylight.controller.md.sal.binding.test.AssertCollections.assertEmpty;
30 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.top;
31 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.TOP_FOO_KEY;
32 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.topLevelList;
33 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.leafOnlyUsesAugment;
34 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.complexUsesAugment;
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");
49 public void leafOnlyAugmentationCreatedTest() {
50 TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, SIMPLE_AUGMENT,
51 AsyncDataBroker.DataChangeScope.SUBTREE);
52 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 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event = listener.event();
59 assertContains(event.getCreatedData(), SIMPLE_AUGMENT);
60 assertEmpty(event.getUpdatedData());
61 assertEmpty(event.getOriginalData());
62 assertEmpty(event.getRemovedPaths());
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 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 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());
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 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 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());
106 public void complexAugmentationCreatedTest() {
107 TestListener listener = createListener(LogicalDatastoreType.CONFIGURATION, COMPLEX_AUGMENT,
108 AsyncDataBroker.DataChangeScope.SUBTREE);
109 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 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());
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 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 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));