This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 62bdc7ecf11e9a3fe1f6264f0f83012aa4b90ba3 Author: Michael Blow <[email protected]> AuthorDate: Tue Mar 9 11:05:56 2021 -0500 [NO ISSUE][TEST] Add flag to ignore extra regexjson fields - If 'ignoreextrafields=true' is present in test file, extra fields in the actual result are ignored Change-Id: I78e89f174d50359565803e279a3bc917818d1a75 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/10443 Reviewed-by: Michael Blow <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> Tested-by: Jenkins <[email protected]> --- .../asterix/test/common/ComparisonException.java | 4 ++++ .../apache/asterix/test/common/TestExecutor.java | 21 +++++++++++++++------ .../org/apache/asterix/test/common/TestHelper.java | 22 ++++++++++++---------- .../asterix/test/runtime/SqlppRQGTestBase.java | 2 +- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java index da5c8f6..cb437f0 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ComparisonException.java @@ -24,4 +24,8 @@ public class ComparisonException extends Exception { public ComparisonException(String message) { super(message); } + + public ComparisonException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index b8524c0..e1d81a4 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -163,6 +163,7 @@ public class TestExecutor { private static final Pattern HANDLE_VARIABLE_PATTERN = Pattern.compile("handlevariable=(\\w+)"); private static final Pattern RESULT_VARIABLE_PATTERN = Pattern.compile("resultvariable=(\\w+)"); private static final Pattern COMPARE_UNORDERED_ARRAY_PATTERN = Pattern.compile("compareunorderedarray=(\\w+)"); + private static final Pattern IGNORE_EXTRA_FIELDS_PATTERN = Pattern.compile("ignoreextrafields=(\\w+)"); private static final Pattern BODY_REF_PATTERN = Pattern.compile("bodyref=(.*)", Pattern.MULTILINE); private static final Pattern MACRO_PARAM_PATTERN = Pattern.compile("macro (?<name>[\\w-$]+)=(?<value>.*)", Pattern.MULTILINE); @@ -291,8 +292,7 @@ public class TestExecutor { runScriptAndCompareWithResultRegexAdm(scriptFile, readerExpected, readerActual); return; } else if (actualFile.toString().endsWith(".regexjson")) { - boolean compareUnorderedArray = statement != null && getCompareUnorderedArray(statement); - runScriptAndCompareWithResultRegexJson(scriptFile, readerExpected, readerActual, compareUnorderedArray); + runScriptAndCompareWithResultRegexJson(scriptFile, readerExpected, readerActual, statement); return; } else if (actualFile.toString().endsWith(".unorderedtxt")) { runScriptAndCompareWithResultUnorderedLinesText(scriptFile, readerExpected, readerActual); @@ -546,24 +546,28 @@ public class TestExecutor { } private static void runScriptAndCompareWithResultRegexJson(File scriptFile, BufferedReader readerExpected, - BufferedReader readerActual, boolean compareUnorderedArray) throws ComparisonException, IOException { + BufferedReader readerActual, String statement) throws ComparisonException, IOException { + + boolean compareUnorderedArray = statement != null && getCompareUnorderedArray(statement); + boolean ignoreExtraFields = statement != null && getIgnoreExtraFields(statement); + JsonNode expectedJson, actualJson; try { expectedJson = SINGLE_JSON_NODE_READER.readTree(readerExpected); } catch (JsonProcessingException e) { - throw new ComparisonException("Invalid expected JSON for: " + scriptFile); + throw new ComparisonException("Invalid expected JSON for: " + scriptFile, e); } try { actualJson = SINGLE_JSON_NODE_READER.readTree(readerActual); } catch (JsonProcessingException e) { - throw new ComparisonException("Invalid actual JSON for: " + scriptFile); + throw new ComparisonException("Invalid actual JSON for: " + scriptFile, e); } if (expectedJson == null) { throw new ComparisonException("No expected result for: " + scriptFile); } else if (actualJson == null) { throw new ComparisonException("No actual result for: " + scriptFile); } - if (!TestHelper.equalJson(expectedJson, actualJson, compareUnorderedArray)) { + if (!TestHelper.equalJson(expectedJson, actualJson, compareUnorderedArray, ignoreExtraFields)) { throw new ComparisonException("Result for " + scriptFile + " didn't match the expected JSON" + "\nexpected result:\n" + expectedJson + "\nactual result:\n" + actualJson); } @@ -1756,6 +1760,11 @@ public class TestExecutor { return matcher.find() && Boolean.parseBoolean(matcher.group(1)); } + protected static boolean getIgnoreExtraFields(String statement) { + final Matcher matcher = IGNORE_EXTRA_FIELDS_PATTERN.matcher(statement); + return matcher.find() && Boolean.parseBoolean(matcher.group(1)); + } + protected static String replaceVarRef(String statement, Map<String, Object> variableCtx) { String tmpStmt = statement; Matcher variableReferenceMatcher = VARIABLE_REF_PATTERN.matcher(tmpStmt); diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java index 137efdb..939acd3 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestHelper.java @@ -141,7 +141,8 @@ public final class TestHelper { return RequestParameters.deserializeParameterValues(RequestParameters.serializeParameterValues(stmtParams)); } - public static boolean equalJson(JsonNode expectedJson, JsonNode actualJson, boolean compareUnorderedArray) { + public static boolean equalJson(JsonNode expectedJson, JsonNode actualJson, boolean compareUnorderedArray, + boolean ignoreExtraFields) { if (expectedJson == actualJson) { return true; } @@ -167,13 +168,14 @@ public final class TestHelper { if (expectedArray.size() != actualArray.size()) { return false; } - return compareUnorderedArray ? compareUnordered(expectedArray, actualArray) - : compareOrdered(expectedArray, actualArray); + return compareUnorderedArray ? compareUnordered(expectedArray, actualArray, ignoreExtraFields) + : compareOrdered(expectedArray, actualArray, ignoreExtraFields); } else if (expectedJson.isObject() && actualJson.isObject()) { // assumes no duplicates in field names ObjectNode expectedObject = (ObjectNode) expectedJson; ObjectNode actualObject = (ObjectNode) actualJson; - if (expectedObject.size() != actualObject.size()) { + if (!ignoreExtraFields && expectedObject.size() != actualObject.size() + || (ignoreExtraFields && expectedObject.size() > actualObject.size())) { return false; } Iterator<Map.Entry<String, JsonNode>> expectedFields = expectedObject.fields(); @@ -182,8 +184,8 @@ public final class TestHelper { while (expectedFields.hasNext()) { expectedField = expectedFields.next(); actualFieldValue = actualObject.get(expectedField.getKey()); - if (actualFieldValue == null - || !equalJson(expectedField.getValue(), actualFieldValue, compareUnorderedArray)) { + if (actualFieldValue == null || !equalJson(expectedField.getValue(), actualFieldValue, + compareUnorderedArray, ignoreExtraFields)) { return false; } } @@ -195,13 +197,13 @@ public final class TestHelper { return expectedAsString.equals(actualAsString); } - private static boolean compareUnordered(ArrayNode expectedArray, ArrayNode actualArray) { + private static boolean compareUnordered(ArrayNode expectedArray, ArrayNode actualArray, boolean ignoreExtraFields) { BitSet alreadyMatched = new BitSet(actualArray.size()); for (int i = 0; i < expectedArray.size(); i++) { boolean found = false; JsonNode expectedElement = expectedArray.get(i); for (int k = 0; k < actualArray.size(); k++) { - if (!alreadyMatched.get(k) && equalJson(expectedElement, actualArray.get(k), true)) { + if (!alreadyMatched.get(k) && equalJson(expectedElement, actualArray.get(k), true, ignoreExtraFields)) { alreadyMatched.set(k); found = true; break; @@ -214,9 +216,9 @@ public final class TestHelper { return true; } - private static boolean compareOrdered(ArrayNode expectedArray, ArrayNode actualArray) { + private static boolean compareOrdered(ArrayNode expectedArray, ArrayNode actualArray, boolean ignoreExtraFields) { for (int i = 0, size = expectedArray.size(); i < size; i++) { - if (!equalJson(expectedArray.get(i), actualArray.get(i), false)) { + if (!equalJson(expectedArray.get(i), actualArray.get(i), false, ignoreExtraFields)) { return false; } } diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java index 0c13cdf..c03d23b 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppRQGTestBase.java @@ -164,7 +164,7 @@ public abstract class SqlppRQGTestBase { ResultExtractor.extract(resultStream, StandardCharsets.UTF_8, TestCaseContext.OutputFormat.ADM)); } - boolean eq = TestHelper.equalJson(sqlResult, sqlppResult, false); + boolean eq = TestHelper.equalJson(sqlResult, sqlppResult, false, false); File sqlResultFile = writeResult(sqlResult, testcaseId, "sql", testcaseDescription); File sqlppResultFile = writeResult(sqlppResult, testcaseId, "sqlpp", testcaseDescription);
