Registration point for renderer capabilities
[groupbasedpolicy.git] / groupbasedpolicy / src / test / java / org / opendaylight / groupbasedpolicy / sf / SupportedClassifierDefinitionListenerTest.java
1 package org.opendaylight.groupbasedpolicy.sf;
2
3 import org.junit.Assert;
4 import org.junit.Before;
5 import org.junit.Test;
6 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
7 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
8 import org.opendaylight.groupbasedpolicy.sf.classifiers.EtherTypeClassifierDefinition;
9 import org.opendaylight.groupbasedpolicy.sf.classifiers.L4ClassifierDefinition;
10 import org.opendaylight.groupbasedpolicy.test.GbpDataBrokerTest;
11 import org.opendaylight.groupbasedpolicy.util.IidFactory;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definition.Parameter;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.Capabilities;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinitionBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValuesBuilder;
25 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
26
27 import com.google.common.collect.ImmutableList;
28
29 public class SupportedClassifierDefinitionListenerTest extends GbpDataBrokerTest {
30
31     private SupportedClassifierDefinitionListener listener;
32
33     @Before
34     public void init() {
35         listener = new SupportedClassifierDefinitionListener(getDataBroker());
36     }
37
38     @Test
39     public void testCreateClassifierDefinitionWithUnionOfParams_allParamsSupportedByRenderer() throws Exception {
40         WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
41         wTx.put(LogicalDatastoreType.CONFIGURATION,
42                 IidFactory.classifierDefinitionIid(EtherTypeClassifierDefinition.ID),
43                 EtherTypeClassifierDefinition.DEFINITION, true);
44         wTx.submit().get();
45
46         SupportedClassifierDefinition supportedClassifierDefinition = new SupportedClassifierDefinitionBuilder()
47             .setClassifierDefinitionId(EtherTypeClassifierDefinition.ID)
48             .setSupportedParameterValues(
49                     ImmutableList.<SupportedParameterValues>of(new SupportedParameterValuesBuilder()
50                         .setParameterName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)).build()))
51             .build();
52         Renderer renderer = createRenderer("renderer1");
53         registerSupportedClassifierDefByRenderer(supportedClassifierDefinition, renderer);
54
55         ClassifierDefinition newCd = listener.createClassifierDefinitionWithUnionOfParams(
56                 EtherTypeClassifierDefinition.ID, getDataBroker().newReadOnlyTransaction());
57         Assert.assertEquals(EtherTypeClassifierDefinition.DEFINITION, newCd);
58     }
59
60     @Test
61     public void testCreateClassifierDefinitionWithUnionOfParams_someParamsSupportedByRenderer() throws Exception {
62         WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
63         wTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.classifierDefinitionIid(L4ClassifierDefinition.ID),
64                 L4ClassifierDefinition.DEFINITION, true);
65         wTx.submit().get();
66
67         SupportedClassifierDefinition supportedClassifierDefinition = new SupportedClassifierDefinitionBuilder()
68             .setClassifierDefinitionId(L4ClassifierDefinition.ID)
69             .setSupportedParameterValues(
70                     ImmutableList.<SupportedParameterValues>of(new SupportedParameterValuesBuilder()
71                         .setParameterName(new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build()))
72             .build();
73         Renderer renderer = createRenderer("renderer1");
74         registerSupportedClassifierDefByRenderer(supportedClassifierDefinition, renderer);
75
76         ClassifierDefinition newCd = listener.createClassifierDefinitionWithUnionOfParams(L4ClassifierDefinition.ID,
77                 getDataBroker().newReadOnlyTransaction());
78         ClassifierDefinition expectedCd = new ClassifierDefinitionBuilder(L4ClassifierDefinition.DEFINITION)
79             .setParameter(ImmutableList.<Parameter>of(getParameterFromDefinition(L4ClassifierDefinition.DEFINITION,
80                     L4ClassifierDefinition.DST_PORT_PARAM)))
81             .build();
82         Assert.assertEquals(expectedCd, newCd);
83     }
84
85     private Renderer createRenderer(String rendererName) {
86         return new RendererBuilder().setName(new RendererName(rendererName)).build();
87     }
88
89     private Parameter getParameterFromDefinition(ClassifierDefinition cd, String parameter) {
90         for (Parameter param : cd.getParameter()) {
91             if (param.getName().getValue().equals(parameter)) {
92                 return param;
93             }
94         }
95         throw new IllegalArgumentException("Parameter " + parameter + " is not located in " + cd);
96     }
97
98     private void registerSupportedClassifierDefByRenderer(SupportedClassifierDefinition supportedClassifierDefinition,
99             Renderer renderer) {
100         InstanceIdentifier<SupportedClassifierDefinition> scdIid = InstanceIdentifier.builder(Renderers.class)
101             .child(Renderer.class, renderer.getKey())
102             .child(Capabilities.class)
103             .child(SupportedClassifierDefinition.class, supportedClassifierDefinition.getKey())
104             .build();
105         listener.ciValidatorBySupportedCdIid.put(scdIid,
106                 new ClassifierInstanceValidator(supportedClassifierDefinition));
107         listener.supportedCdIidByCdId.put(supportedClassifierDefinition.getClassifierDefinitionId(), scdIid);
108     }
109
110 }