64c6d10f10028704cc410177cb8ecc3344c8c42b
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / sf / ActionDefinitionListenerTest.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf;\r
2 \r
3 import static org.mockito.Matchers.any;\r
4 import static org.mockito.Matchers.eq;\r
5 import static org.mockito.Mockito.mock;\r
6 import static org.mockito.Mockito.spy;\r
7 import static org.mockito.Mockito.verify;\r
8 import static org.mockito.Mockito.when;\r
9 \r
10 import java.util.Set;\r
11 \r
12 import com.google.common.collect.ImmutableSet;\r
13 import com.google.common.util.concurrent.CheckedFuture;\r
14 import org.junit.Before;\r
15 import org.junit.Test;\r
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
17 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;\r
18 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;\r
19 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;\r
20 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
22 import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedActionDefinition;\r
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
29 \r
30 public class ActionDefinitionListenerTest {\r
31 \r
32     private ActionDefinitionListener listener;\r
33     private DataObjectModification<ActionDefinition> rootNode;\r
34     private Set<DataTreeModification<ActionDefinition>> changes;\r
35 \r
36     private DataBroker dataProvider;\r
37 \r
38     private InstanceIdentifier<ActionDefinition> rootIdentifier;\r
39 \r
40     @SuppressWarnings("unchecked")\r
41     @Before\r
42     public void init() {\r
43 \r
44         dataProvider = mock(DataBroker.class);\r
45 \r
46         listener = spy(new ActionDefinitionListener(dataProvider));\r
47 \r
48         ActionDefinitionKey key = mock(ActionDefinitionKey.class);\r
49 \r
50         rootNode = mock(DataObjectModification.class);\r
51         rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class)\r
52                 .child(ActionDefinition.class, key)\r
53                 .build();\r
54         DataTreeIdentifier<ActionDefinition> rootPath =\r
55                 new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier);\r
56 \r
57         DataTreeModification<ActionDefinition> change = mock(DataTreeModification.class);\r
58 \r
59         when(change.getRootNode()).thenReturn(rootNode);\r
60         when(change.getRootPath()).thenReturn(rootPath);\r
61 \r
62         changes = ImmutableSet.of(change);\r
63 \r
64         ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build();\r
65 \r
66         when(rootNode.getDataBefore()).thenReturn(def);\r
67         when(rootNode.getDataAfter()).thenReturn(def);\r
68     }\r
69 \r
70     @Test\r
71     public void testOnDataTreeChanged_Write() {\r
72         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);\r
73 \r
74         WriteTransaction wt = resetTransaction();\r
75 \r
76         listener.onDataTreeChanged(changes);\r
77 \r
78         verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),\r
79                 any(SupportedActionDefinition.class), eq(true));\r
80     }\r
81 \r
82     @Test\r
83     public void testOnDataTreeChanged_SubtreeModified() {\r
84         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);\r
85 \r
86         WriteTransaction wt = resetTransaction();\r
87 \r
88         listener.onDataTreeChanged(changes);\r
89 \r
90         verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),\r
91                 any(SupportedActionDefinition.class), eq(true));\r
92     }\r
93 \r
94     @Test\r
95     public void testOnDataTreeChanged_Delete() {\r
96         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);\r
97 \r
98         WriteTransaction wt = resetTransaction();\r
99 \r
100         listener.onDataTreeChanged(changes);\r
101 \r
102         verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));\r
103     }\r
104 \r
105     private WriteTransaction resetTransaction() {\r
106         WriteTransaction wt = mock(WriteTransaction.class);\r
107         CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
108         when(wt.submit()).thenReturn(checkedFuture);\r
109         when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);\r
110         return wt;\r
111     }\r
112 \r
113 }\r