Skip to content

Commit c35d56d

Browse files
replace binary content inside a report with placeholder text (#82)
1 parent 99fdc53 commit c35d56d

3 files changed

Lines changed: 55 additions & 8 deletions

File tree

webtau-http-groovy/src/test/groovy/com/twosigma/webtau/http/HttpTest.groovy

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,16 +324,32 @@ class HttpTest implements HttpConfiguration {
324324
body.should == null
325325
}
326326

327-
http.doc.capture('empty')
327+
def artifactName = 'empty'
328+
http.doc.capture(artifactName)
328329

329-
Path docRoot = DocumentationArtifactsLocation.resolve('empty')
330+
Path docRoot = DocumentationArtifactsLocation.resolve(artifactName)
330331
Path requestFile = docRoot.resolve("request.json")
331332
assertFalse(Files.exists(requestFile))
332333

333334
Path responseFile = docRoot.resolve("response.json")
334335
assertFalse(Files.exists(responseFile))
335336
}
336337

338+
@Test
339+
void "no files generated for binary request"() {
340+
def content = [1, 2, 3] as byte[]
341+
http.post("/empty", content) {
342+
body.should == null
343+
}
344+
345+
def artifactName = 'empty-binary'
346+
http.doc.capture(artifactName)
347+
348+
Path docRoot = DocumentationArtifactsLocation.resolve(artifactName)
349+
Path requestFile = docRoot.resolve("request.data")
350+
assertFalse(Files.exists(requestFile))
351+
}
352+
337353
@Test
338354
void "no validation request"() {
339355
def counter = [:].withDefault { 0 }

webtau-http/src/main/java/com/twosigma/webtau/http/validation/HttpValidationResult.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.util.stream.Collectors;
3535

3636
public class HttpValidationResult implements TestStepPayload {
37+
private static final String BINARY_CONTENT_PLACEHOLDER = "[binary content]";
38+
3739
private final String fullUrl;
3840
private final String requestMethod;
3941
private HttpRequestHeader requestHeader;
@@ -176,15 +178,15 @@ public long getElapsedTime() {
176178
result.put("errorMessage", errorMessage);
177179
result.put("mismatches", mismatches);
178180

181+
if (requestBody != null) {
182+
result.put("requestType", requestBody.type());
183+
result.put("requestBody", requestBody.isBinary() ? BINARY_CONTENT_PLACEHOLDER : requestBody.asString());
184+
}
185+
179186
if (response != null) {
180187
result.put("responseType", response.getContentType());
181188
result.put("responseStatusCode", response.getStatusCode());
182-
result.put("responseBody", response.getTextContent());
183-
}
184-
185-
if (requestBody != null) {
186-
result.put("requestType", requestBody.type());
187-
result.put("requestBody", requestBody.asString());
189+
result.put("responseBody", response.isBinary() ? BINARY_CONTENT_PLACEHOLDER : response.getTextContent());
188190
}
189191

190192
if (responseBodyNode != null) {

webtau-http/src/test/groovy/com/twosigma/webtau/http/HttpValidationResultTest.groovy

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
package com.twosigma.webtau.http
1818

1919
import com.twosigma.webtau.data.traceable.CheckLevel
20+
import com.twosigma.webtau.data.traceable.TraceableValue
21+
import com.twosigma.webtau.http.binary.BinaryRequestBody
2022
import com.twosigma.webtau.http.datanode.DataNodeBuilder
2123
import com.twosigma.webtau.http.datanode.DataNodeId
24+
import com.twosigma.webtau.http.datanode.StructuredDataNode
2225
import com.twosigma.webtau.http.validation.HeaderDataNode
2326
import com.twosigma.webtau.http.validation.HttpValidationResult
2427
import com.twosigma.webtau.utils.JsonUtils
@@ -50,4 +53,30 @@ class HttpValidationResultTest {
5053
elapsedTime: 100,
5154
responseBodyChecks: [failedPaths: ['root.childA'], passedPaths:['root.childB']]])
5255
}
56+
57+
@Test
58+
void "should replace binary content with placeholder"() {
59+
def binaryContent = [1, 2, 3] as byte[]
60+
def binaryNode = new StructuredDataNode(new DataNodeId('body'), new TraceableValue(binaryContent))
61+
62+
def validationResult = new HttpValidationResult('POST', 'http://site/test/url', null,
63+
BinaryRequestBody.octetStream(binaryContent))
64+
65+
validationResult.setResponse(new HttpResponse(binaryContent: binaryContent, contentType: 'application/octet-stream', statusCode: 200))
66+
validationResult.setElapsedTime(100)
67+
validationResult.setResponseHeaderNode(new HeaderDataNode())
68+
validationResult.setResponseBodyNode(binaryNode)
69+
70+
println validationResult.toMap()
71+
validationResult.toMap().should equal([method: 'POST', url: 'http://site/test/url',
72+
requestType: 'application/octet-stream',
73+
requestBody: '[binary content]',
74+
responseType: 'application/octet-stream',
75+
responseBody: '[binary content]',
76+
mismatches: [],
77+
errorMessage: null,
78+
responseStatusCode: 200,
79+
elapsedTime: 100,
80+
responseBodyChecks: [failedPaths: [], passedPaths: []]])
81+
}
5382
}

0 commit comments

Comments
 (0)