c5204ae3d41e67722a8d12015515849e5b1ac88e
[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.assertEquals;
25 import static org.junit.Assert.assertTrue;
26
27 import java.io.IOException;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Properties;
32
33 import javax.ws.rs.client.Entity;
34 import javax.ws.rs.core.MediaType;
35 import javax.ws.rs.core.Response;
36
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Test;
40 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
41 import org.onap.policy.common.endpoints.http.client.HttpClient;
42 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
43 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
44 import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
45 import org.onap.policy.common.utils.network.NetworkUtil;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49 public class HttpClientTest {
50     private static final Logger logger = LoggerFactory.getLogger(HttpClientTest.class);
51
52     private static final HashMap<String, String> savedValuesMap = new HashMap<>();
53
54     /**
55      * Setup before class method.
56      *
57      * @throws InterruptedException can be interrupted
58      * @throws IOException can have an IO exception
59      */
60     @BeforeClass
61     public static void setUp() throws InterruptedException, IOException {
62         logger.info("-- setup() --");
63
64         /* echo server - http + no auth */
65
66         final HttpServletServer echoServerNoAuth =
67                 HttpServletServer.factory.build("echo", "localhost", 6666, "/", false, true);
68         echoServerNoAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
69         echoServerNoAuth.waitedStart(5000);
70
71         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerNoAuth.getPort(), 5, 10000L)) {
72             throw new IllegalStateException("cannot connect to port " + echoServerNoAuth.getPort());
73         }
74
75         String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
76         if (keyStoreSystemProperty != null) {
77             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
78         }
79
80         String keyStorePasswordSystemProperty =
81                 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
82         if (keyStorePasswordSystemProperty != null) {
83             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
84                     keyStorePasswordSystemProperty);
85         }
86
87         String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
88         if (trustStoreSystemProperty != null) {
89             savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
90         }
91
92         String trustStorePasswordSystemProperty =
93                 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
94         if (trustStorePasswordSystemProperty != null) {
95             savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
96                     trustStorePasswordSystemProperty);
97         }
98
99         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
100         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
101
102         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
103         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
104
105         /* echo server - https + basic auth */
106
107         final HttpServletServer echoServerAuth =
108                 HttpServletServer.factory.build("echo", true, "localhost", 6667, "/", false, true);
109         echoServerAuth.setBasicAuthentication("x", "y", null);
110         echoServerAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
111         echoServerAuth.addFilterClass("/*", TestFilter.class.getCanonicalName());
112         echoServerAuth.addFilterClass("/*", TestAuthorizationFilter.class.getCanonicalName());
113         echoServerAuth.addFilterClass("/*", TestAafAuthFilter.class.getCanonicalName());
114         echoServerAuth.addFilterClass("/*", TestAafGranularAuthFilter.class.getCanonicalName());
115         echoServerAuth.waitedStart(5000);
116
117         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerAuth.getPort(), 5, 10000L)) {
118             throw new IllegalStateException("cannot connect to port " + echoServerAuth.getPort());
119         }
120     }
121
122     /**
123      * After the class is created method.
124      */
125     @AfterClass
126     public static void tearDown() {
127         logger.info("-- tearDown() --");
128
129         HttpServletServer.factory.destroy();
130         HttpClient.factory.destroy();
131
132         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
133             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
134                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
135             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
136         } else {
137             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
138         }
139
140         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
141             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
142                     savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
143             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
144         } else {
145             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
146         }
147
148         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
149             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
150                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
151             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
152         } else {
153             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
154         }
155
156         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
157             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
158                     savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
159             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
160         } else {
161             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
162         }
163
164
165     }
166
167     @Test
168     public void testHttpGetNoAuthClient() throws Exception {
169         logger.info("-- testHttpNoAuthClient() --");
170
171         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
172                 .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
173                 .userName(null).password(null).managed(true).build());
174         final Response response = client.get("hello");
175         final String body = HttpClient.getBody(response, String.class);
176
177         assertTrue(response.getStatus() == 200);
178         assertTrue(body.equals("hello"));
179     }
180
181     @Test
182     public void testHttpPutNoAuthClient() throws Exception {
183         logger.info("-- testHttpNoAuthClient() --");
184
185         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
186                 .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
187                 .userName(null).password(null).managed(true).build());
188
189         Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
190         final Response response = client.put("hello", entity, Collections.emptyMap());
191         final String body = HttpClient.getBody(response, String.class);
192
193         assertTrue(response.getStatus() == 200);
194         assertTrue(body.equals("hello:{myParameter=myValue}"));
195     }
196
197     @Test
198     public void testHttpGetAuthClient() throws Exception {
199         logger.info("-- testHttpAuthClient() --");
200
201         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
202                 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
203                 .userName("x").password("y").managed(true).build());
204
205         final Response response = client.get("hello");
206         final String body = HttpClient.getBody(response, String.class);
207
208         assertTrue(response.getStatus() == 200);
209         assertTrue(body.equals("hello"));
210     }
211
212     @Test
213     public void testHttpPutAuthClient() throws Exception {
214         logger.info("-- testHttpAuthClient() --");
215
216         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
217                 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
218                 .userName("x").password("y").managed(true).build());
219
220         Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
221         final Response response = client.put("hello", entity, Collections.emptyMap());
222         final String body = HttpClient.getBody(response, String.class);
223
224         assertTrue(response.getStatus() == 200);
225         assertTrue(body.equals("hello:{myParameter=myValue}"));
226     }
227
228     @Test
229     public void testHttpAuthClient401() throws Exception {
230         logger.info("-- testHttpAuthClient401() --");
231
232         final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient401")
233                 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
234                 .userName(null).password(null).managed(true).build());
235         final Response response = client.get("hello");
236         assertEquals(new Integer(response.getStatus()).toString(), response.getStatus(), 401);
237     }
238
239     @Test
240     public void testHttpAuthClientProps() throws Exception {
241         logger.info("-- testHttpAuthClientProps() --");
242
243         final Properties httpProperties = new Properties();
244
245         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
246         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
247                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
248         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
249                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
250         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
251                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
252         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
253                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
254         httpProperties.setProperty(
255                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
256                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
257                 RestMockHealthCheck.class.getName());
258         httpProperties.setProperty(
259             PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
260                 + PolicyEndPointProperties.PROPERTY_HTTP_FILTER_CLASSES_SUFFIX,
261             TestFilter.class.getName());
262         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
263                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
264
265         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
266                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
267         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
268                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
269         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
270                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
271         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
272                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
273         httpProperties.setProperty(
274                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
275                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
276                 RestMockHealthCheck.class.getName());
277         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
278                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
279
280         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES, "PAP,PDP");
281         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
282                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
283         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
284                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
285         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
286                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pap/test");
287         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
288                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
289         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
290                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
291         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
292                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
293         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
294                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
295
296         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
297                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
298         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
299                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
300         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
301                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pdp");
302         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
303                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
304         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
305                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
306         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
307                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
308         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
309                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
310
311         final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
312         assertTrue(servers.size() == 2);
313
314         final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
315         assertTrue(clients.size() == 2);
316
317         for (final HttpServletServer server : servers) {
318             server.waitedStart(10000);
319         }
320
321         final HttpClient clientPap = HttpClient.factory.get("PAP");
322         final Response response = clientPap.get();
323         assertTrue(response.getStatus() == 200);
324
325         final HttpClient clientPdp = HttpClient.factory.get("PDP");
326         final Response response2 = clientPdp.get("test");
327         assertTrue(response2.getStatus() == 500);
328     }
329
330     class MyEntity {
331
332         private String myParameter;
333
334         public MyEntity(final String myParameter) {
335             this.myParameter = myParameter;
336         }
337
338         public void setMyParameter(final String myParameter) {
339             this.myParameter = myParameter;
340         }
341
342         public String getMyParameter() {
343             return myParameter;
344         }
345
346     }
347
348 }