Renamed test packages to use org.opendaylight.mdsal
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / test / java / org / opendaylight / mdsal / binding / dom / adapter / test / Bug1418AugmentationTest.java
1 /*
2  * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.mdsal.binding.dom.adapter.test;
10
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;
33
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");
45
46     @Test
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());
61     }
62
63     @Test
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());
81     }
82
83     @Test
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());
101     }
102
103     @Test
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());
119     }
120
121     @Test
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));
140     }
141 }