Make rest-client request timeout in model-loader configurable 05/136905/2
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Thu, 28 Dec 2023 15:17:47 +0000 (16:17 +0100)
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Fri, 5 Apr 2024 15:01:53 +0000 (17:01 +0200)
- this reduces the test execution time, when test cases run into timouts

Issue-ID: AAI-3703
Change-Id: Ie683f55e5ce8d59b10d2788aea6933854dcb7e99
Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java
src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java
src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java
src/test/java/org/onap/aai/modelloader/restclient/TestAaiServiceClient.java
src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java

index a49288d..7da90d9 100644 (file)
@@ -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);
+    }
+
 }
index 29c0c70..40aeacc 100644 (file)
@@ -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);
index 88967b2..c76996f 100644 (file)
@@ -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");
     }
index fd65383..18753b1 100644 (file)
@@ -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);
index c653244..19e35ca 100644 (file)
@@ -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<BabelArtifact> result =