Skip to content

Commit 1725e65

Browse files
authored
Clean up unified tests via skipping API (#1551)
Clean up unified tests via skipping API
1 parent cc4979f commit 1725e65

File tree

7 files changed

+181
-51
lines changed

7 files changed

+181
-51
lines changed

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedRetryableReadsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@
2828
import java.util.Collection;
2929

3030
import static com.mongodb.client.unified.UnifiedRetryableReadsTest.doSkips;
31+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
3132
import static com.mongodb.reactivestreams.client.syncadapter.SyncMongoClient.disableWaitForBatchCursorCreation;
3233
import static com.mongodb.reactivestreams.client.syncadapter.SyncMongoClient.enableWaitForBatchCursorCreation;
3334

3435
final class UnifiedRetryableReadsTest extends UnifiedReactiveStreamsTest {
3536
@Override
3637
protected void skips(final String fileDescription, final String testDescription) {
37-
doSkips(fileDescription, testDescription);
38+
doSkips(testDef("unified-test-format/retryable-reads", fileDescription, testDescription));
3839
}
3940

4041
@Override

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedRetryableWritesTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
import java.util.Collection;
2424

2525
import static com.mongodb.client.unified.UnifiedRetryableWritesTest.doSkips;
26+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
2627

2728
final class UnifiedRetryableWritesTest extends UnifiedReactiveStreamsTest {
2829
@Override
2930
protected void skips(final String fileDescription, final String testDescription) {
30-
doSkips(testDescription);
31+
doSkips(testDef("unified-test-format/retryable-writes", fileDescription, testDescription));
3132
}
3233

3334
private static Collection<Arguments> data() throws URISyntaxException, IOException {

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedServerDiscoveryAndMonitoringTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
import java.net.URISyntaxException;
2323
import java.util.Collection;
2424

25+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
26+
2527
final class UnifiedServerDiscoveryAndMonitoringTest extends UnifiedReactiveStreamsTest {
2628
private static Collection<Arguments> data() throws URISyntaxException, IOException {
2729
return getTestData("unified-test-format/server-discovery-and-monitoring");
2830
}
2931

3032
@Override
3133
protected void skips(final String fileDescription, final String testDescription) {
32-
com.mongodb.client.unified.UnifiedServerDiscoveryAndMonitoringTest.doSkips(fileDescription, testDescription);
34+
com.mongodb.client.unified.UnifiedServerDiscoveryAndMonitoringTest.doSkips(
35+
testDef("unified-test-format/server-discovery-and-monitoring", fileDescription, testDescription));
3336
}
3437
}

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedRetryableReadsTest.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,28 @@
2222
import java.net.URISyntaxException;
2323
import java.util.Collection;
2424

25-
import static org.junit.jupiter.api.Assumptions.assumeFalse;
25+
import static com.mongodb.client.unified.UnifiedTestSkips.TestDef;
26+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
2627

2728
public final class UnifiedRetryableReadsTest extends UnifiedSyncTest {
2829
@Override
2930
protected void skips(final String fileDescription, final String testDescription) {
30-
doSkips(fileDescription, testDescription);
31+
doSkips(testDef("unified-test-format/retryable-reads", fileDescription, testDescription));
3132
}
3233

33-
public static void doSkips(final String fileDescription, @SuppressWarnings("unused") final String testDescription) {
34-
// Skipped because driver removed the deprecated count methods
35-
assumeFalse(fileDescription.equals("count"));
36-
assumeFalse(fileDescription.equals("count-serverErrors"));
37-
// Skipped because the driver never had these methods
38-
assumeFalse(fileDescription.equals("listDatabaseObjects"));
39-
assumeFalse(fileDescription.equals("listDatabaseObjects-serverErrors"));
40-
assumeFalse(fileDescription.equals("listCollectionObjects"));
41-
assumeFalse(fileDescription.equals("listCollectionObjects-serverErrors"));
42-
43-
// JAVA-5224
44-
assumeFalse(fileDescription.equals("ReadConcernMajorityNotAvailableYet is a retryable read")
45-
&& testDescription.equals("Find succeeds on second attempt after ReadConcernMajorityNotAvailableYet"),
46-
"JAVA-5224");
34+
public static void doSkips(final TestDef def) {
35+
def.skipDeprecated("Deprecated feature removed")
36+
.file("retryable-reads", "count")
37+
.file("retryable-reads", "count-serverErrors");
38+
39+
def.skipDeprecated("Deprecated feature never implemented")
40+
.file("retryable-reads", "listDatabaseObjects")
41+
.file("retryable-reads", "listDatabaseObjects-serverErrors")
42+
.file("retryable-reads", "listCollectionObjects")
43+
.file("retryable-reads", "listCollectionObjects-serverErrors");
44+
45+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5224")
46+
.test("retryable-reads", "ReadConcernMajorityNotAvailableYet is a retryable read", "Find succeeds on second attempt after ReadConcernMajorityNotAvailableYet");
4747
}
4848

4949
private static Collection<Arguments> data() throws URISyntaxException, IOException {

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedRetryableWritesTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.mongodb.client.unified;
1818

19+
import com.mongodb.client.unified.UnifiedTestSkips.TestDef;
1920
import org.junit.jupiter.params.provider.Arguments;
2021

2122
import java.io.IOException;
@@ -25,24 +26,27 @@
2526
import static com.mongodb.ClusterFixture.isDiscoverableReplicaSet;
2627
import static com.mongodb.ClusterFixture.isSharded;
2728
import static com.mongodb.ClusterFixture.serverVersionLessThan;
28-
import static org.junit.jupiter.api.Assumptions.assumeFalse;
29+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
2930

3031
public final class UnifiedRetryableWritesTest extends UnifiedSyncTest {
3132
@Override
3233
protected void skips(final String fileDescription, final String testDescription) {
33-
doSkips(testDescription);
34+
doSkips(testDef("unified-test-format/retryable-writes", fileDescription, testDescription));
3435
}
3536

36-
public static void doSkips(final String description) {
37+
public static void doSkips(final TestDef def) {
3738
if (isSharded() && serverVersionLessThan(5, 0)) {
38-
assumeFalse(description.contains("succeeds after WriteConcernError"));
39-
assumeFalse(description.contains("succeeds after retryable writeConcernError"));
39+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5125")
40+
.testContains("retryable-writes", "succeeds after WriteConcernError")
41+
.testContains("retryable-writes", "succeeds after retryable writeConcernError");
4042
}
4143
if (isDiscoverableReplicaSet() && serverVersionLessThan(4, 4)) {
42-
assumeFalse(description.equals("RetryableWriteError label is added based on writeConcernError in pre-4.4 mongod response"));
44+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5341")
45+
.test("retryable-writes", "retryable-writes insertOne serverErrors", "RetryableWriteError label is added based on writeConcernError in pre-4.4 mongod response");
4346
}
44-
assumeFalse(description.contains("client bulkWrite"), "JAVA-4586");
45-
assumeFalse(description.contains("client.clientBulkWrite"), "JAVA-4586");
47+
def.skipJira("https://jira.mongodb.org/browse/JAVA-4586")
48+
.testContains("retryable-writes", "client bulkWrite")
49+
.testContains("retryable-writes", "client.clientBulkWrite");
4650
}
4751

4852
private static Collection<Arguments> data() throws URISyntaxException, IOException {

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedServerDiscoveryAndMonitoringTest.java

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import java.net.URISyntaxException;
2323
import java.util.Collection;
2424

25-
import static org.junit.jupiter.api.Assumptions.assumeFalse;
25+
import static com.mongodb.client.unified.UnifiedTestSkips.TestDef;
26+
import static com.mongodb.client.unified.UnifiedTestSkips.testDef;
2627

2728
public final class UnifiedServerDiscoveryAndMonitoringTest extends UnifiedSyncTest {
2829
private static Collection<Arguments> data() throws URISyntaxException, IOException {
@@ -31,30 +32,26 @@ private static Collection<Arguments> data() throws URISyntaxException, IOExcepti
3132

3233
@Override
3334
protected void skips(final String fileDescription, final String testDescription) {
34-
doSkips(fileDescription, testDescription);
35+
doSkips(testDef("unified-test-format/server-discovery-and-monitoring", fileDescription, testDescription));
3536
}
3637

37-
public static void doSkips(final String fileDescription, final String testDescription) {
38-
assumeFalse(testDescription.equals("connect with serverMonitoringMode=auto >=4.4"),
39-
"Skipping because our server monitoring events behave differently for now");
40-
assumeFalse(testDescription.equals("connect with serverMonitoringMode=stream >=4.4"),
41-
"Skipping because our server monitoring events behave differently for now");
42-
43-
assumeFalse(fileDescription.equals("standalone-logging"), "Skipping until JAVA-4770 is implemented");
44-
assumeFalse(fileDescription.equals("replicaset-logging"), "Skipping until JAVA-4770 is implemented");
45-
assumeFalse(fileDescription.equals("sharded-logging"), "Skipping until JAVA-4770 is implemented");
46-
assumeFalse(fileDescription.equals("loadbalanced-logging"), "Skipping until JAVA-4770 is implemented");
47-
48-
assumeFalse(fileDescription.equals("standalone-emit-topology-description-changed-before-close"),
49-
"Skipping until JAVA-5229 is implemented");
50-
assumeFalse(fileDescription.equals("replicaset-emit-topology-description-changed-before-close"),
51-
"Skipping until JAVA-5229 is implemented");
52-
assumeFalse(fileDescription.equals("sharded-emit-topology-description-changed-before-close"),
53-
"Skipping until JAVA-5229 is implemented");
54-
assumeFalse(fileDescription.equals("loadbalanced-emit-topology-description-changed-before-close"),
55-
"Skipping until JAVA-5229 is implemented");
56-
57-
assumeFalse(testDescription.equals("poll waits after successful heartbeat"), "Skipping until JAVA-5564 is implemented");
58-
assumeFalse(fileDescription.equals("interruptInUse"), "Skipping until JAVA-4536 is implemented");
38+
public static void doSkips(final TestDef def) {
39+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5230")
40+
.test("server-discovery-and-monitoring", "serverMonitoringMode", "connect with serverMonitoringMode=auto >=4.4")
41+
.test("server-discovery-and-monitoring", "serverMonitoringMode", "connect with serverMonitoringMode=stream >=4.4");
42+
def.skipJira("https://jira.mongodb.org/browse/JAVA-4770")
43+
.file("server-discovery-and-monitoring", "standalone-logging")
44+
.file("server-discovery-and-monitoring", "replicaset-logging")
45+
.file("server-discovery-and-monitoring", "sharded-logging")
46+
.file("server-discovery-and-monitoring", "loadbalanced-logging");
47+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5229")
48+
.file("server-discovery-and-monitoring", "standalone-emit-topology-description-changed-before-close")
49+
.file("server-discovery-and-monitoring", "replicaset-emit-topology-description-changed-before-close")
50+
.file("server-discovery-and-monitoring", "sharded-emit-topology-description-changed-before-close")
51+
.file("server-discovery-and-monitoring", "loadbalanced-emit-topology-description-changed-before-close");
52+
def.skipJira("https://jira.mongodb.org/browse/JAVA-5564")
53+
.test("server-discovery-and-monitoring", "serverMonitoringMode", "poll waits after successful heartbeat");
54+
def.skipJira("https://jira.mongodb.org/browse/JAVA-4536")
55+
.file("server-discovery-and-monitoring", "interruptInUse");
5956
}
6057
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/*
2+
* Copyright 2008-present MongoDB, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.mongodb.client.unified;
18+
19+
import com.mongodb.assertions.Assertions;
20+
21+
import static org.junit.jupiter.api.Assumptions.assumeFalse;
22+
23+
public final class UnifiedTestSkips {
24+
25+
private UnifiedTestSkips() {}
26+
27+
public static TestDef testDef(final String dir, final String file, final String test) {
28+
return new TestDef(dir, file, test);
29+
}
30+
31+
public static final class TestDef {
32+
private final String dir;
33+
private final String file;
34+
private final String test;
35+
36+
private TestDef(final String dir, final String file, final String test) {
37+
this.dir = dir;
38+
this.file = file;
39+
this.test = test;
40+
}
41+
42+
/**
43+
* Test is skipped because it is pending implementation, and there is
44+
* a Jira ticket tracking this which has more information.
45+
*
46+
* @param skip reason for skipping the test; must start with a Jira URL
47+
*/
48+
public Skip skipJira(final String skip) {
49+
Assertions.assertTrue(skip.startsWith("https://jira.mongodb.org/browse/JAVA-"));
50+
return new Skip(this, skip);
51+
}
52+
53+
/**
54+
* Test is skipped because the feature under test was deprecated, and
55+
* was removed in the Java driver.
56+
*
57+
* @param skip reason for skipping the test
58+
*/
59+
public Skip skipDeprecated(final String skip) {
60+
return new Skip(this, skip);
61+
}
62+
63+
/**
64+
* Test is skipped because the Java driver cannot comply with the spec.
65+
*
66+
* @param skip reason for skipping the test
67+
*/
68+
public Skip skipNoncompliant(final String skip) {
69+
return new Skip(this, skip);
70+
}
71+
}
72+
73+
public static final class Skip {
74+
private final TestDef testDef;
75+
private final String reason;
76+
77+
private Skip(final TestDef testDef, final String reason) {
78+
this.testDef = testDef;
79+
this.reason = reason;
80+
}
81+
82+
/**
83+
* All tests in file under dir skipped.
84+
* @param dir the directory name
85+
* @param file the test file's "description" field
86+
* @return this
87+
*/
88+
public Skip file(final String dir, final String file) {
89+
boolean match = ("unified-test-format/" + dir).equals(testDef.dir)
90+
&& file.equals(testDef.file);
91+
assumeFalse(match, reason);
92+
return this;
93+
}
94+
95+
/**
96+
* Test skipped if dir, file, and test match.
97+
* @param dir the directory name
98+
* @param file the test file's "description" field
99+
* @param test the individual test's "description" field
100+
* @return this
101+
*/
102+
public Skip test(final String dir, final String file, final String test) {
103+
boolean match = ("unified-test-format/" + dir).equals(testDef.dir)
104+
&& file.equals(testDef.file)
105+
&& test.equals(testDef.test);
106+
assumeFalse(match, reason);
107+
return this;
108+
}
109+
110+
/**
111+
* Test skipped if the test description contains the fragment as a substring
112+
* Avoid using this, except during development.
113+
* @param dir the directory name
114+
* @param fragment the substring to check in the test "description" field
115+
* @return this
116+
*/
117+
public Skip testContains(final String dir, final String fragment) {
118+
boolean match = ("unified-test-format/" + dir).equals(testDef.dir)
119+
&& testDef.test.contains(fragment);
120+
assumeFalse(match, reason);
121+
return this;
122+
}
123+
}
124+
}

0 commit comments

Comments
 (0)