diff options
Diffstat (limited to 'ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java')
-rw-r--r-- | ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java | 562 |
1 files changed, 281 insertions, 281 deletions
diff --git a/ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java b/ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java index fdafe5cc..8e5d3e15 100644 --- a/ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java +++ b/ecomp-portal-BE-common/src/test/java/org/openecomp/portalapp/portal/controller/SharedContextRestClient.java @@ -1,281 +1,281 @@ -/*-
- * ================================================================================
- * ECOMP Portal
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property
- * ================================================================================
- * 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 org.openecomp.portalapp.portal.controller;
-
-import java.net.URI;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.Consts;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContexts;
-import org.apache.http.ssl.TrustStrategy;
-import org.apache.http.util.EntityUtils;
-
-/**
- * Provides reusable features for test cases to get or post from an REST
- * endpoint, allowing use of HTTPS connections to servers that use self-signed
- * certificates.
- */
-public class SharedContextRestClient {
-
- private static final Log logger = LogFactory.getLog(SharedContextRestClient.class);
-
- /**
- * Convenience method that builds and sends a GET request using properties
- * to build the URI and populate header with credentials.
- *
- * @param task
- * last component(s) of REST endpoint name; e.g., "get".
- * @param contextId
- * @param contextKey
- * @return JSON string fetched
- * @throws Exception
- * if the HTTP response code is anything other than OK.
- */
- public static String getJson(final SharedContextTestProperties properties, final String task,
- final String contextId, final String contextKey) throws Exception {
- String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) //
- + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) //
- + '/' + task;
- return getJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), //
- properties.getProperty(SharedContextTestProperties.PORT, -1), //
- properties.getProperty(SharedContextTestProperties.SECURE, true), //
- properties.getProperty(SharedContextTestProperties.UEBKEY), //
- properties.getProperty(SharedContextTestProperties.USERNAME), //
- properties.getProperty(SharedContextTestProperties.PASSWORD), requestPath, //
- contextId, //
- contextKey);
- }
-
- /**
- * Constructs and sends a GET request using the specified values.
- *
- * @param hostname
- * @param port
- * ignored if negative
- * @param secure
- * If true, uses https; else http.
- * @param headerUebkey
- * @param headerUsername
- * @param headerPassword
- * @param requestPath
- * full path of the REST endpoint
- * @param contextId
- * @param contextKey
- * Ignored if null
- * @return JSON result
- */
- public static String getJson(final String hostname, final int port, boolean secure, final String headerUebkey,
- final String headerUsername, final String headerPassword, final String requestPath, final String contextId,
- final String contextKey) throws Exception {
-
- URIBuilder uriBuilder = new URIBuilder();
- if (secure)
- uriBuilder.setScheme("https");
- else
- uriBuilder.setScheme("http");
- uriBuilder.setHost(hostname);
- if (port > 0)
- uriBuilder.setPort(port);
- uriBuilder.setPath(requestPath);
- uriBuilder.addParameter("context_id", contextId);
- if (contextKey != null)
- uriBuilder.addParameter("ckey", contextKey);
- final URI uri = uriBuilder.build();
-
- CloseableHttpClient httpClient;
- if (secure) {
- // Tell HttpClient to accept any server certificate for HTTPS.
- // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error
- SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
- @Override
- public boolean isTrusted(final X509Certificate[] chain, final String authType)
- throws CertificateException {
- return true;
- }
- }).build();
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
- NoopHostnameVerifier.INSTANCE);
- httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();
- } else {
- httpClient = HttpClients.createDefault();
- }
-
- HttpGet httpGet = new HttpGet(uri);
- httpGet.setHeader("uebkey", headerUebkey);
- httpGet.setHeader("username", headerUsername);
- httpGet.setHeader("password", headerPassword);
-
- String json = null;
- CloseableHttpResponse response = null;
- try {
- logger.debug("GET from " + uri);
- response = httpClient.execute(httpGet);
- logger.info("Status is " + response.getStatusLine());
- if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK)
- throw new Exception("Status is " + response.getStatusLine().toString());
- HttpEntity entity = response.getEntity();
- if (entity == null) {
- logger.warn("Entity is null!");
- } else {
- // entity content length is never set.
- // this naively tries to read everything.
- json = EntityUtils.toString(entity);
- EntityUtils.consume(entity);
- }
- } finally {
- if (response != null)
- response.close();
- }
- return json;
- }
-
- /**
- * Convenience method that builds and sends a POST request using properties
- * to build the URI and populate header with credentials.
- *
- * @param path
- * last component(s) of REST endpoint name; e.g., "users" or
- * "user/ab1234/roles".
- * @return JSON string fetched
- * @throws Exception
- * if the HTTP response code is anything other than OK.
- */
- public static String postJson(final SharedContextTestProperties properties, final String path, final String json)
- throws Exception {
- String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) //
- + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) //
- + '/' + path;
- return postJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), //
- properties.getProperty(SharedContextTestProperties.PORT, -1), //
- properties.getProperty(SharedContextTestProperties.SECURE, true), //
- properties.getProperty(SharedContextTestProperties.UEBKEY), //
- properties.getProperty(SharedContextTestProperties.USERNAME), //
- properties.getProperty(SharedContextTestProperties.PASSWORD), //
- requestPath, //
- json);
- }
-
- /**
- * Constructs and sends a POST request using the specified values.
- *
- * @param hostname
- * @param port
- * @param secure
- * If true, uses https; else http.
- * @param requestPath
- * full path of the REST endpoint
- * @param headerUebkey
- * @param headerUsername
- * @param headerPassword
- * @param json
- * Content to post
- * @return JSON result
- * @throws Exception
- */
- public static String postJson(final String hostname, final int port, boolean secure, final String headerUebkey,
- final String headerUsername, final String headerPassword, final String requestPath, final String json)
- throws Exception {
-
- URIBuilder builder = new URIBuilder();
- if (secure)
- builder.setScheme("https");
- else
- builder.setScheme("http");
- builder.setHost(hostname);
- if (port > 0)
- builder.setPort(port);
- builder.setPath(requestPath);
- final URI uri = builder.build();
-
- CloseableHttpClient httpClient;
- if (secure) {
- // Tell HttpClient to accept any server certificate for HTTPS.
- // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error
- SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
- @Override
- public boolean isTrusted(final X509Certificate[] chain, final String authType)
- throws CertificateException {
- return true;
- }
- }).build();
- SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
- NoopHostnameVerifier.INSTANCE);
- httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();
- } else {
- httpClient = HttpClients.createDefault();
- }
- HttpPost httpPost = new HttpPost(uri);
- httpPost.setHeader("uebkey", headerUebkey);
- httpPost.setHeader("username", headerUsername);
- httpPost.setHeader("password", headerPassword);
-
- StringEntity postEntity = new StringEntity(json, ContentType.create("application/json", Consts.UTF_8));
- httpPost.setEntity(postEntity);
-
- String responseJson = null;
- CloseableHttpResponse response = null;
- try {
- logger.debug("POST to " + uri);
- response = httpClient.execute(httpPost);
- logger.info("Status is " + response.getStatusLine());
- if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK)
- throw new Exception("Status is " + response.getStatusLine().toString());
-
- HttpEntity entity = response.getEntity();
- if (entity == null) {
- logger.warn("Entity is null!");
- } else {
- long len = entity.getContentLength();
- if (len < 0)
- logger.warn("Content length is -1");
- if (len < 2048) {
- responseJson = EntityUtils.toString(entity);
- logger.debug(responseJson);
- } else {
- logger.warn("Not implemented - stream content");
- }
- EntityUtils.consume(entity);
- }
- } finally {
- if (response != null)
- response.close();
- }
- return responseJson;
- }
-
-}
+/*- + * ================================================================================ + * ECOMP Portal + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * 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 org.openecomp.portalapp.portal.controller; + +import java.net.URI; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContexts; +import org.apache.http.ssl.TrustStrategy; +import org.apache.http.util.EntityUtils; + +/** + * Provides reusable features for test cases to get or post from an REST + * endpoint, allowing use of HTTPS connections to servers that use self-signed + * certificates. + */ +public class SharedContextRestClient { + + private static final Log logger = LogFactory.getLog(SharedContextRestClient.class); + + /** + * Convenience method that builds and sends a GET request using properties + * to build the URI and populate header with credentials. + * + * @param task + * last component(s) of REST endpoint name; e.g., "get". + * @param contextId + * @param contextKey + * @return JSON string fetched + * @throws Exception + * if the HTTP response code is anything other than OK. + */ + public static String getJson(final SharedContextTestProperties properties, final String task, + final String contextId, final String contextKey) throws Exception { + String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) // + + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) // + + '/' + task; + return getJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), // + properties.getProperty(SharedContextTestProperties.PORT, -1), // + properties.getProperty(SharedContextTestProperties.SECURE, true), // + properties.getProperty(SharedContextTestProperties.UEBKEY), // + properties.getProperty(SharedContextTestProperties.USERNAME), // + properties.getProperty(SharedContextTestProperties.PASSWORD), requestPath, // + contextId, // + contextKey); + } + + /** + * Constructs and sends a GET request using the specified values. + * + * @param hostname + * @param port + * ignored if negative + * @param secure + * If true, uses https; else http. + * @param headerUebkey + * @param headerUsername + * @param headerPassword + * @param requestPath + * full path of the REST endpoint + * @param contextId + * @param contextKey + * Ignored if null + * @return JSON result + */ + public static String getJson(final String hostname, final int port, boolean secure, final String headerUebkey, + final String headerUsername, final String headerPassword, final String requestPath, final String contextId, + final String contextKey) throws Exception { + + URIBuilder uriBuilder = new URIBuilder(); + if (secure) + uriBuilder.setScheme("https"); + else + uriBuilder.setScheme("http"); + uriBuilder.setHost(hostname); + if (port > 0) + uriBuilder.setPort(port); + uriBuilder.setPath(requestPath); + uriBuilder.addParameter("context_id", contextId); + if (contextKey != null) + uriBuilder.addParameter("ckey", contextKey); + final URI uri = uriBuilder.build(); + + CloseableHttpClient httpClient; + if (secure) { + // Tell HttpClient to accept any server certificate for HTTPS. + // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error + SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() { + @Override + public boolean isTrusted(final X509Certificate[] chain, final String authType) + throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, + NoopHostnameVerifier.INSTANCE); + httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build(); + } else { + httpClient = HttpClients.createDefault(); + } + + HttpGet httpGet = new HttpGet(uri); + httpGet.setHeader("uebkey", headerUebkey); + httpGet.setHeader("username", headerUsername); + httpGet.setHeader("password", headerPassword); + + String json = null; + CloseableHttpResponse response = null; + try { + logger.debug("GET from " + uri); + response = httpClient.execute(httpGet); + logger.info("Status is " + response.getStatusLine()); + if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK) + throw new Exception("Status is " + response.getStatusLine().toString()); + HttpEntity entity = response.getEntity(); + if (entity == null) { + logger.warn("Entity is null!"); + } else { + // entity content length is never set. + // this naively tries to read everything. + json = EntityUtils.toString(entity); + EntityUtils.consume(entity); + } + } finally { + if (response != null) + response.close(); + } + return json; + } + + /** + * Convenience method that builds and sends a POST request using properties + * to build the URI and populate header with credentials. + * + * @param path + * last component(s) of REST endpoint name; e.g., "users" or + * "user/ab1234/roles". + * @return JSON string fetched + * @throws Exception + * if the HTTP response code is anything other than OK. + */ + public static String postJson(final SharedContextTestProperties properties, final String path, final String json) + throws Exception { + String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) // + + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) // + + '/' + path; + return postJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), // + properties.getProperty(SharedContextTestProperties.PORT, -1), // + properties.getProperty(SharedContextTestProperties.SECURE, true), // + properties.getProperty(SharedContextTestProperties.UEBKEY), // + properties.getProperty(SharedContextTestProperties.USERNAME), // + properties.getProperty(SharedContextTestProperties.PASSWORD), // + requestPath, // + json); + } + + /** + * Constructs and sends a POST request using the specified values. + * + * @param hostname + * @param port + * @param secure + * If true, uses https; else http. + * @param requestPath + * full path of the REST endpoint + * @param headerUebkey + * @param headerUsername + * @param headerPassword + * @param json + * Content to post + * @return JSON result + * @throws Exception + */ + public static String postJson(final String hostname, final int port, boolean secure, final String headerUebkey, + final String headerUsername, final String headerPassword, final String requestPath, final String json) + throws Exception { + + URIBuilder builder = new URIBuilder(); + if (secure) + builder.setScheme("https"); + else + builder.setScheme("http"); + builder.setHost(hostname); + if (port > 0) + builder.setPort(port); + builder.setPath(requestPath); + final URI uri = builder.build(); + + CloseableHttpClient httpClient; + if (secure) { + // Tell HttpClient to accept any server certificate for HTTPS. + // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error + SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() { + @Override + public boolean isTrusted(final X509Certificate[] chain, final String authType) + throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, + NoopHostnameVerifier.INSTANCE); + httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build(); + } else { + httpClient = HttpClients.createDefault(); + } + HttpPost httpPost = new HttpPost(uri); + httpPost.setHeader("uebkey", headerUebkey); + httpPost.setHeader("username", headerUsername); + httpPost.setHeader("password", headerPassword); + + StringEntity postEntity = new StringEntity(json, ContentType.create("application/json", Consts.UTF_8)); + httpPost.setEntity(postEntity); + + String responseJson = null; + CloseableHttpResponse response = null; + try { + logger.debug("POST to " + uri); + response = httpClient.execute(httpPost); + logger.info("Status is " + response.getStatusLine()); + if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK) + throw new Exception("Status is " + response.getStatusLine().toString()); + + HttpEntity entity = response.getEntity(); + if (entity == null) { + logger.warn("Entity is null!"); + } else { + long len = entity.getContentLength(); + if (len < 0) + logger.warn("Content length is -1"); + if (len < 2048) { + responseJson = EntityUtils.toString(entity); + logger.debug(responseJson); + } else { + logger.warn("Not implemented - stream content"); + } + EntityUtils.consume(entity); + } + } finally { + if (response != null) + response.close(); + } + return responseJson; + } + +} |