2 * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.sal.connector.remoterpc.impl;
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;
26 import javax.inject.Inject;
27 import java.io.Serializable;
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;
40 @RunWith(PaxExam.class)
42 ZeroMQRoutingTableTestIT {
43 private Logger log = LoggerFactory
44 .getLogger(ZeroMQRoutingTableTestIT.class);
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
53 private BundleContext bc;
55 private RoutingTable routingTable = null;
57 // Configure the OSGi container
59 public Option[] config() {
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
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
92 "clustering.services").versionAsInProject(),
94 mavenBundle(ODL, "sal").versionAsInProject(),
96 "sal.implementation").versionAsInProject(),
97 mavenBundle(ODL, "containermanager").versionAsInProject(),
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(),
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(),
119 mavenBundle(ODL, "clustering.services")
120 .versionAsInProject(),
121 mavenBundle(ODL, "clustering.stub")
122 .versionAsInProject(),
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(),
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(),
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(),
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(), //
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(),
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(),
175 mavenBundle(CONTROLLER, "sal-core-api").versionAsInProject().update(), //
176 mavenBundle(CONTROLLER, "sal-broker-impl").versionAsInProject(), //
177 mavenBundle(CONTROLLER, "sal-core-spi").versionAsInProject().update(), //
179 mavenBundle(YANGTOOLS + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
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(), //
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(), //
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(),
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(), //
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(),
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(),
222 mavenBundle(ODL, "sal-core-api").versionAsInProject().update(), //
223 mavenBundle(ODL, "sal-broker-impl").versionAsInProject(), //
224 mavenBundle(ODL, "sal-core-spi").versionAsInProject().update(), //
226 mavenBundle(YANG + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
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(),
238 private String stateToString(int state) {
242 case Bundle.INSTALLED:
244 case Bundle.RESOLVED:
246 case Bundle.UNINSTALLED:
247 return "UNINSTALLED";
249 return "Not CONVERTED";
254 public void testAddGlobalRoute () throws Exception{
256 routingTable.addGlobalRoute(rii,"172.27.12.1:5000");
258 Set<String> routes = routingTable.getRoutes(rii);
260 for(String route:routes){
261 Assert.assertEquals(route,"172.27.12.1:5000");
269 public void testDeleteGlobalRoute () throws Exception{
271 routingTable.removeGlobalRoute(rii);
273 Set<String> routes = routingTable.getRoutes(rii);
275 Assert.assertNull(routes);
282 class RoutingIdentifierImpl implements RpcRouter.RouteIdentifier,Serializable {
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");
289 public QName getContext() {
294 public QName getType() {
299 public org.opendaylight.yangtools.yang.data.api.InstanceIdentifier getRoute() {
300 return InstanceIdentifier.of(instance);
304 public boolean equals(Object o) {
305 if (this == o) return true;
306 if (o == null || getClass() != o.getClass()) return false;
308 RoutingIdentifierImpl that = (RoutingIdentifierImpl) o;
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;
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);