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