Update rest-client with additional operations
[aai/rest-client.git] / src / test / java / org / openecomp / restclient / rest / RestClientBuilderTest.java
1 package org.openecomp.restclient.rest;\r
2 \r
3 import static org.junit.Assert.assertEquals;\r
4 import static org.junit.Assert.assertNotNull;\r
5 import static org.junit.Assert.assertNull;\r
6 import static org.junit.Assert.assertTrue;\r
7 import static org.junit.Assert.fail;\r
8 \r
9 import org.junit.Before;\r
10 import org.junit.Test;\r
11 import org.openecomp.restclient.enums.RestAuthenticationMode;\r
12 \r
13 import com.sun.jersey.api.client.Client;\r
14 import com.sun.jersey.client.urlconnection.HTTPSProperties;\r
15 \r
16 /**\r
17  * This suite of tests is intended to exercise the functionality of the generice REST client\r
18  * builder.\r
19  */\r
20 public class RestClientBuilderTest {\r
21 \r
22   /**\r
23    * Test case initialization\r
24    * \r
25    * @throws Exception the exception\r
26    */\r
27   @Before\r
28   public void init() throws Exception {\r
29   }\r
30   \r
31   private String generateAuthorizationHeaderValue(String username, String password) {\r
32     String usernameAndPassword = username + ":" + password;\r
33     return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());\r
34   }\r
35   \r
36   @Test\r
37   public void validateAccesors() {\r
38     \r
39     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
40     \r
41     // test defaults\r
42     assertEquals(restClientBuilder.isValidateServerHostname(), RestClientBuilder.DEFAULT_VALIDATE_SERVER_HOST);\r
43     assertEquals(restClientBuilder.isValidateServerCertChain(), RestClientBuilder.DEFAULT_VALIDATE_CERT_CHAIN);\r
44     assertEquals(restClientBuilder.getClientCertFileName(), RestClientBuilder.DEFAULT_CLIENT_CERT_FILENAME);\r
45     assertEquals(restClientBuilder.getClientCertPassword(), RestClientBuilder.DEFAULT_CERT_PASSWORD);\r
46     assertEquals(restClientBuilder.getTruststoreFilename(), RestClientBuilder.DEFAULT_TRUST_STORE_FILENAME);\r
47     assertEquals(restClientBuilder.getConnectTimeoutInMs(), RestClientBuilder.DEFAULT_CONNECT_TIMEOUT_MS);\r
48     assertEquals(restClientBuilder.getReadTimeoutInMs(), RestClientBuilder.DEFAULT_READ_TIMEOUT_MS);\r
49     assertEquals(restClientBuilder.getAuthenticationMode(), RestClientBuilder.DEFAULT_AUTH_MODE);\r
50     assertEquals(restClientBuilder.getBasicAuthUsername(), RestClientBuilder.DEFAULT_BASIC_AUTH_USERNAME);\r
51     assertEquals(restClientBuilder.getBasicAuthPassword(), RestClientBuilder.DEFAULT_BASIC_AUTH_PASSWORD);\r
52     \r
53     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
54     restClientBuilder.setBasicAuthPassword("password");\r
55     restClientBuilder.setBasicAuthUsername("username");\r
56     restClientBuilder.setClientCertFileName("filename");\r
57     restClientBuilder.setClientCertPassword("password");\r
58     restClientBuilder.setConnectTimeoutInMs(12345);\r
59     restClientBuilder.setReadTimeoutInMs(54321);\r
60     restClientBuilder.setTruststoreFilename("truststore");\r
61     restClientBuilder.setValidateServerCertChain(true);\r
62     restClientBuilder.setValidateServerHostname(true);\r
63     \r
64     assertEquals(restClientBuilder.isValidateServerHostname(), true);\r
65     assertEquals(restClientBuilder.isValidateServerCertChain(), true);\r
66     assertEquals(restClientBuilder.getClientCertFileName(), "filename");\r
67     assertEquals(restClientBuilder.getClientCertPassword(), "password");\r
68     assertEquals(restClientBuilder.getTruststoreFilename(), "truststore");\r
69     assertEquals(restClientBuilder.getConnectTimeoutInMs(), 12345);\r
70     assertEquals(restClientBuilder.getReadTimeoutInMs(), 54321);\r
71     assertEquals(restClientBuilder.getAuthenticationMode(), RestAuthenticationMode.UNKNOWN_MODE);\r
72     assertEquals(restClientBuilder.getBasicAuthUsername(), "username");\r
73     assertEquals(restClientBuilder.getBasicAuthPassword(), "password");\r
74     \r
75     assertEquals(restClientBuilder.getBasicAuthenticationCredentials(),\r
76         generateAuthorizationHeaderValue("username", "password"));\r
77 \r
78     assertTrue(restClientBuilder.toString().contains("RestClientBuilder"));\r
79 \r
80   }\r
81   \r
82   @Test\r
83   public void validateNoAuthClientCreation() throws Exception {\r
84     \r
85     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
86     \r
87     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.HTTP_NOAUTH);\r
88     restClientBuilder.setConnectTimeoutInMs(12345);\r
89     restClientBuilder.setReadTimeoutInMs(54321);\r
90     \r
91     Client client = restClientBuilder.getClient();\r
92     assertNotNull(client);\r
93     assertNull(client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES));\r
94   }\r
95   \r
96   \r
97   @Test\r
98   public void validateUnknownModeCreateNoAuthClient() throws Exception {\r
99     \r
100     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
101     \r
102     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.UNKNOWN_MODE);\r
103     restClientBuilder.setConnectTimeoutInMs(12345);\r
104     restClientBuilder.setReadTimeoutInMs(54321);\r
105     \r
106     Client client = restClientBuilder.getClient();\r
107     assertNotNull(client);\r
108     assertNull(client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES));\r
109   }\r
110 \r
111   @Test\r
112   public void validateBasicAuthSslClient() throws Exception {\r
113     \r
114     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
115     \r
116     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_BASIC);\r
117     restClientBuilder.setConnectTimeoutInMs(12345);\r
118     restClientBuilder.setReadTimeoutInMs(54321);\r
119     restClientBuilder.setBasicAuthUsername("username");\r
120     restClientBuilder.setBasicAuthPassword("password");\r
121     \r
122     Client client = restClientBuilder.getClient();\r
123    \r
124     Object sslPropertiesObj = client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES);\r
125     HTTPSProperties sslProps = null;\r
126     if ( sslPropertiesObj instanceof HTTPSProperties ) {\r
127       sslProps = (HTTPSProperties)sslPropertiesObj;\r
128       assertNotNull(sslProps.getHostnameVerifier());\r
129     } else {\r
130       fail("Unexpected value for https properties object");\r
131     }\r
132     \r
133   }\r
134 \r
135   @Test\r
136   public void validateSslCertClient_noHostOrCertChainValidation() throws Exception {\r
137     \r
138     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
139     \r
140     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
141     restClientBuilder.setConnectTimeoutInMs(12345);\r
142     restClientBuilder.setReadTimeoutInMs(54321);\r
143     restClientBuilder.setValidateServerCertChain(false);\r
144     restClientBuilder.setValidateServerHostname(false);\r
145     \r
146     Client client = restClientBuilder.getClient();\r
147    \r
148     Object sslPropertiesObj = client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES);\r
149     HTTPSProperties sslProps = null;\r
150     if ( sslPropertiesObj instanceof HTTPSProperties ) {\r
151       sslProps = (HTTPSProperties)sslPropertiesObj;\r
152       assertNotNull(sslProps.getHostnameVerifier());\r
153     } else {\r
154       fail("Unexpected value for https properties object");\r
155     }  }\r
156   \r
157   @Test\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     Client client = restClientBuilder.getClient();\r
169    \r
170     Object sslPropertiesObj = client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES);\r
171     HTTPSProperties sslProps = null;\r
172     if ( sslPropertiesObj instanceof HTTPSProperties ) {\r
173       sslProps = (HTTPSProperties)sslPropertiesObj;\r
174       assertNull(sslProps.getHostnameVerifier());\r
175     } else {\r
176       fail("Unexpected value for https properties object");\r
177     }\r
178    }\r
179   \r
180   @Test\r
181   public void validateSslCertClient_certChainOnlyValidation() throws Exception {\r
182     \r
183     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
184     \r
185     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
186     restClientBuilder.setConnectTimeoutInMs(12345);\r
187     restClientBuilder.setReadTimeoutInMs(54321);\r
188     restClientBuilder.setValidateServerCertChain(true);\r
189     restClientBuilder.setValidateServerHostname(false);\r
190     restClientBuilder.setTruststoreFilename("truststore");\r
191     restClientBuilder.setClientCertPassword(null);\r
192     \r
193     Client client = restClientBuilder.getClient();\r
194    \r
195     Object sslPropertiesObj = client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES);\r
196     HTTPSProperties sslProps = null;\r
197     if ( sslPropertiesObj instanceof HTTPSProperties ) {\r
198       sslProps = (HTTPSProperties)sslPropertiesObj;\r
199       assertNotNull(sslProps.getHostnameVerifier());\r
200     } else {\r
201       fail("Unexpected value for https properties object");\r
202     }\r
203   }\r
204   \r
205   @Test\r
206   public void validateSslCertClient_withHostAndCertChainValidation() throws Exception {\r
207     \r
208     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
209     \r
210     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
211     restClientBuilder.setConnectTimeoutInMs(12345);\r
212     restClientBuilder.setReadTimeoutInMs(54321);\r
213     restClientBuilder.setValidateServerCertChain(true);\r
214     restClientBuilder.setValidateServerHostname(true);\r
215     restClientBuilder.setClientCertPassword("password");\r
216     restClientBuilder.setTruststoreFilename("truststore");\r
217     \r
218     Client client = restClientBuilder.getClient();\r
219    \r
220     Object sslPropertiesObj = client.getProperties().get(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES);\r
221     HTTPSProperties sslProps = null;\r
222     if ( sslPropertiesObj instanceof HTTPSProperties ) {\r
223       sslProps = (HTTPSProperties)sslPropertiesObj;\r
224       assertNull(sslProps.getHostnameVerifier());\r
225     } else {\r
226       fail("Unexpected value for https properties object");\r
227     }  }\r
228   \r
229   @Test (expected=IllegalArgumentException.class)\r
230   public void validateSslCertClient_illegalArgumentExceptionWhenTruststoreIsNull() throws Exception {\r
231     \r
232     RestClientBuilder restClientBuilder = new RestClientBuilder();\r
233     \r
234     restClientBuilder.setAuthenticationMode(RestAuthenticationMode.SSL_CERT);\r
235     restClientBuilder.setConnectTimeoutInMs(12345);\r
236     restClientBuilder.setReadTimeoutInMs(54321);\r
237     restClientBuilder.setValidateServerCertChain(true);\r
238     restClientBuilder.setValidateServerHostname(true);\r
239     restClientBuilder.setTruststoreFilename(null);\r
240     \r
241     /*\r
242      * Creating the client in this scenario will cause an IllegalArgumentException caused by the\r
243      * truststore being null\r
244      */\r
245     Client client = restClientBuilder.getClient();\r
246    \r
247   }\r
248   \r
249     \r
250 }\r