924921264f1bffed088a970c5dee9c119d9305d9
[controller.git] / opendaylight / md-sal / remoterpc-routingtable / integrationtest / src / test / java / org / opendaylight / controller / sal / connector / remoterpc / impl / ZeroMQRoutingTableTestIT.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.sal.connector.remoterpc.impl;
9
10 import junit.framework.Assert;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 import org.opendaylight.controller.sal.connector.api.RpcRouter;
14 import org.opendaylight.controller.sal.connector.remoterpc.api.RoutingTable;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
17 import org.ops4j.pax.exam.Configuration;
18 import org.ops4j.pax.exam.Option;
19 import org.ops4j.pax.exam.junit.PaxExam;
20 import org.ops4j.pax.exam.util.PathUtils;
21 import org.osgi.framework.Bundle;
22 import org.osgi.framework.BundleContext;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import javax.inject.Inject;
27 import java.io.Serializable;
28 import java.net.URI;
29 import java.util.Set;
30
31 import static org.ops4j.pax.exam.CoreOptions.junitBundles;
32 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
33 import static org.ops4j.pax.exam.CoreOptions.options;
34 import static org.ops4j.pax.exam.CoreOptions.systemPackages;
35 import static org.ops4j.pax.exam.CoreOptions.systemProperty;
36
37
38
39
40 @RunWith(PaxExam.class)
41 public class
42         ZeroMQRoutingTableTestIT {
43     private Logger log = LoggerFactory
44             .getLogger(ZeroMQRoutingTableTestIT.class);
45
46     public static final String ODL = "org.opendaylight.controller";
47     public static final String YANG = "org.opendaylight.yangtools";
48     public static final String CONTROLLER = "org.opendaylight.controller";
49     public static final String YANGTOOLS = "org.opendaylight.yangtools";
50     RoutingIdentifierImpl rii  = new RoutingIdentifierImpl();
51     // get the OSGI bundle context
52     @Inject
53     private BundleContext bc;
54     @Inject
55     private RoutingTable routingTable = null;
56
57     // Configure the OSGi container
58     @Configuration
59     public Option[] config() {
60         return options(
61                 //
62                 systemProperty("logback.configurationFile").value(
63                         "file:" + PathUtils.getBaseDir()
64                                 + "/src/test/resources/logback.xml"),
65                 // To start OSGi console for inspection remotely
66                 systemProperty("osgi.console").value("2401"),
67                 // Set the systemPackages (used by clustering)
68                 systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"),
69                 // List framework bundles
70
71                 mavenBundle("equinoxSDK381",
72                         "org.eclipse.equinox.console").versionAsInProject(),
73                 mavenBundle("equinoxSDK381",
74                         "org.eclipse.equinox.util").versionAsInProject(),
75                 mavenBundle("equinoxSDK381",
76                         "org.eclipse.osgi.services").versionAsInProject(),
77                 mavenBundle("equinoxSDK381",
78                         "org.eclipse.equinox.ds").versionAsInProject(),
79                 mavenBundle("equinoxSDK381",
80                         "org.apache.felix.gogo.command").versionAsInProject(),
81                 mavenBundle("equinoxSDK381",
82                         "org.apache.felix.gogo.runtime").versionAsInProject(),
83                 mavenBundle("equinoxSDK381",
84                         "org.apache.felix.gogo.shell").versionAsInProject(),
85                 // List logger bundles
86                 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
87                 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(),
88                 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
89                 mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
90                 // List all the bundles on which the test case depends
91                 mavenBundle(ODL,
92                         "clustering.services").versionAsInProject(),
93
94                 mavenBundle(ODL, "sal").versionAsInProject(),
95                 mavenBundle(ODL,
96                         "sal.implementation").versionAsInProject(),
97                 mavenBundle(ODL, "containermanager").versionAsInProject(),
98                 mavenBundle(ODL,
99                         "containermanager.it.implementation").versionAsInProject(),
100                 mavenBundle("org.jboss.spec.javax.transaction",
101                         "jboss-transaction-api_1.1_spec").versionAsInProject(),
102                 mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
103                 mavenBundle("org.apache.felix",
104                         "org.apache.felix.dependencymanager").versionAsInProject(),
105                 mavenBundle("org.apache.felix",
106                         "org.apache.felix.dependencymanager.shell").versionAsInProject(),
107                 mavenBundle("eclipselink", "javax.resource").versionAsInProject(),
108
109                 mavenBundle("com.google.guava","guava").versionAsInProject(),
110                 // List logger bundles
111                 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
112                 mavenBundle("org.slf4j", "log4j-over-slf4j")
113                         .versionAsInProject(),
114                 mavenBundle("ch.qos.logback", "logback-core")
115                         .versionAsInProject(),
116                 mavenBundle("ch.qos.logback", "logback-classic")
117                         .versionAsInProject(),
118
119                 mavenBundle(ODL, "clustering.services")
120                         .versionAsInProject(),
121                 mavenBundle(ODL, "clustering.stub")
122                         .versionAsInProject(),
123
124
125                 // List all the bundles on which the test case depends
126                 mavenBundle(ODL, "sal")
127                         .versionAsInProject(),
128                 mavenBundle(ODL, "sal-connector-api")
129                         .versionAsInProject(),
130                 mavenBundle(ODL, "remoterpc-routingtable.implementation")
131                         .versionAsInProject(),
132
133                 mavenBundle("org.jboss.spec.javax.transaction",
134                         "jboss-transaction-api_1.1_spec").versionAsInProject(),
135                 mavenBundle("org.apache.commons", "commons-lang3")
136                         .versionAsInProject(),
137                 mavenBundle("org.apache.felix",
138                         "org.apache.felix.dependencymanager")
139                         .versionAsInProject(),
140
141                 mavenBundle(ODL,
142                         "sal-core-api")
143                         .versionAsInProject(),
144                 mavenBundle("org.opendaylight.yangtools","yang-data-api")
145                         .versionAsInProject(),
146                 mavenBundle("org.opendaylight.yangtools","yang-model-api")
147                         .versionAsInProject(),
148                 mavenBundle("org.opendaylight.yangtools","yang-binding")
149                         .versionAsInProject(),
150
151                 mavenBundle(CONTROLLER, "sal-binding-api").versionAsInProject(), //
152                 mavenBundle(CONTROLLER, "sal-binding-config").versionAsInProject(),
153                 mavenBundle(CONTROLLER, "sal-binding-broker-impl").versionAsInProject(), //
154                 mavenBundle("org.javassist", "javassist").versionAsInProject(), //
155                 mavenBundle(CONTROLLER, "sal-common-util").versionAsInProject(), //
156
157                 mavenBundle(YANGTOOLS, "yang-data-api").versionAsInProject(), //
158                 mavenBundle(YANGTOOLS, "yang-data-impl").versionAsInProject(), //
159                 mavenBundle(YANGTOOLS, "yang-model-api").versionAsInProject(), //
160                 mavenBundle(YANGTOOLS, "yang-model-util").versionAsInProject(), //
161                 mavenBundle(YANGTOOLS, "yang-parser-api").versionAsInProject(),
162                 mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(),
163
164
165                 mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(), //
166                 mavenBundle(YANGTOOLS, "binding-model-api").versionAsInProject(), //
167                 mavenBundle(YANGTOOLS, "binding-generator-util").versionAsInProject(),
168                 mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(),
169                 mavenBundle(YANGTOOLS, "binding-type-provider").versionAsInProject(),
170                 mavenBundle(YANGTOOLS, "binding-generator-api").versionAsInProject(),
171                 mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(),
172                 mavenBundle(YANGTOOLS, "binding-generator-impl").versionAsInProject(),
173
174
175                 mavenBundle(CONTROLLER, "sal-core-api").versionAsInProject().update(), //
176                 mavenBundle(CONTROLLER, "sal-broker-impl").versionAsInProject(), //
177                 mavenBundle(CONTROLLER, "sal-core-spi").versionAsInProject().update(), //
178
179                 mavenBundle(YANGTOOLS + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
180
181                 mavenBundle(YANG+".thirdparty", "xtend-lib-osgi").versionAsInProject(),
182                 mavenBundle("com.google.guava", "guava").versionAsInProject(), //
183                 mavenBundle("org.javassist", "javassist").versionAsInProject(),
184                 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(), //
185                 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), //
186                 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), //
187                 mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), //
188
189                 mavenBundle(ODL, "sal-common").versionAsInProject(), //
190                 mavenBundle(ODL, "sal-common-api").versionAsInProject(),//
191                 mavenBundle(ODL, "sal-common-impl").versionAsInProject(), //
192                 mavenBundle(ODL, "sal-common-util").versionAsInProject(), //
193
194                 mavenBundle(ODL, "config-api").versionAsInProject(), //
195                 mavenBundle(ODL, "config-manager").versionAsInProject(), //
196                 mavenBundle("commons-io", "commons-io").versionAsInProject(),
197                 mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
198
199                 mavenBundle(ODL, "sal-binding-api").versionAsInProject(), //
200                 mavenBundle(ODL, "sal-binding-config").versionAsInProject(),
201                 mavenBundle("org.javassist", "javassist").versionAsInProject(), //
202                 mavenBundle(ODL, "sal-common-util").versionAsInProject(), //
203
204                 mavenBundle(YANG, "yang-data-api").versionAsInProject(), //
205                 mavenBundle(YANG, "yang-data-impl").versionAsInProject(), //
206                 mavenBundle(YANG, "yang-model-api").versionAsInProject(), //
207                 mavenBundle(YANG, "yang-model-util").versionAsInProject(), //
208                 mavenBundle(YANG, "yang-parser-api").versionAsInProject(),
209                 mavenBundle(YANG, "yang-parser-impl").versionAsInProject(),
210
211
212                 mavenBundle(YANG, "binding-generator-spi").versionAsInProject(), //
213                 mavenBundle(YANG, "binding-model-api").versionAsInProject(), //
214                 mavenBundle(YANG, "binding-generator-util").versionAsInProject(),
215                 mavenBundle(YANG, "yang-parser-impl").versionAsInProject(),
216                 mavenBundle(YANG, "binding-type-provider").versionAsInProject(),
217                 mavenBundle(YANG, "binding-generator-api").versionAsInProject(),
218                 mavenBundle(YANG, "binding-generator-spi").versionAsInProject(),
219                 mavenBundle(YANG, "binding-generator-impl").versionAsInProject(),
220
221
222                 mavenBundle(ODL, "sal-core-api").versionAsInProject().update(), //
223                 mavenBundle(ODL, "sal-broker-impl").versionAsInProject(), //
224                 mavenBundle(ODL, "sal-core-spi").versionAsInProject().update(), //
225
226                 mavenBundle(YANG + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
227
228                 mavenBundle(YANG, "concepts").versionAsInProject(),
229                 mavenBundle(YANG, "yang-binding").versionAsInProject(), //
230                 mavenBundle(YANG, "yang-common").versionAsInProject(), //
231                 mavenBundle(YANG+".thirdparty", "xtend-lib-osgi").versionAsInProject(),
232                 mavenBundle("com.google.guava", "guava").versionAsInProject(), //
233                 mavenBundle("org.javassist", "javassist").versionAsInProject(),
234
235                 junitBundles());
236     }
237
238     private String stateToString(int state) {
239         switch (state) {
240             case Bundle.ACTIVE:
241                 return "ACTIVE";
242             case Bundle.INSTALLED:
243                 return "INSTALLED";
244             case Bundle.RESOLVED:
245                 return "RESOLVED";
246             case Bundle.UNINSTALLED:
247                 return "UNINSTALLED";
248             default:
249                 return "Not CONVERTED";
250         }
251     }
252
253     @Test
254   public  void testAddGlobalRoute () throws Exception{
255
256        routingTable.addGlobalRoute(rii,"172.27.12.1:5000");
257
258        Set<String> routes = routingTable.getRoutes(rii);
259
260        for(String route:routes){
261            Assert.assertEquals(route,"172.27.12.1:5000");
262        }
263
264
265     }
266
267
268     @Test
269     public  void testDeleteGlobalRoute () throws Exception{
270
271         routingTable.removeGlobalRoute(rii);
272
273         Set<String> routes = routingTable.getRoutes(rii);
274
275         Assert.assertNull(routes);
276
277
278     }
279
280
281
282    class RoutingIdentifierImpl implements RpcRouter.RouteIdentifier,Serializable {
283
284        private final URI namespace = URI.create("http://cisco.com/example");
285        private final QName QNAME = new QName(namespace,"global");
286        private final QName instance = new QName(URI.create("127.0.0.1"),"local");
287
288        @Override
289        public QName getContext() {
290            return QNAME;
291        }
292
293        @Override
294        public QName getType() {
295            return QNAME;
296        }
297
298        @Override
299        public org.opendaylight.yangtools.yang.data.api.InstanceIdentifier getRoute() {
300            return InstanceIdentifier.of(instance);
301        }
302
303        @Override
304        public boolean equals(Object o) {
305            if (this == o) return true;
306            if (o == null || getClass() != o.getClass()) return false;
307
308            RoutingIdentifierImpl that = (RoutingIdentifierImpl) o;
309
310            if (QNAME != null ? !QNAME.equals(that.QNAME) : that.QNAME != null) return false;
311            if (instance != null ? !instance.equals(that.instance) : that.instance != null) return false;
312            if (namespace != null ? !namespace.equals(that.namespace) : that.namespace != null) return false;
313
314            return true;
315        }
316
317        @Override
318        public int hashCode() {
319            int result = namespace != null ? namespace.hashCode() : 0;
320            result = 31 * result + (QNAME != null ? QNAME.hashCode() : 0);
321            result = 31 * result + (instance != null ? instance.hashCode() : 0);
322            return result;
323        }
324    }
325
326
327
328
329
330 }