Merge "Remove redundant exception declarations"
[openflowplugin.git] / extension / openflowplugin-extension-onf / src / test / java / org / opendaylight / openflowplugin / extension / onf / converter / BundleAddMessageConverterTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.openflowplugin.extension.onf.converter;
10
11 import static org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil.extractDatapathId;
12
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mockito;
20 import org.opendaylight.openflowplugin.api.OFConstants;
21 import org.opendaylight.openflowplugin.extension.api.ExtensionConvertorData;
22 import org.opendaylight.openflowplugin.extension.onf.BundleTestUtils;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.PortBuilder;
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.InstanceIdentifier;
63
64 /**
65  * Test for {@link org.opendaylight.openflowplugin.extension.onf.converter.BundleAddMessageConverter}.
66  */
67 public class BundleAddMessageConverterTest {
68
69     private final BundleAddMessageConverter converter = new BundleAddMessageConverter();
70     private static final NodeRef NODE_REF = new NodeRef(InstanceIdentifier.create(Nodes.class)
71             .child(Node.class, new NodeKey(new NodeId("openflow:1"))));
72     private static final GroupId GROUP_ID = new GroupId(1L);
73
74     @Before
75     public void setUp() {
76     }
77
78     @Test
79     public void testGetExperimenterId() {
80         Assert.assertEquals("Wrong ExperimenterId.", new ExperimenterId(0x4F4E4600L), converter.getExperimenterId());
81     }
82
83     @Test
84     public void testGetType() {
85         Assert.assertEquals("Wrong type.", 2301, converter.getType());
86     }
87
88     @Test
89     public void testConvertWithoutProperty() throws Exception {
90         testConvert(false);
91     }
92
93     @Test
94     public void testConvertWithProperty() throws Exception {
95         testConvert(true);
96     }
97
98     @Test
99     public void testConvertAddFlowCase() throws Exception {
100         testConvert(new BundleAddFlowCaseBuilder().setAddFlowCaseData(new AddFlowCaseDataBuilder().build()).build(),
101                 BundleFlowModCase.class);
102     }
103
104     @Test
105     public void testConvertUpdateFlowCase() throws Exception {
106         testConvert(new BundleUpdateFlowCaseBuilder().setUpdateFlowCaseData(new UpdateFlowCaseDataBuilder().build())
107                 .build(), BundleFlowModCase.class);
108     }
109
110     @Test
111     public void testConvertRemoveFlowCase() throws Exception {
112         testConvert(new BundleRemoveFlowCaseBuilder().setRemoveFlowCaseData(new RemoveFlowCaseDataBuilder().build())
113                 .build(), BundleFlowModCase.class);
114     }
115
116     @Test
117     public void testConvertAddGroupCase() throws Exception {
118         testConvert(
119                 new BundleAddGroupCaseBuilder()
120                         .setAddGroupCaseData(new AddGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
121                 BundleGroupModCase.class);
122     }
123
124     @Test
125     public void testConvertUpdateGroupCase() throws Exception {
126         testConvert(
127                 new BundleUpdateGroupCaseBuilder()
128                         .setUpdateGroupCaseData(new UpdateGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
129                 BundleGroupModCase.class);
130     }
131
132     @Test
133     public void testConvertRemoveGroupCase() throws Exception {
134         testConvert(
135                 new BundleRemoveGroupCaseBuilder()
136                         .setRemoveGroupCaseData(new RemoveGroupCaseDataBuilder().setGroupId(GROUP_ID).build()).build(),
137                 BundleGroupModCase.class);
138     }
139
140     @Test
141     public void testConvertUpdatePortCase() throws Exception {
142         testConvert(new BundleUpdatePortCaseBuilder()
143                 .setUpdatePortCaseData(new UpdatePortCaseDataBuilder()
144                 .setPort(new PortBuilder()
145                             .setPort(Collections.singletonList(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow
146                                         .types.port.rev130925.port.mod.port.PortBuilder()
147                                     .setConfiguration(Mockito.mock(PortConfig.class))
148                                     .setAdvertisedFeatures(Mockito.mock(PortFeatures.class))
149                                     .setPortNumber(Mockito.mock(PortNumberUni.class))
150                                     .setHardwareAddress(Mockito.mock(MacAddress.class))
151                                     .build()))
152                             .build()).build())
153                 .build(), BundlePortModCase.class);
154     }
155
156     private void testConvert(final BundleInnerMessage message, final Class clazz) throws Exception {
157         testConvert(message, clazz, false);
158     }
159
160     private void testConvert(final boolean withProperty) throws Exception {
161         final BundleInnerMessage message = new BundleAddFlowCaseBuilder()
162                 .setAddFlowCaseData(new AddFlowCaseDataBuilder().build()).build();
163         testConvert(message, BundleFlowModCase.class, withProperty);
164     }
165
166     private void testConvert(final BundleInnerMessage message, Class clazz, final boolean withProperty)
167             throws Exception {
168         final BundleAddMessageSal original = createMessage(withProperty, message);
169         final ExtensionConvertorData data = new ExtensionConvertorData(OFConstants.OFP_VERSION_1_3);
170         data.setDatapathId(extractDatapathId(NODE_REF));
171         final BundleAddMessageOnf converted = converter.convert(original, data);
172         Assert.assertEquals("Wrong BundleId", new BundleId(original.getSalAddMessageData().getBundleId().getValue()),
173                 converted.getOnfAddMessageGroupingData().getBundleId());
174         Assert.assertEquals("Wrong flags",
175                 new BundleFlags(original.getSalAddMessageData().getFlags().isAtomic(),
176                         original.getSalAddMessageData().getFlags().isOrdered()),
177                 converted.getOnfAddMessageGroupingData().getFlags());
178         Assert.assertEquals("Wrong inner message conversion", clazz,
179                 converted.getOnfAddMessageGroupingData().getBundleInnerMessage().getImplementedInterface());
180         if (withProperty) {
181             final BundlePropertyExperimenter originalProperty = (BundlePropertyExperimenter) original
182                     .getSalAddMessageData().getBundleProperty().get(0).getBundlePropertyEntry();
183             final BundlePropertyExperimenter convertedProperty = (BundlePropertyExperimenter) converted
184                     .getOnfAddMessageGroupingData().getBundleProperty().get(0).getBundlePropertyEntry();
185             Assert.assertEquals("Wrong property ExperimenterId", new ExperimenterId(originalProperty.getExperimenter()),
186                     convertedProperty.getExperimenter());
187             Assert.assertEquals("Wrong property experimenter type", originalProperty.getExpType(),
188                     convertedProperty.getExpType());
189             Assert.assertEquals("Wrong property data", originalProperty.getBundlePropertyExperimenterData(),
190                     convertedProperty.getBundlePropertyExperimenterData());
191         } else {
192             Assert.assertTrue("Properties not empty",
193                     converted.getOnfAddMessageGroupingData().getBundleProperty().isEmpty());
194         }
195     }
196
197     private static BundleAddMessageSal createMessage(final boolean withProperty,
198             final BundleInnerMessage innerMessage) {
199         final SalAddMessageDataBuilder dataBuilder = new SalAddMessageDataBuilder();
200         dataBuilder.setBundleId(new BundleId(1L));
201         dataBuilder.setFlags(new BundleFlags(true, false));
202         List<BundleProperty> properties = new ArrayList<>();
203         if (withProperty) {
204             properties.add(
205                     BundleTestUtils.createExperimenterProperty(Mockito.mock(BundlePropertyExperimenterData.class)));
206         }
207         dataBuilder.setBundleProperty(properties);
208         dataBuilder.setBundleInnerMessage(innerMessage);
209
210         return new BundleAddMessageSalBuilder().setSalAddMessageData(dataBuilder.build()).build();
211     }
212
213 }