clientBuilder.setReadTimeoutInMs(timeout);
return this;
}
+
+ /**
+ * Configures the client for a specific SSL protocol
+ *
+ * @param sslProtocol - protocol string constant such as TLS, TLSv1, TLSv1.1, TLSv1.2
+ *
+ * @return The AAIRESTClient instance.
+ */
+ public RestClient sslProtocol(String sslProtocol) {
+ logger.debug("Set sslProtocol = " + sslProtocol);
+ clientBuilder.setSslProtocol(sslProtocol);
+ return this;
+ }
private boolean shouldRetry(OperationResult operationResult) {
if (headers != null) {
for (Entry<String, List<String>> header : headers.entrySet()) {
- builder.header(header.getKey(), header.getValue());
+ builder.header(header.getKey(), String.join(";",header.getValue()));
}
if (clientBuilder.getAuthenticationMode() == RestAuthenticationMode.SSL_BASIC) {
import com.sun.jersey.api.client.config.ClientConfig;\r
import com.sun.jersey.api.client.config.DefaultClientConfig;\r
import com.sun.jersey.client.urlconnection.HTTPSProperties;\r
-\r
+ \r
/**\r
* This is a generic REST Client builder with flexible security validation. Sometimes it's nice to\r
* be able to disable server chain cert validation and hostname validation to work-around lab\r
public static final RestAuthenticationMode DEFAULT_AUTH_MODE = RestAuthenticationMode.SSL_CERT;\r
public static final String DEFAULT_BASIC_AUTH_USERNAME = "";\r
public static final String DEFAULT_BASIC_AUTH_PASSWORD = "";\r
+ public static final String DEFAULT_SSL_PROTOCOL = "TLS";\r
\r
- private static final String SSL_PROTOCOL = "TLS";\r
private static final String KEYSTORE_ALGORITHM = "SunX509";\r
private static final String KEYSTORE_TYPE = "PKCS12";\r
private static final String TRUST_STORE_PROPERTY = "javax.net.ssl.trustStore";\r
private RestAuthenticationMode authenticationMode;\r
private String basicAuthUsername;\r
private String basicAuthPassword;\r
+ private String sslProtocol;\r
\r
/**\r
* Rest Client Builder.\r
authenticationMode = DEFAULT_AUTH_MODE;\r
basicAuthUsername = DEFAULT_BASIC_AUTH_USERNAME;\r
basicAuthPassword = DEFAULT_BASIC_AUTH_PASSWORD;\r
+ sslProtocol = DEFAULT_SSL_PROTOCOL;\r
}\r
\r
public boolean isValidateServerHostname() {\r
this.readTimeoutInMs = readTimeoutInMs;\r
}\r
\r
-\r
-\r
public RestAuthenticationMode getAuthenticationMode() {\r
return authenticationMode;\r
}\r
this.basicAuthPassword = basicAuthPassword;\r
}\r
\r
+ public String getSslProtocol() {\r
+ return sslProtocol;\r
+ }\r
+\r
+ public void setSslProtocol(String sslProtocol) {\r
+ this.sslProtocol = sslProtocol;\r
+ }\r
+\r
/**\r
* Returns Client configured for SSL\r
*/\r
\r
// Set up the SSL context, keystore, etc. to use for our connection\r
// to the AAI.\r
- SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL);\r
+ SSLContext ctx = SSLContext.getInstance(sslProtocol);\r
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM);\r
KeyStore ks = KeyStore.getInstance(KEYSTORE_TYPE);\r
\r
import org.junit.Before;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.onap.aai.restclient.client.OperationResult;
import org.onap.aai.restclient.client.RestClient;
assertNull(result.getResult());
assertNull(result.getFailureCause());
}
+
+ @Test
+ public void validateSuccessfulPost_withMultivaluedHeader() throws Exception {
+ RestClient restClient = buildClient();
+
+ MultivaluedMapImpl headerMap = new MultivaluedMapImpl();
+
+ headerMap.add("txnId", "123");
+ headerMap.add("txnId", "456");
+ headerMap.add("txnId", "789");
+
+ OperationResult result = restClient.post(TEST_URL, "", headerMap, MediaType.APPLICATION_JSON_TYPE,
+ MediaType.APPLICATION_JSON_TYPE);
+
+ // capture the txnId header from the outgoing request
+ ArgumentCaptor<String> txnIdHeaderName = ArgumentCaptor.forClass(String.class);
+ ArgumentCaptor<String> txnIdHeaderValue = ArgumentCaptor.forClass(String.class);
+
+ Mockito.verify(mockedBuilder, Mockito.atLeast(1)).header(txnIdHeaderName.capture(), txnIdHeaderValue.capture());
+ assertEquals("123;456;789", txnIdHeaderValue.getValue());
+
+ assertEquals(Response.Status.OK.getStatusCode(), result.getResultCode());
+ assertNotNull(result.getResult());
+ assertNull(result.getFailureCause());
+ }
@Test
public void validateSuccessfulGet() throws Exception {
\r
}\r
\r
+ @Test\r
+ public void validateSslProtocolConfiguration() throws Exception {\r
+ \r
+ RestClientBuilder restClientBuilder = new RestClientBuilder();\r
+ assertEquals(RestClientBuilder.DEFAULT_SSL_PROTOCOL, restClientBuilder.getSslProtocol());\r
+ \r
+ restClientBuilder.setSslProtocol("TLSv1.2");\r
+ assertEquals("TLSv1.2", restClientBuilder.getSslProtocol());\r
+ \r
+ }\r
\r
}\r