[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-BE-common / src / test / java / org / openecomp / portalapp / portal / controller / SharedContextRestClient.java
index fdafe5c..8e5d3e1 100644 (file)
-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.controller;\r
-\r
-import java.net.URI;\r
-import java.security.cert.CertificateException;\r
-import java.security.cert.X509Certificate;\r
-\r
-import javax.net.ssl.SSLContext;\r
-import javax.servlet.http.HttpServletResponse;\r
-\r
-import org.apache.commons.logging.Log;\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.http.Consts;\r
-import org.apache.http.HttpEntity;\r
-import org.apache.http.client.methods.CloseableHttpResponse;\r
-import org.apache.http.client.methods.HttpGet;\r
-import org.apache.http.client.methods.HttpPost;\r
-import org.apache.http.client.utils.URIBuilder;\r
-import org.apache.http.conn.ssl.NoopHostnameVerifier;\r
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;\r
-import org.apache.http.entity.ContentType;\r
-import org.apache.http.entity.StringEntity;\r
-import org.apache.http.impl.client.CloseableHttpClient;\r
-import org.apache.http.impl.client.HttpClientBuilder;\r
-import org.apache.http.impl.client.HttpClients;\r
-import org.apache.http.ssl.SSLContexts;\r
-import org.apache.http.ssl.TrustStrategy;\r
-import org.apache.http.util.EntityUtils;\r
-\r
-/**\r
- * Provides reusable features for test cases to get or post from an REST\r
- * endpoint, allowing use of HTTPS connections to servers that use self-signed\r
- * certificates.\r
- */\r
-public class SharedContextRestClient {\r
-\r
-       private static final Log logger = LogFactory.getLog(SharedContextRestClient.class);\r
-\r
-       /**\r
-        * Convenience method that builds and sends a GET request using properties\r
-        * to build the URI and populate header with credentials.\r
-        * \r
-        * @param task\r
-        *            last component(s) of REST endpoint name; e.g., "get".\r
-        * @param contextId\r
-        * @param contextKey\r
-        * @return JSON string fetched\r
-        * @throws Exception\r
-        *             if the HTTP response code is anything other than OK.\r
-        */\r
-       public static String getJson(final SharedContextTestProperties properties, final String task,\r
-                       final String contextId, final String contextKey) throws Exception {\r
-               String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) //\r
-                               + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) //\r
-                               + '/' + task;\r
-               return getJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), //\r
-                               properties.getProperty(SharedContextTestProperties.PORT, -1), //\r
-                               properties.getProperty(SharedContextTestProperties.SECURE, true), //\r
-                               properties.getProperty(SharedContextTestProperties.UEBKEY), //\r
-                               properties.getProperty(SharedContextTestProperties.USERNAME), //\r
-                               properties.getProperty(SharedContextTestProperties.PASSWORD), requestPath, //\r
-                               contextId, //\r
-                               contextKey);\r
-       }\r
-\r
-       /**\r
-        * Constructs and sends a GET request using the specified values.\r
-        * \r
-        * @param hostname\r
-        * @param port\r
-        *            ignored if negative\r
-        * @param secure\r
-        *            If true, uses https; else http.\r
-        * @param headerUebkey\r
-        * @param headerUsername\r
-        * @param headerPassword\r
-        * @param requestPath\r
-        *            full path of the REST endpoint\r
-        * @param contextId\r
-        * @param contextKey\r
-        * Ignored if null\r
-        * @return JSON result\r
-        */\r
-       public static String getJson(final String hostname, final int port, boolean secure, final String headerUebkey,\r
-                       final String headerUsername, final String headerPassword, final String requestPath, final String contextId,\r
-                       final String contextKey) throws Exception {\r
-\r
-               URIBuilder uriBuilder = new URIBuilder();\r
-               if (secure)\r
-                       uriBuilder.setScheme("https");\r
-               else\r
-                       uriBuilder.setScheme("http");\r
-               uriBuilder.setHost(hostname);\r
-               if (port > 0)\r
-                       uriBuilder.setPort(port);\r
-               uriBuilder.setPath(requestPath);\r
-               uriBuilder.addParameter("context_id", contextId);\r
-               if (contextKey != null)\r
-                       uriBuilder.addParameter("ckey", contextKey);\r
-               final URI uri = uriBuilder.build();\r
-\r
-               CloseableHttpClient httpClient;\r
-               if (secure) {\r
-                       // Tell HttpClient to accept any server certificate for HTTPS.\r
-                       // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error\r
-                       SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {\r
-                               @Override\r
-                               public boolean isTrusted(final X509Certificate[] chain, final String authType)\r
-                                               throws CertificateException {\r
-                                       return true;\r
-                               }\r
-                       }).build();\r
-                       SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,\r
-                                       NoopHostnameVerifier.INSTANCE);\r
-                       httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();\r
-               } else {\r
-                       httpClient = HttpClients.createDefault();\r
-               }\r
-\r
-               HttpGet httpGet = new HttpGet(uri);\r
-               httpGet.setHeader("uebkey", headerUebkey);\r
-               httpGet.setHeader("username", headerUsername);\r
-               httpGet.setHeader("password", headerPassword);\r
-\r
-               String json = null;\r
-               CloseableHttpResponse response = null;\r
-               try {\r
-                       logger.debug("GET from " + uri);\r
-                       response = httpClient.execute(httpGet);\r
-                       logger.info("Status is " + response.getStatusLine());\r
-                       if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK)\r
-                               throw new Exception("Status is " + response.getStatusLine().toString());\r
-                       HttpEntity entity = response.getEntity();\r
-                       if (entity == null) {\r
-                               logger.warn("Entity is null!");\r
-                       } else {\r
-                               // entity content length is never set.\r
-                               // this naively tries to read everything.\r
-                               json = EntityUtils.toString(entity);\r
-                               EntityUtils.consume(entity);\r
-                       }\r
-               } finally {\r
-                       if (response != null)\r
-                               response.close();\r
-               }\r
-               return json;\r
-       }\r
-\r
-       /**\r
-        * Convenience method that builds and sends a POST request using properties\r
-        * to build the URI and populate header with credentials.\r
-        * \r
-        * @param path\r
-        *            last component(s) of REST endpoint name; e.g., "users" or\r
-        *            "user/ab1234/roles".\r
-        * @return JSON string fetched\r
-        * @throws Exception\r
-        *             if the HTTP response code is anything other than OK.\r
-        */\r
-       public static String postJson(final SharedContextTestProperties properties, final String path, final String json)\r
-                       throws Exception {\r
-               String requestPath = '/' + properties.getProperty(SharedContextTestProperties.APPNAME) //\r
-                               + '/' + properties.getProperty(SharedContextTestProperties.RESTPATH) //\r
-                               + '/' + path;\r
-               return postJson(properties.getProperty(SharedContextTestProperties.HOSTNAME), //\r
-                               properties.getProperty(SharedContextTestProperties.PORT, -1), //\r
-                               properties.getProperty(SharedContextTestProperties.SECURE, true), //\r
-                               properties.getProperty(SharedContextTestProperties.UEBKEY), //\r
-                               properties.getProperty(SharedContextTestProperties.USERNAME), //\r
-                               properties.getProperty(SharedContextTestProperties.PASSWORD), //\r
-                               requestPath, //\r
-                               json);\r
-       }\r
-\r
-       /**\r
-        * Constructs and sends a POST request using the specified values.\r
-        * \r
-        * @param hostname\r
-        * @param port\r
-        * @param secure\r
-        *            If true, uses https; else http.\r
-        * @param requestPath\r
-        *            full path of the REST endpoint\r
-        * @param headerUebkey\r
-        * @param headerUsername\r
-        * @param headerPassword\r
-        * @param json\r
-        *            Content to post\r
-        * @return JSON result\r
-        * @throws Exception\r
-        */\r
-       public static String postJson(final String hostname, final int port, boolean secure, final String headerUebkey,\r
-                       final String headerUsername, final String headerPassword, final String requestPath, final String json)\r
-                       throws Exception {\r
-\r
-               URIBuilder builder = new URIBuilder();\r
-               if (secure)\r
-                       builder.setScheme("https");\r
-               else\r
-                       builder.setScheme("http");\r
-               builder.setHost(hostname);\r
-               if (port > 0)\r
-                       builder.setPort(port);\r
-               builder.setPath(requestPath);\r
-               final URI uri = builder.build();\r
-\r
-               CloseableHttpClient httpClient;\r
-               if (secure) {\r
-                       // Tell HttpClient to accept any server certificate for HTTPS.\r
-                       // http://stackoverflow.com/questions/24720013/apache-http-client-ssl-certificate-error\r
-                       SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {\r
-                               @Override\r
-                               public boolean isTrusted(final X509Certificate[] chain, final String authType)\r
-                                               throws CertificateException {\r
-                                       return true;\r
-                               }\r
-                       }).build();\r
-                       SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,\r
-                                       NoopHostnameVerifier.INSTANCE);\r
-                       httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();\r
-               } else {\r
-                       httpClient = HttpClients.createDefault();\r
-               }\r
-               HttpPost httpPost = new HttpPost(uri);\r
-               httpPost.setHeader("uebkey", headerUebkey);\r
-               httpPost.setHeader("username", headerUsername);\r
-               httpPost.setHeader("password", headerPassword);\r
-\r
-               StringEntity postEntity = new StringEntity(json, ContentType.create("application/json", Consts.UTF_8));\r
-               httpPost.setEntity(postEntity);\r
-\r
-               String responseJson = null;\r
-               CloseableHttpResponse response = null;\r
-               try {\r
-                       logger.debug("POST to " + uri);\r
-                       response = httpClient.execute(httpPost);\r
-                       logger.info("Status is " + response.getStatusLine());\r
-                       if (response.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK)\r
-                               throw new Exception("Status is " + response.getStatusLine().toString());\r
-\r
-                       HttpEntity entity = response.getEntity();\r
-                       if (entity == null) {\r
-                               logger.warn("Entity is null!");\r
-                       } else {\r
-                               long len = entity.getContentLength();\r
-                               if (len < 0)\r
-                                       logger.warn("Content length is -1");\r
-                               if (len < 2048) {\r
-                                       responseJson = EntityUtils.toString(entity);\r
-                                       logger.debug(responseJson);\r
-                               } else {\r
-                                       logger.warn("Not implemented - stream content");\r
-                               }\r
-                               EntityUtils.consume(entity);\r
-                       }\r
-               } finally {\r
-                       if (response != null)\r
-                               response.close();\r
-               }\r
-               return responseJson;\r
-       }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * 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;
+       }
+
+}