From 874b6ef0689db7ea13b04146f2dca28545d3429c Mon Sep 17 00:00:00 2001 From: Surat Das Date: Sun, 25 Apr 2021 22:51:02 -0700 Subject: [PATCH 1/2] VRT willl return build statistics on stop. --- .../sdk_java/VisualRegressionTracker.java | 6 +++-- .../sdk_java/response/VRTStopResponse.java | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java diff --git a/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java b/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java index 826cd6d..da4e13f 100644 --- a/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java +++ b/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java @@ -5,6 +5,7 @@ import io.visual_regression_tracker.sdk_java.request.TestRunRequest; import io.visual_regression_tracker.sdk_java.response.BuildResponse; import io.visual_regression_tracker.sdk_java.response.TestRunResponse; +import io.visual_regression_tracker.sdk_java.response.VRTStopResponse; import lombok.extern.slf4j.Slf4j; import java.io.IOException; @@ -60,7 +61,7 @@ public BuildResponse start() throws IOException, InterruptedException { return buildResponse; } - public void stop() throws IOException, InterruptedException { + public VRTStopResponse stop() throws IOException, InterruptedException { if (!isStarted()) { throw new TestRunException(TRACKER_NOT_STARTED); } @@ -69,9 +70,10 @@ public void stop() throws IOException, InterruptedException { HttpRequest.BodyPublisher body = HttpRequest.BodyPublishers.ofString(""); HttpResponse response = getResponse(METHOD.PATCH, paths.getBuildPathForBuild(buildId), body); - handleResponse(response, Object.class); + VRTStopResponse vrtStopResponse = handleResponse(response, VRTStopResponse.class); log.info("Visual Regression Tracker is stopped for buildId <{}>", buildId); + return vrtStopResponse; } public TestRunResult track(String name, String imageBase64, TestRunOptions testRunOptions) diff --git a/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java b/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java new file mode 100644 index 0000000..49179ec --- /dev/null +++ b/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java @@ -0,0 +1,23 @@ +package io.visual_regression_tracker.sdk_java.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class VRTStopResponse { + + private final String id; + private final String ciBuildId; + private final int number; + private final String branchName; + private final String status; + private final String projectId; + private final String userId; + private final int passedCount; + private final int failedCount; + private final int unresolvedCount; + private final boolean merge; + private final boolean isRunning; + +} From 231dc64de4407b6af4e90ac0e3284b7f6ba90c0e Mon Sep 17 00:00:00 2001 From: Surat Das Date: Mon, 26 Apr 2021 19:53:19 -0700 Subject: [PATCH 2/2] Fixed review comments. --- .../sdk_java/VisualRegressionTracker.java | 5 +- .../sdk_java/response/BuildResponse.java | 9 ++++ .../sdk_java/response/VRTStopResponse.java | 23 --------- .../sdk_java/VisualRegressionTrackerTest.java | 47 +++++++++++-------- 4 files changed, 39 insertions(+), 45 deletions(-) delete mode 100644 src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java diff --git a/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java b/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java index da4e13f..41a300e 100644 --- a/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java +++ b/src/main/java/io/visual_regression_tracker/sdk_java/VisualRegressionTracker.java @@ -5,7 +5,6 @@ import io.visual_regression_tracker.sdk_java.request.TestRunRequest; import io.visual_regression_tracker.sdk_java.response.BuildResponse; import io.visual_regression_tracker.sdk_java.response.TestRunResponse; -import io.visual_regression_tracker.sdk_java.response.VRTStopResponse; import lombok.extern.slf4j.Slf4j; import java.io.IOException; @@ -61,7 +60,7 @@ public BuildResponse start() throws IOException, InterruptedException { return buildResponse; } - public VRTStopResponse stop() throws IOException, InterruptedException { + public BuildResponse stop() throws IOException, InterruptedException { if (!isStarted()) { throw new TestRunException(TRACKER_NOT_STARTED); } @@ -70,7 +69,7 @@ public VRTStopResponse stop() throws IOException, InterruptedException { HttpRequest.BodyPublisher body = HttpRequest.BodyPublishers.ofString(""); HttpResponse response = getResponse(METHOD.PATCH, paths.getBuildPathForBuild(buildId), body); - VRTStopResponse vrtStopResponse = handleResponse(response, VRTStopResponse.class); + BuildResponse vrtStopResponse = handleResponse(response, BuildResponse.class); log.info("Visual Regression Tracker is stopped for buildId <{}>", buildId); return vrtStopResponse; diff --git a/src/main/java/io/visual_regression_tracker/sdk_java/response/BuildResponse.java b/src/main/java/io/visual_regression_tracker/sdk_java/response/BuildResponse.java index 36e6126..b10430a 100644 --- a/src/main/java/io/visual_regression_tracker/sdk_java/response/BuildResponse.java +++ b/src/main/java/io/visual_regression_tracker/sdk_java/response/BuildResponse.java @@ -9,4 +9,13 @@ public class BuildResponse { private final String id; private final String projectId; private final String ciBuildId; + private final int number; + private final String branchName; + private final String status; + private final String userId; + private final int passedCount; + private final int failedCount; + private final int unresolvedCount; + private final boolean merge; + private final boolean isRunning; } diff --git a/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java b/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java deleted file mode 100644 index 49179ec..0000000 --- a/src/main/java/io/visual_regression_tracker/sdk_java/response/VRTStopResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.visual_regression_tracker.sdk_java.response; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class VRTStopResponse { - - private final String id; - private final String ciBuildId; - private final int number; - private final String branchName; - private final String status; - private final String projectId; - private final String userId; - private final int passedCount; - private final int failedCount; - private final int unresolvedCount; - private final boolean merge; - private final boolean isRunning; - -} diff --git a/src/test/java/io/visual_regression_tracker/sdk_java/VisualRegressionTrackerTest.java b/src/test/java/io/visual_regression_tracker/sdk_java/VisualRegressionTrackerTest.java index ab15169..685d270 100644 --- a/src/test/java/io/visual_regression_tracker/sdk_java/VisualRegressionTrackerTest.java +++ b/src/test/java/io/visual_regression_tracker/sdk_java/VisualRegressionTrackerTest.java @@ -46,30 +46,30 @@ public class VisualRegressionTrackerTest { private final static String CI_BUILD_ID = "123456789"; private final static String NAME = "Test name"; private final static String IMAGE_BASE_64 = "image"; - private final static int HTTP_TIMOUT = 1; + private final static int HTTP_TIMEOUT = 1; private final Gson gson = new Gson(); private VisualRegressionTrackerConfig config; - private MockWebServer server; + private MockWebServer mockWebServer; private VisualRegressionTracker vrt; private VisualRegressionTracker vrtMocked; @SneakyThrows @BeforeMethod public void setup() { - server = new MockWebServer(); - server.start(); + mockWebServer = new MockWebServer(); + mockWebServer.start(); // target to mock server config = new VisualRegressionTrackerConfig( - server.url("/").toString(), + mockWebServer.url("/").toString(), "733c148e-ef70-4e6d-9ae5-ab22263697cc", "XHGDZDFD3GMJDNM87JKEMP0JS1G5", "develop", false, CI_BUILD_ID, - HTTP_TIMOUT); + HTTP_TIMEOUT); vrt = new VisualRegressionTracker(config); vrtMocked = mock(VisualRegressionTracker.class); vrtMocked.paths = new PathProvider("baseApiUrl"); @@ -78,7 +78,7 @@ public void setup() { @SneakyThrows @AfterMethod public void tearDown() { - server.shutdown(); + mockWebServer.shutdown(); reset(vrtMocked); } @@ -94,13 +94,13 @@ public void shouldStartBuild() throws IOException, InterruptedException { .projectId(PROJECT_ID) .ciBuildId(CI_BUILD_ID) .build(); - server.enqueue(new MockResponse() + mockWebServer.enqueue(new MockResponse() .setResponseCode(200) .setBody(gson.toJson(buildResponse))); BuildResponse result = vrt.start(); - RecordedRequest recordedRequest = server.takeRequest(); + RecordedRequest recordedRequest = mockWebServer.takeRequest(); assertThat(recordedRequest.getHeader(VisualRegressionTracker.API_KEY_HEADER), is(config.getApiKey())); assertThat(recordedRequest.getBody().readUtf8(), is(gson.toJson(buildRequest))); assertThat(vrt.buildId, is(BUILD_ID)); @@ -116,17 +116,25 @@ public void shouldStopBuild() throws IOException, InterruptedException { vrt.projectId = PROJECT_ID; BuildResponse buildResponse = BuildResponse.builder() .id(BUILD_ID) + .passedCount(1) + .unresolvedCount(2) + .isRunning(false) + .status("unresolved") .build(); - server.enqueue(new MockResponse() + mockWebServer.enqueue(new MockResponse() .setResponseCode(200) .setBody(gson.toJson(buildResponse))); - vrt.stop(); + BuildResponse actualBuildResponse = vrt.stop(); - RecordedRequest recordedRequest = server.takeRequest(); + RecordedRequest recordedRequest = mockWebServer.takeRequest(); assertThat(recordedRequest.getMethod(), is("PATCH")); assertThat(recordedRequest.getHeader(VisualRegressionTracker.API_KEY_HEADER), is(config.getApiKey())); assertThat(Objects.requireNonNull(recordedRequest.getRequestUrl()).encodedPath(), containsString(BUILD_ID)); + assertThat(actualBuildResponse.isRunning(), is(false)); + assertThat(actualBuildResponse.getStatus(), containsString("unresolved")); + assertThat(actualBuildResponse.getPassedCount(), is(1)); + assertThat(actualBuildResponse.getUnresolvedCount(), is(2)); } @Test(expectedExceptions = TestRunException.class, @@ -166,13 +174,13 @@ public void shouldSubmitTestRun() throws IOException, InterruptedException { TestRunResponse testRunResponse = TestRunResponse.builder() .status(TestRunStatus.UNRESOLVED) .build(); - server.enqueue(new MockResponse().setBody(gson.toJson(testRunResponse))); + mockWebServer.enqueue(new MockResponse().setBody(gson.toJson(testRunResponse))); vrt.buildId = BUILD_ID; vrt.projectId = PROJECT_ID; TestRunResponse result = vrt.submitTestRun(NAME, IMAGE_BASE_64, testRunOptions); - RecordedRequest request = server.takeRequest(); + RecordedRequest request = mockWebServer.takeRequest(); assertThat(request.getHeader(VisualRegressionTracker.API_KEY_HEADER), is(config.getApiKey())); assertThat(request.getBody().readUtf8(), is(gson.toJson(testRunRequest))); assertThat(gson.toJson(result), is(gson.toJson(testRunResponse))); @@ -348,13 +356,13 @@ public void httpTimeoutWorks() throws IOException, InterruptedException { .build(); String json = gson.toJson(buildResponse); //body size is 97 bytes, http timeout is 1s, set body read delay to 0.5s, wait that vrt get all values correctly - server.enqueue(new MockResponse().throttleBody(json.length(), HTTP_TIMOUT * 1000 - 500, TimeUnit.MILLISECONDS) + mockWebServer.enqueue(new MockResponse().throttleBody(json.length(), HTTP_TIMEOUT * 1000 - 500, TimeUnit.MILLISECONDS) .setResponseCode(200) .setBody(json)); vrt.start(); - server.takeRequest(); + mockWebServer.takeRequest(); assertThat(vrt.buildId, is(BUILD_ID)); assertThat(vrt.projectId, is(PROJECT_ID)); @@ -374,13 +382,14 @@ public void httpTimeoutElapsed() throws IOException, InterruptedException { .ciBuildId(CI_BUILD_ID) .build(); String json = gson.toJson(buildResponse); - //body size is 97 bytes, http timeout is 1s, set body read delay to 1s, wait for error - server.enqueue(new MockResponse().throttleBody(json.length(), HTTP_TIMOUT, TimeUnit.SECONDS) + //Send part of the body after every timeout, http timeout is 1s, set body read delay to 1s, wait for error + //For some reason double HTTP_TIMEOUT does not throw exception. + mockWebServer.enqueue(new MockResponse().throttleBody((json.length() / 2), HTTP_TIMEOUT, TimeUnit.SECONDS) .setResponseCode(200) .setBody(json)); vrt.start(); - server.takeRequest(); + mockWebServer.takeRequest(); } }