import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.Uninterruptibles;
-import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
     }
 
     protected void assertAndRetryIfNeeded(Runnable asserter, long timeoutInSeconds) {
-        final Instant expiry = Instant.now().plusSeconds(timeoutInSeconds);
-        while (true) {
-            try {
-                asserter.run();
-                break; // we're cool, assertion passed
-            } catch (AssertionError fail) {
-                Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
-                if (Instant.now().isAfter(expiry)) {
-                    throw fail;
-                } else {
-                    System.out.println("retrying after: " + fail);
-                }
-            }
-        }
+        TestUtils.assertAndRetryIfNeeded(timeoutInSeconds, asserter);
     }
 
     protected ImmutableList<JobAuditStatus> vidAuditStatusesCompletedWithErrors(String jobId) {
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import com.google.common.util.concurrent.Uninterruptibles;
 import java.io.IOException;
 import java.io.InputStream;
+import java.time.Instant;
 import java.util.Map;
 import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 import org.apache.commons.text.RandomStringGenerator;
         return generator.generate(length);
     }
 
+    public static void assertAndRetryIfNeeded(long timeoutInSeconds, Runnable asserter) {
+        final Instant expiry = Instant.now().plusSeconds(timeoutInSeconds);
+        while (true) {
+            try {
+                asserter.run();
+                break; // we're cool, assertion passed
+            } catch (AssertionError fail) {
+                Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+                if (Instant.now().isAfter(expiry)) {
+                    throw fail;
+                } else {
+                    System.out.println("retrying after: " + fail);
+                }
+            }
+        }
+    }
+
     @DataProvider
     public static Object[][] trueAndFalse() {
         return new Object[][]{{true}, {false}};
 
 import static org.hamcrest.Matchers.equalToIgnoringCase;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.collection.IsMapContaining.hasKey;
+import static org.onap.vid.api.TestUtils.assertAndRetryIfNeeded;
 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
         registerExpectationFromPreset(new PresetAAIGetVpnsByType(), APPEND);
         String requestId = getRequestId(() -> restTemplate.getForEntity(buildUri("aai_get_vpn_list"), String.class));
 
-        assertThat("request id must be found in exactly two rows", getRequestLogLines(requestId),
+        assertAndRetryIfNeeded(5, () -> assertThat("request id must be found in exactly two rows", getRequestLogLines(requestId),
             contains(
                 allOf(containsString(requestId), containsString("Entering")),
                 allOf(containsString(requestId), containsString("Exiting"))
-            ));
+            )));
     }
 
     private List<String> getRequestLogLines(String requestId) {
 
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.matchesPattern;
+import static org.onap.vid.api.TestUtils.assertAndRetryIfNeeded;
 import static vid.automation.test.services.SimulatorApi.retrieveRecordedRequests;
 
 import com.fasterxml.jackson.databind.JsonNode;
     }
 
     public static void verifyExistenceOfIncomingReqsInAuditLogs (RestTemplate restTemplate, URI uri, String requestId, String path){
-        List<String> logLines = getRequestLogLines(requestId, LogName.audit2019, restTemplate, uri);
-        String requestIdPrefix = "RequestID=";
-        assertThat("\nENTRY & EXIT logs are expected to include RequestId: " + requestId
-                        + " \nAnd request path: "
-                        + path +
-                        "\nin exactly two rows - inside the audit log matching lines:\n"
-                        + String.join("\n", logLines) + "\n",
+        assertAndRetryIfNeeded(5, () -> {
+            List<String> logLines = getRequestLogLines(requestId, LogName.audit2019, restTemplate, uri);
+            String requestIdPrefix = "RequestID=";
+            assertThat("\nENTRY & EXIT logs are expected to include RequestId: " + requestId
+                    + " \nAnd request path: "
+                    + path +
+                    "\nin exactly two rows - inside the audit log matching lines:\n"
+                    + String.join("\n", logLines) + "\n",
                 logLines,
                 contains(
-                        allOf(
-                                containsString(requestIdPrefix + requestId),
-                                containsString("ENTRY"),
-                                containsString(path)),
-                        allOf(
-                                containsString(requestIdPrefix + requestId),
-                                containsString("EXIT"),
-                                containsString(path))
+                    allOf(
+                        containsString(requestIdPrefix + requestId),
+                        containsString("ENTRY"),
+                        containsString(path)),
+                    allOf(
+                        containsString(requestIdPrefix + requestId),
+                        containsString("EXIT"),
+                        containsString(path))
                 ));
+        });
     }
 
     public static void assertHeadersAndMetricLogs (RestTemplate restTemplate, URI uri, String requestId, String path, int requestsSize){
-        List<String> logLines =
-                getRequestLogLines(requestId, LogName.metrics2019, restTemplate, uri);
-
         List<RecordedRequests> requests = retrieveRecordedRequests();
         List<RecordedRequests> underTestRequests =
                 requests.stream().filter(x -> x.path.contains(path)).collect(toList());
             String invocationId = invocationIds.get(0);
             allInvocationIds.add(invocationId);
 
-            assertIdsInMetricsLog(logLines, requestId, invocationId);
+            assertAndRetryIfNeeded(5, () -> assertIdsInMetricsLog(
+                getRequestLogLines(requestId, LogName.metrics2019, restTemplate, uri), requestId, invocationId)
+            );
         });
 
         //make sure no InvocationId is repeated twice