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