It happens that logging is delayed, and rows are not available on disk
right after an inspected event.
Issue-ID: VID-647
Change-Id: Ic47cb2beff0be699f018ff6b5f264a57479bd7d0
Signed-off-by: Ittay Stern <ittay.stern@att.com>
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
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.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;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Predicate;
import java.util.stream.Collectors;
}
protected void assertAndRetryIfNeeded(Runnable asserter, long timeoutInSeconds) {
}
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) {
}
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.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.io.IOException;
import java.io.InputStream;
+import java.time.Instant;
import java.util.Map;
import java.util.Scanner;
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;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import org.apache.commons.text.RandomStringGenerator;
return generator.generate(length);
}
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}};
@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.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;
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));
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"))
contains(
allOf(containsString(requestId), containsString("Entering")),
allOf(containsString(requestId), containsString("Exiting"))
}
private List<String> getRequestLogLines(String requestId) {
}
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.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;
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){
}
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",
- 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){
}
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());
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);
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
});
//make sure no InvocationId is repeated twice