1 package org.opendaylight.groupbasedpolicy.sf;
3 import org.junit.Assert;
4 import org.junit.Before;
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;
27 import com.google.common.collect.ImmutableList;
29 public class SupportedClassifierDefinitionListenerTest extends GbpDataBrokerTest {
31 private SupportedClassifierDefinitionListener listener;
35 listener = new SupportedClassifierDefinitionListener(getDataBroker());
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);
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()))
52 Renderer renderer = createRenderer("renderer1");
53 registerSupportedClassifierDefByRenderer(supportedClassifierDefinition, renderer);
55 ClassifierDefinition newCd = listener.createClassifierDefinitionWithUnionOfParams(
56 EtherTypeClassifierDefinition.ID, getDataBroker().newReadOnlyTransaction());
57 Assert.assertEquals(EtherTypeClassifierDefinition.DEFINITION, newCd);
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);
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()))
73 Renderer renderer = createRenderer("renderer1");
74 registerSupportedClassifierDefByRenderer(supportedClassifierDefinition, renderer);
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)))
82 Assert.assertEquals(expectedCd, newCd);
85 private Renderer createRenderer(String rendererName) {
86 return new RendererBuilder().setName(new RendererName(rendererName)).build();
89 private Parameter getParameterFromDefinition(ClassifierDefinition cd, String parameter) {
90 for (Parameter param : cd.getParameter()) {
91 if (param.getName().getValue().equals(parameter)) {
95 throw new IllegalArgumentException("Parameter " + parameter + " is not located in " + cd);
98 private void registerSupportedClassifierDefByRenderer(SupportedClassifierDefinition supportedClassifierDefinition,
100 InstanceIdentifier<SupportedClassifierDefinition> scdIid = InstanceIdentifier.builder(Renderers.class)
101 .child(Renderer.class, renderer.getKey())
102 .child(Capabilities.class)
103 .child(SupportedClassifierDefinition.class, supportedClassifierDefinition.getKey())
105 listener.ciValidatorBySupportedCdIid.put(scdIid,
106 new ClassifierInstanceValidator(supportedClassifierDefinition));
107 listener.supportedCdIidByCdId.put(supportedClassifierDefinition.getClassifierDefinitionId(), scdIid);