2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowplugin.extension.onf.converter;
10 import static org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil.extractDatapathId;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.opendaylight.openflowplugin.api.OFConstants;
19 import org.opendaylight.openflowplugin.extension.api.ExtensionConvertorData;
20 import org.opendaylight.openflowplugin.extension.api.exception.ConversionException;
21 import org.opendaylight.openflowplugin.extension.onf.BundleTestUtils;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.PortBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.PortKey;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.BundleInnerMessage;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleAddFlowCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleAddGroupCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleRemoveFlowCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleRemoveGroupCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdateFlowCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdateGroupCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdatePortCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.add.flow._case.AddFlowCaseDataBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.add.group._case.AddGroupCaseDataBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.remove.flow._case.RemoveFlowCaseDataBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.remove.group._case.RemoveGroupCaseDataBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.update.flow._case.UpdateFlowCaseDataBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.update.group._case.UpdateGroupCaseDataBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.bundle.update.port._case.UpdatePortCaseDataBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.BundleAddMessageSal;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.BundleAddMessageSalBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.bundle.add.message.sal.SalAddMessageDataBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleFlags;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleId;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundleFlowModCase;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundleGroupModCase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundlePortModCase;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.common.grouping.BundleProperty;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.property.grouping.bundle.property.entry.BundlePropertyExperimenter;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.property.grouping.bundle.property.entry.bundle.property.experimenter.BundlePropertyExperimenterData;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleAddMessageOnf;
62 import org.opendaylight.yangtools.yang.binding.DataObject;
63 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
64 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
65 import org.opendaylight.yangtools.yang.common.Uint32;
68 * Test for {@link org.opendaylight.openflowplugin.extension.onf.converter.BundleAddMessageConverter}.
70 public class BundleAddMessageConverterTest {
72 private final BundleAddMessageConverter converter = new BundleAddMessageConverter();
73 private static final NodeRef NODE_REF = new NodeRef(InstanceIdentifier.create(Nodes.class)
74 .child(Node.class, new NodeKey(new NodeId("openflow:1"))));
75 private static final GroupId GROUP_ID = new GroupId(Uint32.ONE);
82 public void testGetExperimenterId() {
83 Assert.assertEquals("Wrong ExperimenterId.", new ExperimenterId(Uint32.valueOf(0x4F4E4600)),
84 converter.getExperimenterId());
88 public void testGetType() {
89 Assert.assertEquals("Wrong type.", 2301, converter.getType());
93 public void testConvertWithoutProperty() throws Exception {
98 public void testConvertWithProperty() throws Exception {
103 public void testConvertAddFlowCase() throws Exception {
104 testConvert(new BundleAddFlowCaseBuilder().setAddFlowCaseData(new AddFlowCaseDataBuilder().build()).build(),
105 BundleFlowModCase.class);
109 public void testConvertUpdateFlowCase() throws Exception {
110 testConvert(new BundleUpdateFlowCaseBuilder().setUpdateFlowCaseData(new UpdateFlowCaseDataBuilder().build())
111 .build(), BundleFlowModCase.class);
115 public void testConvertRemoveFlowCase() throws Exception {
116 testConvert(new BundleRemoveFlowCaseBuilder().setRemoveFlowCaseData(new RemoveFlowCaseDataBuilder().build())
117 .build(), BundleFlowModCase.class);
121 public void testConvertAddGroupCase() throws Exception {
123 new BundleAddGroupCaseBuilder()
124 .setAddGroupCaseData(new AddGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
125 BundleGroupModCase.class);
129 public void testConvertUpdateGroupCase() throws Exception {
131 new BundleUpdateGroupCaseBuilder()
132 .setUpdateGroupCaseData(new UpdateGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
133 BundleGroupModCase.class);
137 public void testConvertRemoveGroupCase() throws Exception {
139 new BundleRemoveGroupCaseBuilder()
140 .setRemoveGroupCaseData(new RemoveGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
141 BundleGroupModCase.class);
145 public void testConvertUpdatePortCase() throws Exception {
146 testConvert(new BundleUpdatePortCaseBuilder()
147 .setUpdatePortCaseData(new UpdatePortCaseDataBuilder()
148 .setPort(new PortBuilder()
149 .setPort(BindingMap.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925
150 .port.mod.port.PortBuilder()
151 .setConfiguration(Mockito.mock(PortConfig.class))
152 .setAdvertisedFeatures(Mockito.mock(PortFeatures.class))
153 .setPortNumber(new PortNumberUni(Uint32.ZERO))
154 .setHardwareAddress(Mockito.mock(MacAddress.class))
155 .withKey(new PortKey(Uint32.ZERO))
158 .build(), BundlePortModCase.class);
161 private void testConvert(final BundleInnerMessage message, final Class<? extends DataObject> clazz)
162 throws ConversionException {
163 testConvert(message, clazz, false);
166 private void testConvert(final boolean withProperty) throws ConversionException {
167 final BundleInnerMessage message = new BundleAddFlowCaseBuilder()
168 .setAddFlowCaseData(new AddFlowCaseDataBuilder().build()).build();
169 testConvert(message, BundleFlowModCase.class, withProperty);
172 private void testConvert(final BundleInnerMessage message, final Class<? extends DataObject> clazz,
173 final boolean withProperty) throws ConversionException {
174 final BundleAddMessageSal original = createMessage(withProperty, message);
175 final ExtensionConvertorData data = new ExtensionConvertorData(OFConstants.OFP_VERSION_1_3);
176 data.setDatapathId(extractDatapathId(NODE_REF));
177 final BundleAddMessageOnf converted = converter.convert(original, data);
178 Assert.assertEquals("Wrong BundleId", new BundleId(original.getSalAddMessageData().getBundleId().getValue()),
179 converted.getOnfAddMessageGroupingData().getBundleId());
180 Assert.assertEquals("Wrong flags",
181 new BundleFlags(original.getSalAddMessageData().getFlags().getAtomic(),
182 original.getSalAddMessageData().getFlags().getOrdered()),
183 converted.getOnfAddMessageGroupingData().getFlags());
184 Assert.assertEquals("Wrong inner message conversion", clazz,
185 converted.getOnfAddMessageGroupingData().getBundleInnerMessage().implementedInterface());
187 final BundlePropertyExperimenter originalProperty = (BundlePropertyExperimenter) original
188 .getSalAddMessageData().getBundleProperty().get(0).getBundlePropertyEntry();
189 final BundlePropertyExperimenter convertedProperty = (BundlePropertyExperimenter) converted
190 .getOnfAddMessageGroupingData().getBundleProperty().get(0).getBundlePropertyEntry();
191 Assert.assertEquals("Wrong property ExperimenterId", new ExperimenterId(originalProperty.getExperimenter()),
192 convertedProperty.getExperimenter());
193 Assert.assertEquals("Wrong property experimenter type", originalProperty.getExpType(),
194 convertedProperty.getExpType());
195 Assert.assertEquals("Wrong property data", originalProperty.getBundlePropertyExperimenterData(),
196 convertedProperty.getBundlePropertyExperimenterData());
198 Assert.assertTrue("Properties not empty",
199 converted.getOnfAddMessageGroupingData().nonnullBundleProperty().isEmpty());
203 private static BundleAddMessageSal createMessage(final boolean withProperty,
204 final BundleInnerMessage innerMessage) {
205 final SalAddMessageDataBuilder dataBuilder = new SalAddMessageDataBuilder();
206 dataBuilder.setBundleId(new BundleId(Uint32.ONE));
207 dataBuilder.setFlags(new BundleFlags(true, false));
208 List<BundleProperty> properties = new ArrayList<>();
211 BundleTestUtils.createExperimenterProperty(Mockito.mock(BundlePropertyExperimenterData.class)));
213 dataBuilder.setBundleProperty(properties);
214 dataBuilder.setBundleInnerMessage(innerMessage);
216 return new BundleAddMessageSalBuilder().setSalAddMessageData(dataBuilder.build()).build();