summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-03-06 12:23:26 +0100
committerMartin Polden <mpolden@mpolden.no>2018-03-06 12:31:20 +0100
commit976c7b88052cb1142ca5c8a1cebdf498f4fb4b95 (patch)
tree27ee035b5c875f207b52cba31e43867398ae3cdb
parent9258dde254882c6e21ea93b282098729cc68c6cf (diff)
Simplify testing of responses with ignored fields
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java84
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java6
3 files changed, 21 insertions, 73 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
index c3dc80c65df..b36fd41e56d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
@@ -4,29 +4,21 @@ package com.yahoo.vespa.hosted.controller.restapi;
import com.yahoo.application.container.JDisc;
import com.yahoo.application.container.handler.Request;
import com.yahoo.application.container.handler.Response;
-import com.yahoo.collections.Pair;
import com.yahoo.component.ComponentSpecification;
import com.yahoo.component.Version;
import com.yahoo.container.http.filter.FilterChainRepository;
import com.yahoo.io.IOUtils;
import com.yahoo.jdisc.http.filter.SecurityRequestFilter;
import com.yahoo.jdisc.http.filter.SecurityRequestFilterChain;
-import com.yahoo.slime.ArrayTraverser;
-import com.yahoo.slime.Inspector;
-import com.yahoo.slime.Slime;
-import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
+import org.junit.ComparisonFailure;
import java.io.File;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
import java.util.Optional;
-import java.util.Set;
import java.util.function.Supplier;
+import java.util.regex.Pattern;
import static org.junit.Assert.assertEquals;
@@ -74,19 +66,24 @@ public class ContainerTester {
public void assertResponse(Request request, File responseFile, int expectedStatusCode) throws IOException {
String expectedResponse = IOUtils.readFile(new File(responseFilePath + responseFile.toString()));
expectedResponse = include(expectedResponse);
+ expectedResponse = expectedResponse.replaceAll("(\"[^\"]*\")|\\s*", "$1"); // Remove whitespace
FilterResult filterResult = invokeSecurityFilters(request);
request = filterResult.request;
Response response = filterResult.response != null ? filterResult.response : container.handleRequest(request);
- Slime expectedSlime = SlimeUtils.jsonToSlime(expectedResponse.getBytes(StandardCharsets.UTF_8));
- Set<String> fieldsToCensor = fieldsToCensor(null, expectedSlime.get(), new HashSet<>());
- Slime responseSlime = SlimeUtils.jsonToSlime(response.getBody());
- List<Pair<String,String>> replaceStrings = new ArrayList<>();
- buildReplaceStrings(null, responseSlime.get(), fieldsToCensor, replaceStrings);
-
- String body = response.getBodyAsString();
- assertEquals("Status code. Response body was: " + body, expectedStatusCode, response.getStatus());
- assertEquals(responseFile.toString(), new String(SlimeUtils.toJsonBytes(expectedSlime), StandardCharsets.UTF_8),
- replace(new String(SlimeUtils.toJsonBytes(responseSlime), StandardCharsets.UTF_8), replaceStrings));
+ String responseString = response.getBodyAsString();
+ if (expectedResponse.contains("(ignore)")) {
+ // Convert expected response to a literal pattern and replace any ignored field with a pattern that matches
+ // anything
+ String expectedResponsePattern = Pattern.quote(expectedResponse)
+ .replaceAll("\"?\\(ignore\\)\"?", "\\\\E.*\\\\Q");
+ if (!Pattern.matches(expectedResponsePattern, responseString)) {
+ throw new ComparisonFailure(responseFile.toString() + " (with ignored fields)",
+ expectedResponsePattern, responseString);
+ }
+ } else {
+ assertEquals(responseFile.toString(), expectedResponse, responseString);
+ }
+ assertEquals("Status code", expectedStatusCode, response.getStatus());
}
public void assertResponse(Supplier<Request> request, String expectedResponse) throws IOException {
@@ -127,53 +124,6 @@ public class ContainerTester {
return new FilterResult(request, null);
}
- private Set<String> fieldsToCensor(String fieldNameOrNull, Inspector value, Set<String> fieldsToCensor) {
- switch (value.type()) {
- case ARRAY: value.traverse((ArrayTraverser)(int index, Inspector element) -> fieldsToCensor(null, element, fieldsToCensor)); break;
- case OBJECT: value.traverse((String fieldName, Inspector fieldValue) -> fieldsToCensor(fieldName, fieldValue, fieldsToCensor)); break;
- case STRING: if (fieldNameOrNull != null && "(ignore)".equals(value.asString())) fieldsToCensor.add(fieldNameOrNull); break;
- }
- return fieldsToCensor;
- }
-
- private void buildReplaceStrings(String fieldNameOrNull, Inspector value, Set<String> fieldsToCensor,
- List<Pair<String,String>> replaceStrings) {
- switch (value.type()) {
- case ARRAY: value.traverse((ArrayTraverser)(int index, Inspector element) -> buildReplaceStrings(null, element, fieldsToCensor, replaceStrings)); break;
- case OBJECT: value.traverse((String fieldName, Inspector fieldValue) -> buildReplaceStrings(fieldName, fieldValue, fieldsToCensor, replaceStrings)); break;
- default: replaceString(fieldNameOrNull, value, fieldsToCensor, replaceStrings);
- }
- }
-
- private void replaceString(String fieldName, Inspector fieldValue,
- Set<String> fieldsToCensor, List<Pair<String,String>> replaceStrings) {
- if (fieldName == null) return;
- if ( ! fieldsToCensor.contains(fieldName)) return;
-
- String fromString;
- switch (fieldValue.type()) {
- case STRING:
- fromString = "\"" + fieldName + "\":\"" + fieldValue.asString() + "\"";
- break;
- case LONG:
- fromString = "\"" + fieldName + "\":" + fieldValue.asLong();
- break;
- case BOOL:
- fromString = "\"" + fieldName + "\":" + fieldValue.asBool();
- break;
- default:
- throw new IllegalArgumentException("Can only censor strings, longs and booleans");
- }
- String toString = "\"" + fieldName + "\":\"(ignore)\"";
- replaceStrings.add(new Pair<>(fromString, toString));
- }
-
- private String replace(String json, List<Pair<String,String>> replaceStrings) {
- for (Pair<String,String> replaceString : replaceStrings)
- json = json.replace(replaceString.getFirst(), replaceString.getSecond());
- return json;
- }
-
/** Replaces @include(localFile) with the content of the file */
private String include(String response) throws IOException {
// Please don't look at this code
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
index 19ded95a764..49aeb334380 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java
@@ -123,10 +123,6 @@ public class ControllerContainerTest {
return addIdentityToRequest(new Request(uri), USER);
}
- protected static Request authenticatedRequest(String uri, String body, Request.Method method) {
- return addIdentityToRequest(new Request(uri, body, method), USER);
- }
-
protected static Request authenticatedRequest(String uri, byte[] body, Request.Method method) {
return addIdentityToRequest(new Request(uri, body, method), USER);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index 0e9e3464c02..9a0856f5afa 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -583,11 +583,13 @@ public class RestApiTest {
private void assertFile(Request request, String responseFile) throws IOException {
String expectedResponse = IOUtils.readFile(new File(responsesPath + responseFile));
expectedResponse = include(expectedResponse);
- expectedResponse = expectedResponse.replaceAll("\\s", "");
+ expectedResponse = expectedResponse.replaceAll("(\"[^\"]*\")|\\s*", "$1"); // Remove whitespace
String responseString = container.handleRequest(request).getBodyAsString();
if (expectedResponse.contains("(ignore)")) {
+ // Convert expected response to a literal pattern and replace any ignored field with a pattern that matches
+ // anything
String expectedResponsePattern = Pattern.quote(expectedResponse)
- .replaceAll("\\(ignore\\)", "\\\\E.*\\\\Q");
+ .replaceAll("\"?\\(ignore\\)\"?", "\\\\E.*\\\\Q");
if (!Pattern.matches(expectedResponsePattern, responseString)) {
throw new ComparisonFailure(responseFile + " (with ignored fields)", expectedResponsePattern,
responseString);