OPNFLWPLUG-1032: Neon-MRI: Bump odlparent, yangtools, mdsal
[openflowplugin.git] / extension / openflowplugin-extension-onf / src / test / java / org / opendaylight / openflowplugin / extension / onf / serializer / BundleAddMessageFactoryTest.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.serializer;
10
11 import static org.mockito.ArgumentMatchers.any;
12
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.UnpooledByteBufAllocator;
15 import java.util.ArrayList;
16 import java.util.Collections;
17 import org.junit.Assert;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.Mockito;
22 import org.mockito.runners.MockitoJUnitRunner;
23 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
24 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
25 import org.opendaylight.openflowplugin.extension.onf.BundleTestUtils;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleFlags;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.BundleInnerMessage;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundleFlowModCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundleGroupModCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.add.message.grouping.bundle.inner.message.BundlePortModCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleAddMessageOnf;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.BundleAddMessageOnfBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.experimenter.input.experimenter.data.of.choice.bundle.add.message.onf.OnfAddMessageGroupingDataBuilder;
35
36 /**
37  * Test for {@link org.opendaylight.openflowplugin.extension.onf.serializer.BundleAddMessageFactory}.
38  */
39 @RunWith(MockitoJUnitRunner.class)
40 public class BundleAddMessageFactoryTest extends AbstractBundleMessageFactoryTest {
41
42     private final OFSerializer<BundleAddMessageOnf> factory = new BundleAddMessageFactory();
43     @Mock
44     private OFSerializer<BundleInnerMessage> caseSerializer;
45
46     @Test
47     public void testSerializeWithoutProperties() {
48         testSerialize(false);
49     }
50
51     @Test
52     public void testSerializeWithExperimenterProperty() {
53         testSerialize(true);
54     }
55
56     @Test
57     public void testSerializeFlowModCase() {
58         testSerialize(new BundleFlowModCaseBuilder().build());
59     }
60
61     @Test
62     public void testSerializeGroupModCase() {
63         testSerialize(new BundleGroupModCaseBuilder().build());
64     }
65
66     @Test
67     public void testSerializePortModCase() {
68         testSerialize(new BundlePortModCaseBuilder().build());
69     }
70
71     private void testSerialize(final BundleInnerMessage innerMessage) {
72         testSerialize(false, innerMessage);
73     }
74
75     private void testSerialize(final boolean withProperty) {
76         testSerialize(withProperty, new BundleFlowModCaseBuilder().build());
77     }
78
79     private void testSerialize(final boolean withProperty, final BundleInnerMessage innerMessage) {
80         final BundleAddMessageOnfBuilder builder = new BundleAddMessageOnfBuilder();
81         final OnfAddMessageGroupingDataBuilder dataBuilder = new OnfAddMessageGroupingDataBuilder();
82         dataBuilder.setBundleId(new BundleId(1L));
83         dataBuilder.setFlags(new BundleFlags(true, false));
84
85         dataBuilder.setBundleInnerMessage(innerMessage);
86
87         if (withProperty) {
88             dataBuilder.setBundleProperty(new ArrayList<>(Collections.singleton(
89                     BundleTestUtils.createExperimenterProperty(propertyExperimenterData))));
90             Mockito.when(registry.getSerializer(any()))
91                     .thenReturn(caseSerializer)
92                     .thenReturn(propertySerializer);
93         } else {
94             Mockito.when(registry.getSerializer(any())).thenReturn(caseSerializer);
95         }
96
97         builder.setOnfAddMessageGroupingData(dataBuilder.build());
98
99         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
100         ((SerializerRegistryInjector) factory).injectSerializerRegistry(registry);
101         factory.serialize(builder.build(), out);
102
103         Assert.assertEquals("Wrong bundle ID", 1L, out.readUnsignedInt());
104         long padding = out.readUnsignedShort();
105         Assert.assertEquals("Wrong flags", 1, out.readUnsignedShort());
106         Mockito.verify(caseSerializer).serialize(any(), any());
107
108         if (withProperty) {
109             Mockito.verify(propertySerializer).serialize(propertyExperimenterData, out);
110         }
111     }
112
113 }