dc4b3870f8cf94c1416dccb9f0481f23a979e806
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / sf / ClassifierDefinitionListenerTest.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.EtherTypeClassifierDefinition;\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.ClassifierDefinition;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition;\r
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
29 \r
30 public class ClassifierDefinitionListenerTest {\r
31 \r
32     private ClassifierDefinitionListener listener;\r
33     private DataObjectModification<ClassifierDefinition> rootNode;\r
34     private Set<DataTreeModification<ClassifierDefinition>> changes;\r
35 \r
36     private DataBroker dataProvider;\r
37 \r
38     private InstanceIdentifier<ClassifierDefinition> 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 ClassifierDefinitionListener(dataProvider));\r
47 \r
48         ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class);\r
49 \r
50         rootNode = mock(DataObjectModification.class);\r
51         rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class)\r
52                 .child(ClassifierDefinition.class, key)\r
53                 .build();\r
54         DataTreeIdentifier<ClassifierDefinition> rootPath =\r
55                 new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier);\r
56 \r
57         DataTreeModification<ClassifierDefinition> 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         ClassifierDefinition def =\r
65                 new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build();\r
66 \r
67         when(rootNode.getDataBefore()).thenReturn(def);\r
68         when(rootNode.getDataAfter()).thenReturn(def);\r
69     }\r
70 \r
71     @Test\r
72     public void testOnDataTreeChanged_Write() {\r
73         when(rootNode.getModificationType()).thenReturn(\r
74                 DataObjectModification.ModificationType.WRITE);\r
75 \r
76         WriteTransaction wt = resetTransaction();\r
77 \r
78         listener.onDataTreeChanged(changes);\r
79 \r
80         verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),\r
81                 any(SupportedClassifierDefinition.class), eq(true));\r
82     }\r
83 \r
84     @Test\r
85     public void testOnDataTreeChanged_SubtreeModified() {\r
86         when(rootNode.getModificationType()).thenReturn(\r
87                 DataObjectModification.ModificationType.SUBTREE_MODIFIED);\r
88 \r
89         WriteTransaction wt = resetTransaction();\r
90 \r
91         listener.onDataTreeChanged(changes);\r
92 \r
93         verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),\r
94                 any(SupportedClassifierDefinition.class), eq(true));\r
95     }\r
96 \r
97     @Test\r
98     public void testOnDataTreeChanged_Delete() {\r
99         when(rootNode.getModificationType()).thenReturn(\r
100                 DataObjectModification.ModificationType.DELETE);\r
101 \r
102         WriteTransaction wt = resetTransaction();\r
103 \r
104         listener.onDataTreeChanged(changes);\r
105 \r
106         verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));\r
107     }\r
108 \r
109     private WriteTransaction resetTransaction() {\r
110         WriteTransaction wt = mock(WriteTransaction.class);\r
111         CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
112         when(wt.submit()).thenReturn(checkedFuture);\r
113         when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);\r
114         return wt;\r
115     }\r
116 \r
117 }\r