From d2db3c64d4fc124b6cfa502ae383be32fb77bd6b Mon Sep 17 00:00:00 2001 From: "kirill.turutin" Date: Wed, 24 Jul 2019 15:02:35 +0300 Subject: [PATCH 1/2] Issue-131 har default values --- .../browserup/harreader/model/HarContent.java | 4 +- .../com/browserup/harreader/model/HarLog.java | 3 - .../harreader/model/HarPostData.java | 2 +- .../harreader/model/HarResponse.java | 2 +- .../bup/proxy/HarValidationTest.groovy | 73 +++++++++++++++++++ .../browserup/harreader/model/HarLogTest.java | 2 +- .../{bmp-logging.yaml => bup-logging.yaml} | 0 .../bup/proxy/rest/ValidateHarRestTest.groovy | 65 +++++++++++++++++ 8 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy rename browserup-proxy-dist/src/main/resources/{bmp-logging.yaml => bup-logging.yaml} (100%) create mode 100644 browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java index 6f9a195ec..4a9f5a3b4 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java @@ -13,9 +13,9 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarContent { - private Long size; + private Long size = 0L; private Long compression; - private String mimeType; + private String mimeType = ""; private String text; private String encoding; private String comment; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarLog.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarLog.java index 913bfd5b9..379a506eb 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarLog.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarLog.java @@ -63,9 +63,6 @@ public void setCreator(HarCreatorBrowser creator) { * @return Information about the browser used. */ public HarCreatorBrowser getBrowser() { - if (browser == null) { - browser = new HarCreatorBrowser(); - } return browser; } diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java index c7e5df498..a4bde5a8d 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java @@ -15,7 +15,7 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarPostData { - private String mimeType; + private String mimeType = ""; private List params = new ArrayList<>(); private String text; private String comment; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java index 6494cada3..e5cb29a76 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java @@ -23,7 +23,7 @@ public class HarResponse { private List cookies; private List headers; private HarContent content; - private String redirectURL; + private String redirectURL = ""; private Long headersSize; private Long bodySize; private String comment; diff --git a/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy new file mode 100644 index 000000000..09658b0b5 --- /dev/null +++ b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy @@ -0,0 +1,73 @@ +/* + * Modifications Copyright (c) 2019 BrowserUp, Inc. + */ + +package com.browserup.bup.proxy + +import com.browserup.bup.BrowserUpProxy +import com.browserup.bup.BrowserUpProxyServer +import com.browserup.bup.filters.util.HarCaptureUtil +import com.browserup.bup.proxy.dns.AdvancedHostResolver +import com.browserup.bup.proxy.test.util.MockServerTest +import com.browserup.bup.proxy.test.util.NewProxyServerTestUtil +import com.browserup.harreader.model.* +import com.github.tomakehurst.wiremock.client.WireMock +import com.google.common.collect.Iterables +import org.apache.http.client.config.RequestConfig +import org.apache.http.client.methods.CloseableHttpResponse +import org.apache.http.client.methods.HttpGet +import org.junit.After +import org.junit.Test +import org.mockito.invocation.InvocationOnMock +import org.mockito.stubbing.Answer + +import java.text.SimpleDateFormat +import java.util.concurrent.TimeUnit + +import static com.github.tomakehurst.wiremock.client.WireMock.* +import static org.hamcrest.Matchers.* +import static org.junit.Assert.* +import static org.mockito.Mockito.mock +import static org.mockito.Mockito.when + +class HarValidationTest extends MockServerTest { + private BrowserUpProxy proxy + + @After + void tearDown() { + if (proxy?.started) { + proxy.abort() + } + } + + @Test + void testDefaultValuesOfHarResponse() { + def stubUrl = "/testUrl.*" + stubFor(get(urlMatching(stubUrl)).willReturn(ok())) + + proxy = new BrowserUpProxyServer() + proxy.start() + + proxy.newHar() + + def requestUrl = "http://localhost:${mockServerPort}/testUrl" + + NewProxyServerTestUtil.getNewHttpClient(proxy.port).withCloseable { + NewProxyServerTestUtil.toStringAndClose(it.execute(new HttpGet(requestUrl)).getEntity().getContent()) + } + + Thread.sleep(500) + def har = proxy.getHar() + def entry = proxy.har.log.entries.get(0) + def harResponse = entry.response + + assertEquals("Expected redirectURL to have default empty string value", "", harResponse.redirectURL) + assertEquals("Expected content size to have value 0 by default", 0, harResponse.content.size) + assertEquals("Expected empty mime type", "", har.log.entries[0].response.content.mimeType) + assertEquals("Expected empty request post data mime type", "", har.log.entries[0].request.postData.mimeType) + + verify(1, getRequestedFor(urlMatching(stubUrl))) + } + + +} diff --git a/browserup-proxy-core/src/test/java/com/browserup/harreader/model/HarLogTest.java b/browserup-proxy-core/src/test/java/com/browserup/harreader/model/HarLogTest.java index 7b3fe8ff5..133e4f264 100644 --- a/browserup-proxy-core/src/test/java/com/browserup/harreader/model/HarLogTest.java +++ b/browserup-proxy-core/src/test/java/com/browserup/harreader/model/HarLogTest.java @@ -63,7 +63,7 @@ public void testCreatorNull() { public void testBrowserNull() { HarLog log = new HarLog(); log.setBrowser(null); - Assert.assertNotNull(log.getBrowser()); + Assert.assertNull(log.getBrowser()); } @Test diff --git a/browserup-proxy-dist/src/main/resources/bmp-logging.yaml b/browserup-proxy-dist/src/main/resources/bup-logging.yaml similarity index 100% rename from browserup-proxy-dist/src/main/resources/bmp-logging.yaml rename to browserup-proxy-dist/src/main/resources/bup-logging.yaml diff --git a/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy new file mode 100644 index 000000000..5e946737b --- /dev/null +++ b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy @@ -0,0 +1,65 @@ +/* + * Modifications Copyright (c) 2019 BrowserUp, Inc. + */ + +package com.browserup.bup.proxy.rest + +import com.browserup.harreader.model.Har +import com.browserup.harreader.model.HarEntry +import com.fasterxml.jackson.databind.ObjectMapper +import com.github.tomakehurst.wiremock.client.WireMock +import groovyx.net.http.HttpResponseDecorator +import groovyx.net.http.Method +import org.apache.http.entity.ContentType +import org.hamcrest.Matchers +import org.junit.Test + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse +import static com.github.tomakehurst.wiremock.client.WireMock.get +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static org.junit.Assert.assertEquals +import static org.junit.Assert.assertNull +import static org.junit.Assert.assertThat + +class ValidateHarRestTest extends BaseRestTest { + + @Override + String getUrlPath() { + return 'har' + } + + @Test + void validateHarForRequestWithEmptyContentAndMimeType() { + def urlToCatch = 'test' + def responseBody = '' + + mockTargetServerResponse(urlToCatch, responseBody) + + proxyManager.get()[0].newHar() + + requestToTargetServer(urlToCatch, responseBody) + + proxyRestServerClient.request(Method.GET, ContentType.WILDCARD) { req -> + uri.path = "/proxy/${proxy.port}/${urlPath}" + response.success = { HttpResponseDecorator resp -> + Har har = new ObjectMapper().readValue(resp.entity.content, Har) as Har + assertNull("Expected null browser", har.log.browser) + assertEquals("Expected zero content size for the entry", 0, har.log.entries[0].response.content.size) + assertEquals("Expected empty redirect url", "", har.log.entries[0].response.redirectURL) + assertEquals("Expected empty mime type", "", har.log.entries[0].response.content.mimeType) + assertEquals("Expected empty request post data mime type", "", har.log.entries[0].request.postData.mimeType) + } + } + + WireMock.verify(1, getRequestedFor(urlEqualTo("/${urlToCatch}"))) + } + + protected void mockTargetServerResponse(String url, String responseBody) { + def response = aResponse().withStatus(200) + .withBody(responseBody) + .withHeader('Content-Type', '') + stubFor(get(urlEqualTo("/${url}")).willReturn(response)) + } +} From 5e795873f671ed5e6af67647cd8719242924dc49 Mon Sep 17 00:00:00 2001 From: "kirill.turutin" Date: Fri, 26 Jul 2019 14:10:08 +0300 Subject: [PATCH 2/2] Default Har values from Har spec --- .../browserup/harreader/model/HarContent.java | 2 +- .../browserup/harreader/model/HarCookie.java | 4 +- .../harreader/model/HarCreatorBrowser.java | 4 +- .../browserup/harreader/model/HarEntry.java | 4 +- .../browserup/harreader/model/HarPage.java | 6 +- .../harreader/model/HarPostData.java | 2 +- .../harreader/model/HarPostDataParam.java | 2 +- .../browserup/harreader/model/HarRequest.java | 6 +- .../harreader/model/HarResponse.java | 4 +- .../bup/proxy/HarValidationTest.groovy | 143 +++++++++++++++++- .../com/browserup/bup/proxy/NewHarTest.groovy | 2 +- .../rest/FindMostRecentEntryRestTest.groovy | 3 +- .../bup/proxy/rest/ValidateHarRestTest.groovy | 74 +++++++-- 13 files changed, 216 insertions(+), 40 deletions(-) diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java index 4a9f5a3b4..52d3faf67 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarContent.java @@ -16,7 +16,7 @@ public class HarContent { private Long size = 0L; private Long compression; private String mimeType = ""; - private String text; + private String text = ""; private String encoding; private String comment; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCookie.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCookie.java index e74702c2b..883b4dba3 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCookie.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCookie.java @@ -15,8 +15,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarCookie { - private String name; - private String value; + private String name = ""; + private String value = ""; private String path; private String domain; private Date expires; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCreatorBrowser.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCreatorBrowser.java index 493f7e079..84f12fbe7 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCreatorBrowser.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarCreatorBrowser.java @@ -13,8 +13,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarCreatorBrowser { - private String name; - private String version; + private String name = ""; + private String version = ""; private String comment; /** diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarEntry.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarEntry.java index 235f58568..3640273f2 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarEntry.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarEntry.java @@ -20,8 +20,8 @@ public class HarEntry { private String pageref; - private Date startedDateTime; - private Integer time; + private Date startedDateTime = new Date(); + private Integer time = 0; private HarRequest request; private HarResponse response; private HarCache cache; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPage.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPage.java index b15030fc2..c42440556 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPage.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPage.java @@ -19,9 +19,9 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarPage { - private Date startedDateTime; - private String id; - private String title; + private Date startedDateTime = new Date(); + private String id = ""; + private String title = ""; private HarPageTiming pageTimings; private String comment; private Map additional = new HashMap<>(); diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java index a4bde5a8d..8b8586e9b 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostData.java @@ -17,7 +17,7 @@ public class HarPostData { private String mimeType = ""; private List params = new ArrayList<>(); - private String text; + private String text = ""; private String comment; /** diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostDataParam.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostDataParam.java index 839fceb1f..edd541005 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostDataParam.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarPostDataParam.java @@ -13,7 +13,7 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class HarPostDataParam { - private String name; + private String name = ""; private String value; private String fileName; private String contentType; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarRequest.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarRequest.java index c6e6fc2bd..8db62050c 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarRequest.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarRequest.java @@ -21,9 +21,9 @@ public class HarRequest { protected static final Long DEFAULT_SIZE = -1L; - private HttpMethod method; - private String url; - private String httpVersion; + private HttpMethod method = HttpMethod.GET; + private String url = ""; + private String httpVersion = "HTTP/1.1"; private List cookies; private List headers; private List queryString; diff --git a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java index e5cb29a76..a490dac87 100644 --- a/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java +++ b/browserup-proxy-core/src/main/java/com/browserup/harreader/model/HarResponse.java @@ -18,8 +18,8 @@ public class HarResponse { protected static final Long DEFAULT_SIZE = -1L; private HttpStatus status; - private String statusText; - private String httpVersion; + private String statusText = ""; + private String httpVersion = "HTTP/1.1"; private List cookies; private List headers; private HarContent content; diff --git a/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy index 09658b0b5..d6f2f967e 100644 --- a/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy +++ b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/HarValidationTest.groovy @@ -16,6 +16,8 @@ import com.google.common.collect.Iterables import org.apache.http.client.config.RequestConfig import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpGet +import org.hamcrest.Matcher +import org.hamcrest.core.Every import org.junit.After import org.junit.Test import org.mockito.invocation.InvocationOnMock @@ -41,7 +43,7 @@ class HarValidationTest extends MockServerTest { } @Test - void testDefaultValuesOfHarResponse() { + void testDefaultValuesOfMockedHarResponse() { def stubUrl = "/testUrl.*" stubFor(get(urlMatching(stubUrl)).willReturn(ok())) @@ -58,16 +60,143 @@ class HarValidationTest extends MockServerTest { Thread.sleep(500) def har = proxy.getHar() - def entry = proxy.har.log.entries.get(0) - def harResponse = entry.response - assertEquals("Expected redirectURL to have default empty string value", "", harResponse.redirectURL) - assertEquals("Expected content size to have value 0 by default", 0, harResponse.content.size) - assertEquals("Expected empty mime type", "", har.log.entries[0].response.content.mimeType) - assertEquals("Expected empty request post data mime type", "", har.log.entries[0].request.postData.mimeType) + assertNotNull("Expected not null log creator name", har.log.creator.name) + assertNotNull("Expected not null log creator version", har.log.creator.version) + har.log.pages.each { + assertNotNull("Expected not null har log pages id", it.id) + assertNotNull("Expected not null har log pages title", it.title) + assertNotNull("Expected not null har log pages startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har log pages pageTimings", it.pageTimings) + } + + har.log.entries.each { + assertNotNull("Expected not null har entries startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har entries time", it.time) + assertNotNull("Expected not null har entries request", it.request) + assertNotNull("Expected not null har entries response", it.response) + assertNotNull("Expected not null har entries cache", it.cache) + assertNotNull("Expected not null har entries timings", it.timings) + + assertNotNull("Expected not null har entries requests method", it.request.method) + assertNotNull("Expected not null har entries requests url", it.request.url) + assertNotNull("Expected not null har entries requests httpVersion", it.request.httpVersion) + assertNotNull("Expected not null har entries requests cookies", it.request.cookies) + assertNotNull("Expected not null har entries requests headers", it.request.headers) + assertNotNull("Expected not null har entries requests queryString", it.request.queryString) + assertNotNull("Expected not null har entries requests headersSize", it.request.headersSize) + assertNotNull("Expected not null har entries requests bodySize", it.request.bodySize) + + assertNotNull("Expected not null har entries responses status", it.response.status) + assertNotNull("Expected not null har entries responses statusText", it.response.statusText) + assertNotNull("Expected not null har entries responses httpVersion", it.response.httpVersion) + assertNotNull("Expected not null har entries responses cookies", it.response.cookies) + assertNotNull("Expected not null har entries responses content", it.response.content) + assertNotNull("Expected not null har entries responses redirectURL", it.response.redirectURL) + assertNotNull("Expected not null har entries responses headersSize", it.response.headersSize) + assertNotNull("Expected not null har entries responses bodySize", it.response.bodySize) + + it.response.cookies.each { cookie -> + assertNotNull("Expected not null har entries responses cookies name", cookie.name) + assertNotNull("Expected not null har entries responses cookies value", cookie.value) + } + + assertNotNull("Expected not null har entries requests postData mimeType", it.request.postData.mimeType) + assertNotNull("Expected not null har entries requests postData params", it.request.postData.params) + assertNotNull("Expected not null har entries requests postData text", it.request.postData.text) + + it.request.postData.params.each { param -> + assertNotNull("Expected not null har entries requests postData params name", param.name) + } + + assertNotNull("Expected not null har entries responses content size", it.response.content.size) + assertNotNull("Expected not null har entries responses content mimeType", it.response.content.mimeType) + assertNotNull("Expected not null har entries responses content text", it.response.content.text) + + assertNotNull("Expected not null har entries timings send", it.timings.send) + assertNotNull("Expected not null har entries timings wait", it.timings.wait) + assertNotNull("Expected not null har entries timings receive", it.timings.receive) + } verify(1, getRequestedFor(urlMatching(stubUrl))) } + @Test + void testDefaultValuesOfDefaultHar() { + def har = new Har() + def harLog = new HarLog() + def harPage = new HarPage() + def harEntry = new HarEntry() + def harResponse = new HarResponse() + def harRequest = new HarRequest() + def harPostData = new HarPostData() + harPostData.params = Collections.singletonList(new HarPostDataParam()) + + harResponse.cookies = Collections.singletonList(new HarCookie()) + harRequest.postData = harPostData + harEntry.request = harRequest + harEntry.response = harResponse + harLog.creator = new HarCreatorBrowser() + harLog.pages = Collections.singletonList(harPage) + harLog.entries = Collections.singletonList(harEntry) + har.log = harLog + + assertNotNull("Expected not null log creator name", har.log.creator.name) + assertNotNull("Expected not null log creator version", har.log.creator.version) + + har.log.pages.each { + assertNotNull("Expected not null har log pages id", it.id) + assertNotNull("Expected not null har log pages title", it.title) + assertNotNull("Expected not null har log pages startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har log pages pageTimings", it.pageTimings) + } + har.log.entries.each { + assertNotNull("Expected not null har entries startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har entries time", it.time) + assertNotNull("Expected not null har entries request", it.request) + assertNotNull("Expected not null har entries response", it.response) + assertNotNull("Expected not null har entries cache", it.cache) + assertNotNull("Expected not null har entries timings", it.timings) + + assertNotNull("Expected not null har entries requests method", it.request.method) + assertNotNull("Expected not null har entries requests url", it.request.url) + assertNotNull("Expected not null har entries requests httpVersion", it.request.httpVersion) + assertNotNull("Expected not null har entries requests cookies", it.request.cookies) + assertNotNull("Expected not null har entries requests headers", it.request.headers) + assertNotNull("Expected not null har entries requests queryString", it.request.queryString) + assertNotNull("Expected not null har entries requests headersSize", it.request.headersSize) + assertNotNull("Expected not null har entries requests bodySize", it.request.bodySize) + + assertNotNull("Expected not null har entries responses status", it.response.status) + assertNotNull("Expected not null har entries responses statusText", it.response.statusText) + assertNotNull("Expected not null har entries responses httpVersion", it.response.httpVersion) + assertNotNull("Expected not null har entries responses cookies", it.response.cookies) + assertNotNull("Expected not null har entries responses content", it.response.content) + assertNotNull("Expected not null har entries responses redirectURL", it.response.redirectURL) + assertNotNull("Expected not null har entries responses headersSize", it.response.headersSize) + assertNotNull("Expected not null har entries responses bodySize", it.response.bodySize) + + it.response.cookies.each { cookie -> + assertNotNull("Expected not null har entries responses cookies name", cookie.name) + assertNotNull("Expected not null har entries responses cookies value", cookie.value) + } + + assertNotNull("Expected not null har entries requests postData mimeType", it.request.postData.mimeType) + assertNotNull("Expected not null har entries requests postData params", it.request.postData.params) + assertNotNull("Expected not null har entries requests postData text", it.request.postData.text) + + it.request.postData.params.each { param -> + assertNotNull("Expected not null har entries requests postData params name", param.name) + } + + assertNotNull("Expected not null har entries responses content size", it.response.content.size) + assertNotNull("Expected not null har entries responses content mimeType", it.response.content.mimeType) + assertNotNull("Expected not null har entries responses content text", it.response.content.text) + + assertNotNull("Expected not null har entries timings send", it.timings.send) + assertNotNull("Expected not null har entries timings wait", it.timings.wait) + assertNotNull("Expected not null har entries timings receive", it.timings.receive) + } + } } diff --git a/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/NewHarTest.groovy b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/NewHarTest.groovy index 06be6c55b..e7406f6df 100644 --- a/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/NewHarTest.groovy +++ b/browserup-proxy-core/src/test/groovy/com/browserup/bup/proxy/NewHarTest.groovy @@ -262,7 +262,7 @@ class NewHarTest extends MockServerTest { assertEquals("Expected to capture response mimeType in HAR", responseContentType, content.mimeType) - assertNull("Expected to not capture body content in HAR", content.text) + assertEquals("Expected to not capture body content in HAR", "", content.text) verify(1, getRequestedFor(urlEqualTo(stubUrl))) } diff --git a/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/FindMostRecentEntryRestTest.groovy b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/FindMostRecentEntryRestTest.groovy index 9f8f6b1b3..796f1977e 100644 --- a/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/FindMostRecentEntryRestTest.groovy +++ b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/FindMostRecentEntryRestTest.groovy @@ -18,6 +18,7 @@ import org.junit.Test import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static org.junit.Assert.assertEquals import static org.junit.Assert.assertNotNull import static org.junit.Assert.assertNull import static org.junit.Assert.assertThat @@ -96,7 +97,7 @@ class FindMostRecentEntryRestTest extends BaseRestTest { uri.query = [urlPattern: urlPatternNotToMatchUrl] response.success = { HttpResponseDecorator resp -> def actualEntry = new ObjectMapper().readValue(resp.entity.content, HarEntry) as HarEntry - assertNull('Expected to find empty entry', actualEntry.startedDateTime) + assertEquals('Expected to find empty entry', "", actualEntry.request.url) } } diff --git a/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy index 5e946737b..1a3301459 100644 --- a/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy +++ b/browserup-proxy-rest/src/test/groovy/com/browserup/bup/proxy/rest/ValidateHarRestTest.groovy @@ -5,23 +5,16 @@ package com.browserup.bup.proxy.rest import com.browserup.harreader.model.Har -import com.browserup.harreader.model.HarEntry import com.fasterxml.jackson.databind.ObjectMapper import com.github.tomakehurst.wiremock.client.WireMock import groovyx.net.http.HttpResponseDecorator import groovyx.net.http.Method import org.apache.http.entity.ContentType -import org.hamcrest.Matchers import org.junit.Test -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse -import static com.github.tomakehurst.wiremock.client.WireMock.get -import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo -import static org.junit.Assert.assertEquals +import static com.github.tomakehurst.wiremock.client.WireMock.* +import static org.junit.Assert.assertNotNull import static org.junit.Assert.assertNull -import static org.junit.Assert.assertThat class ValidateHarRestTest extends BaseRestTest { @@ -46,14 +39,67 @@ class ValidateHarRestTest extends BaseRestTest { response.success = { HttpResponseDecorator resp -> Har har = new ObjectMapper().readValue(resp.entity.content, Har) as Har assertNull("Expected null browser", har.log.browser) - assertEquals("Expected zero content size for the entry", 0, har.log.entries[0].response.content.size) - assertEquals("Expected empty redirect url", "", har.log.entries[0].response.redirectURL) - assertEquals("Expected empty mime type", "", har.log.entries[0].response.content.mimeType) - assertEquals("Expected empty request post data mime type", "", har.log.entries[0].request.postData.mimeType) + assertNotNull("Expected not null log creator name", har.log.creator.name) + assertNotNull("Expected not null log creator version", har.log.creator.version) + + har.log.pages.each { + assertNotNull("Expected not null har log pages id", it.id) + assertNotNull("Expected not null har log pages title", it.title) + assertNotNull("Expected not null har log pages startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har log pages pageTimings", it.pageTimings) + } + + har.log.entries.each { + assertNotNull("Expected not null har entries startedDateTime", it.startedDateTime) + assertNotNull("Expected not null har entries time", it.time) + assertNotNull("Expected not null har entries request", it.request) + assertNotNull("Expected not null har entries response", it.response) + assertNotNull("Expected not null har entries cache", it.cache) + assertNotNull("Expected not null har entries timings", it.timings) + + assertNotNull("Expected not null har entries requests method", it.request.method) + assertNotNull("Expected not null har entries requests url", it.request.url) + assertNotNull("Expected not null har entries requests httpVersion", it.request.httpVersion) + assertNotNull("Expected not null har entries requests cookies", it.request.cookies) + assertNotNull("Expected not null har entries requests headers", it.request.headers) + assertNotNull("Expected not null har entries requests queryString", it.request.queryString) + assertNotNull("Expected not null har entries requests headersSize", it.request.headersSize) + assertNotNull("Expected not null har entries requests bodySize", it.request.bodySize) + + assertNotNull("Expected not null har entries responses status", it.response.status) + assertNotNull("Expected not null har entries responses statusText", it.response.statusText) + assertNotNull("Expected not null har entries responses httpVersion", it.response.httpVersion) + assertNotNull("Expected not null har entries responses cookies", it.response.cookies) + assertNotNull("Expected not null har entries responses content", it.response.content) + assertNotNull("Expected not null har entries responses redirectURL", it.response.redirectURL) + assertNotNull("Expected not null har entries responses headersSize", it.response.headersSize) + assertNotNull("Expected not null har entries responses bodySize", it.response.bodySize) + + it.response.cookies.each { cookie -> + assertNotNull("Expected not null har entries responses cookies name", cookie.name) + assertNotNull("Expected not null har entries responses cookies value", cookie.value) + } + + assertNotNull("Expected not null har entries requests postData mimeType", it.request.postData.mimeType) + assertNotNull("Expected not null har entries requests postData params", it.request.postData.params) + assertNotNull("Expected not null har entries requests postData text", it.request.postData.text) + + it.request.postData.params.each { param -> + assertNotNull("Expected not null har entries requests postData params name", param.name) + } + + assertNotNull("Expected not null har entries responses content size", it.response.content.size) + assertNotNull("Expected not null har entries responses content mimeType", it.response.content.mimeType) + assertNotNull("Expected not null har entries responses content text", it.response.content.text) + + assertNotNull("Expected not null har entries timings send", it.timings.send) + assertNotNull("Expected not null har entries timings wait", it.timings.wait) + assertNotNull("Expected not null har entries timings receive", it.timings.receive) + } } } - WireMock.verify(1, getRequestedFor(urlEqualTo("/${urlToCatch}"))) + verify(1, getRequestedFor(urlEqualTo("/${urlToCatch}"))) } protected void mockTargetServerResponse(String url, String responseBody) {