OPNFLWPLUG-1032: Neon-MRI: Bump odlparent, yangtools, mdsal
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / ExperimenterInputMessageFactoryTest.java
1 /*
2  * Copyright (c) 2014 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.openflowjava.protocol.impl.serialization.factories;
10
11 import static org.mockito.ArgumentMatchers.any;
12
13 import io.netty.buffer.ByteBuf;
14 import org.junit.Test;
15 import org.mockito.Mock;
16 import org.mockito.Mockito;
17 import org.mockito.MockitoAnnotations;
18 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
21 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdSerializerKey;
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
24 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInputBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterOfMessage;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
30
31 /**
32  * Unit tests for ExperimenterInputMessageFactory.
33  *
34  * @author michal.polkorab
35  */
36 public class ExperimenterInputMessageFactoryTest {
37
38     @Mock SerializerRegistry registry;
39     @Mock
40     private OFSerializer<ExperimenterDataOfChoice> serializer;
41     private OFSerializer<ExperimenterOfMessage> expFactory;
42     @Mock
43     private ExperimenterDataOfChoice vendorData;
44     @Mock
45     private ByteBuf out;
46
47     /**
48      * Sets up ExperimenterInputMessageFactory.
49      * @param real true if setup should use real registry, false when mock is desired
50      */
51     public void startUp(boolean real) {
52         MockitoAnnotations.initMocks(this);
53         expFactory = new ExperimenterInputMessageFactory();
54         if (real) {
55             SerializerRegistry realRegistry = new SerializerRegistryImpl();
56             realRegistry.init();
57             ((SerializerRegistryInjector) expFactory).injectSerializerRegistry(realRegistry);
58         } else {
59             ((SerializerRegistryInjector) expFactory).injectSerializerRegistry(registry);
60         }
61     }
62
63     /**
64      * Testing of {@link ExperimenterInputMessageFactory} for correct serializer
65      * lookup and serialization.
66      */
67     @Test(expected = IllegalStateException.class)
68     public void testV10Real() throws Exception {
69         startUp(true);
70         ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
71         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
72         builder.setExperimenter(new ExperimenterId(42L));
73         builder.setExpType(21L);
74         builder.setExperimenterDataOfChoice(vendorData);
75         ExperimenterInput input = builder.build();
76
77         expFactory.serialize(input, out);
78     }
79
80     /**
81      * Testing of {@link ExperimenterInputMessageFactory} for correct serializer
82      * lookup and serialization.
83      */
84     @Test(expected = IllegalStateException.class)
85     public void testV13Real() throws Exception {
86         startUp(true);
87         ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
88         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
89         builder.setExperimenter(new ExperimenterId(42L));
90         builder.setExpType(22L);
91         builder.setExperimenterDataOfChoice(vendorData);
92         ExperimenterInput input = builder.build();
93
94         expFactory.serialize(input, out);
95     }
96
97     /**
98      * Testing of {@link ExperimenterInputMessageFactory} for correct serializer
99      * lookup and serialization.
100      */
101     @Test
102     public void testV10() throws Exception {
103         startUp(false);
104         ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
105         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
106         builder.setExperimenter(new ExperimenterId(42L));
107         builder.setExpType(21L);
108         builder.setExperimenterDataOfChoice(vendorData);
109         ExperimenterInput input = builder.build();
110
111         Mockito.when(registry.getSerializer(
112                 (ExperimenterIdSerializerKey<?>) any())).thenReturn(serializer);
113
114         expFactory.serialize(input, out);
115         Mockito.verify(serializer, Mockito.times(1)).serialize(input.getExperimenterDataOfChoice(), out);
116     }
117
118     /**
119      * Testing of {@link ExperimenterInputMessageFactory} for correct serializer
120      * lookup and serialization.
121      */
122     @Test
123     public void testV13() throws Exception {
124         startUp(false);
125         ExperimenterInputBuilder builder = new ExperimenterInputBuilder();
126         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
127         builder.setExperimenter(new ExperimenterId(42L));
128         builder.setExpType(21L);
129         builder.setExperimenterDataOfChoice(vendorData);
130         ExperimenterInput input = builder.build();
131
132         Mockito.when(registry.getSerializer(
133                 (ExperimenterIdSerializerKey<?>) any())).thenReturn(serializer);
134
135         expFactory.serialize(input, out);
136         Mockito.verify(serializer, Mockito.times(1)).serialize(input.getExperimenterDataOfChoice(), out);
137     }
138 }