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