diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/YamlRestCompatTestPluginFuncTest.groovy b/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/YamlRestCompatTestPluginFuncTest.groovy index c33d73c5dbd99..db74eaf9b09fe 100644 --- a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/YamlRestCompatTestPluginFuncTest.groovy +++ b/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/YamlRestCompatTestPluginFuncTest.groovy @@ -191,13 +191,13 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest { // avoids a dependency problem in this test, the distribution in use here is inconsequential to the test import org.elasticsearch.gradle.testclusters.TestDistribution; - + dependencies { yamlRestTestImplementation "junit:junit:4.12" } tasks.named("transformV7RestTests").configure({ task -> - task.replaceMatch("_type", "_doc") - task.replaceMatch("_source.values", ["z", "x", "y"], "one") + task.replaceValueInMatch("_type", "_doc") + task.replaceValueInMatch("_source.values", ["z", "x", "y"], "one") task.removeMatch("_source.blah") task.removeMatch("_source.junk", "two") task.addMatch("_source.added", [name: 'jake', likes: 'cheese'], "one") @@ -208,6 +208,8 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest { task.removeWarning("one", "warning to remove") task.replaceIsTrue("value_to_replace", "replaced_value") task.replaceIsFalse("value_to_replace", "replaced_value") + task.replaceKeyInMatch("some.key_to_replace", "some.key_that_was_replaced") + task.replaceKeyInLength("key.in_length_to_replace", "key.in_length_that_was_replaced") }) // can't actually spin up test cluster from this test tasks.withType(Test).configureEach{ enabled = false } @@ -227,10 +229,12 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest { - match: { _type: "_foo" } - match: { _source.blah: 1234 } - match: { _source.junk: true } + - match: { some.key_to_replace: true } - is_true: "value_to_replace" - is_false: "value_to_replace" - is_true: "value_not_to_replace" - is_false: "value_not_to_replace" + - length: { key.in_length_to_replace: 1 } --- "two": - do: @@ -294,14 +298,18 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest { - match: {} - match: _source.junk: true + - match: + some.key_that_was_replaced : true - is_true: "replaced_value" - is_false: "replaced_value" - is_true: "value_not_to_replace" - is_false: "value_not_to_replace" + - length: { key.in_length_that_was_replaced: 1 } - match: _source.added: name: "jake" likes: "cheese" + --- two: - do: diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/rest/compat/RestCompatTestTransformTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/rest/compat/RestCompatTestTransformTask.java index 98ee339a5c199..6034af039b5b4 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/rest/compat/RestCompatTestTransformTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/rest/compat/RestCompatTestTransformTask.java @@ -22,14 +22,16 @@ import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransform; import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformer; import org.elasticsearch.gradle.internal.test.rest.transform.headers.InjectHeaders; +import org.elasticsearch.gradle.internal.test.rest.transform.length.ReplaceKeyInLength; import org.elasticsearch.gradle.internal.test.rest.transform.match.AddMatch; import org.elasticsearch.gradle.internal.test.rest.transform.match.RemoveMatch; -import org.elasticsearch.gradle.internal.test.rest.transform.match.ReplaceMatch; +import org.elasticsearch.gradle.internal.test.rest.transform.match.ReplaceValueInMatch; import org.elasticsearch.gradle.internal.test.rest.transform.text.ReplaceIsFalse; import org.elasticsearch.gradle.internal.test.rest.transform.text.ReplaceIsTrue; import org.elasticsearch.gradle.internal.test.rest.transform.warnings.InjectAllowedWarnings; import org.elasticsearch.gradle.internal.test.rest.transform.warnings.InjectWarnings; import org.elasticsearch.gradle.internal.test.rest.transform.warnings.RemoveWarnings; +import org.elasticsearch.gradle.internal.test.rest.transform.match.ReplaceKeyInMatch; import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileSystemOperations; @@ -101,13 +103,44 @@ public RestCompatTestTransformTask( * @param subKey the key name directly under match to replace. For example "_type" * @param value the value used in the replacement. For example "bar" */ - public void replaceMatch(String subKey, Object value) { - transformations.add(new ReplaceMatch(subKey, MAPPER.convertValue(value, JsonNode.class))); + public void replaceValueInMatch(String subKey, Object value) { + transformations.add(new ReplaceValueInMatch(subKey, MAPPER.convertValue(value, JsonNode.class))); + } + + /** + * Replaces the values of a match assertion for the given REST test. For example "match":{"_type": "foo"} to "match":{"_type": "bar"} + * + * @param subKey the key name directly under match to replace. For example "_type" + * @param value the value used in the replacement. For example "bar" + * @param testName the testName to apply replacement + */ + public void replaceValueInMatch(String subKey, Object value, String testName) { + transformations.add(new ReplaceValueInMatch(subKey, MAPPER.convertValue(value, JsonNode.class), testName)); + } + + /** + * A transformation to replace the key in a length assertion. + * @see ReplaceKeyInLength + * @param oldKeyName the key name directly under length to replace. + * @param newKeyName the new key name directly under length. + */ + public void replaceKeyInLength(String oldKeyName, String newKeyName) { + transformations.add(new ReplaceKeyInLength(oldKeyName, newKeyName, null)); + } + + /** + * A transformation to replace the key in a match assertion. + * @see ReplaceKeyInMatch + * @param oldKeyName the key name directly under match to replace. + * @param newKeyName the new key name directly under match. + */ + public void replaceKeyInMatch(String oldKeyName, String newKeyName) { + transformations.add(new ReplaceKeyInMatch(oldKeyName, newKeyName, null)); } /** * Replaces all the values of a is_true assertion for all project REST tests. - * For example "is_true": "value_to_replace" to "match": "value_replaced" + * For example "is_true": "value_to_replace" to "is_true": "value_replaced" * * @param oldValue the value that has to match and will be replaced * @param newValue the value used in the replacement @@ -117,8 +150,8 @@ public void replaceIsTrue(String oldValue, Object newValue) { } /** - * Replaces all the values of a is_true assertion for all project REST tests. - * For example "is_false": "value_to_replace" to "match": "value_replaced" + * Replaces all the values of a is_false assertion for all project REST tests. + * For example "is_false": "value_to_replace" to "is_false": "value_replaced" * * @param oldValue the value that has to match and will be replaced * @param newValue the value used in the replacement @@ -128,14 +161,15 @@ public void replaceIsFalse(String oldValue, Object newValue) { } /** - * Replaces the values of a match assertion for the given REST test. For example "match":{"_type": "foo"} to "match":{"_type": "bar"} + * Replaces all the values of a is_false assertion for given REST test. + * For example "is_false": "value_to_replace" to "is_false": "value_replaced" * - * @param subKey the key name directly under match to replace. For example "_type" - * @param value the value used in the replacement. For example "bar" - * @param testName the testName to apply replacement + * @param oldValue the value that has to match and will be replaced + * @param newValue the value used in the replacement + @param testName the testName to apply replacement */ - public void replaceMatch(String subKey, Object value, String testName) { - transformations.add(new ReplaceMatch(subKey, MAPPER.convertValue(value, JsonNode.class), testName)); + public void replaceIsFalse(String oldValue, Object newValue, String testName) { + transformations.add(new ReplaceIsFalse(oldValue, MAPPER.convertValue(newValue, TextNode.class), testName)); } /** diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java new file mode 100644 index 0000000000000..67219dc96973d --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/ReplaceByKey.java @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform; + +import com.fasterxml.jackson.databind.JsonNode; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Optional; + +/** + * An abstract common class to handle replacing key and values under a parent object + * This class can be subclass to transform the + * "getKeyToFind": {"requiredChildKey": "foo"} + * into + * "getKeyToFind": {"newChildKey": "getReplacementNode"} + * a getKeyToFind and transformTest would have to be implemented in a subclass + */ +public abstract class ReplaceByKey implements RestTestTransformByParentObject { + private final String requiredChildKey; + private final String newChildKey; + private final JsonNode replacementNode; + private final String testName; + + public ReplaceByKey(String requiredChildKey, JsonNode replacementNode) { + this(requiredChildKey, replacementNode, null); + } + + public ReplaceByKey(String requiredChildKey, JsonNode replacementNode, String testName) { + this(requiredChildKey, requiredChildKey, replacementNode, testName); + } + + public ReplaceByKey(String requiredChildKey, String newChildKey, JsonNode replacementNode, String testName) { + this.requiredChildKey = requiredChildKey; + this.newChildKey = newChildKey; + this.replacementNode = replacementNode; + this.testName = testName; + } + + @Override + public String requiredChildKey() { + return requiredChildKey; + } + + @Input + public String getNewChildKey() { + return newChildKey; + } + + @Override + public boolean shouldApply(RestTestContext testContext) { + return testName == null || testContext.getTestName().equals(testName); + } + + @Input + @Optional + public JsonNode getReplacementNode() { + return replacementNode; + } + + @Input + @Optional + public String getTestName() { + return testName; + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLength.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLength.java new file mode 100644 index 0000000000000..d3d38240f14cd --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLength.java @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.length; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.gradle.api.tasks.Internal; + +/** + * A transformation to replace the key in a length assertion. + * For example, change from "length ":{"index._type": 1} to "length ":{"index._doc": 1} + */ +public class ReplaceKeyInLength extends ReplaceByKey { + + public ReplaceKeyInLength(String replaceKey, String newKeyName, String testName) { + super(replaceKey, newKeyName, null, testName); + } + + @Override + @Internal + public String getKeyToFind() { + return "length"; + } + + @Override + public void transformTest(ObjectNode matchParent) { + ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); + JsonNode previousValue = matchNode.get(requiredChildKey()); + matchNode.remove(requiredChildKey()); + matchNode.set(getNewChildKey(), previousValue); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatch.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatch.java new file mode 100644 index 0000000000000..a5eee30d54181 --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatch.java @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.match; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.gradle.api.tasks.Internal; + +/** + * A transformation to replace the key in a match. For example, change from "match":{"index._type": "foo"} to "match":{"index._doc": "foo"} + */ +public class ReplaceKeyInMatch extends ReplaceByKey { + + public ReplaceKeyInMatch(String replaceKey, String newKeyName, String testName) { + super(replaceKey, newKeyName, null, testName); + } + + @Override + @Internal + public String getKeyToFind() { + return "match"; + } + + @Override + public void transformTest(ObjectNode matchParent) { + ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); + JsonNode previousValue = matchNode.get(requiredChildKey()); + matchNode.remove(requiredChildKey()); + matchNode.set(getNewChildKey(), previousValue); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatch.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatch.java deleted file mode 100644 index 9264717a7f69e..0000000000000 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatch.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -package org.elasticsearch.gradle.internal.test.rest.transform.match; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.elasticsearch.gradle.internal.test.rest.transform.RestTestContext; -import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformByParentObject; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.Internal; -import org.gradle.api.tasks.Optional; - -/** - * A transformation to replace the value of a match. For example, change from "match":{"_type": "foo"} to "match":{"_type": "bar"} - */ -public class ReplaceMatch implements RestTestTransformByParentObject { - private final String replaceKey; - private final JsonNode replacementNode; - private final String testName; - - public ReplaceMatch(String replaceKey, JsonNode replacementNode) { - - this.replaceKey = replaceKey; - this.replacementNode = replacementNode; - this.testName = null; - } - - public ReplaceMatch(String replaceKey, JsonNode replacementNode, String testName) { - this.replaceKey = replaceKey; - this.replacementNode = replacementNode; - this.testName = testName; - } - - @Override - @Internal - public String getKeyToFind() { - return "match"; - } - - @Override - public String requiredChildKey() { - return replaceKey; - } - - @Override - public boolean shouldApply(RestTestContext testContext) { - return testName == null || testContext.getTestName().equals(testName); - } - - @Override - public void transformTest(ObjectNode matchParent) { - ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); - matchNode.set(replaceKey, replacementNode); - } - - @Input - public String getReplaceKey() { - return replaceKey; - } - - @Input - public JsonNode getReplacementNode() { - return replacementNode; - } - - @Input - @Optional - public String getTestName() { - return testName; - } -} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java new file mode 100644 index 0000000000000..d44d40e1c01fc --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatch.java @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.match; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.elasticsearch.gradle.internal.test.rest.transform.ReplaceByKey; +import org.gradle.api.tasks.Internal; + +/** + * A transformation to replace the value of a match. For example, change from "match":{"_type": "foo"} to "match":{"_type": "bar"} + */ +public class ReplaceValueInMatch extends ReplaceByKey { + + public ReplaceValueInMatch(String replaceKey, JsonNode replacementNode) { + this(replaceKey, replacementNode, null); + } + + public ReplaceValueInMatch(String replaceKey, JsonNode replacementNode, String testName) { + super(replaceKey, replaceKey, replacementNode, testName); + } + + @Override + @Internal + public String getKeyToFind() { + return "match"; + } + + @Override + public void transformTest(ObjectNode matchParent) { + ObjectNode matchNode = (ObjectNode) matchParent.get(getKeyToFind()); + matchNode.remove(requiredChildKey()); + matchNode.set(getNewChildKey(), getReplacementNode()); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java index f74bec3fdad09..859a8232fc833 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceIsFalse.java @@ -14,4 +14,8 @@ public class ReplaceIsFalse extends ReplaceTextual { public ReplaceIsFalse(String valueToBeReplaced, TextNode replacementNode) { super("is_false", valueToBeReplaced, replacementNode); } + + public ReplaceIsFalse(String valueToBeReplaced, TextNode replacementNode, String testName) { + super("is_false", valueToBeReplaced, replacementNode, testName); + } } diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/AssertObjectNodes.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/AssertObjectNodes.java new file mode 100644 index 0000000000000..139e99bc85806 --- /dev/null +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/AssertObjectNodes.java @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.SequenceWriter; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.junit.ComparisonFailure; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; + +public class AssertObjectNodes { + private static final YAMLFactory YAML_FACTORY = new YAMLFactory(); + private static final ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); + private static final ObjectWriter WRITER = MAPPER.writerFor(ObjectNode.class); + + public static void areEqual(List actualTests, List expectedTests) { + for (int i = 0; i < expectedTests.size(); i++) { + ObjectNode expected = expectedTests.get(i); + ObjectNode actual = actualTests.get(i); + if (expected.equals(actual) == false) { + throw new ComparisonFailure( + "The actual transformation is different than expected in _transformed.yml file.", + toString(expectedTests), + toString(actualTests) + ); + } + } + } + + private static String toString(List tests) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + try { + SequenceWriter sequenceWriter = WRITER.writeValues(baos); + + for (ObjectNode transformedTest : tests) { + sequenceWriter.write(transformedTest); + } + sequenceWriter.close(); + return baos.toString(); + } catch (IOException e) { + e.printStackTrace(); + return "Exception when serialising a file"; + } + } +} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLengthTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLengthTests.java new file mode 100644 index 0000000000000..b2423051af355 --- /dev/null +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/length/ReplaceKeyInLengthTests.java @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.length; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; +import org.junit.Test; + +import java.util.Collections; +import java.util.List; + +public class ReplaceKeyInLengthTests extends TransformTests { + + @Test + public void testLengthKeyChange() throws Exception { + String test_original = "/rest/transform/length/length_replace_original.yml"; + List tests = getTests(test_original); + + String test_transformed = "/rest/transform/length/length_replace_transformed.yml"; + List expectedTransformation = getTests(test_transformed); + + List transformedTests = transformTests( + tests, + Collections.singletonList(new ReplaceKeyInLength("key.in_length_to_replace", "key.in_length_replaced", null)) + ); + + AssertObjectNodes.areEqual(transformedTests, expectedTransformation); + } +} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java index f6cd3905fc055..48f7317362e51 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/AddMatchTests.java @@ -18,7 +18,6 @@ import org.junit.Test; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -29,26 +28,26 @@ public class AddMatchTests extends TransformTests { @Test public void testAddAllNotSupported() throws Exception { - String testName = "/rest/transform/match/match.yml"; + String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); JsonNode addNode = MAPPER.convertValue("_doc", JsonNode.class); assertEquals( "adding matches is only supported for named tests", expectThrows( NullPointerException.class, - () -> transformTests(new LinkedList<>(tests), Collections.singletonList(new AddMatch("_type", addNode, null))) + () -> transformTests(tests, Collections.singletonList(new AddMatch("_type", addNode, null))) ).getMessage() ); } @Test public void testAddByTest() throws Exception { - String testName = "/rest/transform/match/match.yml"; + String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); JsonNode addNode = MAPPER.convertValue(123456789, JsonNode.class); validateTest(tests, true); List transformedTests = transformTests( - new LinkedList<>(tests), + tests, Collections.singletonList(new AddMatch("my_number", addNode, "Last test")) ); printTest(testName, transformedTests); diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/RemoveMatchTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/RemoveMatchTests.java index 86d20b5a09fef..2e463a5cdfe54 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/RemoveMatchTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/RemoveMatchTests.java @@ -19,7 +19,6 @@ import org.junit.Test; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -31,23 +30,20 @@ public class RemoveMatchTests extends TransformTests { @Test public void testRemoveAll() throws Exception { - String testName = "/rest/transform/match/match.yml"; + String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); validateTest(tests, true, true); - List transformedTests = transformTests(new LinkedList<>(tests), Collections.singletonList(new RemoveMatch("_type"))); + List transformedTests = transformTests(tests, Collections.singletonList(new RemoveMatch("_type"))); printTest(testName, transformedTests); validateTest(tests, false, true); } @Test public void testRemoveByTest() throws Exception { - String testName = "/rest/transform/match/match.yml"; + String testName = "/rest/transform/match/match_original.yml"; List tests = getTests(testName); validateTest(tests, true, false); - List transformedTests = transformTests( - new LinkedList<>(tests), - Collections.singletonList(new RemoveMatch("_type", "Last test")) - ); + List transformedTests = transformTests(tests, Collections.singletonList(new RemoveMatch("_type", "Last test"))); printTest(testName, transformedTests); validateTest(tests, false, false); diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatchTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatchTests.java new file mode 100644 index 0000000000000..650b70450d0ca --- /dev/null +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceKeyInMatchTests.java @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.match; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; +import org.junit.Test; + +import java.util.Collections; +import java.util.List; + +public class ReplaceKeyInMatchTests extends TransformTests { + + @Test + public void testReplaceKeyInMatch() throws Exception { + + String test_original = "/rest/transform/match/key_replace/replace_key_in_match_original.yml"; + List tests = getTests(test_original); + + String test_transformed = "/rest/transform/match/key_replace/replace_key_in_match_transformed.yml"; + List expectedTransformation = getTests(test_transformed); + + List transformedTests = transformTests( + tests, + Collections.singletonList(new ReplaceKeyInMatch("match.key.to_replace", "match.key.replaced", null)) + ); + + AssertObjectNodes.areEqual(transformedTests, expectedTransformation); + } +} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatchTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatchTests.java deleted file mode 100644 index cfa6b55d81ebe..0000000000000 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceMatchTests.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -package org.elasticsearch.gradle.internal.test.rest.transform.match; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; -import org.hamcrest.CoreMatchers; -import org.junit.Test; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -public class ReplaceMatchTests extends TransformTests { - - private static final YAMLFactory YAML_FACTORY = new YAMLFactory(); - private static final ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); - - @Test - public void testReplaceAll() throws Exception { - String testName = "/rest/transform/match/match.yml"; - List tests = getTests(testName); - JsonNode replacementNode = MAPPER.convertValue("_replaced_type", JsonNode.class); - validateTest(tests, true, true); - List transformedTests = transformTests( - new LinkedList<>(tests), - Collections.singletonList(new ReplaceMatch("_type", replacementNode, null)) - ); - printTest(testName, transformedTests); - validateTest(tests, false, true); - - } - - @Test - public void testReplaceByTest() throws Exception { - String testName = "/rest/transform/match/match.yml"; - List tests = getTests(testName); - JsonNode replacementNode = MAPPER.convertValue("_replaced_type", JsonNode.class); - validateTest(tests, true, false); - List transformedTests = transformTests( - new LinkedList<>(tests), - Collections.singletonList(new ReplaceMatch("_type", replacementNode, "Last test")) - ); - printTest(testName, transformedTests); - validateTest(tests, false, false); - } - - private void validateTest(List tests, boolean beforeTransformation, boolean allTests) { - validateSetupAndTearDownForMatchTests(tests); - // first test - JsonNode firstTestChild = tests.get(2).get("First test"); - assertThat(firstTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode firstTestParentArray = (ArrayNode) firstTestChild; - - AtomicBoolean firstTestHasMatchObject = new AtomicBoolean(false); - AtomicBoolean firstTestHasTypeMatch = new AtomicBoolean(false); - - firstTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode matchObject = childObject.get("match"); - if (matchObject != null) { - firstTestHasMatchObject.set(true); - if (firstTestHasTypeMatch.get() == false && matchObject.get("_type") != null) { - firstTestHasTypeMatch.set(true); - } - if (matchObject.get("_type") != null && beforeTransformation == false && allTests) { - assertThat(matchObject.get("_type").asText(), CoreMatchers.is("_replaced_type")); - } - } - }); - assertTrue(firstTestHasMatchObject.get()); - assertTrue(firstTestHasTypeMatch.get()); - - // last test - JsonNode lastTestChild = tests.get(tests.size() - 1).get("Last test"); - assertThat(lastTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode lastTestParentArray = (ArrayNode) lastTestChild; - - AtomicBoolean lastTestHasMatchObject = new AtomicBoolean(false); - AtomicBoolean lastTestHasTypeMatch = new AtomicBoolean(false); - lastTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode matchObject = childObject.get("match"); - if (matchObject != null) { - lastTestHasMatchObject.set(true); - if (lastTestHasTypeMatch.get() == false && matchObject.get("_type") != null) { - lastTestHasTypeMatch.set(true); - } - if (matchObject.get("_type") != null && beforeTransformation == false) { - assertThat(matchObject.get("_type").asText(), CoreMatchers.is("_replaced_type")); - } - } - }); - assertTrue(lastTestHasMatchObject.get()); - assertTrue(lastTestHasTypeMatch.get()); - - // exclude setup, teardown, first test, and last test - for (int i = 3; i <= tests.size() - 2; i++) { - ObjectNode otherTest = tests.get(i); - JsonNode otherTestChild = otherTest.get(otherTest.fields().next().getKey()); - assertThat(otherTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode otherTestParentArray = (ArrayNode) otherTestChild; - otherTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode matchObject = childObject.get("match"); - if (matchObject != null) { - if (matchObject.get("_type") != null) { - if (matchObject.get("_type") != null && beforeTransformation == false && allTests) { - assertThat(matchObject.get("_type").asText(), CoreMatchers.is("_replaced_type")); - } - } - } - }); - } - } - - @Override - protected boolean getHumanDebug() { - return false; - } -} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java new file mode 100644 index 0000000000000..667430307e072 --- /dev/null +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/match/ReplaceValueInMatchTests.java @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest.transform.match; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; +import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; +import org.junit.Test; + +import java.util.List; + +public class ReplaceValueInMatchTests extends TransformTests { + + private static final YAMLFactory YAML_FACTORY = new YAMLFactory(); + private static final ObjectMapper MAPPER = new ObjectMapper(YAML_FACTORY); + + @Test + public void testReplaceMatch() throws Exception { + String test_original = "/rest/transform/match/match_original.yml"; + List tests = getTests(test_original); + + String test_transformed = "/rest/transform/match/match_transformed.yml"; + List expectedTransformation = getTests(test_transformed); + + JsonNode replacementNode = MAPPER.convertValue("_replaced_type", JsonNode.class); + List transformedTests = transformTests( + tests, + List.of( + new ReplaceValueInMatch("_type", replacementNode, null), + new ReplaceValueInMatch("_replace_in_last_test_only", replacementNode, "Last test") + ) + ); + + AssertObjectNodes.areEqual(transformedTests, expectedTransformation); + } +} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java index 9f53f22c0a58b..933427e79922d 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/text/ReplaceTextualTests.java @@ -8,20 +8,15 @@ package org.elasticsearch.gradle.internal.test.rest.transform.text; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.elasticsearch.gradle.internal.test.rest.transform.AssertObjectNodes; import org.elasticsearch.gradle.internal.test.rest.transform.TransformTests; -import org.hamcrest.CoreMatchers; import org.junit.Test; -import java.util.Collections; -import java.util.LinkedList; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; public class ReplaceTextualTests extends TransformTests { @@ -30,109 +25,22 @@ public class ReplaceTextualTests extends TransformTests { @Test public void testReplaceAll() throws Exception { - String testName = "/rest/transform/text/text_replace.yml"; - List tests = getTests(testName); - TextNode replacementNode = MAPPER.convertValue("_replaced_value", TextNode.class); - validateTest(tests, true, true); - List transformedTests = transformTests( - new LinkedList<>(tests), - Collections.singletonList(new ReplaceTextual("key_to_replace", "value_to_replace", replacementNode, null)) - ); - printTest(testName, transformedTests); - validateTest(tests, false, true); - } - - private void validateTest(List tests, boolean beforeTransformation, boolean allTests) { - validateSetupAndTearDownForMatchTests(tests); - // first test - JsonNode firstTestChild = tests.get(2).get("First test"); - assertThat(firstTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode firstTestParentArray = (ArrayNode) firstTestChild; - - AtomicBoolean firstTestHasKeyToReplace = new AtomicBoolean(false); - AtomicBoolean firstTestHasValueToReplace = new AtomicBoolean(false); + String test_original = "/rest/transform/text/text_replace_original.yml"; + List tests = getTests(test_original); - firstTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode matchObject = childObject.get("key_to_replace"); - if (matchObject != null) { - firstTestHasKeyToReplace.set(true); - if (beforeTransformation && matchObject.asText().equals("value_to_replace")) { - firstTestHasValueToReplace.set(true); - } - if (beforeTransformation == false && allTests) { - assertThat(matchObject.asText(), CoreMatchers.is("_replaced_value")); - firstTestHasValueToReplace.set(true); - } - } - }); - assertTrue(firstTestHasKeyToReplace.get()); - assertTrue(firstTestHasValueToReplace.get()); + String test_transformed = "/rest/transform/text/text_replace_transformed.yml"; + List expectedTransformation = getTests(test_transformed); - // last test - JsonNode lastTestChild = tests.get(tests.size() - 1).get("Last test"); - assertThat(lastTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode lastTestParentArray = (ArrayNode) lastTestChild; - - AtomicBoolean lastTestHasKeyToReplace = new AtomicBoolean(false); - AtomicBoolean lastTestHasValueToReplace = new AtomicBoolean(false); - lastTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode matchObject = childObject.get("key_to_replace"); - if (matchObject != null) { - lastTestHasKeyToReplace.set(true); - if (beforeTransformation && matchObject.asText().equals("value_to_replace")) { - lastTestHasValueToReplace.set(true); - } - if (beforeTransformation == false && allTests) { - assertThat(matchObject.asText(), CoreMatchers.is("_replaced_value")); - lastTestHasValueToReplace.set(true); - } - } - }); - assertTrue(lastTestHasKeyToReplace.get()); - assertTrue(lastTestHasValueToReplace.get()); - - // validate test3 - with key_to_replace but without a value - { - ObjectNode otherTest = tests.get(4); - JsonNode otherTestChild = otherTest.get(otherTest.fields().next().getKey()); - assertThat(otherTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode otherTestParentArray = (ArrayNode) otherTestChild; - otherTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode value = childObject.get("key_to_replace"); - if (value != null && beforeTransformation && allTests) { - assertThat(value.asText(), CoreMatchers.is("value_NOT_to_replace")); - } - if (value != null && beforeTransformation == false && allTests) { - assertThat(value.asText(), CoreMatchers.is("value_NOT_to_replace")); - } - }); - } + List transformedTests = transformTests( + tests, + List.of( + new ReplaceTextual("key_to_replace", "value_to_replace", MAPPER.convertValue("_replaced_value", TextNode.class), null), + new ReplaceIsTrue("is_true_to_replace", MAPPER.convertValue("is_true_replaced", TextNode.class)), + new ReplaceIsFalse("is_false_to_replace", MAPPER.convertValue("is_false_replaced", TextNode.class)) + ) + ); - // exclude setup, teardown, first test, second to last test (does not have value to replace), and last test - for (int i = 3; i <= tests.size() - 3; i++) { - ObjectNode otherTest = tests.get(i); - JsonNode otherTestChild = otherTest.get(otherTest.fields().next().getKey()); - assertThat(otherTestChild, CoreMatchers.instanceOf(ArrayNode.class)); - ArrayNode otherTestParentArray = (ArrayNode) otherTestChild; - otherTestParentArray.elements().forEachRemaining(node -> { - assertThat(node, CoreMatchers.instanceOf(ObjectNode.class)); - ObjectNode childObject = (ObjectNode) node; - JsonNode value = childObject.get("key_to_replace"); - if (value != null && beforeTransformation == false && allTests) { - assertThat(value.asText(), CoreMatchers.is("_replaced_value")); - } - }); - } + AssertObjectNodes.areEqual(transformedTests, expectedTransformation); } - @Override - protected boolean getHumanDebug() { - return false; - } } diff --git a/buildSrc/src/test/resources/rest/transform/length/length_replace_original.yml b/buildSrc/src/test/resources/rest/transform/length/length_replace_original.yml new file mode 100644 index 0000000000000..4928053686952 --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/length/length_replace_original.yml @@ -0,0 +1,18 @@ +--- +"First test": + + - do: + something: + that_is: true + + - do: + and: again + + - key_not_to_replace: { copied.from.real.test.total: 1 } + - length: { key.in_length_to_replace: 1 } + + - do: + and: again + + - key_not_to_replace: { hits.total: 1 } + diff --git a/buildSrc/src/test/resources/rest/transform/length/length_replace_transformed.yml b/buildSrc/src/test/resources/rest/transform/length/length_replace_transformed.yml new file mode 100644 index 0000000000000..e5b24fe29f722 --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/length/length_replace_transformed.yml @@ -0,0 +1,18 @@ +--- +"First test": + + - do: + something: + that_is: true + + - do: + and: again + + - key_not_to_replace: { copied.from.real.test.total: 1 } + - length: { key.in_length_replaced: 1 } + + - do: + and: again + + - key_not_to_replace: { hits.total: 1 } + diff --git a/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_original.yml b/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_original.yml new file mode 100644 index 0000000000000..49785119fa495 --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_original.yml @@ -0,0 +1,22 @@ +--- +"First test": + + - do: + something: + that_is: true + + - do: + and: again + + - not_to_replace: { copied.from.real.test.total: 1 } + - length: { length.key: 1 } + - match: { match.key.to_replace: 0 } + - match: { _shards.total: 2 } + - match: { _shards.successful: 2 } + + - do: + and: again + + - key_not_to_replace: { hits.total: 1 } + - match: { match.key.to_replace: 0 } + diff --git a/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_transformed.yml b/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_transformed.yml new file mode 100644 index 0000000000000..82889955e54bd --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/match/key_replace/replace_key_in_match_transformed.yml @@ -0,0 +1,22 @@ +--- +"First test": + + - do: + something: + that_is: true + + - do: + and: again + + - not_to_replace: { copied.from.real.test.total: 1 } + - length: { length.key: 1 } + - match: { match.key.replaced: 0 } + - match: { _shards.total: 2 } + - match: { _shards.successful: 2 } + + - do: + and: again + + - key_not_to_replace: { hits.total: 1 } + - match: { match.key.replaced: 0 } + diff --git a/buildSrc/src/test/resources/rest/transform/match/match.yml b/buildSrc/src/test/resources/rest/transform/match/match_original.yml similarity index 93% rename from buildSrc/src/test/resources/rest/transform/match/match.yml rename to buildSrc/src/test/resources/rest/transform/match/match_original.yml index bb35031d08804..c431fa373523b 100644 --- a/buildSrc/src/test/resources/rest/transform/match/match.yml +++ b/buildSrc/src/test/resources/rest/transform/match/match_original.yml @@ -88,6 +88,8 @@ teardown: - match: { _shards.successful: 2 } - match: { _shards.skipped : 1} - match: { _shards.failed: 0 } + - match: { _replace_in_last_test_only: "the value does not matter" } + --- "Last test": @@ -104,6 +106,7 @@ teardown: - match: { _index: test_1 } - match: { _type: "the value does not matter" } + - match: { _replace_in_last_test_only: "the value does not matter" } - match: { _id: 中文 } - match: { _source: { foo: "Hello: 中文" } } diff --git a/buildSrc/src/test/resources/rest/transform/match/match_transformed.yml b/buildSrc/src/test/resources/rest/transform/match/match_transformed.yml new file mode 100644 index 0000000000000..4e6edde1589b4 --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/match/match_transformed.yml @@ -0,0 +1,137 @@ +--- +setup: + - do: + something: + here: "ok" +--- +teardown: + - do: + something_else: + here: true +--- +First test: + - do: + something: + that_is: true + - do: + and: "again" + - match: + copied.from.real.test.total: 1 + - match: + hits.hits.0._index: "single_doc_index" + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 0 + - match: + _shards.failed: 0 + - do: + and: "again" + - match: + hits.total: 1 + - match: + hits.hits.0._index: "my_remote_cluster:single_doc_index" + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 0 + - match: + _below_is_target_for_tests: 0 + - match: + _type: "_replaced_type" +--- +Also has _type match: + - do: + something: + that_is: true + - do: + and: "again" + - match: + hits.total.value: 0 + - match: + _type: "_replaced_type" + - match: + _below_is_target_for_tests: 0 + - match: + _type: "_replaced_type" + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 1 + - match: + _shards.failed: 0 + - do: + not_random_but_representive: "of actual test" + - match: + hits.total.value: 0 + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 1 + - match: + _shards.failed: 0 +--- +'Does not have _type match ': + - do: + something: + that_is: true + - do: + and: "again" + - match: + hits.total.value: 0 + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 1 + - match: + _shards.failed: 0 + - do: + it: "again" + - match: + hits.total.value: 0 + - match: + _shards.total: 2 + - match: + _shards.successful: 2 + - match: + _shards.skipped: 1 + - match: + _shards.failed: 0 + - match: + _replace_in_last_test_only: "the value does not matter" +--- +Last test: + - do: + something: "中文" + - match: + _index: "test_1" + - match: + _type: "_replaced_type" + - match: + _id: "中文" + - match: + _source: + foo: "Hello: 中文" + - do: + something_else: "中文" + - match: + _index: "test_1" + - match: + _type: "_replaced_type" + - match: + _replace_in_last_test_only: "_replaced_type" + - match: + _id: "中文" + - match: + _source: + foo: "Hello: 中文" diff --git a/buildSrc/src/test/resources/rest/transform/text/text_replace.yml b/buildSrc/src/test/resources/rest/transform/text/text_replace_original.yml similarity index 97% rename from buildSrc/src/test/resources/rest/transform/text/text_replace.yml rename to buildSrc/src/test/resources/rest/transform/text/text_replace_original.yml index 3faf4a508c84c..78ce5c33b6c66 100644 --- a/buildSrc/src/test/resources/rest/transform/text/text_replace.yml +++ b/buildSrc/src/test/resources/rest/transform/text/text_replace_original.yml @@ -35,6 +35,8 @@ teardown: - key_not_to_replace: { _shards.skipped : 0} - key_not_to_replace: { _below_is_target_for_tests: 0 } - key_to_replace: "value_to_replace" + - is_true: is_true_to_replace + - is_false: is_false_to_replace --- "Also has key_value to replace": diff --git a/buildSrc/src/test/resources/rest/transform/text/text_replace_transformed.yml b/buildSrc/src/test/resources/rest/transform/text/text_replace_transformed.yml new file mode 100644 index 0000000000000..3295445dd0bf9 --- /dev/null +++ b/buildSrc/src/test/resources/rest/transform/text/text_replace_transformed.yml @@ -0,0 +1,117 @@ +--- +setup: + - do: + something: + here: "ok" +--- +teardown: + - do: + something_else: + here: true +--- +First test: + - do: + something: + that_is: true + - do: + and: "again" + - key_not_to_replace: + copied.from.real.test.total: 1 + - key_not_to_replace: + hits.hits.0._index: "single_doc_index" + - key_not_to_replace: + _shards.total: 2 + - key_not_to_replace: + _shards.successful: 2 + - key_not_to_replace: + _shards.skipped: 0 + - key_not_to_replace: + _shards.failed: 0 + - do: + and: "again" + - key_not_to_replace: + hits.total: 1 + - key_not_to_replace: + hits.hits.0._index: "my_remote_cluster:single_doc_index" + - key_not_to_replace: + _shards.total: 2 + - key_not_to_replace: + _shards.successful: 2 + - key_not_to_replace: + _shards.skipped: 0 + - key_not_to_replace: + _below_is_target_for_tests: 0 + - key_to_replace: "_replaced_value" + - is_true: is_true_replaced + - is_false: is_false_replaced +--- +Also has key_value to replace: + - do: + something: + that_is: true + - do: + and: "again" + - key_not_to_replace: + hits.total.value: 0 + - key_to_replace: "_replaced_value" + - key_not_to_replace: + _below_is_target_for_tests: 0 + - key_not_to_replace: + _type: "foo" + - key_not_to_replace: + _shards.total: 2 + - key_not_to_replace: + _shards.successful: 2 + - key_not_to_replace: + _shards.skipped: 1 + - key_not_to_replace: + _shards.failed: 0 + - do: + not_random_but_representive: "of actual test" + - key_not_to_replace: + hits.total.value: 0 + - key_not_to_replace: + _shards.total: 2 + - key_not_to_replace: + _shards.successful: 2 + - key_not_to_replace: + _shards.skipped: 1 + - key_not_to_replace: + _shards.failed: 0 +--- +'Does not have key_value to replace ': + - do: + something: + that_is: true + - do: + and: "again" + - key_to_replace: "value_NOT_to_replace" + - do: + it: "again" + - key_not_to_replace: + _type: 0 + - key_not_to_replace: + _shards.total: 2 +--- +Last test: + - do: + something: "中文" + - key_not_to_replace: + _index: "test_1" + - key_to_replace: "_replaced_value" + - key_not_to_replace: + _id: "中文" + - key_not_to_replace: + _source: + foo: "Hello: 中文" + - do: + something_else: "中文" + - key_not_to_replace: + _index: "test_1" + - key_not_to_replace: + _type: "the value does not matter" + - key_not_to_replace: + _id: "中文" + - key_not_to_replace: + _source: + foo: "Hello: 中文" diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index b49f9a9fd45f1..bc79a1015a8cc 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -291,10 +291,10 @@ tasks.named("yamlRestCompatTest").configure { } tasks.named("transformV7RestTests").configure({ task -> - task.replaceMatch("_type", "_doc") + task.replaceValueInMatch("_type", "_doc") task.addAllowedWarningRegex("\\[types removal\\].*") - task.replaceMatch("nodes.\$node_id.roles.8", "ml", "node_info role test") - task.replaceMatch("nodes.\$node_id.roles.9", "remote_cluster_client", "node_info role test") + task.replaceValueInMatch("nodes.\$node_id.roles.8", "ml", "node_info role test") + task.replaceValueInMatch("nodes.\$node_id.roles.9", "remote_cluster_client", "node_info role test") task.removeMatch("nodes.\$node_id.roles.10", "node_info role test") task.replaceIsTrue("test_index.mappings.type_1", "test_index.mappings._doc") task.replaceIsFalse("test_index.mappings.type_1", "test_index.mappings._doc") diff --git a/x-pack/plugin/build.gradle b/x-pack/plugin/build.gradle index 7be785068f5de..2180ca490bc43 100644 --- a/x-pack/plugin/build.gradle +++ b/x-pack/plugin/build.gradle @@ -213,6 +213,6 @@ tasks.named("precommit").configure { } tasks.named("transformV7RestTests").configure({ task -> - task.replaceMatch("_type", "_doc") + task.replaceValueInMatch("_type", "_doc") task.addAllowedWarningRegex("\\[types removal\\].*") })