3878813e881d79e4ea83a72404bfae5c8b67047e
[aai/rest-client.git] / src / test / java / org / onap / aai / restclient / rest / RestClientBuilderTest.java
1 /**\r
2  * ============LICENSE_START=======================================================\r
3  * org.onap.aai\r
4  * ================================================================================\r
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * Copyright © 2017 Amdocs\r
7  * ================================================================================\r
8  * Licensed under the Apache License, Version 2.0 (the "License");\r
9  * you may not use this file except in compliance with the License.\r
10  * You may obtain a copy of the License at\r
11  *\r
12  *       http://www.apache.org/licenses/LICENSE-2.0\r
13  *\r
14  * Unless required by applicable law or agreed to in writing, software\r
15  * distributed under the License is distributed on an "AS IS" BASIS,\r
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
17  * See the License for the specific language governing permissions and\r
18  * limitations under the License.\r
19  * ============LICENSE_END=========================================================\r
20  *\r
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
22  */\r
23 package org.onap.aai.restclient.rest;\r
24 \r
25 import static org.junit.Assert.assertEquals;\r
26 import static org.junit.Assert.assertNotNull;\r
27 import static org.junit.Assert.assertNull;\r
28 import static org.junit.Assert.assertTrue;\r
29 \r
30 import javax.ws.rs.client.Client;\r
31 import org.junit.Before;\r
32 import org.junit.Test;\r
33 import org.onap.aai.restclient.enums.RestAuthenticationMode;\r
34 \r
35 /**\r
36  * This suite of tests is intended to exercise the functionality of the generice REST client builder.\r
37  */\r
38 public class RestClientBuilderTest {\r
39 \r
40     /**\r
41      * Test case initialization\r
42      *\r
43      * @throws Exception the exception\r
44      */\r
45     @Before\r
46     public void init() throws Exception {}\r
47 \r
48     private String generateAuthorizationHeaderValue(String username, String password) {\r
49         String usernameAndPassword = username + ":" + password;\r
50         return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());\r
51     }\r
52 \r
53     @Test\r
54     public void validateAccesors() {\r
55 \r
56         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
57 \r
58         // test defaults\r
59         assertEquals(restClientBuilder.isValidateServerHostname(), RestClientBuilder.DEFAULT_VALIDATE_SERVER_HOST);\r
60         assertEquals(restClientBuilder.isValidateServerCertChain(), RestClientBuilder.DEFAULT_VALIDATE_CERT_CHAIN);\r
61         assertEquals(restClientBuilder.getClientCertFileName(), RestClientBuilder.DEFAULT_CLIENT_CERT_FILENAME);\r
62         assertEquals(restClientBuilder.getClientCertPassword(), RestClientBuilder.DEFAULT_CERT_PASSWORD);\r
63         assertEquals(restClientBuilder.getTruststoreFilename(), RestClientBuilder.DEFAULT_TRUST_STORE_FILENAME);\r
64         assertEquals(restClientBuilder.getConnectTimeoutInMs(), RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MS);\r
65         assertEquals(restClientBuilder.getReadTimeoutInMs(), RestClientBuilder.DEFAULT_READ_TIMEOUT_MS);\r
66         assertEquals(restClientBuilder.getAuthenticationMode(), RestClientBuilder.DEFAULT_AUTH_MODE);\r
67         assertEquals(restClientBuilder.getBasicAuthUsername(), RestClientBuilder.DEFAULT_BASIC_AUTH_USERNAME);\r
68         assertEquals(restClientBuilder.getBasicAuthPassword(), RestClientBuilder.DEFAULT_BASIC_AUTH_PASSWORD);\r
69 \r
70         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
71         restClientBuilder.setBasicAuthPassword("password");\r
72         restClientBuilder.setBasicAuthUsername("username");\r
73         restClientBuilder.setClientCertFileName("filename");\r
74         restClientBuilder.setClientCertPassword("password");\r
75         restClientBuilder.setConnectTimeoutInMs(12345);\r
76         restClientBuilder.setReadTimeoutInMs(54321);\r
77         restClientBuilder.setTruststoreFilename("truststore");\r
78         restClientBuilder.setValidateServerCertChain(true);\r
79         restClientBuilder.setValidateServerHostname(true);\r
80 \r
81         assertEquals(restClientBuilder.isValidateServerHostname(), true);\r
82         assertEquals(restClientBuilder.isValidateServerCertChain(), true);\r
83         assertEquals(restClientBuilder.getClientCertFileName(), "filename");\r
84         assertEquals(restClientBuilder.getClientCertPassword(), "password");\r
85         assertEquals(restClientBuilder.getTruststoreFilename(), "truststore");\r
86         assertEquals(restClientBuilder.getConnectTimeoutInMs(), 12345);\r
87         assertEquals(restClientBuilder.getReadTimeoutInMs(), 54321);\r
88         assertEquals(restClientBuilder.getAuthenticationMode(), RestAuthenticationMode.UNKNOWN_MODE);\r
89         assertEquals(restClientBuilder.getBasicAuthUsername(), "username");\r
90         assertEquals(restClientBuilder.getBasicAuthPassword(), "password");\r
91 \r
92         assertEquals(restClientBuilder.getBasicAuthenticationCredentials(),\r
93                 generateAuthorizationHeaderValue("username", "password"));\r
94 \r
95         assertTrue(restClientBuilder.toString().contains("RestClientBuilder"));\r
96 \r
97     }\r
98 \r
99     @Test\r
100     public void validateNoAuthClientCreation() throws Exception {\r
101 \r
102         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
103 \r
104         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.HTTP_NOAUTH);\r
105         restClientBuilder.setConnectTimeoutInMs(12345);\r
106         restClientBuilder.setReadTimeoutInMs(54321);\r
107 \r
108         Client client = restClientBuilder.getClient();\r
109         assertNotNull(client);\r
110     }\r
111 \r
112 \r
113     @Test\r
114     public void validateUnknownModeCreateNoAuthClient() throws Exception {\r
115 \r
116         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
117 \r
118         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
119         restClientBuilder.setConnectTimeoutInMs(12345);\r
120         restClientBuilder.setReadTimeoutInMs(54321);\r
121 \r
122         Client client = restClientBuilder.getClient();\r
123         assertNotNull(client);\r
124     }\r
125 \r
126     @Test\r
127     public void validateBasicAuthSslClient() throws Exception {\r
128 \r
129         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
130 \r
131         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_BASIC);\r
132         restClientBuilder.setConnectTimeoutInMs(12345);\r
133         restClientBuilder.setReadTimeoutInMs(54321);\r
134         restClientBuilder.setBasicAuthUsername("username");\r
135         restClientBuilder.setBasicAuthPassword("password");\r
136         restClientBuilder.setTruststoreFilename("truststore");\r
137 \r
138         Client client = restClientBuilder.getClient();\r
139         assertNotNull(client.getHostnameVerifier());\r
140         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
141     }\r
142 \r
143     @Test(expected = IllegalArgumentException.class)\r
144     public void validateSslCertClient_noHostOrCertChainValidation() throws Exception {\r
145 \r
146         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
147 \r
148         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
149         restClientBuilder.setConnectTimeoutInMs(12345);\r
150         restClientBuilder.setReadTimeoutInMs(54321);\r
151         restClientBuilder.setValidateServerCertChain(false);\r
152         restClientBuilder.setValidateServerHostname(false);\r
153 \r
154         restClientBuilder.getClient();\r
155     }\r
156 \r
157     @Test(expected = IllegalArgumentException.class)\r
158     public void validateSslCertClient_hostOnlyValidation() throws Exception {\r
159 \r
160         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
161 \r
162         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
163         restClientBuilder.setConnectTimeoutInMs(12345);\r
164         restClientBuilder.setReadTimeoutInMs(54321);\r
165         restClientBuilder.setValidateServerCertChain(false);\r
166         restClientBuilder.setValidateServerHostname(true);\r
167 \r
168         restClientBuilder.getClient();\r
169 \r
170     }\r
171 \r
172     @Test\r
173     public void validateSslCertClient_certChainOnlyValidation() throws Exception {\r
174 \r
175         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
176 \r
177         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
178         restClientBuilder.setConnectTimeoutInMs(12345);\r
179         restClientBuilder.setReadTimeoutInMs(54321);\r
180         restClientBuilder.setValidateServerCertChain(true);\r
181         restClientBuilder.setValidateServerHostname(false);\r
182         restClientBuilder.setTruststoreFilename("truststore");\r
183         restClientBuilder.setClientCertPassword(null);\r
184 \r
185         Client client = restClientBuilder.getClient();\r
186         // TODO\r
187         assertNotNull(client.getHostnameVerifier());\r
188         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
189     }\r
190 \r
191     @Test\r
192     public void validateSslCertClient_withHostAndCertChainValidation() throws Exception {\r
193 \r
194         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
195 \r
196         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
197         restClientBuilder.setConnectTimeoutInMs(12345);\r
198         restClientBuilder.setReadTimeoutInMs(54321);\r
199         restClientBuilder.setValidateServerCertChain(true);\r
200         restClientBuilder.setValidateServerHostname(true);\r
201         restClientBuilder.setClientCertPassword("password");\r
202         restClientBuilder.setTruststoreFilename("truststore");\r
203 \r
204         Client client = restClientBuilder.getClient();\r
205         // TODO\r
206         assertNull(client.getHostnameVerifier());\r
207         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
208     }\r
209 \r
210     @Test(expected = IllegalArgumentException.class)\r
211     public void validateSslCertClient_illegalArgumentExceptionWhenTruststoreIsNull() throws Exception {\r
212 \r
213         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
214 \r
215         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
216         restClientBuilder.setConnectTimeoutInMs(12345);\r
217         restClientBuilder.setReadTimeoutInMs(54321);\r
218         restClientBuilder.setValidateServerCertChain(true);\r
219         restClientBuilder.setValidateServerHostname(true);\r
220         restClientBuilder.setTruststoreFilename(null);\r
221 \r
222         /*\r
223          * Creating the client in this scenario will cause an IllegalArgumentException caused by the truststore being\r
224          * null\r
225          */\r
226         restClientBuilder.getClient();\r
227 \r
228     }\r
229 \r
230     @Test\r
231     public void validateSslProtocolConfiguration() throws Exception {\r
232 \r
233         RestClientBuilder restClientBuilder = new RestClientBuilder();\r
234         assertEquals(RestClientBuilder.DEFAULT_SSL_PROTOCOL, restClientBuilder.getSslProtocol());\r
235 \r
236         restClientBuilder.setSslProtocol("TLSv1.2");\r
237         assertEquals("TLSv1.2", restClientBuilder.getSslProtocol());\r
238 \r
239     }\r
240 \r
241 }\r