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.controller.md.sal.test.model.util.ListsBindingUtils.TOP_FOO_KEY;
13 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.complexUsesAugment;
14 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.leafOnlyUsesAugment;
15 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.top;
16 import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.topLevelList;
17 import static org.opendaylight.mdsal.binding.dom.adapter.test.AssertCollections.assertContains;
18 import static org.opendaylight.mdsal.binding.dom.adapter.test.AssertCollections.assertEmpty;
20 import org.opendaylight.mdsal.common.api.AsyncDataBroker;
21 import org.opendaylight.mdsal.common.api.AsyncDataChangeEvent;
22 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
24 import org.opendaylight.mdsal.binding.api.WriteTransaction;
25 import org.junit.Test;
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;
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 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());
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());
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());
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());
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));