From f527ac93d843bd545bd6637cb012378c75a62e65 Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Tue, 29 Aug 2017 04:12:52 -0700 Subject: Add dynamic ports for HTTP/HTTPS The ports can now be configured in the application.properties and the both protocols can run at the same time (HTTP+HTTPS) Change-Id: I57d1b5643df33da45af2f6798923d94bff1d560d Issue-Id: CLAMP-43 Signed-off-by: Determe, Sebastien (sd378r) --- src/test/java/org/onap/clamp/clds/it/HttpsIT.java | 143 ++++++++++++++++++++ src/test/resources/https/https-test.properties | 152 ++++++++++++++++++++++ src/test/resources/https/keystore-test.jks | Bin 0 -> 2244 bytes 3 files changed, 295 insertions(+) create mode 100644 src/test/java/org/onap/clamp/clds/it/HttpsIT.java create mode 100644 src/test/resources/https/https-test.properties create mode 100644 src/test/resources/https/keystore-test.jks (limited to 'src/test') diff --git a/src/test/java/org/onap/clamp/clds/it/HttpsIT.java b/src/test/java/org/onap/clamp/clds/it/HttpsIT.java new file mode 100644 index 000000000..ff6303306 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/it/HttpsIT.java @@ -0,0 +1,143 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * 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. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.it; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.net.HttpURLConnection; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.AbstractIT; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.client.RestTemplate; + +/** + * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE + * Delegates in test. + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) +@TestPropertySource(locations = "classpath:https/https-test.properties") +public class HttpsIT extends AbstractIT { + + @Value("${server.port}") + private String httpsPort; + + @Value("${server.http-to-https-redirection.port}") + private String httpPort; + + @BeforeClass + public static void setUp() { + + try { + // setup ssl context to ignore certificate errors + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) + throws java.security.cert.CertificateException { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) + throws java.security.cert.CertificateException { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + SSLContext.setDefault(ctx); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + + @Test + public void testDesignerIndex() throws Exception { + RestTemplate template = new RestTemplate(); + final MySimpleClientHttpRequestFactory factory = new MySimpleClientHttpRequestFactory(new HostnameVerifier() { + + @Override + public boolean verify(final String hostname, final SSLSession session) { + return true; + } + }); + template.setRequestFactory(factory); + + ResponseEntity entity = template + .getForEntity("http://localhost:" + this.httpPort + "/designer/index.html", String.class); + assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); + + ResponseEntity httpsEntity = template + .getForEntity("https://localhost:" + this.httpsPort + "/designer/index.html", String.class); + assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(httpsEntity.getBody()).contains("CLDS"); + + } + + /** + * Http Request Factory for ignoring SSL hostname errors. Not for production + * use! + */ + class MySimpleClientHttpRequestFactory extends SimpleClientHttpRequestFactory { + + private final HostnameVerifier verifier; + + public MySimpleClientHttpRequestFactory(final HostnameVerifier verifier) { + this.verifier = verifier; + } + + @Override + protected void prepareConnection(final HttpURLConnection connection, final String httpMethod) + throws IOException { + if (connection instanceof HttpsURLConnection) { + ((HttpsURLConnection) connection).setHostnameVerifier(this.verifier); + } + super.prepareConnection(connection, httpMethod); + } + } + +} diff --git a/src/test/resources/https/https-test.properties b/src/test/resources/https/https-test.properties new file mode 100644 index 000000000..f38a46428 --- /dev/null +++ b/src/test/resources/https/https-test.properties @@ -0,0 +1,152 @@ +### +# ============LICENSE_START======================================================= +# ONAP CLAMP +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# 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. +# ============LICENSE_END============================================ +# =================================================================== +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +### + +info.build.artifact=@project.artifactId@ +info.build.name=@project.name@ +info.build.description=@project.description@ +info.build.version=@project.version@ + +### Set the port for HTTP or HTTPS protocol (Controlled by Spring framework, only one at a time). +### (See below for the parameter 'server.http.port' if you want to have both enabled) +### To have only HTTP, keep the lines server.ssl.* commented +### To have only HTTPS enabled, uncomment the server.ssl.* lines and specify a right keystore location +server.port=10443 +### Settings for HTTPS (this automatically enables the HTTPS on the port 'server.port') +server.ssl.key-store=classpath:https/keystore-test.jks +server.ssl.key-store-password=testpass +server.ssl.key-password=testpass + +### In order to be user friendly when HTTPS is enabled, +### you can add another HTTP port that will be automatically redirected to HTTPS +### by enabling this parameter (server.http.port) and set it to another port (80 or 8080, 8090, etc ...) +server.http-to-https-redirection.port=10080 + +### HTTP Example: +###-------------- +### server.port=8080 + +### HTTPS Example: +### -------------- +### server.port=8443 +### server.ssl.key-store=file:/tmp/mykey.jks +### server.ssl.key-store-password=mypass +### server.ssl.key-password=mypass + +### HTTP (Redirected to HTTPS) and HTTPS Example: +### -------------------------------------------- +### server.port=8443 <-- The HTTPS port +### server.ssl.key-store=file:/tmp/mykey.jks +### server.ssl.key-store-password=mypass +### server.ssl.key-password=mypass +### server.http-to-https-redirection.port=8090 <-- The HTTP port + +server.contextPath=/ +#Modified engine-rest applicationpath +spring.jersey.application-path=/engine-rest +spring.profiles.active=clamp-default,clamp-spring-authentication +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration + +#The max number of active threads in this pool +server.tomcat.max-threads=200 +#The minimum number of threads always kept alive +server.tomcat.min-Spare-Threads=25 +#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads +server.tomcat.max-idle-time=60000 + + +#Add this properties only if you want to change the URL, AJSC Framework interceptors will intercept +#com.att.ajsc.common.interceptors.PreInterceptor.url=/** +#com.att.ajsc.common.interceptors.PostInterceptor.url=/** + +#Servlet context parameters +server.context_parameters.p-name=value #context parameter with p-name as key and value as value. + +camel.springboot.consumer-template-cache-size=1000 +camel.springboot.producer-template-cache-size=1000 +camel.springboot.jmx-enabled=true +camel.defaultthreadpool.poolsize=10 +camel.defaultthreadpool.maxpoolsize=20 +camel.defaultthreadpool.maxqueuesize=1000 +camel.defaultthreadpool.keepaliveTime=60 +camel.defaultthreadpool.rejectpolicy=CallerRuns + +kubernetes.namespace=com-att-ajsc + +#server.port=0 + +#Camunda Process Engine DataSource connection Details +spring.datasource.camunda.url=jdbc:mysql://localhost:${docker.mariadb.port.host}/camundabpm?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true&maxReconnects=100 +spring.datasource.camunda.username=camunda +spring.datasource.camunda.password=ndMSpw4CAM +spring.datasource.camunda.driverClassName=com.mysql.jdbc.Driver +spring.datasource.camunda.validationQuery=SELECT 1 +spring.datasource.camunda.validationQueryTimeout=20000 +spring.datasource.camunda.validationInterval=60000 +spring.datasource.camunda.testWhileIdle = true +# Automatically test whether a connection provided is good or not +spring.datasource.camunda.testOnBorrow=true + +#Camunda application properties +#Camunda history level +camunda.bpm.history-level=auto + +#clds datasource connection details +spring.datasource.cldsdb.driver-class-name=com.mysql.jdbc.Driver +spring.datasource.cldsdb.url=jdbc:mysql://localhost:${docker.mariadb.port.host}/cldsdb4?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true&maxReconnects=100 +spring.datasource.cldsdb.username=clds +spring.datasource.cldsdb.password=sidnnd83K +spring.datasource.cldsdb.driverClassName=com.mysql.jdbc.Driver +spring.datasource.cldsdb.validationQuery=SELECT 1 +spring.datasource.cldsdb.validationQueryTimeout=20000 +spring.datasource.cldsdb.validationInterval=60000 +spring.datasource.cldsdb.testWhileIdle = true +# Automatically test whether a connection provided is good or not +spring.datasource.cldsdb.testOnBorrow=true + +#Async Executor default Parameters +async.core.pool.size=10 +async.max.pool.size=20 +async.queue.capacity=500 + +org.onap.clamp.config.dcae.url=http://localhost:9000/closedloop-dcae-services + +#GRM Edge endpoint details +service.name=ajsc6camundademo +service.version=1.0.0.0 +routeoffer=TEST +#Update with your application name +application.name=AJSC6CAMUNDA + +org.onap.clamp.config.files.cldsReference=classpath:/clds/clds-reference.properties +org.onap.clamp.config.files.cldsPolicyConfig=classpath:/clds/clds-policy-config.properties +org.onap.clamp.config.files.cldsUsers=classpath:/clds/clds-users.json +org.onap.clamp.config.files.globalClds=classpath:/clds/globalClds.properties + +#Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case ! +CLDS_PERMISSION_TYPE_CL=permission-type-cl +CLDS_PERMISSION_TYPE_CL_MANAGE=permission-type-cl-manage +CLDS_PERMISSION_TYPE_CL_EVENT=permission-type-cl-event +CLDS_PERMISSION_TYPE_FILTER_VF=permission-type-filter-vf +CLDS_PERMISSION_TYPE_TEMPLATE=permission-type-template +#This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties +CLDS_PERMISSION_INSTANCE=dev \ No newline at end of file diff --git a/src/test/resources/https/keystore-test.jks b/src/test/resources/https/keystore-test.jks new file mode 100644 index 000000000..04ad3b114 Binary files /dev/null and b/src/test/resources/https/keystore-test.jks differ -- cgit 1.2.3-korg