Unit tests for ofoverlay
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / statistics / ResolvedPolicyClassifierListenerTest.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 \r
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics;\r
10 \r
11 import static org.mockito.Mockito.mock;\r
12 import static org.mockito.Mockito.spy;\r
13 import static org.mockito.Mockito.verify;\r
14 import static org.mockito.Mockito.when;\r
15 \r
16 import java.util.Set;\r
17 \r
18 import com.google.common.collect.ImmutableSet;\r
19 import org.junit.Before;\r
20 import org.junit.Test;\r
21 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
22 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;\r
23 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;\r
24 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;\r
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
26 import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;\r
27 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;\r
28 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.ParameterValueList;\r
29 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicyKey;\r
41 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
42 \r
43 public class ResolvedPolicyClassifierListenerTest {\r
44 \r
45     private ResolvedPolicyClassifierListener classifierListener;\r
46     private DataObjectModification<ResolvedPolicy> rootNode;\r
47     private Set<DataTreeModification<ResolvedPolicy>> changes;\r
48 \r
49     private InstanceIdentifier<ResolvedPolicy> rootIdentifier;\r
50 \r
51     private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1");\r
52     private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1");\r
53     private final ContractId contractId = new ContractId("contract1");\r
54     private final TenantId tenantId = new TenantId("tenant1");\r
55     private final ClassifierName classifierName = new ClassifierName("classifier1");\r
56     private final SubjectName subjectName = new SubjectName("subject1");\r
57     private final RuleName ruleName = new RuleName("rule1");\r
58 \r
59     @SuppressWarnings("unchecked")\r
60     @Before\r
61     public void init() {\r
62         DataBroker dataProvider = mock(DataBroker.class);\r
63         OFStatisticsManager ofStatisticsManager = mock(OFStatisticsManager.class);\r
64 \r
65         classifierListener = spy(new ResolvedPolicyClassifierListener(dataProvider, ofStatisticsManager));\r
66 \r
67         ResolvedPolicyKey key = mock(ResolvedPolicyKey.class);\r
68         rootNode = mock(DataObjectModification.class);\r
69         rootIdentifier = InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class, key).build();\r
70         DataTreeIdentifier<ResolvedPolicy> rootPath =\r
71                 new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier);\r
72 \r
73         DataTreeModification<ResolvedPolicy> change = mock(DataTreeModification.class);\r
74 \r
75         when(change.getRootNode()).thenReturn(rootNode);\r
76         when(change.getRootPath()).thenReturn(rootPath);\r
77 \r
78         changes = ImmutableSet.of(change);\r
79 \r
80         ParameterValueList parameterValues = new ParameterValueList();\r
81         parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE)\r
82             .addProto(IpProtoClassifierDefinition.TCP_VALUE);\r
83 \r
84         Classifier classifier = new ClassifierBuilder().setName(classifierName)\r
85             .setClassifierDefinitionId(IpProtoClassifierDefinition.ID)\r
86             .setParameterValue(parameterValues)\r
87             .build();\r
88         ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId,\r
89                 providerEpgId, classifier);\r
90         when(rootNode.getDataBefore()).thenReturn(rp);\r
91         when(rootNode.getDataAfter()).thenReturn(rp);\r
92     }\r
93 \r
94     @Test\r
95     public void testOnWrite() {\r
96         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);\r
97 \r
98         classifierListener.onDataTreeChanged(changes);\r
99 \r
100         verify(classifierListener).onWrite(rootNode, rootIdentifier);\r
101     }\r
102 \r
103     @Test\r
104     public void testOnDelete() {\r
105         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);\r
106 \r
107         classifierListener.onDataTreeChanged(changes);\r
108 \r
109         verify(classifierListener).onDelete(rootNode, rootIdentifier);\r
110     }\r
111 \r
112     @Test\r
113     public void testOnSubtreeModified() {\r
114         when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);\r
115 \r
116         classifierListener.onDataTreeChanged(changes);\r
117 \r
118         verify(classifierListener).onSubtreeModified(rootNode, rootIdentifier);\r
119     }\r
120 \r
121 }\r