6ec9bc2144d08b258c481808eaed485e4ac2382a
[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     @BeforeClass
49     public static void setUp() throws InterruptedException, IOException {
50         logger.info("-- setup() --");
51
52         /* echo server - http + no auth */
53
54         final HttpServletServer echoServerNoAuth =
55                 HttpServletServer.factory.build("echo", "localhost", 6666, "/", false, true);
56         echoServerNoAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
57         echoServerNoAuth.waitedStart(5000);
58
59         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerNoAuth.getPort(), 5, 10000L)) {
60             throw new IllegalStateException("cannot connect to port " + echoServerNoAuth.getPort());
61         }
62
63         String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
64         if (keyStoreSystemProperty != null) {
65             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
66         }
67
68         String keyStorePasswordSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
69         if (keyStorePasswordSystemProperty != null) {
70             savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, keyStorePasswordSystemProperty);
71         }
72
73         String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
74         if (trustStoreSystemProperty != null) {
75             savedValuesMap
76                 .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
77         }
78
79         String trustStorePasswordSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
80         if (trustStorePasswordSystemProperty != null) {
81             savedValuesMap
82                 .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, trustStorePasswordSystemProperty);
83         }
84
85         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
86         System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
87
88         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
89         System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
90
91         /* echo server - https + basic auth */
92
93         final HttpServletServer echoServerAuth =
94                 HttpServletServer.factory.build("echo", true, "localhost", 6667, "/", false, true);
95         echoServerAuth.setBasicAuthentication("x", "y", null);
96         echoServerAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
97         echoServerAuth.waitedStart(5000);
98
99         if (!NetworkUtil.isTcpPortOpen("localhost", echoServerAuth.getPort(), 5, 10000L)) {
100             throw new IllegalStateException("cannot connect to port " + echoServerAuth.getPort());
101         }
102     }
103
104     @AfterClass
105     public static void tearDown() {
106         logger.info("-- tearDown() --");
107
108         HttpServletServer.factory.destroy();
109         HttpClient.factory.destroy();
110
111         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
112             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
113             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
114         } else {
115             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
116         }
117
118         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
119             System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
120             savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
121         } else {
122             System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
123         }
124
125         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
126             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
127             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
128         } else {
129             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
130         }
131
132         if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
133             System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
134             savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
135         } else {
136             System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
137         }
138
139
140     }
141
142     @Test
143     public void testHttpNoAuthClient() throws Exception {
144         logger.info("-- testHttpNoAuthClient() --");
145
146         final HttpClient client = HttpClient.factory.build("testHttpNoAuthClient", false, false, "localhost", 6666,
147                 "junit/echo", null, null, true);
148         final Response response = client.get("hello");
149         final String body = HttpClient.getBody(response, String.class);
150
151         assertTrue(response.getStatus() == 200);
152         assertTrue(body.equals("hello"));
153     }
154
155     @Test
156     public void testHttpAuthClient() throws Exception {
157         logger.info("-- testHttpAuthClient() --");
158
159         final HttpClient client = HttpClient.factory.build("testHttpAuthClient", true, true,"localhost", 6667,
160                 "junit/echo", "x", "y", true);
161         final Response response = client.get("hello");
162         final String body = HttpClient.getBody(response, String.class);
163
164         assertTrue(response.getStatus() == 200);
165         assertTrue(body.equals("hello"));
166     }
167
168     @Test
169     public void testHttpAuthClient401() throws Exception {
170         logger.info("-- testHttpAuthClient401() --");
171
172         final HttpClient client = HttpClient.factory.build("testHttpAuthClient401", true, true, "localhost", 6667,
173                 "junit/echo", null, null, true);
174         final Response response = client.get("hello");
175         assertTrue(response.getStatus() == 401);
176     }
177
178     @Test
179     public void testHttpAuthClientProps() throws Exception {
180         logger.info("-- testHttpAuthClientProps() --");
181
182         final Properties httpProperties = new Properties();
183
184         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
185         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
186                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
187         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
188                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
189         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
190                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
191         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
192                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
193         httpProperties.setProperty(
194                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
195                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
196                 RestMockHealthCheck.class.getName());
197         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
198                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
199
200         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
201                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
202         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
203                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
204         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
205                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
206         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
207                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
208         httpProperties.setProperty(
209                 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
210                         + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
211                 RestMockHealthCheck.class.getName());
212         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
213                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
214
215         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES, "PAP,PDP");
216         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
217                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
218         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
219                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
220         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
221                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pap/test");
222         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
223                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
224         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
225                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
226         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
227                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
228         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
229                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
230
231         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
232                 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
233         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
234                 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
235         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
236                 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pdp");
237         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
238                 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
239         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
240                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
241         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
242                 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
243         httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
244                 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
245
246         final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
247         assertTrue(servers.size() == 2);
248
249         final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
250         assertTrue(clients.size() == 2);
251
252         for (final HttpServletServer server : servers) {
253             server.waitedStart(10000);
254         }
255
256         final HttpClient clientPAP = HttpClient.factory.get("PAP");
257         final Response response = clientPAP.get();
258         assertTrue(response.getStatus() == 200);
259
260         final HttpClient clientPDP = HttpClient.factory.get("PDP");
261         final Response response2 = clientPDP.get("test");
262         assertTrue(response2.getStatus() == 500);
263     }
264
265
266 }