1 package org.opendaylight.controller.sal.connector.remoterpc.impl;
3 import junit.framework.Assert;
5 import org.junit.runner.RunWith;
6 import org.opendaylight.controller.sal.connector.api.RpcRouter;
7 import org.opendaylight.controller.sal.connector.remoterpc.api.RoutingTable;
8 import org.opendaylight.yangtools.yang.common.QName;
9 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
10 import org.ops4j.pax.exam.Configuration;
11 import org.ops4j.pax.exam.Option;
12 import org.ops4j.pax.exam.junit.PaxExam;
13 import org.ops4j.pax.exam.util.PathUtils;
14 import org.osgi.framework.Bundle;
15 import org.osgi.framework.BundleContext;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
19 import javax.inject.Inject;
20 import java.io.Serializable;
24 import static org.ops4j.pax.exam.CoreOptions.junitBundles;
25 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
26 import static org.ops4j.pax.exam.CoreOptions.options;
27 import static org.ops4j.pax.exam.CoreOptions.systemPackages;
28 import static org.ops4j.pax.exam.CoreOptions.systemProperty;
33 @RunWith(PaxExam.class)
35 ZeroMQRoutingTableTestIT {
36 private Logger log = LoggerFactory
37 .getLogger(ZeroMQRoutingTableTestIT.class);
39 public static final String ODL = "org.opendaylight.controller";
40 public static final String YANG = "org.opendaylight.yangtools";
41 public static final String CONTROLLER = "org.opendaylight.controller";
42 public static final String YANGTOOLS = "org.opendaylight.yangtools";
43 RoutingIdentifierImpl rii = new RoutingIdentifierImpl();
44 // get the OSGI bundle context
46 private BundleContext bc;
48 private RoutingTable routingTable = null;
50 // Configure the OSGi container
52 public Option[] config() {
55 systemProperty("logback.configurationFile").value(
56 "file:" + PathUtils.getBaseDir()
57 + "/src/test/resources/logback.xml"),
58 // To start OSGi console for inspection remotely
59 systemProperty("osgi.console").value("2401"),
60 // Set the systemPackages (used by clustering)
61 systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"),
62 // List framework bundles
64 mavenBundle("equinoxSDK381",
65 "org.eclipse.equinox.console").versionAsInProject(),
66 mavenBundle("equinoxSDK381",
67 "org.eclipse.equinox.util").versionAsInProject(),
68 mavenBundle("equinoxSDK381",
69 "org.eclipse.osgi.services").versionAsInProject(),
70 mavenBundle("equinoxSDK381",
71 "org.eclipse.equinox.ds").versionAsInProject(),
72 mavenBundle("equinoxSDK381",
73 "org.apache.felix.gogo.command").versionAsInProject(),
74 mavenBundle("equinoxSDK381",
75 "org.apache.felix.gogo.runtime").versionAsInProject(),
76 mavenBundle("equinoxSDK381",
77 "org.apache.felix.gogo.shell").versionAsInProject(),
78 // List logger bundles
79 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
80 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(),
81 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
82 mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
83 // List all the bundles on which the test case depends
85 "clustering.services").versionAsInProject(),
87 mavenBundle(ODL, "sal").versionAsInProject(),
89 "sal.implementation").versionAsInProject(),
90 mavenBundle(ODL, "containermanager").versionAsInProject(),
92 "containermanager.it.implementation").versionAsInProject(),
93 mavenBundle("org.jboss.spec.javax.transaction",
94 "jboss-transaction-api_1.1_spec").versionAsInProject(),
95 mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
96 mavenBundle("org.apache.felix",
97 "org.apache.felix.dependencymanager").versionAsInProject(),
98 mavenBundle("org.apache.felix",
99 "org.apache.felix.dependencymanager.shell").versionAsInProject(),
100 mavenBundle("eclipselink", "javax.resource").versionAsInProject(),
102 mavenBundle("com.google.guava","guava").versionAsInProject(),
103 // List logger bundles
104 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
105 mavenBundle("org.slf4j", "log4j-over-slf4j")
106 .versionAsInProject(),
107 mavenBundle("ch.qos.logback", "logback-core")
108 .versionAsInProject(),
109 mavenBundle("ch.qos.logback", "logback-classic")
110 .versionAsInProject(),
112 mavenBundle(ODL, "clustering.services")
113 .versionAsInProject(),
114 mavenBundle(ODL, "clustering.stub")
115 .versionAsInProject(),
118 // List all the bundles on which the test case depends
119 mavenBundle(ODL, "sal")
120 .versionAsInProject(),
121 mavenBundle(ODL, "sal-connector-api")
122 .versionAsInProject(),
123 mavenBundle(ODL, "remoterpc-routingtable.implementation")
124 .versionAsInProject(),
126 mavenBundle("org.jboss.spec.javax.transaction",
127 "jboss-transaction-api_1.1_spec").versionAsInProject(),
128 mavenBundle("org.apache.commons", "commons-lang3")
129 .versionAsInProject(),
130 mavenBundle("org.apache.felix",
131 "org.apache.felix.dependencymanager")
132 .versionAsInProject(),
136 .versionAsInProject(),
137 mavenBundle("org.opendaylight.yangtools","yang-data-api")
138 .versionAsInProject(),
139 mavenBundle("org.opendaylight.yangtools","yang-model-api")
140 .versionAsInProject(),
141 mavenBundle("org.opendaylight.yangtools","yang-binding")
142 .versionAsInProject(),
144 mavenBundle(CONTROLLER, "sal-binding-api").versionAsInProject(), //
145 mavenBundle(CONTROLLER, "sal-binding-config").versionAsInProject(),
146 mavenBundle(CONTROLLER, "sal-binding-broker-impl").versionAsInProject(), //
147 mavenBundle("org.javassist", "javassist").versionAsInProject(), //
148 mavenBundle(CONTROLLER, "sal-common-util").versionAsInProject(), //
150 mavenBundle(YANGTOOLS, "yang-data-api").versionAsInProject(), //
151 mavenBundle(YANGTOOLS, "yang-data-impl").versionAsInProject(), //
152 mavenBundle(YANGTOOLS, "yang-model-api").versionAsInProject(), //
153 mavenBundle(YANGTOOLS, "yang-model-util").versionAsInProject(), //
154 mavenBundle(YANGTOOLS, "yang-parser-api").versionAsInProject(),
155 mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(),
158 mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(), //
159 mavenBundle(YANGTOOLS, "binding-model-api").versionAsInProject(), //
160 mavenBundle(YANGTOOLS, "binding-generator-util").versionAsInProject(),
161 mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(),
162 mavenBundle(YANGTOOLS, "binding-type-provider").versionAsInProject(),
163 mavenBundle(YANGTOOLS, "binding-generator-api").versionAsInProject(),
164 mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(),
165 mavenBundle(YANGTOOLS, "binding-generator-impl").versionAsInProject(),
168 mavenBundle(CONTROLLER, "sal-core-api").versionAsInProject().update(), //
169 mavenBundle(CONTROLLER, "sal-broker-impl").versionAsInProject(), //
170 mavenBundle(CONTROLLER, "sal-core-spi").versionAsInProject().update(), //
172 mavenBundle(YANGTOOLS + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
174 mavenBundle(YANG+".thirdparty", "xtend-lib-osgi").versionAsInProject(),
175 mavenBundle("com.google.guava", "guava").versionAsInProject(), //
176 mavenBundle("org.javassist", "javassist").versionAsInProject(),
177 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(), //
178 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), //
179 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), //
180 mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), //
182 mavenBundle(ODL, "sal-common").versionAsInProject(), //
183 mavenBundle(ODL, "sal-common-api").versionAsInProject(),//
184 mavenBundle(ODL, "sal-common-impl").versionAsInProject(), //
185 mavenBundle(ODL, "sal-common-util").versionAsInProject(), //
187 mavenBundle(ODL, "config-api").versionAsInProject(), //
188 mavenBundle(ODL, "config-manager").versionAsInProject(), //
189 mavenBundle("commons-io", "commons-io").versionAsInProject(),
190 mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
192 mavenBundle(ODL, "sal-binding-api").versionAsInProject(), //
193 mavenBundle(ODL, "sal-binding-config").versionAsInProject(),
194 mavenBundle("org.javassist", "javassist").versionAsInProject(), //
195 mavenBundle(ODL, "sal-common-util").versionAsInProject(), //
197 mavenBundle(YANG, "yang-data-api").versionAsInProject(), //
198 mavenBundle(YANG, "yang-data-impl").versionAsInProject(), //
199 mavenBundle(YANG, "yang-model-api").versionAsInProject(), //
200 mavenBundle(YANG, "yang-model-util").versionAsInProject(), //
201 mavenBundle(YANG, "yang-parser-api").versionAsInProject(),
202 mavenBundle(YANG, "yang-parser-impl").versionAsInProject(),
205 mavenBundle(YANG, "binding-generator-spi").versionAsInProject(), //
206 mavenBundle(YANG, "binding-model-api").versionAsInProject(), //
207 mavenBundle(YANG, "binding-generator-util").versionAsInProject(),
208 mavenBundle(YANG, "yang-parser-impl").versionAsInProject(),
209 mavenBundle(YANG, "binding-type-provider").versionAsInProject(),
210 mavenBundle(YANG, "binding-generator-api").versionAsInProject(),
211 mavenBundle(YANG, "binding-generator-spi").versionAsInProject(),
212 mavenBundle(YANG, "binding-generator-impl").versionAsInProject(),
215 mavenBundle(ODL, "sal-core-api").versionAsInProject().update(), //
216 mavenBundle(ODL, "sal-broker-impl").versionAsInProject(), //
217 mavenBundle(ODL, "sal-core-spi").versionAsInProject().update(), //
219 mavenBundle(YANG + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), //
221 mavenBundle(YANG, "concepts").versionAsInProject(),
222 mavenBundle(YANG, "yang-binding").versionAsInProject(), //
223 mavenBundle(YANG, "yang-common").versionAsInProject(), //
224 mavenBundle(YANG+".thirdparty", "xtend-lib-osgi").versionAsInProject(),
225 mavenBundle("com.google.guava", "guava").versionAsInProject(), //
226 mavenBundle("org.javassist", "javassist").versionAsInProject(),
231 private String stateToString(int state) {
235 case Bundle.INSTALLED:
237 case Bundle.RESOLVED:
239 case Bundle.UNINSTALLED:
240 return "UNINSTALLED";
242 return "Not CONVERTED";
247 public void testAddGlobalRoute () throws Exception{
249 routingTable.addGlobalRoute(rii,"172.27.12.1:5000");
251 Set<String> routes = routingTable.getRoutes(rii);
253 for(String route:routes){
254 Assert.assertEquals(route,"172.27.12.1:5000");
262 public void testDeleteGlobalRoute () throws Exception{
264 routingTable.removeGlobalRoute(rii);
266 Set<String> routes = routingTable.getRoutes(rii);
268 Assert.assertNull(routes);
275 class RoutingIdentifierImpl implements RpcRouter.RouteIdentifier,Serializable {
277 private final URI namespace = URI.create("http://cisco.com/example");
278 private final QName QNAME = new QName(namespace,"global");
279 private final QName instance = new QName(URI.create("127.0.0.1"),"local");
282 public QName getContext() {
287 public QName getType() {
292 public org.opendaylight.yangtools.yang.data.api.InstanceIdentifier getRoute() {
293 return InstanceIdentifier.of(instance);
297 public boolean equals(Object o) {
298 if (this == o) return true;
299 if (o == null || getClass() != o.getClass()) return false;
301 RoutingIdentifierImpl that = (RoutingIdentifierImpl) o;
303 if (QNAME != null ? !QNAME.equals(that.QNAME) : that.QNAME != null) return false;
304 if (instance != null ? !instance.equals(that.instance) : that.instance != null) return false;
305 if (namespace != null ? !namespace.equals(that.namespace) : that.namespace != null) return false;
311 public int hashCode() {
312 int result = namespace != null ? namespace.hashCode() : 0;
313 result = 31 * result + (QNAME != null ? QNAME.hashCode() : 0);
314 result = 31 * result + (instance != null ? instance.hashCode() : 0);