From dfc1a61146ab19110c44d584c8c940e78a363d00 Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Fri, 8 Nov 2013 01:37:56 +0100 Subject: [PATCH] Fixed RESTCONF integration, added IT skeleton Change-Id: I5fa91649afd6568362f5cc69dfbc142b0b95bd0c Signed-off-by: Tony Tkacik --- .../md-sal/sal-rest-connector/pom.xml | 6 + .../sal/rest/api/RestconfService.java | 8 +- .../sal/rest/impl/RestconfProvider.java | 41 ++ .../sal/restconf/impl/ControllerContext.xtend | 17 +- .../src/main/resources/WEB-INF/web.xml | 67 ++ .../restconf/impl/test/XmlProvidersTest.java | 6 +- .../md-sal/test/sal-rest-connector-it/pom.xml | 627 ++++++++++++++++++ .../it/ServiceProviderController.java | 239 +++++++ .../src/test/resources/exam.properties | 4 + .../src/test/resources/logback.xml | 13 + .../src/test/resources/tomcat-server.xml | 53 ++ 11 files changed, 1070 insertions(+), 11 deletions(-) create mode 100644 opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java create mode 100644 opendaylight/md-sal/sal-rest-connector/src/main/resources/WEB-INF/web.xml create mode 100644 opendaylight/md-sal/test/sal-rest-connector-it/pom.xml create mode 100644 opendaylight/md-sal/test/sal-rest-connector-it/src/test/java/org/opendaylight/controller/test/restconf/it/ServiceProviderController.java create mode 100644 opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/exam.properties create mode 100644 opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/logback.xml create mode 100644 opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/tomcat-server.xml diff --git a/opendaylight/md-sal/sal-rest-connector/pom.xml b/opendaylight/md-sal/sal-rest-connector/pom.xml index 8cc46dda9f..bdcb0bdd2b 100644 --- a/opendaylight/md-sal/sal-rest-connector/pom.xml +++ b/opendaylight/md-sal/sal-rest-connector/pom.xml @@ -99,6 +99,12 @@ org.eclipse.xtend.lib, org.eclipse.xtext.xbase.* + + *, + com.sun.jersey.spi.container.servlet + + org.opendaylight.controller.sal.rest.impl.RestconfProvider + /restconf diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java index 0f566f5df7..b8cb229254 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java @@ -44,7 +44,7 @@ import org.opendaylight.yangtools.yang.data.api.CompositeNode; *
  • /version (field) * */ -@Path("restconf") +@Path("/") public interface RestconfService { public static final String XML = "+xml"; @@ -59,17 +59,17 @@ public interface RestconfService { public Object readAllData(); @GET - @Path("/datastore/{identifier}") + @Path("/datastore/{identifier:.+}") @Produces({API+JSON,API+XML}) public StructuredData readData(@PathParam("identifier") String identifier); @PUT - @Path("/datastore/{identifier}") + @Path("/datastore/{identifier:.+}") @Produces({API+JSON,API+XML}) public Object createConfigurationData(@PathParam("identifier") String identifier, CompositeNode payload); @POST - @Path("/datastore/{identifier}") + @Path("/datastore/{identifier:.+}") @Produces({API+JSON,API+XML}) public Object updateConfigurationData(@PathParam("identifier") String identifier, CompositeNode payload); diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java new file mode 100644 index 0000000000..35b751c73f --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestconfProvider.java @@ -0,0 +1,41 @@ +package org.opendaylight.controller.sal.rest.impl; + +import org.opendaylight.controller.sal.core.api.AbstractProvider; +import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; +import org.opendaylight.controller.sal.core.api.data.DataBrokerService; +import org.opendaylight.controller.sal.core.api.data.DataProviderService; +import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.controller.sal.core.api.model.SchemaServiceListener; +import org.opendaylight.controller.sal.restconf.impl.BrokerFacade; +import org.opendaylight.controller.sal.restconf.impl.ControllerContext; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.osgi.framework.BundleContext; + +public class RestconfProvider extends AbstractProvider { + + private ListenerRegistration listenerRegistration; + + @Override + public void onSessionInitiated(ProviderSession session) { + DataBrokerService dataService = session.getService(DataBrokerService.class); + + BrokerFacade.getInstance().setContext(session); + BrokerFacade.getInstance().setDataService(dataService); + + SchemaService schemaService = session.getService(SchemaService.class); + listenerRegistration = schemaService.registerSchemaServiceListener(ControllerContext.getInstance()); + ControllerContext.getInstance().setSchemas(schemaService.getGlobalContext()); + } + + @Override + protected void stopImpl(BundleContext context) { + super.stopImpl(context); + if (listenerRegistration != null) { + try { + listenerRegistration.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend index 5057413a7a..2b3a3042c2 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend @@ -24,13 +24,14 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode import org.opendaylight.yangtools.yang.model.api.SchemaContext import static com.google.common.base.Preconditions.* +import org.opendaylight.controller.sal.core.api.model.SchemaServiceListener + +class ControllerContext implements SchemaServiceListener { -class ControllerContext { - val static ControllerContext INSTANCE = new ControllerContext - + val static NULL_VALUE = "null" - + @Property SchemaContext schemas; @@ -208,6 +209,7 @@ class ControllerContext { if (targetNode instanceof ListSchemaNode) { val listNode = targetNode as ListSchemaNode; val keysSize = listNode.keyDefinition.size + // every key has to be filled if ((strings.length - consumed) < keysSize) { return null; @@ -217,6 +219,7 @@ class ControllerContext { var i = 0; for (key : listNode.keyDefinition) { val uriKeyValue = uriKeyValues.get(i); + // key value cannot be NULL if (uriKeyValue.equals(NULL_VALUE)) { return null @@ -227,6 +230,7 @@ class ControllerContext { consumed = consumed + i; builder.nodeWithKey(targetNode.QName, keyValues); } else { + // Only one instance of node is allowed builder.node(targetNode.QName); } @@ -270,4 +274,9 @@ class ControllerContext { public def QName toRpcQName(String name) { } + + override onGlobalContextUpdated(SchemaContext context) { + this.schemas = context; + } + } diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/resources/WEB-INF/web.xml b/opendaylight/md-sal/sal-rest-connector/src/main/resources/WEB-INF/web.xml new file mode 100644 index 0000000000..eb2b516d96 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/main/resources/WEB-INF/web.xml @@ -0,0 +1,67 @@ + + + + + JAXRSRestconf + com.sun.jersey.spi.container.servlet.ServletContainer + + javax.ws.rs.Application + org.opendaylight.controller.sal.rest.impl.RestconfApplication + + 1 + + + + JAXRSRestconf + /* + + + + CorsFilter + org.apache.catalina.filters.CorsFilter + + cors.allowed.origins + * + + + cors.allowed.methods + GET,POST,HEAD,OPTIONS,PUT + + + cors.allowed.headers + Content-Type,X-Requested-With,accept,authorization, + origin,Origin,Access-Control-Request-Method,Access-Control-Request-Headers + + + cors.exposed.headers + Access-Control-Allow-Origin,Access-Control-Allow-Credentials + + + cors.support.credentials + true + + + cors.preflight.maxage + 10 + + + + CorsFilter + /* + + + + NB api + /* + POST + GET + PUT + PATCH + DELETE + HEAD + + + + diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java index 3020824d3d..0b8b5d48de 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java @@ -84,7 +84,7 @@ public class XmlProvidersTest extends JerseyTest { public void testStructuredDataToXmlProvider() throws FileNotFoundException { URI uri = null; try { - uri = new URI("/restconf/datastore/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); + uri = new URI("/datastore/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); } catch (UnsupportedEncodingException | URISyntaxException e) { e.printStackTrace(); } @@ -101,7 +101,7 @@ public class XmlProvidersTest extends JerseyTest { public void testXmlToCompositeNodeProvider() throws ParserConfigurationException, SAXException, IOException { URI uri = null; try { - uri = new URI("/restconf/operations/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); + uri = new URI("/operations/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); } catch (UnsupportedEncodingException | URISyntaxException e) { e.printStackTrace(); } @@ -138,7 +138,7 @@ public class XmlProvidersTest extends JerseyTest { public void testXmlToCompositeNodeProviderExceptions() { URI uri = null; try { - uri = new URI("/restconf/operations/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); + uri = new URI("/operations/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); } catch (UnsupportedEncodingException | URISyntaxException e) { e.printStackTrace(); } diff --git a/opendaylight/md-sal/test/sal-rest-connector-it/pom.xml b/opendaylight/md-sal/test/sal-rest-connector-it/pom.xml new file mode 100644 index 0000000000..b5b1642797 --- /dev/null +++ b/opendaylight/md-sal/test/sal-rest-connector-it/pom.xml @@ -0,0 +1,627 @@ + + 4.0.0 + + sal-test-parent + org.opendaylight.controller.tests + 1.0-SNAPSHOT + + sal-rest-connector-it + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + + + 3.0.0 + 1.5.0 + 2.2.0.RELEASE + 3.6.0.RELEASE + 3.1.3.RELEASE + 1.17 + 3.1.3.RELEASE + + + + + + org.ops4j.pax.exam + maven-paxexam-plugin + 1.2.4 + + + generate-config + + generate-depends-file + + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.ops4j.pax.exam + + + maven-paxexam-plugin + + + [1.2.4,) + + + + generate-depends-file + + + + + + + + + + + + + + + + + + org.opendaylight.controller + logging.bridge + 0.4.1-SNAPSHOT + + + org.opendaylight.yangtools.thirdparty + xtend-lib-osgi + 2.4.3 + + + org.opendaylight.controller + bundlescanner.implementation + 0.4.1-SNAPSHOT + + + org.opendaylight.controller + sal-broker-impl + 1.0-SNAPSHOT + test + + + org.opendaylight.controller + sal-rest-connector + 1.0-SNAPSHOT + test + + + org.opendaylight.controller + sal-binding-it + 1.0-SNAPSHOT + test + + + org.ops4j.pax.exam + pax-exam-container-native + ${exam.version} + test + + + org.ops4j.pax.exam + pax-exam-junit4 + ${exam.version} + test + + + org.ops4j.pax.exam + pax-exam-link-mvn + ${exam.version} + test + + + equinoxSDK381 + org.eclipse.osgi + 3.8.1.v20120830-144521 + test + + + org.slf4j + log4j-over-slf4j + 1.7.2 + + + ch.qos.logback + logback-core + 1.0.9 + + + ch.qos.logback + logback-classic + 1.0.9 + + + org.opendaylight.controller + sal-binding-api + 1.0-SNAPSHOT + + + org.opendaylight.controller + sal-common-util + 1.0-SNAPSHOT + + + org.opendaylight.controller + sal-core-api + 1.0-SNAPSHOT + + + org.opendaylight.controller.model + model-flow-service + 1.0-SNAPSHOT + provided + + + org.opendaylight.controller + config-manager + 0.2.2-SNAPSHOT + + + org.opendaylight.controller.model + model-flow-management + 1.0-SNAPSHOT + provided + + + org.opendaylight.yangtools.thirdparty + antlr4-runtime-osgi-nohead + 4.0 + + + org.opendaylight.yangtools + yang-binding + + + org.opendaylight.yangtools + yang-common + + + org.opendaylight.yangtools + yang-data-api + + + org.opendaylight.controller + commons.northbound + 0.4.1-SNAPSHOT + runtime + + + org.opendaylight.controller + sal-common-util + 1.0-SNAPSHOT + + + org.slf4j + jcl-over-slf4j + 1.7.2 + + + org.slf4j + slf4j-api + + + + org.slf4j + log4j-over-slf4j + 1.7.2 + + + ch.qos.logback + logback-core + 1.0.9 + + + ch.qos.logback + logback-classic + 1.0.9 + + + commons-codec + commons-codec + 1.8 + + + equinoxSDK381 + javax.servlet + 3.0.0.v201112011016 + + + equinoxSDK381 + javax.servlet.jsp + 2.2.0.v201112011158 + + + equinoxSDK381 + org.eclipse.equinox.ds + 1.4.0.v20120522-1841 + + + equinoxSDK381 + org.eclipse.equinox.util + 1.0.400.v20120522-2049 + + + equinoxSDK381 + org.eclipse.osgi.services + 3.3.100.v20120522-1822 + + + equinoxSDK381 + org.eclipse.osgi + 3.8.1.v20120830-144521 + + + equinoxSDK381 + org.apache.felix.gogo.command + 0.8.0.v201108120515 + + + equinoxSDK381 + org.apache.felix.gogo.runtime + 0.8.0.v201108120515 + + + equinoxSDK381 + org.apache.felix.gogo.shell + 0.8.0.v201110170705 + + + equinoxSDK381 + org.eclipse.equinox.cm + 1.0.400.v20120522-1841 + + + equinoxSDK381 + org.eclipse.equinox.console + 1.0.0.v20120522-1841 + + + equinoxSDK381 + org.eclipse.equinox.launcher + 1.3.0.v20120522-1813 + + + + geminiweb + org.eclipse.gemini.web.core + ${geminiweb.version} + + + geminiweb + org.eclipse.gemini.web.extender + ${geminiweb.version} + + + geminiweb + org.eclipse.gemini.web.tomcat + ${geminiweb.version} + + + geminiweb + org.eclipse.virgo.kernel.equinox.extensions + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.common + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.io + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.math + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.osgi + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.osgi.manifest + ${virgo.version} + + + geminiweb + org.eclipse.virgo.util.parser.manifest + ${virgo.version} + + + org.apache.felix + org.apache.felix.dependencymanager + 3.1.0 + + + org.apache.felix + org.apache.felix.dependencymanager.shell + 3.0.1 + + + org.jboss.spec.javax.transaction + jboss-transaction-api_1.1_spec + 1.0.1.Final + + + org.apache.felix + org.apache.felix.fileinstall + 3.1.6 + + + org.apache.commons + commons-lang3 + 3.1 + + + virgomirror + org.eclipse.jdt.core.compiler.batch + 3.8.0.I20120518-2145 + + + eclipselink + javax.persistence + 2.0.4.v201112161009 + + + orbit + javax.activation + 1.1.0.v201211130549 + + + orbit + javax.annotation + 1.1.0.v201209060031 + + + orbit + javax.ejb + 3.1.1.v201204261316 + + + orbit + javax.el + 2.2.0.v201108011116 + + + orbit + javax.mail.glassfish + 1.4.1.v201108011116 + + + orbit + javax.xml.rpc + 1.1.0.v201005080400 + + + orbit + org.apache.catalina + 7.0.32.v201211201336 + + + orbit + org.apache.catalina.ha + 7.0.32.v201211201952 + + + orbit + org.apache.catalina.tribes + 7.0.32.v201211201952 + + + orbit + org.apache.coyote + 7.0.32.v201211201952 + + + orbit + org.apache.el + 7.0.32.v201211081135 + + + orbit + org.apache.jasper + 7.0.32.v201211201952 + + + orbit + org.apache.juli.extras + 7.0.32.v201211081135 + + + orbit + org.apache.tomcat.api + 7.0.32.v201211081135 + + + orbit + org.apache.tomcat.util + 7.0.32.v201211201952 + + + orbit + javax.servlet.jsp.jstl + 1.2.0.v201105211821 + + + orbit + javax.servlet.jsp.jstl.impl + 1.2.0.v201210211230 + + + + org.ops4j.pax.exam + pax-exam-container-native + ${exam.version} + test + + + org.ops4j.pax.exam + pax-exam-junit4 + ${exam.version} + test + + + org.ops4j.pax.exam + pax-exam-link-mvn + ${exam.version} + test + + + org.ops4j.pax.url + pax-url-aether + ${url.version} + test + + + org.ow2.asm + asm-all + 4.1 + + + org.springframework + org.springframework.asm + ${spring.version} + + + org.springframework + org.springframework.aop + ${spring.version} + + + org.springframework + org.springframework.context + ${spring.version} + + + org.springframework + org.springframework.context.support + ${spring.version} + + + org.springframework + org.springframework.core + ${spring.version} + + + org.springframework + org.springframework.beans + ${spring.version} + + + org.springframework + org.springframework.expression + ${spring.version} + + + org.springframework + org.springframework.web + ${spring.version} + + + org.aopalliance + com.springsource.org.aopalliance + 1.0.0 + + + org.springframework + org.springframework.web.servlet + ${spring.version} + + + + org.springframework.security + spring-security-config + ${spring-security.version} + + + org.springframework.security + spring-security-core + ${spring-security.version} + + + org.springframework.security + spring-security-web + ${spring-security.version} + + + org.springframework.security + spring-security-taglibs + ${spring-security.version} + + + org.springframework + org.springframework.transaction + ${spring-security.version} + + + + org.ow2.chameleon.management + chameleon-mbeans + 1.0.0 + + + + com.sun.jersey + jersey-core + ${jersey.version} + + + + com.sun.jersey + jersey-server + ${jersey.version} + + + com.sun.jersey + jersey-client + ${jersey.version} + + + com.sun.jersey + jersey-json + ${jersey.version} + + + eclipselink + javax.resource + 1.5.0.v200906010428 + + + org.opendaylight.controller.thirdparty + com.sun.jersey.jersey-servlet + 1.17 + + + org.opendaylight.controller.thirdparty + org.apache.catalina.filters.CorsFilter + 7.0.42 + + + diff --git a/opendaylight/md-sal/test/sal-rest-connector-it/src/test/java/org/opendaylight/controller/test/restconf/it/ServiceProviderController.java b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/java/org/opendaylight/controller/test/restconf/it/ServiceProviderController.java new file mode 100644 index 0000000000..1087da22f9 --- /dev/null +++ b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/java/org/opendaylight/controller/test/restconf/it/ServiceProviderController.java @@ -0,0 +1,239 @@ +package org.opendaylight.controller.test.restconf.it; + +import static org.junit.Assert.*; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.options; +import static org.ops4j.pax.exam.CoreOptions.systemPackages; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import static org.ops4j.pax.exam.CoreOptions.maven; + +import java.util.Collection; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.test.sal.binding.it.TestHelper; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; + +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.*; + +@RunWith(PaxExam.class) +public class ServiceProviderController { + + public static final String ODL = "org.opendaylight.controller"; + public static final String YANG = "org.opendaylight.yangtools"; + public static final String SAMPLE = "org.opendaylight.controller.samples"; + + @Test + public void properInitialized() throws Exception { + + Thread.sleep(30*60*1000); // Waiting for services to get wired. + assertTrue(true); + // assertTrue(consumer.createToast(WhiteBread.class, 5)); + + } + + // @Inject + // BindingAwareBroker broker; + + // @Inject + // ToastConsumer consumer; + + @Inject + BundleContext ctx; + + @Configuration + public Option[] config() { + return options( + mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(), // + mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), // + mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // + mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // + + mdSalCoreBundles(), + baseModelBundles(), + flowCapableModelBundles(), + + // mavenBundle(ODL, + // "sal-binding-broker-impl").versionAsInProject().update(), // + mavenBundle(ODL, "sal-common").versionAsInProject(), // + mavenBundle(ODL, "sal-common-api").versionAsInProject(),// + mavenBundle(ODL, "sal-common-impl").versionAsInProject(), // + mavenBundle(ODL, "sal-common-util").versionAsInProject(), // + + mavenBundle(ODL, "sal-core-api").versionAsInProject().update(), // + mavenBundle(ODL, "sal-broker-impl").versionAsInProject(), // + mavenBundle(ODL, "sal-core-spi").versionAsInProject().update(), // + + mavenBundle(ODL, "sal-connector-api").versionAsInProject(), // + // mavenBundle(SAMPLE, + // "zeromq-test-provider").versionAsInProject(), // + mavenBundle(ODL, "sal-rest-connector").versionAsInProject(), // + + mavenBundle(YANG, "concepts").versionAsInProject(), + mavenBundle(YANG, "yang-binding").versionAsInProject(), // + mavenBundle(YANG, "yang-common").versionAsInProject(), // + mavenBundle(YANG, "yang-data-api").versionAsInProject(), // + mavenBundle(YANG, "yang-data-impl").versionAsInProject(), // + mavenBundle(YANG, "yang-model-api").versionAsInProject(), // + mavenBundle(YANG, "yang-model-util").versionAsInProject(), // + mavenBundle(YANG, "yang-parser-api").versionAsInProject(), + mavenBundle(YANG, "yang-parser-impl").versionAsInProject(), + mavenBundle(YANG + ".thirdparty", "xtend-lib-osgi").versionAsInProject(), // + mavenBundle(YANG + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), // + mavenBundle("com.google.guava", "guava").versionAsInProject(), // + + // systemProperty("logback.configurationFile").value( + // "file:" + PathUtils.getBaseDir() + + // "/src/test/resources/logback.xml"), + // To start OSGi console for inspection remotely + systemProperty("osgi.console").value("2401"), + systemProperty("org.eclipse.gemini.web.tomcat.config.path").value( + PathUtils.getBaseDir() + "/src/test/resources/tomcat-server.xml"), + + // setting default level. Jersey bundles will need to be started + // earlier. + systemProperty("osgi.bundles.defaultStartLevel").value("4"), + + // Set the systemPackages (used by clustering) + systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"), + mavenBundle("org.slf4j", "jcl-over-slf4j").versionAsInProject(), + mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(), + mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), + mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), + mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), + mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(), + mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "clustering.services").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "containermanager").versionAsInProject(), + // List all the opendaylight modules + mavenBundle("org.opendaylight.controller", "configuration").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "sal").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "switchmanager").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "usermanager").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "logging.bridge").versionAsInProject(), + // mavenBundle("org.opendaylight.controller", + // "clustering.test").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "bundlescanner").versionAsInProject(), + mavenBundle("org.opendaylight.controller", "bundlescanner.implementation").versionAsInProject(), + + // Northbound bundles + mavenBundle("org.opendaylight.controller", "commons.northbound").versionAsInProject(), + mavenBundle("org.codehaus.jackson", "jackson-mapper-asl").versionAsInProject(), + mavenBundle("org.codehaus.jackson", "jackson-core-asl").versionAsInProject(), + mavenBundle("org.codehaus.jackson", "jackson-jaxrs").versionAsInProject(), + mavenBundle("org.codehaus.jackson", "jackson-xc").versionAsInProject(), + mavenBundle("org.codehaus.jettison", "jettison").versionAsInProject(), + + mavenBundle("commons-io", "commons-io").versionAsInProject(), + + // mavenBundle("commons-fileupload", + // "commons-fileupload").versionAsInProject(), + + mavenBundle("equinoxSDK381", "javax.servlet").versionAsInProject(), + mavenBundle("equinoxSDK381", "javax.servlet.jsp").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.ds").versionAsInProject(), + mavenBundle("orbit", "javax.xml.rpc").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.util").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.osgi.services").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.command").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.runtime").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.shell").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.cm").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.console").versionAsInProject(), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.launcher").versionAsInProject(), + + mavenBundle("geminiweb", "org.eclipse.gemini.web.core").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.gemini.web.extender").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.gemini.web.tomcat").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.kernel.equinox.extensions").versionAsInProject().noStart(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.common").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.io").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.math").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.osgi.manifest").versionAsInProject(), + mavenBundle("geminiweb", "org.eclipse.virgo.util.parser.manifest").versionAsInProject(), + + mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(), + mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager.shell").versionAsInProject(), + + mavenBundle("com.google.code.gson", "gson").versionAsInProject(), + mavenBundle("org.jboss.spec.javax.transaction", "jboss-transaction-api_1.1_spec").versionAsInProject(), + mavenBundle("org.apache.felix", "org.apache.felix.fileinstall").versionAsInProject(), + mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(), + mavenBundle("commons-codec", "commons-codec").versionAsInProject(), + mavenBundle("virgomirror", "org.eclipse.jdt.core.compiler.batch").versionAsInProject(), + mavenBundle("eclipselink", "javax.persistence").versionAsInProject(), + mavenBundle("eclipselink", "javax.resource").versionAsInProject(), + + mavenBundle("orbit", "javax.activation").versionAsInProject(), + mavenBundle("orbit", "javax.annotation").versionAsInProject(), + mavenBundle("orbit", "javax.ejb").versionAsInProject(), + mavenBundle("orbit", "javax.el").versionAsInProject(), + mavenBundle("orbit", "javax.mail.glassfish").versionAsInProject(), + mavenBundle("orbit", "javax.xml.rpc").versionAsInProject(), + mavenBundle("orbit", "org.apache.catalina").versionAsInProject(), + // these are bundle fragments that can't be started on its own + mavenBundle("orbit", "org.apache.catalina.ha").versionAsInProject().noStart(), + mavenBundle("orbit", "org.apache.catalina.tribes").versionAsInProject().noStart(), + mavenBundle("orbit", "org.apache.coyote").versionAsInProject().noStart(), + mavenBundle("orbit", "org.apache.jasper").versionAsInProject().noStart(), + + mavenBundle("orbit", "org.apache.el").versionAsInProject(), + mavenBundle("orbit", "org.apache.juli.extras").versionAsInProject(), + mavenBundle("orbit", "org.apache.tomcat.api").versionAsInProject(), + mavenBundle("orbit", "org.apache.tomcat.util").versionAsInProject().noStart(), + mavenBundle("orbit", "javax.servlet.jsp.jstl").versionAsInProject(), + mavenBundle("orbit", "javax.servlet.jsp.jstl.impl").versionAsInProject(), + + mavenBundle("org.ops4j.pax.exam", "pax-exam-container-native").versionAsInProject(), + mavenBundle("org.ops4j.pax.exam", "pax-exam-junit4").versionAsInProject(), + mavenBundle("org.ops4j.pax.exam", "pax-exam-link-mvn").versionAsInProject(), + mavenBundle("org.ops4j.pax.url", "pax-url-aether").versionAsInProject(), + + mavenBundle("org.ow2.asm", "asm-all").versionAsInProject(), + + mavenBundle("org.springframework", "org.springframework.asm").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.aop").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.context").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.context.support").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.core").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.beans").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.expression").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.web").versionAsInProject(), + + mavenBundle("org.aopalliance", "com.springsource.org.aopalliance").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.web.servlet").versionAsInProject(), + mavenBundle("org.springframework.security", "spring-security-config").versionAsInProject(), + mavenBundle("org.springframework.security", "spring-security-core").versionAsInProject(), + mavenBundle("org.springframework.security", "spring-security-web").versionAsInProject(), + mavenBundle("org.springframework.security", "spring-security-taglibs").versionAsInProject(), + mavenBundle("org.springframework", "org.springframework.transaction").versionAsInProject(), + + mavenBundle("org.ow2.chameleon.management", "chameleon-mbeans").versionAsInProject(), + mavenBundle("org.opendaylight.controller.thirdparty", "com.sun.jersey.jersey-servlet") + .versionAsInProject().startLevel(2), + mavenBundle("org.opendaylight.controller.thirdparty", "org.apache.catalina.filters.CorsFilter") + .versionAsInProject().noStart(), + + // Jersey needs to be started before the northbound application + // bundles, using a lower start level + mavenBundle("com.sun.jersey", "jersey-client").versionAsInProject(), + mavenBundle("com.sun.jersey", "jersey-server").versionAsInProject().startLevel(2), + mavenBundle("com.sun.jersey", "jersey-core").versionAsInProject().startLevel(2), + mavenBundle("com.sun.jersey", "jersey-json").versionAsInProject().startLevel(2), + + junitBundles()); + } + +} diff --git a/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/exam.properties b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/exam.properties new file mode 100644 index 0000000000..d5f9ae1fcd --- /dev/null +++ b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/exam.properties @@ -0,0 +1,4 @@ +#pax.exam.system = default +pax.exam.logging = none +pax.exam.service.timeout = 5000 + diff --git a/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/logback.xml b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/logback.xml new file mode 100644 index 0000000000..2d63ce5744 --- /dev/null +++ b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/tomcat-server.xml b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/tomcat-server.xml new file mode 100644 index 0000000000..d6ef6ed926 --- /dev/null +++ b/opendaylight/md-sal/test/sal-rest-connector-it/src/test/resources/tomcat-server.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.36.6