Add active waiting in integration tests 19/107219/2
authorBartosz Gardziejewski <bartosz.gardziejewski@nokia.com>
Wed, 6 May 2020 11:46:31 +0000 (13:46 +0200)
committerBartosz Gardziejewski <bartosz.gardziejewski@nokia.com>
Wed, 6 May 2020 12:37:36 +0000 (14:37 +0200)
Issue-ID: INT-1533
Signed-off-by: Bartosz Gardziejewski <bartosz.gardziejewski@nokia.com>
Change-Id: Id9a6324852de83f0dfc0f5dfa133ef672a7a5aed

pnfsimulator/integration/src/test/java/org/onap/pnfsimulator/integration/suites/DockerBasedTestsSuite.java

index 9ca7f60..3de06c3 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,6 +22,7 @@ package org.onap.pnfsimulator.integration.suites;
 
 import com.palantir.docker.compose.DockerComposeRule;
 import com.palantir.docker.compose.connection.waiting.HealthChecks;
+import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -31,12 +32,23 @@ import org.onap.pnfsimulator.integration.OptionalTemplatesTest;
 import org.onap.pnfsimulator.integration.SearchInTemplatesTest;
 import org.onap.pnfsimulator.integration.TemplatesManagementTest;
 import org.onap.pnfsimulator.integration.VariablesReplacement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+
+import static io.restassured.RestAssured.given;
 
 @RunWith(Suite.class)
 @SuiteClasses({BasicAvailabilityTest.class, TemplatesManagementTest.class, OptionalTemplatesTest.class,
     SearchInTemplatesTest.class, VariablesReplacement.class})
 public class DockerBasedTestsSuite {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(DockerBasedTestsSuite.class);
+
+    private static final String HEALTH_CHECK_ADDRESS = "http://0.0.0.0:5000/health";
+    private static final int RETRY_COUNT = 10;
+    private static final int RETRY_INTERVAL = 1000;
+
     @ClassRule
     public static DockerComposeRule docker = DockerComposeRule.builder()
         .file("../docker-compose.yml")
@@ -44,4 +56,34 @@ public class DockerBasedTestsSuite {
         .waitingForService("mongo", HealthChecks.toHaveAllPortsOpen())
         .build();
 
+    @BeforeClass
+    public static void waitForPnfSimulatorToBeHealthy() throws InterruptedException {
+        boolean isHealthy = false;
+        int retry = 0;
+        while (!isHealthy && retry < RETRY_COUNT) {
+            retry++;
+            LOGGER.info("Checking PNF health, try {} out of {}", retry, RETRY_COUNT);
+            isHealthy = performHealthCheck();
+            if (isHealthy) {
+                LOGGER.info("PNF is healthy");
+            } else {
+                LOGGER.info("PNF no healthy retrying in  {}", RETRY_COUNT);
+                Thread.sleep(RETRY_INTERVAL);
+            }
+        }
+    }
+
+    private static boolean performHealthCheck() {
+        boolean isUp = false;
+        try {
+            int statusCode = given().get(HEALTH_CHECK_ADDRESS).getStatusCode();
+            if (statusCode == HttpStatus.OK.value()) {
+                isUp = true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return isUp;
+    }
+
 }