Skip to content

Commit a9f50d1

Browse files
pgomulkamasseyke
authored andcommitted
[Rest Api Compatibility] Allow transforming warnings per test (elastic#75187)
Warning related transformations missed the possibility to apply per single test only. Also a warning changed in elastic#67158 for indices.close so this PR also applies the transformation for 7.x test relates elastic#51816
1 parent 2275cd8 commit a9f50d1

File tree

11 files changed

+132
-21
lines changed

11 files changed

+132
-21
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/rest/compat/RestCompatTestTransformTask.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,15 @@ public void removeWarning(String... warnings) {
282282
transformations.add(new RemoveWarnings(Set.copyOf(Arrays.asList(warnings))));
283283
}
284284

285+
/**
286+
* Removes one or more warnings
287+
* @param warnings the warning(s) to remove
288+
* @param testName the test name to remove the warning
289+
*/
290+
public void removeWarningForTest(String warnings, String testName) {
291+
transformations.add(new RemoveWarnings(Set.copyOf(Arrays.asList(warnings)), testName));
292+
}
293+
285294
/**
286295
* Adds one or more allowed warnings
287296
* @param allowedWarnings the warning(s) to add
@@ -298,6 +307,15 @@ public void addAllowedWarningRegex(String... allowedWarningsRegex) {
298307
transformations.add(new InjectAllowedWarnings(true, Arrays.asList(allowedWarningsRegex)));
299308
}
300309

310+
/**
311+
* Adds one or more allowed regular expression warnings
312+
* @param allowedWarningsRegex the regex warning(s) to add
313+
* @testName the test name to add a allowedWarningRegex
314+
*/
315+
public void addAllowedWarningRegexForTest(String allowedWarningsRegex, String testName) {
316+
transformations.add(new InjectAllowedWarnings(true, Arrays.asList(allowedWarningsRegex), testName));
317+
}
318+
301319
@OutputDirectory
302320
public DirectoryProperty getOutputDirectory() {
303321
return outputDirectory;

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/InjectAllowedWarnings.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
import com.fasterxml.jackson.databind.node.ArrayNode;
1212
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
1313
import com.fasterxml.jackson.databind.node.ObjectNode;
14+
15+
import org.elasticsearch.gradle.internal.test.rest.transform.RestTestContext;
1416
import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformByParentObject;
1517
import org.elasticsearch.gradle.internal.test.rest.transform.feature.FeatureInjector;
1618
import org.gradle.api.tasks.Input;
1719
import org.gradle.api.tasks.Internal;
20+
import org.gradle.api.tasks.Optional;
1821

1922
import java.util.List;
2023

@@ -26,6 +29,7 @@ public class InjectAllowedWarnings extends FeatureInjector implements RestTestTr
2629
private static JsonNodeFactory jsonNodeFactory = JsonNodeFactory.withExactBigDecimals(false);
2730

2831
private final List<String> allowedWarnings;
32+
private String testName;
2933
private final boolean isRegex;
3034

3135
/**
@@ -40,8 +44,18 @@ public InjectAllowedWarnings(List<String> allowedWarnings) {
4044
* @param allowedWarnings The allowed warnings to inject
4145
*/
4246
public InjectAllowedWarnings(boolean isRegex, List<String> allowedWarnings) {
47+
this(isRegex, allowedWarnings, null);
48+
}
49+
50+
/**
51+
* @param isRegex true if should inject the regex variant of allowed warnings
52+
* @param allowedWarnings The allowed warnings to inject
53+
* @param testName The testName to inject
54+
*/
55+
public InjectAllowedWarnings(boolean isRegex, List<String> allowedWarnings, String testName) {
4356
this.isRegex = isRegex;
4457
this.allowedWarnings = allowedWarnings;
58+
this.testName = testName;
4559
}
4660

4761
@Override
@@ -52,7 +66,7 @@ public void transformTest(ObjectNode doNodeParent) {
5266
arrayWarnings = new ArrayNode(jsonNodeFactory);
5367
doNodeValue.set(getSkipFeatureName(), arrayWarnings);
5468
}
55-
allowedWarnings.forEach(arrayWarnings::add);
69+
this.allowedWarnings.forEach(arrayWarnings::add);
5670
}
5771

5872
@Override
@@ -71,4 +85,15 @@ public String getSkipFeatureName() {
7185
public List<String> getAllowedWarnings() {
7286
return allowedWarnings;
7387
}
88+
89+
@Override
90+
public boolean shouldApply(RestTestContext testContext) {
91+
return testName == null || testContext.getTestName().equals(testName);
92+
}
93+
94+
@Input
95+
@Optional
96+
public String getTestName() {
97+
return testName;
98+
}
7499
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/RemoveWarnings.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010

1111
import com.fasterxml.jackson.databind.node.ArrayNode;
1212
import com.fasterxml.jackson.databind.node.ObjectNode;
13+
14+
import org.elasticsearch.gradle.internal.test.rest.transform.RestTestContext;
1315
import org.elasticsearch.gradle.internal.test.rest.transform.RestTestTransformByParentObject;
1416
import org.gradle.api.tasks.Input;
1517
import org.gradle.api.tasks.Internal;
18+
import org.gradle.api.tasks.Optional;
1619

1720
import java.util.ArrayList;
1821
import java.util.List;
@@ -28,13 +31,22 @@
2831
public class RemoveWarnings implements RestTestTransformByParentObject {
2932

3033
private final Set<String> warnings;
34+
private String testName;
3135

3236
/**
3337
* @param warnings The allowed warnings to inject
3438
*/
3539
public RemoveWarnings(Set<String> warnings) {
3640
this.warnings = warnings;
3741
}
42+
/**
43+
* @param warnings The allowed warnings to inject
44+
* @param testName The testName to inject
45+
*/
46+
public RemoveWarnings(Set<String> warnings, String testName) {
47+
this.warnings = warnings;
48+
this.testName = testName;
49+
}
3850

3951
@Override
4052
public void transformTest(ObjectNode doNodeParent) {
@@ -66,4 +78,15 @@ public String getKeyToFind() {
6678
public Set<String> getWarnings() {
6779
return warnings;
6880
}
81+
82+
@Override
83+
public boolean shouldApply(RestTestContext testContext) {
84+
return testName == null || testContext.getTestName().equals(testName);
85+
}
86+
87+
@Input
88+
@Optional
89+
public String getTestName() {
90+
return testName;
91+
}
6992
}

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/TransformTests.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,25 @@
1717
import com.fasterxml.jackson.databind.node.TextNode;
1818
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1919
import com.fasterxml.jackson.dataformat.yaml.YAMLParser;
20+
2021
import org.elasticsearch.gradle.internal.test.GradleUnitTestCase;
2122
import org.elasticsearch.gradle.internal.test.rest.transform.headers.InjectHeaders;
2223
import org.hamcrest.CoreMatchers;
24+
import org.hamcrest.Matchers;
2325
import org.hamcrest.core.IsCollectionContaining;
2426
import org.junit.Before;
2527

2628
import java.io.File;
2729
import java.io.IOException;
2830
import java.util.ArrayList;
31+
import java.util.Collection;
2932
import java.util.Collections;
3033
import java.util.Iterator;
3134
import java.util.LinkedList;
3235
import java.util.List;
3336
import java.util.Map;
34-
import java.util.Set;
3537
import java.util.concurrent.atomic.AtomicBoolean;
3638
import java.util.concurrent.atomic.LongAdder;
37-
import java.util.function.Consumer;
3839
import java.util.stream.Collectors;
3940

4041
public abstract class TransformTests extends GradleUnitTestCase {
@@ -181,11 +182,11 @@ protected ObjectNode getSkipNode(ArrayNode setupNodeValue) {
181182
return null;
182183
}
183184

184-
protected void validateBodyHasWarnings(String featureName, List<ObjectNode> tests, Set<String> expectedWarnings) {
185+
protected void validateBodyHasWarnings(String featureName, List<ObjectNode> tests, Collection<String> expectedWarnings) {
185186
validateBodyHasWarnings(featureName, null, tests, expectedWarnings);
186187
}
187188

188-
protected void validateBodyHasWarnings(String featureName, String testName, List<ObjectNode> tests, Set<String> expectedWarnings) {
189+
protected void validateBodyHasWarnings(String featureName, String testName, List<ObjectNode> tests, Collection<String> expectedWarnings) {
189190
AtomicBoolean actuallyDidSomething = new AtomicBoolean(false);
190191
tests.forEach(test -> {
191192
Iterator<Map.Entry<String, JsonNode>> testsIterator = test.fields();
@@ -201,13 +202,10 @@ protected void validateBodyHasWarnings(String featureName, String testName, List
201202
ObjectNode doSection = (ObjectNode) testSection.get("do");
202203
assertThat(doSection.get(featureName), CoreMatchers.notNullValue());
203204
ArrayNode warningsNode = (ArrayNode) doSection.get(featureName);
204-
LongAdder assertions = new LongAdder();
205-
warningsNode.forEach(warning -> {
206-
if (expectedWarnings.contains(warning.asText())) {
207-
assertions.increment();
208-
}
209-
});
210-
assertThat(assertions.intValue(), CoreMatchers.equalTo(expectedWarnings.size()));
205+
List<String> actual = new ArrayList<>();
206+
warningsNode.forEach(node -> actual.add(node.asText()));
207+
String[] expected = expectedWarnings.toArray(new String[]{});
208+
assertThat(actual, Matchers.containsInAnyOrder(expected));
211209
actuallyDidSomething.set(true);
212210
}
213211
});

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/InjectAllowedWarningsRegexTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ public void testInjectAllowedWarningsWithPreExisting() throws Exception {
4949
List<ObjectNode> transformedTests = transformTests(tests);
5050
printTest(testName, transformedTests);
5151
validateSetupAndTearDown(transformedTests);
52-
validateBodyHasWarnings(ALLOWED_WARNINGS_REGEX, tests, Set.of("c", "d"));
53-
validateBodyHasWarnings(ALLOWED_WARNINGS_REGEX, tests, addWarnings);
52+
validateBodyHasWarnings(ALLOWED_WARNINGS_REGEX, tests, Set.of("c", "d", "added warning"));
5453
}
5554

5655
@Override

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/InjectAllowedWarningsTests.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,24 @@ public void testInjectAllowedWarningsWithPreExisting() throws Exception {
4949
List<ObjectNode> transformedTests = transformTests(tests);
5050
printTest(testName, transformedTests);
5151
validateSetupAndTearDown(transformedTests);
52+
validateBodyHasWarnings(ALLOWED_WARNINGS, transformedTests, List.of("a", "b", "added warning"));
53+
}
54+
55+
@Test
56+
public void testInjectAllowedWarningsWithPreExistingForSingleTest() throws Exception {
57+
String testName = "/rest/transform/warnings/with_existing_allowed_warnings.yml";
58+
List<ObjectNode> tests = getTests(testName);
59+
validateSetupExist(tests);
5260
validateBodyHasWarnings(ALLOWED_WARNINGS, tests, Set.of("a", "b"));
53-
validateBodyHasWarnings(ALLOWED_WARNINGS, tests, addWarnings);
61+
List<ObjectNode> transformedTests = transformTests(tests, getTransformationsForTest("Test with existing allowed warnings"));
62+
printTest(testName, transformedTests);
63+
validateSetupAndTearDown(transformedTests);
64+
validateBodyHasWarnings(ALLOWED_WARNINGS, "Test with existing allowed warnings", transformedTests, Set.of("a", "b", "added warning"));
65+
validateBodyHasWarnings(ALLOWED_WARNINGS, "Test with existing allowed warnings not to change", transformedTests, Set.of("a", "b"));
66+
}
67+
68+
private List<RestTestTransform<?>> getTransformationsForTest(String testName) {
69+
return Collections.singletonList(new InjectAllowedWarnings(false, new ArrayList<>(addWarnings), testName));
5470
}
5571

5672
@Override

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/InjectWarningsRegexTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ public void testInjectWarningsWithPreExisting() throws Exception {
6767
List<ObjectNode> transformedTests = transformTests(tests);
6868
printTest(testName, transformedTests);
6969
validateSetupAndTearDown(transformedTests);
70-
validateBodyHasWarnings(WARNINGS_REGEX, tests, Set.of("c", "d"));
71-
validateBodyHasWarnings(WARNINGS_REGEX, "Test warnings", tests, addWarnings);
70+
validateBodyHasWarnings(WARNINGS_REGEX, "Not the test to change", tests, Set.of("c", "d"));
71+
validateBodyHasWarnings(WARNINGS_REGEX, "Test warnings", tests, Set.of("c", "d", "added warning"));
7272
}
7373

7474
@Override

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/InjectWarningsTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public void testInjectWarningsWithPreExisting() throws Exception {
6666
List<ObjectNode> transformedTests = transformTests(tests);
6767
printTest(testName, transformedTests);
6868
validateSetupAndTearDown(transformedTests);
69-
validateBodyHasWarnings(WARNINGS, tests, Set.of("a", "b"));
70-
validateBodyHasWarnings(WARNINGS, "Test warnings", tests, addWarnings);
69+
validateBodyHasWarnings(WARNINGS, "Not the test to change", tests, Set.of("a", "b"));
70+
validateBodyHasWarnings(WARNINGS, "Test warnings", tests, Set.of("a", "b", "added warning"));
7171
}
7272

7373
@Override

build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/warnings/RemoveWarningsTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,23 @@ public void testRemoveWarningWithPreExisting() throws Exception {
5050
validateBodyHasWarnings(WARNINGS, tests, Set.of("b"));
5151
}
5252

53+
@Test
54+
public void testRemoveWarningWithPreExistingFromSingleTest() throws Exception {
55+
String testName = "/rest/transform/warnings/with_existing_warnings.yml";
56+
List<ObjectNode> tests = getTests(testName);
57+
validateSetupExist(tests);
58+
validateBodyHasWarnings(WARNINGS, tests, Set.of("a", "b"));
59+
List<ObjectNode> transformedTests = transformTests(tests, getTransformationsForTest("Test warnings"));
60+
printTest(testName, transformedTests);
61+
validateSetupAndTearDown(transformedTests);
62+
validateBodyHasWarnings(WARNINGS, "Test warnings", tests, Set.of("b"));
63+
validateBodyHasWarnings(WARNINGS, "Not the test to change", tests, Set.of("a", "b"));
64+
}
65+
66+
private List<RestTestTransform<?>> getTransformationsForTest(String testName) {
67+
return Collections.singletonList(new RemoveWarnings(Set.of("a"), testName));
68+
}
69+
5370
/**
5471
* test file has preexisting single warning
5572
*/

build-tools-internal/src/test/resources/rest/transform/warnings/with_existing_allowed_warnings.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,15 @@ setup:
1717
id: "something"
1818
- match: { acknowledged: true }
1919

20+
---
21+
"Test with existing allowed warnings not to change":
22+
- do:
23+
allowed_warnings:
24+
- "a"
25+
- "b"
26+
allowed_warnings_regex:
27+
- "c"
28+
- "d"
29+
something:
30+
id: "something_else"
31+
- match: { acknowledged: true }

rest-api-spec/build.gradle

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ tasks.named("yamlRestCompatTest").configure {
9292
'cluster.voting_config_exclusions/10_basic/Throw exception when adding voting config exclusion without specifying nodes',
9393
'indices.flush/10_basic/Index synced flush rest test',
9494
'indices.forcemerge/10_basic/Check deprecation warning when incompatible only_expunge_deletes and max_num_segments values are both set',
95-
'indices.open/10_basic/?wait_for_active_shards default is deprecated',
96-
'indices.open/10_basic/?wait_for_active_shards=index-setting',
9795
// not fixing this in #70966
9896
'indices.put_template/11_basic_with_types/Put template with empty mappings',
9997
'search.aggregation/200_top_hits_metric/top_hits aggregation with sequence numbers',
@@ -224,6 +222,11 @@ tasks.named("transformV7RestTests").configure({ task ->
224222
)
225223
task.replaceValueInMatch("_all.primaries.indexing.types._doc.index_total", 2)
226224

225+
//override for "indices.open/10_basic/?wait_for_active_shards default is deprecated" and "indices.open/10_basic/?wait_for_active_shards=index-setting"
226+
task.addAllowedWarningRegexForTest("\\?wait_for_active_shards=index-setting is now the default behaviour.*", "?wait_for_active_shards=index-setting")
227+
task.removeWarningForTest("the default value for the ?wait_for_active_shards parameter will change from '0' to 'index-setting' in version 8; " +
228+
"specify '?wait_for_active_shards=index-setting' to adopt the future default behaviour, or '?wait_for_active_shards=0' to preserve today's behaviour"
229+
, "?wait_for_active_shards default is deprecated")
227230
})
228231

229232
tasks.register('enforceYamlTestConvention').configure {

0 commit comments

Comments
 (0)