Fix license header violations in sal-binding-broker
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / test / java / org / opendaylight / controller / md / sal / binding / impl / 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.controller.md.sal.binding.impl.test;
10
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;
26
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;
35
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");
47
48     @Test
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());
63     }
64
65     @Test
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());
83     }
84
85     @Test
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());
103     }
104
105     @Test
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());
121     }
122
123     @Test
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));
142     }
143 }