Constructor inject the jakarte ee ClientBuilder
[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 javax.ws.rs.client.ClientBuilder;\r
32 \r
33 import org.junit.Before;\r
34 import org.junit.Test;\r
35 import org.onap.aai.restclient.enums.RestAuthenticationMode;\r
36 \r
37 /**\r
38  * This suite of tests is intended to exercise the functionality of the generice REST client builder.\r
39  */\r
40 public class RestClientBuilderTest {\r
41 \r
42     private final ClientBuilder clientBuilder = ClientBuilder.newBuilder();\r
43 \r
44     /**\r
45      * Test case initialization\r
46      *\r
47      * @throws Exception the exception\r
48      */\r
49     @Before\r
50     public void init() throws Exception {}\r
51 \r
52     private String generateAuthorizationHeaderValue(String username, String password) {\r
53         String usernameAndPassword = username + ":" + password;\r
54         return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());\r
55     }\r
56 \r
57     @Test\r
58     public void validateAccesors() {\r
59 \r
60         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
61 \r
62         // test defaults\r
63         assertEquals(restClientBuilder.isValidateServerHostname(), RestClientBuilder.DEFAULT_VALIDATE_SERVER_HOST);\r
64         assertEquals(restClientBuilder.isValidateServerCertChain(), RestClientBuilder.DEFAULT_VALIDATE_CERT_CHAIN);\r
65         assertEquals(restClientBuilder.getClientCertFileName(), RestClientBuilder.DEFAULT_CLIENT_CERT_FILENAME);\r
66         assertEquals(restClientBuilder.getClientCertPassword(), RestClientBuilder.DEFAULT_CERT_PASSWORD);\r
67         assertEquals(restClientBuilder.getTruststoreFilename(), RestClientBuilder.DEFAULT_TRUST_STORE_FILENAME);\r
68         assertEquals(restClientBuilder.getConnectTimeoutInMs(), RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MS);\r
69         assertEquals(restClientBuilder.getReadTimeoutInMs(), RestClientBuilder.DEFAULT_READ_TIMEOUT_MS);\r
70         assertEquals(restClientBuilder.getAuthenticationMode(), RestClientBuilder.DEFAULT_AUTH_MODE);\r
71         assertEquals(restClientBuilder.getBasicAuthUsername(), RestClientBuilder.DEFAULT_BASIC_AUTH_USERNAME);\r
72         assertEquals(restClientBuilder.getBasicAuthPassword(), RestClientBuilder.DEFAULT_BASIC_AUTH_PASSWORD);\r
73 \r
74         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
75         restClientBuilder.setBasicAuthPassword("password");\r
76         restClientBuilder.setBasicAuthUsername("username");\r
77         restClientBuilder.setClientCertFileName("filename");\r
78         restClientBuilder.setClientCertPassword("password");\r
79         restClientBuilder.setConnectTimeoutInMs(12345);\r
80         restClientBuilder.setReadTimeoutInMs(54321);\r
81         restClientBuilder.setTruststoreFilename("truststore");\r
82         restClientBuilder.setValidateServerCertChain(true);\r
83         restClientBuilder.setValidateServerHostname(true);\r
84 \r
85         assertEquals(restClientBuilder.isValidateServerHostname(), true);\r
86         assertEquals(restClientBuilder.isValidateServerCertChain(), true);\r
87         assertEquals(restClientBuilder.getClientCertFileName(), "filename");\r
88         assertEquals(restClientBuilder.getClientCertPassword(), "password");\r
89         assertEquals(restClientBuilder.getTruststoreFilename(), "truststore");\r
90         assertEquals(restClientBuilder.getConnectTimeoutInMs(), 12345);\r
91         assertEquals(restClientBuilder.getReadTimeoutInMs(), 54321);\r
92         assertEquals(restClientBuilder.getAuthenticationMode(), RestAuthenticationMode.UNKNOWN_MODE);\r
93         assertEquals(restClientBuilder.getBasicAuthUsername(), "username");\r
94         assertEquals(restClientBuilder.getBasicAuthPassword(), "password");\r
95 \r
96         assertEquals(restClientBuilder.getBasicAuthenticationCredentials(),\r
97                 generateAuthorizationHeaderValue("username", "password"));\r
98 \r
99         assertTrue(restClientBuilder.toString().contains("RestClientBuilder"));\r
100 \r
101     }\r
102 \r
103     @Test\r
104     public void validateNoAuthClientCreation() throws Exception {\r
105 \r
106         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
107 \r
108         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.HTTP_NOAUTH);\r
109         restClientBuilder.setConnectTimeoutInMs(12345);\r
110         restClientBuilder.setReadTimeoutInMs(54321);\r
111 \r
112         Client client = restClientBuilder.getClient();\r
113         assertNotNull(client);\r
114     }\r
115 \r
116 \r
117     @Test\r
118     public void validateUnknownModeCreateNoAuthClient() throws Exception {\r
119 \r
120         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
121 \r
122         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
123         restClientBuilder.setConnectTimeoutInMs(12345);\r
124         restClientBuilder.setReadTimeoutInMs(54321);\r
125 \r
126         Client client = restClientBuilder.getClient();\r
127         assertNotNull(client);\r
128     }\r
129 \r
130     @Test\r
131     public void validateBasicAuthSslClient() throws Exception {\r
132 \r
133         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
134 \r
135         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_BASIC);\r
136         restClientBuilder.setConnectTimeoutInMs(12345);\r
137         restClientBuilder.setReadTimeoutInMs(54321);\r
138         restClientBuilder.setBasicAuthUsername("username");\r
139         restClientBuilder.setBasicAuthPassword("password");\r
140         restClientBuilder.setTruststoreFilename("truststore");\r
141 \r
142         Client client = restClientBuilder.getClient();\r
143         assertNotNull(client.getHostnameVerifier());\r
144         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
145     }\r
146 \r
147     @Test(expected = IllegalArgumentException.class)\r
148     public void validateSslCertClient_noHostOrCertChainValidation() throws Exception {\r
149 \r
150         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
151 \r
152         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
153         restClientBuilder.setConnectTimeoutInMs(12345);\r
154         restClientBuilder.setReadTimeoutInMs(54321);\r
155         restClientBuilder.setValidateServerCertChain(false);\r
156         restClientBuilder.setValidateServerHostname(false);\r
157 \r
158         restClientBuilder.getClient();\r
159     }\r
160 \r
161     @Test(expected = IllegalArgumentException.class)\r
162     public void validateSslCertClient_hostOnlyValidation() throws Exception {\r
163 \r
164         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
165 \r
166         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
167         restClientBuilder.setConnectTimeoutInMs(12345);\r
168         restClientBuilder.setReadTimeoutInMs(54321);\r
169         restClientBuilder.setValidateServerCertChain(false);\r
170         restClientBuilder.setValidateServerHostname(true);\r
171 \r
172         restClientBuilder.getClient();\r
173 \r
174     }\r
175 \r
176     @Test\r
177     public void validateSslCertClient_certChainOnlyValidation() throws Exception {\r
178 \r
179         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
180 \r
181         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
182         restClientBuilder.setConnectTimeoutInMs(12345);\r
183         restClientBuilder.setReadTimeoutInMs(54321);\r
184         restClientBuilder.setValidateServerCertChain(true);\r
185         restClientBuilder.setValidateServerHostname(false);\r
186         restClientBuilder.setTruststoreFilename("truststore");\r
187         restClientBuilder.setClientCertPassword(null);\r
188 \r
189         Client client = restClientBuilder.getClient();\r
190         // TODO\r
191         assertNotNull(client.getHostnameVerifier());\r
192         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
193     }\r
194 \r
195     @Test\r
196     public void validateSslCertClient_withHostAndCertChainValidation() throws Exception {\r
197 \r
198         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
199 \r
200         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
201         restClientBuilder.setConnectTimeoutInMs(12345);\r
202         restClientBuilder.setReadTimeoutInMs(54321);\r
203         restClientBuilder.setValidateServerCertChain(true);\r
204         restClientBuilder.setValidateServerHostname(true);\r
205         restClientBuilder.setClientCertPassword("password");\r
206         restClientBuilder.setTruststoreFilename("truststore");\r
207 \r
208         Client client = restClientBuilder.getClient();\r
209         // TODO\r
210         assertNull(client.getHostnameVerifier());\r
211         assertEquals("truststore", System.getProperty("javax.net.ssl.trustStore"));\r
212     }\r
213 \r
214     @Test(expected = IllegalArgumentException.class)\r
215     public void validateSslCertClient_illegalArgumentExceptionWhenTruststoreIsNull() throws Exception {\r
216 \r
217         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
218 \r
219         restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
220         restClientBuilder.setConnectTimeoutInMs(12345);\r
221         restClientBuilder.setReadTimeoutInMs(54321);\r
222         restClientBuilder.setValidateServerCertChain(true);\r
223         restClientBuilder.setValidateServerHostname(true);\r
224         restClientBuilder.setTruststoreFilename(null);\r
225 \r
226         /*\r
227          * Creating the client in this scenario will cause an IllegalArgumentException caused by the truststore being\r
228          * null\r
229          */\r
230         restClientBuilder.getClient();\r
231 \r
232     }\r
233 \r
234     @Test\r
235     public void validateSslProtocolConfiguration() throws Exception {\r
236 \r
237         RestClientBuilder restClientBuilder = new RestClientBuilder(clientBuilder);\r
238         assertEquals(RestClientBuilder.DEFAULT_SSL_PROTOCOL, restClientBuilder.getSslProtocol());\r
239 \r
240         restClientBuilder.setSslProtocol("TLSv1.2");\r
241         assertEquals("TLSv1.2", restClientBuilder.getSslProtocol());\r
242 \r
243     }\r
244 \r
245 }\r