From 598c2469a004c50a1b29882e02e2fab7a8407d8b Mon Sep 17 00:00:00 2001 From: Fiete Ostkamp Date: Thu, 28 Dec 2023 16:17:47 +0100 Subject: [PATCH] Make rest-client request timeout in model-loader configurable - this reduces the test execution time, when test cases run into timouts Issue-ID: AAI-3703 Change-Id: Ie683f55e5ce8d59b10d2788aea6933854dcb7e99 Signed-off-by: Fiete Ostkamp --- .../aai/modelloader/config/ModelLoaderConfig.java | 14 +++++++++++++- .../aai/modelloader/restclient/AaiRestClient.java | 19 +++++++------------ .../restclient/HttpsBabelServiceClient.java | 2 ++ .../modelloader/restclient/TestAaiServiceClient.java | 8 +++++--- .../restclient/TestBabelServiceClient.java | 10 +++++++--- 5 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java index a49288d..7da90d9 100644 --- a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java +++ b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java @@ -27,12 +27,12 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.Properties; import org.apache.commons.lang3.StringUtils; import org.eclipse.jetty.util.security.Password; import org.onap.sdc.api.consumer.IConfiguration; - /** * Properties for the Model Loader * @@ -97,6 +97,8 @@ public class ModelLoaderConfig implements IConfiguration { protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR"; protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator"); + protected static final String PROP_AAI_CLIENT_CONNECT_TIMEOUT_MS = PREFIX_AAI + "RESTCLIENT_CONNECT_TIMEOUT"; + protected static final String PROP_AAI_CLIENT_READ_TIMEOUT_MS = PREFIX_AAI + "RESTCLIENT_READ_TIMEOUT"; private static String configHome; private Properties modelLoaderProperties = null; @@ -401,4 +403,14 @@ public class ModelLoaderConfig implements IConfiguration { } } + public int getClientConnectTimeoutMs() { + String connectTimeout = Optional.ofNullable(get(PROP_AAI_CLIENT_CONNECT_TIMEOUT_MS)).orElse("120000"); + return Integer.parseInt(connectTimeout); + } + + public int getClientReadTimeoutMs() { + String connectTimeout = Optional.ofNullable(get(PROP_AAI_CLIENT_READ_TIMEOUT_MS)).orElse("120000"); + return Integer.parseInt(connectTimeout); + } + } diff --git a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java index 29c0c70..40aeacc 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java @@ -156,24 +156,19 @@ public class AaiRestClient { private RestClient setupClient() { RestClient restClient = new RestClient(); + restClient.validateServerHostname(false) + .validateServerCertChain(false) + .connectTimeoutMs(config.getClientConnectTimeoutMs()) + .readTimeoutMs(config.getClientReadTimeoutMs()); //Use certs only if SSL is enabled if (config.useHttpsWithAAI()) {// @formatter:off - restClient.validateServerHostname(false) - .validateServerCertChain(false) - .clientCertFile(config.getAaiKeyStorePath()) - .clientCertPassword(config.getAaiKeyStorePassword()) - .connectTimeoutMs(120000) - .readTimeoutMs(120000); + restClient + .clientCertFile(config.getAaiKeyStorePath()) + .clientCertPassword(config.getAaiKeyStorePassword()); // @formatter:on } - else { - restClient.validateServerHostname(false) - .validateServerCertChain(false) - .connectTimeoutMs(120000) - .readTimeoutMs(120000); - } if (useBasicAuth()) { restClient.authenticationMode(RestAuthenticationMode.SSL_BASIC); diff --git a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java index 88967b2..c76996f 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java @@ -130,6 +130,8 @@ public class HttpsBabelServiceClient implements BabelServiceClient { } client = Client.create(new DefaultClientConfig()); + client.setConnectTimeout(config.getClientConnectTimeoutMs()); + client.setReadTimeout(config.getClientReadTimeoutMs()); logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Jersey client created"); } diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TestAaiServiceClient.java b/src/test/java/org/onap/aai/modelloader/restclient/TestAaiServiceClient.java index fd65383..18753b1 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TestAaiServiceClient.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TestAaiServiceClient.java @@ -53,12 +53,14 @@ public class TestAaiServiceClient { @BeforeEach public void startJetty() throws Exception { - server = new Server(8080); + server = new Server(0); server.setHandler(getMockHandler()); server.start(); Properties props = new Properties(); props.put("ml.aai.KEYSTORE_PASSWORD", "2244"); + props.put("ml.aai.RESTCLIENT_CONNECT_TIMEOUT", "3000"); + props.put("ml.aai.RESTCLIENT_READ_TIMEOUT", "3000"); ModelLoaderConfig config = new ModelLoaderConfig(props, "."); aaiClient = new AaiRestClient(config); } @@ -78,11 +80,11 @@ public class TestAaiServiceClient { @Test public void testOperations() { - String url = "http://localhost:8080"; + String url = server.getURI().toString(); String transId = ""; MediaType mediaType = MediaType.APPLICATION_JSON_TYPE; aaiClient.getResource(url, "", mediaType); - aaiClient.deleteResource("http://localhost", transId, ""); + aaiClient.deleteResource(url, "", transId); aaiClient.getAndDeleteResource(url, transId); aaiClient.postResource(url, "", transId, mediaType); aaiClient.putResource(url, "", transId, mediaType); diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java index c653244..19e35ca 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java @@ -69,7 +69,7 @@ public class TestBabelServiceClient { response.add(new BabelArtifact("", null, "")); responseBody = new Gson().toJson(response); - server = new Server(8080); + server = new Server(0); server.setHandler(getMockHandler()); server.start(); } @@ -81,13 +81,14 @@ public class TestBabelServiceClient { @Test public void testRestClient() throws BabelServiceClientException, IOException, URISyntaxException { + String url = server.getURI().toString(); Properties configProperties = new Properties(); configProperties.put("ml.babel.KEYSTORE_PASSWORD", "OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0"); configProperties.put("ml.babel.KEYSTORE_FILE", "src/test/resources/auth/aai-client-dummy.p12"); configProperties.put("ml.babel.TRUSTSTORE_PASSWORD", "OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0"); // In a real deployment this would be a different file (to the client keystore) configProperties.put("ml.babel.TRUSTSTORE_FILE", "src/test/resources/auth/aai-client-dummy.p12"); - configProperties.put("ml.babel.BASE_URL", "http://localhost:8080/"); + configProperties.put("ml.babel.BASE_URL", url); configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate"); BabelServiceClient client = new HttpsBabelServiceClientFactory().create(new ModelLoaderConfig(configProperties, ".")); @@ -99,10 +100,13 @@ public class TestBabelServiceClient { @Test public void testRestClientHttp() throws BabelServiceClientException, IOException, URISyntaxException { + String url = server.getURI().toString(); Properties configProperties = new Properties(); configProperties.put("ml.babel.USE_HTTPS", "false"); - configProperties.put("ml.babel.BASE_URL", "http://localhost:8080/"); + configProperties.put("ml.babel.BASE_URL", url); configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate"); + configProperties.put("ml.aai.RESTCLIENT_CONNECT_TIMEOUT", "3000"); + configProperties.put("ml.aai.RESTCLIENT_READ_TIMEOUT", "3000"); BabelServiceClient client = new HttpsBabelServiceClientFactory().create(new ModelLoaderConfig(configProperties, ".")); List result = -- 2.16.6