2 * Copyright (c) 2014 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.openflowjava.protocol.impl.connection;
10 import java.net.InetAddress;
11 import java.net.UnknownHostException;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.mockito.Mock;
16 import org.mockito.MockitoAnnotations;
17 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
18 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfiguration;
19 import org.opendaylight.openflowjava.protocol.api.connection.TlsConfigurationImpl;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
22 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;
23 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
24 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
25 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
26 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionDeserializerKey;
27 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;
28 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;
29 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;
30 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;
31 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionSerializerKey;
32 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
33 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.ExperimenterActionSubType;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.KeystoreType;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.PathType;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.TransportProtocol;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
49 import com.google.common.util.concurrent.ListenableFuture;
53 * @author michal.polkorab
55 public class SwitchConnectionProviderImpl02Test {
56 @Mock SwitchConnectionHandler handler;
57 @Mock OFGeneralSerializer serializer;
58 @Mock OFGeneralDeserializer deserializer;
59 @Mock OFDeserializer<ErrorMessage> deserializerError;
60 @Mock OFDeserializer<ExperimenterMessage> deserializerExpMsg;
61 @Mock OFDeserializer<MultipartReplyMessage> deserializerMultipartRplMsg;
62 @Mock OFDeserializer<QueueProperty> deserializerQueueProperty;
63 @Mock OFDeserializer<MeterBandExperimenterCase> deserializerMeterBandExpCase;
64 @Mock OFSerializer<ExperimenterInput> serializerExperimenterInput;
65 @Mock OFSerializer<MultipartRequestExperimenterCase> serializerMultipartRequestExpCase;
66 @Mock OFSerializer<MeterBandExperimenterCase> serializerMeterBandExpCase;
67 private static final int SWITCH_IDLE_TIMEOUT = 2000;
68 private InetAddress startupAddress;
69 private TlsConfiguration tlsConfiguration;
70 private SwitchConnectionProviderImpl provider;
71 private ConnectionConfigurationImpl config;
74 * Creates new {@link SwitchConnectionProvider} instance for each test
75 * @param protocol communication protocol
77 public void startUp(TransportProtocol protocol) {
78 MockitoAnnotations.initMocks(this);
80 if (protocol != null) {
81 createConfig(protocol);
83 provider = new SwitchConnectionProviderImpl();
86 private void createConfig(TransportProtocol protocol) {
88 startupAddress = InetAddress.getLocalHost();
89 } catch (UnknownHostException e) {
92 tlsConfiguration = null;
93 if (protocol.equals(TransportProtocol.TLS)) {
94 tlsConfiguration = new TlsConfigurationImpl(KeystoreType.JKS,
95 "/selfSignedSwitch", PathType.CLASSPATH, KeystoreType.JKS,
96 "/selfSignedController", PathType.CLASSPATH) ;
98 config = new ConnectionConfigurationImpl(startupAddress, 0, tlsConfiguration, SWITCH_IDLE_TIMEOUT);
99 config.setTransferProtocol(protocol);
104 * Test getServerFacade
107 public void testServerFacade(){
108 startUp(TransportProtocol.TCP);
109 provider.setConfiguration(config);
110 ListenableFuture<Boolean> future = provider.startup();
111 ServerFacade serverFacade = provider.getServerFacade();
112 Assert.assertNotNull("Wrong -- getServerFacade return null",serverFacade);
116 * Test unregister by wrong key
119 public void testUnregisterWrongKeys(){
120 startUp(TransportProtocol.TCP);
121 provider.setConfiguration(config);
122 ExperimenterInstructionSerializerKey testSerKey
123 = new ExperimenterInstructionSerializerKey(EncodeConstants.OF10_VERSION_ID,42L);
124 Assert.assertFalse("Wrong -- unregisterSerializer",provider.unregisterSerializer(testSerKey));
125 ExperimenterInstructionDeserializerKey tesDeserKey
126 = new ExperimenterInstructionDeserializerKey(EncodeConstants.OF10_VERSION_ID,24L);
127 Assert.assertFalse("Wrong -- unregisterDeserializer",provider.unregisterDeserializer(tesDeserKey));
131 * Test register and unregister method
134 public void testUnregisterExistingKeys(){
135 startUp(TransportProtocol.TCP);
136 provider.setConfiguration(config);
137 // -- registerActionSerializer
138 ExperimenterActionSerializerKey key1
139 = new ExperimenterActionSerializerKey(EncodeConstants.OF10_VERSION_ID, 42L, TestSubType.class);
140 provider.registerActionSerializer(key1, serializer);
141 Assert.assertTrue("Wrong -- unregister ActionSerializer", provider.unregisterSerializer(key1));
142 Assert.assertFalse("Wrong -- unregister ActionSerializer by not existing key", provider.unregisterSerializer(key1));
143 // -- registerActionDeserializer
144 ExperimenterActionDeserializerKey key2
145 = new ExperimenterActionDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L);
146 provider.registerActionDeserializer(key2, deserializer);
147 Assert.assertTrue("Wrong -- unregister ActionDeserializer", provider.unregisterDeserializer(key2));
148 Assert.assertFalse("Wrong -- unregister ActionDeserializer by not existing key", provider.unregisterDeserializer(key2));
149 // -- registerInstructionSerializer
150 ExperimenterInstructionSerializerKey key3
151 = new ExperimenterInstructionSerializerKey(EncodeConstants.OF10_VERSION_ID,42L);
152 provider.registerInstructionSerializer(key3, serializer);
153 Assert.assertTrue("Wrong -- unregister InstructionSerializer", provider.unregisterSerializer(key3));
154 Assert.assertFalse("Wrong -- unregister InstructionSerializer by not existing key", provider.unregisterSerializer(key3));
155 // -- registerInstructionDeserializer
156 ExperimenterInstructionDeserializerKey key4
157 = new ExperimenterInstructionDeserializerKey(EncodeConstants.OF10_VERSION_ID,42L);
158 provider.registerInstructionDeserializer(key4, deserializer);
159 Assert.assertTrue("Wrong -- unregister InstructionDeserializer", provider.unregisterDeserializer(key4));
160 Assert.assertFalse("Wrong -- unregister InstructionDeserializer by not existing key", provider.unregisterDeserializer(key4));
161 // -- registerMatchEntryDeserializer
162 MatchEntryDeserializerKey key5
163 = new MatchEntryDeserializerKey(EncodeConstants.OF10_VERSION_ID, 0x8000, 42);
164 provider.registerMatchEntryDeserializer(key5, deserializer);
165 Assert.assertTrue("Wrong -- unregister MatchEntryDeserializer", provider.unregisterDeserializer(key5));
166 Assert.assertFalse("Wrong -- unregister MatchEntryDeserializer by not existing key", provider.unregisterDeserializer(key5));
167 // -- registerErrorDeserializer
168 ExperimenterIdDeserializerKey key6
169 = new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, ErrorMessage.class);
170 provider.registerErrorDeserializer(key6, deserializerError);
171 Assert.assertTrue("Wrong -- unregister ErrorDeserializer", provider.unregisterDeserializer(key6));
172 Assert.assertFalse("Wrong -- unregister ErrorDeserializer by not existing key", provider.unregisterDeserializer(key6));
173 // -- registerExperimenterMessageDeserializer
174 ExperimenterIdDeserializerKey key7
175 = new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, ExperimenterMessage.class);
176 provider.registerExperimenterMessageDeserializer(key7, deserializerExpMsg);
177 Assert.assertTrue("Wrong -- unregister ExperimenterMessageDeserializer", provider.unregisterDeserializer(key7));
178 Assert.assertFalse("Wrong -- unregister ExperimenterMessageDeserializer by not existing key", provider.unregisterDeserializer(key7));
179 // -- registerMultipartReplyMessageDeserializer
180 ExperimenterIdDeserializerKey key8
181 = new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, MultipartReplyMessage.class);
182 provider.registerMultipartReplyMessageDeserializer(key8, deserializerMultipartRplMsg);
183 Assert.assertTrue("Wrong -- unregister MultipartReplyMessageDeserializer", provider.unregisterDeserializer(key8));
184 Assert.assertFalse("Wrong -- unregister MultipartReplyMessageDeserializer by not existing key", provider.unregisterDeserializer(key8));
185 // -- registerMultipartReplyTFDeserializer
186 ExperimenterIdDeserializerKey key9 =
187 new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, MultipartReplyMessage.class);
188 provider.registerMultipartReplyTFDeserializer(key9, deserializer);
189 Assert.assertTrue("Wrong -- unregister MultipartReplyTFDeserializer", provider.unregisterDeserializer(key9));
190 Assert.assertFalse("Wrong -- unregister MultipartReplyTFDeserializer by non existing key", provider.unregisterDeserializer(key9));
191 // -- registerQueuePropertyDeserializer
192 ExperimenterIdDeserializerKey key10
193 = new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, QueueProperty.class);
194 provider.registerQueuePropertyDeserializer(key10, deserializerQueueProperty);
195 Assert.assertTrue("Wrong -- unregister QueuePropertyDeserializer", provider.unregisterDeserializer(key10));
196 Assert.assertFalse("Wrong -- unregister QueuePropertyDeserializer by not existing key", provider.unregisterDeserializer(key10));
197 // -- registerMeterBandDeserializer
198 ExperimenterIdDeserializerKey key11
199 = new ExperimenterIdDeserializerKey(EncodeConstants.OF10_VERSION_ID, 42L, MeterBandExperimenterCase.class);
200 provider.registerMeterBandDeserializer(key11, deserializerMeterBandExpCase);
201 Assert.assertTrue("Wrong -- unregister MeterBandDeserializer", provider.unregisterDeserializer(key11));
202 Assert.assertFalse("Wrong -- unregister MeterBandDeserializer by not existing key", provider.unregisterDeserializer(key11));
203 // -- registerExperimenterMessageSerializer
204 ExperimenterIdSerializerKey<ExperimenterInput> key12
205 = new ExperimenterIdSerializerKey<>(EncodeConstants.OF10_VERSION_ID,42L,ExperimenterInput.class);
206 provider.registerExperimenterMessageSerializer(key12, serializerExperimenterInput);
207 Assert.assertTrue("Wrong -- unregister ExperimenterMessageSerializer", provider.unregisterSerializer(key12));
208 Assert.assertFalse("Wrong -- unregister ExperimenterMessageSerializer by not existing key", provider.unregisterSerializer(key12));
209 //registerMultipartRequestSerializer
210 ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> key13
211 = new ExperimenterIdSerializerKey<>(EncodeConstants.OF10_VERSION_ID,42L,MultipartRequestExperimenterCase.class);
212 provider.registerMultipartRequestSerializer(key13, serializerMultipartRequestExpCase);
213 Assert.assertTrue("Wrong -- unregister MultipartRequestSerializer", provider.unregisterSerializer(key13));
214 Assert.assertFalse("Wrong -- unregister MultipartRequestSerializer by not existing key", provider.unregisterSerializer(key13));
215 // -- registerMultipartRequestTFSerializer
216 ExperimenterIdSerializerKey<TableFeatureProperties> key14
217 = new ExperimenterIdSerializerKey<>(EncodeConstants.OF10_VERSION_ID,42L,TableFeatureProperties.class);
218 provider.registerMultipartRequestTFSerializer(key14, serializer);
219 Assert.assertTrue("Wrong -- unregister MultipartRequestTFSerializer", provider.unregisterSerializer(key14));
220 Assert.assertFalse("Wrong -- unregister MultipartRequestTFSerializer by not existing key", provider.unregisterSerializer(key14));
221 // -- registerMeterBandSerializer
222 ExperimenterIdSerializerKey<MeterBandExperimenterCase> key15
223 = new ExperimenterIdSerializerKey<>(EncodeConstants.OF10_VERSION_ID,42L,MeterBandExperimenterCase.class);
224 provider.registerMeterBandSerializer(key15, serializerMeterBandExpCase);
225 Assert.assertTrue("Wrong -- unregister MeterBandSerializer", provider.unregisterSerializer(key15));
226 Assert.assertFalse("Wrong -- unregister MeterBandSerializer by not existing key", provider.unregisterSerializer(key15));
227 // -- registerMatchEntrySerializer
228 MatchEntrySerializerKey<OpenflowBasicClass, InPort> key16
229 = new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, OpenflowBasicClass.class, InPort.class);
230 provider.registerMatchEntrySerializer(key16, serializer);
231 Assert.assertTrue("Wrong -- unregister MatchEntrySerializer", provider.unregisterSerializer(key16));
232 Assert.assertFalse("Wrong -- unregister MatchEntrySerializer by not existing key", provider.unregisterSerializer(key15));
235 private static class TestSubType extends ExperimenterActionSubType {
236 // empty class - only used in test for comparation