From a90863760d1ae1a92520ce29841aec600d25a83a Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Fri, 30 Jun 2017 15:10:27 +0200 Subject: HONEYCOMB-358 - Conditional module loading Change-Id: Ic9b7182cc77bf2f73cf5edd3ee19f25f53711cda Signed-off-by: Jan Srnicek --- infra/bgp-distribution-test/asciidoc/Readme.adoc | 6 ++ infra/bgp-distribution-test/pom.xml | 59 +++++++++++++ .../infra/bgp/distro/BgpDistributionTest.java | 91 +++++++++++++++++++++ .../src/test/resources/WEB-INF/web.xml | 74 +++++++++++++++++ .../src/test/resources/activation.json | 4 + .../base-distro-test-modules/base-modules | 14 ++++ .../src/test/resources/bgp-peers.json | 90 ++++++++++++++++++++ .../src/test/resources/bgp.json | 9 ++ .../src/test/resources/honeycomb-keystore | Bin 0 -> 2392 bytes .../src/test/resources/honeycomb.json | 40 +++++++++ .../src/test/resources/logback.xml | 31 +++++++ 11 files changed, 418 insertions(+) create mode 100644 infra/bgp-distribution-test/asciidoc/Readme.adoc create mode 100644 infra/bgp-distribution-test/pom.xml create mode 100644 infra/bgp-distribution-test/src/test/java/io/fd/honeycomb/infra/bgp/distro/BgpDistributionTest.java create mode 100644 infra/bgp-distribution-test/src/test/resources/WEB-INF/web.xml create mode 100644 infra/bgp-distribution-test/src/test/resources/activation.json create mode 100644 infra/bgp-distribution-test/src/test/resources/base-distro-test-modules/base-modules create mode 100644 infra/bgp-distribution-test/src/test/resources/bgp-peers.json create mode 100644 infra/bgp-distribution-test/src/test/resources/bgp.json create mode 100644 infra/bgp-distribution-test/src/test/resources/honeycomb-keystore create mode 100644 infra/bgp-distribution-test/src/test/resources/honeycomb.json create mode 100644 infra/bgp-distribution-test/src/test/resources/logback.xml (limited to 'infra/bgp-distribution-test') diff --git a/infra/bgp-distribution-test/asciidoc/Readme.adoc b/infra/bgp-distribution-test/asciidoc/Readme.adoc new file mode 100644 index 000000000..25762d25f --- /dev/null +++ b/infra/bgp-distribution-test/asciidoc/Readme.adoc @@ -0,0 +1,6 @@ += bgp-distribution-test + +Distribution tests use generated files(yang-module-index) +that are generated after the build phase that maven invoke unit test. +Therefore these tests must be part or separate project that uses distribution +as dependency that has these files allready generated. \ No newline at end of file diff --git a/infra/bgp-distribution-test/pom.xml b/infra/bgp-distribution-test/pom.xml new file mode 100644 index 000000000..34eeda39b --- /dev/null +++ b/infra/bgp-distribution-test/pom.xml @@ -0,0 +1,59 @@ + + + + + + impl-parent + io.fd.honeycomb.common + 1.17.07-SNAPSHOT + + 4.0.0 + + io.fd.honeycomb + bgp-distribution-test + 1.17.07-SNAPSHOT + + + + io.fd.honeycomb + bgp-distribution + ${project.version} + test + + + + + junit + junit + test + + + com.mashape.unirest + unirest-java + 1.4.9 + test + + + com.jcraft + jsch + 0.1.54 + test + + + \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/java/io/fd/honeycomb/infra/bgp/distro/BgpDistributionTest.java b/infra/bgp-distribution-test/src/test/java/io/fd/honeycomb/infra/bgp/distro/BgpDistributionTest.java new file mode 100644 index 000000000..be927a64e --- /dev/null +++ b/infra/bgp-distribution-test/src/test/java/io/fd/honeycomb/infra/bgp/distro/BgpDistributionTest.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.honeycomb.infra.bgp.distro; + +import com.google.common.io.ByteStreams; +import com.mashape.unirest.http.Unirest; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetAddress; +import java.net.Socket; +import javax.net.ssl.SSLContext; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContexts; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BgpDistributionTest { + + private static final Logger LOG = LoggerFactory.getLogger(BgpDistributionTest.class); + private static final String CERT_PASSWORD = "testing"; + private static final int HELLO_WAIT = 2500; + + private static final int BGP_MSG_TYPE_OFFSET = 18; // 16 (MARKER) + 2 (LENGTH); + private static final byte BGP_OPEN_MSG_TYPE = 1; + private static final int BGP_PORT = 1790; + + @Before + public void setUp() throws Exception { + SSLContext sslcontext = SSLContexts.custom() + .loadTrustMaterial(getClass().getResource("/honeycomb-keystore"), + CERT_PASSWORD.toCharArray(), new TrustSelfSignedStrategy()) + .build(); + + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext); + CloseableHttpClient httpclient = HttpClients.custom() + .setSSLSocketFactory(sslsf) + .build(); + Unirest.setHttpClient(httpclient); + } + + @Test(timeout = 120000) + public void test() throws Exception { + io.fd.honeycomb.infra.bgp.distro.Main.init(); + LOG.info("Testing Honeycomb BGP distribution"); + assertBgp(); + } + + private byte[] readMessage(final InputStream inputStream) throws IOException { + final int available = inputStream.available(); + final byte[] msg = new byte[available]; + ByteStreams.read(inputStream, msg, 0, available); + return msg; + } + + private void assertBgp() throws Exception { + // Wait until BGP server is started + Thread.sleep(HELLO_WAIT); + final InetAddress bgpHost = InetAddress.getByName("127.0.0.1"); + final InetAddress bgpPeerAddress = InetAddress.getByName("127.0.0.2"); + try (final Socket localhost = new Socket(bgpHost, BGP_PORT, bgpPeerAddress, 0); + final InputStream inputStream = localhost.getInputStream()) { + // Wait until bgp message is sent + Thread.sleep(HELLO_WAIT); + + final byte[] msg = readMessage(inputStream); + LOG.info("Received BGP message: {}", msg); + + Assert.assertEquals(BGP_OPEN_MSG_TYPE, msg[BGP_MSG_TYPE_OFFSET]); + } + } +} \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/WEB-INF/web.xml b/infra/bgp-distribution-test/src/test/resources/WEB-INF/web.xml new file mode 100644 index 000000000..6cf487170 --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/WEB-INF/web.xml @@ -0,0 +1,74 @@ + + + + + + + JAXRSRestconf + com.sun.jersey.spi.container.servlet.ServletContainer + + javax.ws.rs.Application + org.opendaylight.netconf.sal.rest.impl.RestconfApplication + + 1 + + + + JAXRSRestconf + /* + + + cross-origin-restconf + org.eclipse.jetty.servlets.CrossOriginFilter + + allowedOrigins + * + + + allowedMethods + GET,POST,OPTIONS,DELETE,PUT,HEAD + + + allowedHeaders + origin, content-type, accept, authorization + + + exposedHeaders + location + + + + cross-origin-restconf + /* + + + + + NB api + /* + POST + GET + PUT + PATCH + DELETE + HEAD + + + + diff --git a/infra/bgp-distribution-test/src/test/resources/activation.json b/infra/bgp-distribution-test/src/test/resources/activation.json new file mode 100644 index 000000000..687b51277 --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/activation.json @@ -0,0 +1,4 @@ +{ + "modules-resource-path": "base-distro-test-modules", + "yang-modules-index-path": "honeycomb-minimal-resources/yang-mapping" +} \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/base-distro-test-modules/base-modules b/infra/bgp-distribution-test/src/test/resources/base-distro-test-modules/base-modules new file mode 100644 index 000000000..18602a0ad --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/base-distro-test-modules/base-modules @@ -0,0 +1,14 @@ +io.fd.honeycomb.infra.bgp.BgpConfigurationModule +io.fd.honeycomb.infra.bgp.BgpExtensionsModule +io.fd.honeycomb.infra.bgp.BgpModule +io.fd.honeycomb.infra.bgp.BgpReadersModule +io.fd.honeycomb.infra.bgp.BgpWritersModule +io.fd.honeycomb.infra.distro.cfgattrs.CfgAttrsModule +io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule +io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule +io.fd.honeycomb.infra.distro.initializer.InitializerPipelineModule +io.fd.honeycomb.infra.distro.netconf.NetconfModule +io.fd.honeycomb.infra.distro.netconf.NetconfReadersModule +io.fd.honeycomb.infra.distro.restconf.RestconfModule +io.fd.honeycomb.infra.distro.schema.SchemaModule +io.fd.honeycomb.infra.distro.schema.YangBindingProviderModule \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/bgp-peers.json b/infra/bgp-distribution-test/src/test/resources/bgp-peers.json new file mode 100644 index 000000000..3a7e01060 --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/bgp-peers.json @@ -0,0 +1,90 @@ +{ + "bgp-openconfig-extensions:neighbors": { + "neighbor": [ + { + "neighbor-address": "10.25.1.9", + "config": { + "peer-group": "application-peers" + }, + "afi-safis": { + "afi-safi": [ + { + "afi-safi-name": "openconfig-bgp-types:IPV4-UNICAST", + "receive": true, + "send-max": 0 + } + ] + } + }, + { + "neighbor-address": "10.25.1.10", + "config": { + "peer-group": "application-peers" + }, + "afi-safis": { + "afi-safi": [ + { + "afi-safi-name": "openconfig-bgp-types:IPV4-UNICAST", + "receive": true, + "send-max": 0 + } + ] + } + }, + { + "neighbor-address": "127.0.0.2", + "config": { + "peer-type": "INTERNAL" + }, + "timers": { + "config": { + "connect-retry": 10, + "hold-time": 90 + } + }, + "transport": { + "config": { + "remote-port": 17900, + "passive-mode": false + } + }, + "afi-safis": { + "afi-safi": [ + { + "afi-safi-name": "openconfig-bgp-types:IPV4-UNICAST", + "receive": true, + "send-max": 0 + } + ] + } + }, + { + "neighbor-address": "127.0.0.3", + "config": { + "peer-type": "EXTERNAL" + }, + "timers": { + "config": { + "connect-retry": 10, + "hold-time": 90 + } + }, + "transport": { + "config": { + "remote-port": 17900, + "passive-mode": false + } + }, + "afi-safis": { + "afi-safi": [ + { + "afi-safi-name": "openconfig-bgp-types:IPV4-UNICAST", + "receive": true, + "send-max": 0 + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/bgp.json b/infra/bgp-distribution-test/src/test/resources/bgp.json new file mode 100644 index 000000000..494b6a965 --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/bgp.json @@ -0,0 +1,9 @@ + { + "bgp-enabled": "true", + "bgp-binding-address": "127.0.0.1", + "bgp-port": 1790, + "bgp-as-number": 65000, + "bgp-receive-multiple-paths": "true", + "bgp-send-max-paths": 0, + "bgp-netty-threads": 2 +} \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/honeycomb-keystore b/infra/bgp-distribution-test/src/test/resources/honeycomb-keystore new file mode 100644 index 000000000..44093dc09 Binary files /dev/null and b/infra/bgp-distribution-test/src/test/resources/honeycomb-keystore differ diff --git a/infra/bgp-distribution-test/src/test/resources/honeycomb.json b/infra/bgp-distribution-test/src/test/resources/honeycomb.json new file mode 100644 index 000000000..a0b2a633c --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/honeycomb.json @@ -0,0 +1,40 @@ + { + "persisted-context-path": "/tmp/honeycomb/persist/context/data.json", + "persisted-context-restoration-type": "Merge", + "persisted-config-path": "/tmp/honeycomb/persist/config/data.json", + "persisted-config-restoration-type": "Merge", + + "notification-service-queue-depth": 1, + + "restconf-http-enabled": "true", + "restconf-root-path": "/restconf", + "restconf-binding-address": "127.0.0.1", + "restconf-port": 8182, + "restconf-https-enabled": "true", + "restconf-https-binding-address": "127.0.0.1", + "restconf-https-port": 8444, + "restconf-keystore": "/honeycomb-keystore", + "restconf-keystore-password": "testing", + "restconf-keystore-manager-password": "testing", + "restconf-truststore": "/honeycomb-keystore", + "restconf-truststore-password": "testing", + "restconf-websocket-port": 7780, + "restconf-pool-max-size": 10, + "restconf-pool-min-size": 1, + "restconf-acceptors-size": 1, + "restconf-selectors-size": 1, + "restconf-https-acceptors-size": 1, + "restconf-https-selectors-size": 1, + + "netconf-netty-threads": 2, + "netconf-tcp-enabled" : "true", + "netconf-tcp-binding-address": "127.0.0.1", + "netconf-tcp-binding-port": 7778, + "netconf-ssh-enabled" : "true", + "netconf-ssh-binding-address": "127.0.0.1", + "netconf-ssh-binding-port": 2832, + "netconf-notification-stream-name": "honeycomb", + + "username": "admin", + "password": "admin" +} \ No newline at end of file diff --git a/infra/bgp-distribution-test/src/test/resources/logback.xml b/infra/bgp-distribution-test/src/test/resources/logback.xml new file mode 100644 index 000000000..2ee89db4e --- /dev/null +++ b/infra/bgp-distribution-test/src/test/resources/logback.xml @@ -0,0 +1,31 @@ + + + + + + + %date{"yyyy-MM-dd HH:mm:ss.SSS z"} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + -- cgit 1.2.3-korg