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