1248744d4977207ab13dd3cbbba215a21cb1ad6a
[policy/common.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2018 Samsung Electronics Co., Ltd.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.common.endpoints.http.server.test;
23
24 import static org.junit.Assert.assertTrue;
25
26 import java.io.IOException;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Properties;
30
31 import javax.ws.rs.core.Response;
32
33 import org.junit.AfterClass;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
37 import org.onap.policy.common.endpoints.http.client.HttpClient;
38 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
39 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
40 import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
41 import org.onap.policy.common.utils.network.NetworkUtil;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 public class HttpClientTest {
46     private static final Logger logger = LoggerFactory.getLogger(HttpClientTest.class);
47
48     private static final HashMap<String, String> savedValuesMap = new HashMap<>();
49
50     /**
51      * Setup before class method.
52      *
53      * @throws InterruptedException can be interrupted
54      * @throws IOException          can have an IO exception
55      */
56     @BeforeClass
57     public static void setUp() throws InterruptedException, IOException {
58         logger.info("-- setup() --");
59
60         /* echo server - http + no auth */
61
62         final HttpServletServer echoServerNoAuth =
63                 HttpServletServer.factory.build("echo", "localhost", 6666, "/", false, true);
64         echoServerNoAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
65         echoServerNoAuth.waitedStart(5000);
66
67         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerNoAuth.getPort(), 5, 10000L)) {
68             throw new IllegalStateException("cannot connect to port " + echoServerNoAuth.getPort());
69         }
70
71         String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
72         if (keyStoreSystemProperty != null) {
73             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
74         }
75
76         String keyStorePasswordSystemProperty =
77                 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
78         if (keyStorePasswordSystemProperty != null) {
79             savedValuesMap.put(
80                     JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, keyStorePasswordSystemProperty);
81         }
82
83         String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
84         if (trustStoreSystemProperty != null) {
85             savedValuesMap
86                     .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
87         }
88
89         String trustStorePasswordSystemProperty =
90                 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
91         if (trustStorePasswordSystemProperty != null) {
92             savedValuesMap
93                     .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, trustStorePasswordSystemProperty);
94         }
95
96         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
97         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
98
99         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
100         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
101
102         /* echo server - https + basic auth */
103
104         final HttpServletServer echoServerAuth =
105                 HttpServletServer.factory.build("echo", true, "localhost", 6667, "/", false, true);
106         echoServerAuth.setBasicAuthentication("x", "y", null);
107         echoServerAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
108         echoServerAuth.waitedStart(5000);
109
110         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerAuth.getPort(), 5, 10000L)) {
111             throw new IllegalStateException("cannot connect to port " + echoServerAuth.getPort());
112         }
113     }
114
115     /**
116      * After the class is created method.
117      */
118     @AfterClass
119     public static void tearDown() {
120         logger.info("-- tearDown() --");
121
122         HttpServletServer.factory.destroy();
123         HttpClient.factory.destroy();
124
125         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
126             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
127                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
128             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
129         } else {
130             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
131         }
132
133         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
134             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
135                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
136             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
137         } else {
138             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
139         }
140
141         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
142             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
143                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
144             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
145         } else {
146             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
147         }
148
149         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
150             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
151                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
152             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
153         } else {
154             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
155         }
156
157
158     }
159
160     @Test
161     public void testHttpNoAuthClient() throws Exception {
162         logger.info("-- testHttpNoAuthClient() --");
163
164         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
165                 .useHttps(false)
166                 .allowSelfSignedCerts(false)
167                 .hostname("localhost")
168                 .port(6666).basePath("junit/echo").userName(null).password(null).managed(true).build());
169         final Response response = client.get("hello");
170         final String body = HttpClient.getBody(response, String.class);
171
172         assertTrue(response.getStatus() == 200);
173         assertTrue(body.equals("hello"));
174     }
175
176     @Test
177     public void testHttpAuthClient() throws Exception {
178         logger.info("-- testHttpAuthClient() --");
179
180         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
181                 .useHttps(true)
182                 .allowSelfSignedCerts(true)
183                 .hostname("localhost")
184                 .port(6667)
185                 .basePath("junit/echo")
186                 .userName("x")
187                 .password("y")
188                 .managed(true).build());
189
190         final Response response = client.get("hello");
191         final String body = HttpClient.getBody(response, String.class);
192
193         assertTrue(response.getStatus() == 200);
194         assertTrue(body.equals("hello"));
195     }
196
197     @Test
198     public void testHttpAuthClient401() throws Exception {
199         logger.info("-- testHttpAuthClient401() --");
200
201         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient401")
202                 .useHttps(true)
203                 .allowSelfSignedCerts(true)
204                 .hostname("localhost")
205                 .port(6667)
206                 .basePath("junit/echo")
207                 .userName(null)
208                 .password(null)
209                 .managed(true).build());
210         final Response response = client.get("hello");
211         assertTrue(response.getStatus() == 401);
212     }
213
214     @Test
215     public void testHttpAuthClientProps() throws Exception {
216         logger.info("-- testHttpAuthClientProps() --");
217
218         final Properties httpProperties = new Properties();
219
220         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
221         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
222                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
223         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
224                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
225         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
226                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
227         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
228                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
229         httpProperties.setProperty(
230                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
231                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
232                 RestMockHealthCheck.class.getName());
233         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
234                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
235
236         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
237                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
238         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
239                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
240         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
241                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
242         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
243                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
244         httpProperties.setProperty(
245                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
246                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
247                 RestMockHealthCheck.class.getName());
248         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
249                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
250
251         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES, "PAP,PDP");
252         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
253                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
254         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
255                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
256         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
257                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pap/test");
258         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
259                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
260         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
261                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
262         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
263                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
264         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
265                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
266
267         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
268                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
269         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
270                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
271         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
272                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pdp");
273         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
274                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
275         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
276                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
277         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
278                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
279         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
280                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
281
282         final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
283         assertTrue(servers.size() == 2);
284
285         final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
286         assertTrue(clients.size() == 2);
287
288         for (final HttpServletServer server : servers) {
289             server.waitedStart(10000);
290         }
291
292         final HttpClient clientPAP = HttpClient.factory.get("PAP");
293         final Response response = clientPAP.get();
294         assertTrue(response.getStatus() == 200);
295
296         final HttpClient clientPDP = HttpClient.factory.get("PDP");
297         final Response response2 = clientPDP.get("test");
298         assertTrue(response2.getStatus() == 500);
299     }
300
301
302 }