Skip to content

Commit a9e5592

Browse files
authored
SWIFT-1328 Test against latest + load balancers on Evergreen (#668)
1 parent 0d5a7fb commit a9e5592

File tree

6 files changed

+109
-115
lines changed

6 files changed

+109
-115
lines changed

.evergreen/config.yml

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,40 @@ functions:
356356
LINUX_SOURCEKIT_LIB_PATH=${PROJECT_DIRECTORY}/opt/swiftenv/versions/${SWIFT_VERSION}/usr/lib \
357357
${PROJECT_DIRECTORY}/opt/swiftlint/.build/release/swiftlint --strict --quiet
358358
359+
start-load-balancer:
360+
- command: shell.exec
361+
params:
362+
script: |
363+
DRIVERS_TOOLS=${DRIVERS_TOOLS} MONGODB_URI=${MONGODB_URI} \
364+
bash ${DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh start
365+
- command: expansions.update
366+
params:
367+
file: lb-expansion.yml
368+
369+
stop-load-balancer:
370+
- command: shell.exec
371+
params:
372+
script: |
373+
DRIVERS_TOOLS=${DRIVERS_TOOLS} MONGODB_URI=${MONGODB_URI} \
374+
bash ${DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh stop
375+
376+
run-lb-tests:
377+
- command: shell.exec
378+
type: test
379+
params:
380+
working_dir: src
381+
script: |
382+
${PREPARE_SHELL}
383+
MONGODB_URI="${MONGODB_URI}" \
384+
TOPOLOGY="${TOPOLOGY}" \
385+
SSL=${SSL} \
386+
AUTH=${AUTH} \
387+
SWIFT_VERSION=${SWIFT_VERSION} \
388+
MONGODB_API_VERSION="${MONGODB_API_VERSION}" \
389+
SINGLE_MONGOS_LB_URI="${SINGLE_MONGOS_LB_URI}" \
390+
MULTI_MONGOS_LB_URI="${MULTI_MONGOS_LB_URI}" \
391+
${PROJECT_DIRECTORY}/.evergreen/run-tests.sh
392+
359393
"sourcery":
360394
- command: shell.exec
361395
type: test
@@ -579,6 +613,21 @@ tasks:
579613
MONGODB_VERSION: "latest"
580614
TOPOLOGY: "sharded_cluster"
581615
- func: "run tests"
616+
617+
- name: "test-latest-load_balancer"
618+
tags: ["latest", "load-balancer"]
619+
commands:
620+
- func: "prepare resources"
621+
- func: "fix absolute paths"
622+
- func: "bootstrap mongo-orchestration"
623+
vars:
624+
MONGODB_VERSION: "latest"
625+
TOPOLOGY: "sharded_cluster"
626+
- func: start-load-balancer
627+
- func: "run-lb-tests"
628+
vars:
629+
TOPOLOGY: "load_balanced"
630+
- func: stop-load-balancer
582631

583632
- name: "test-atlas-connectivity"
584633
tags: ["atlas-connect"]
@@ -1136,7 +1185,7 @@ buildvariants:
11361185
ssl-auth: "*"
11371186
display_name: "${swift-version} ${os-fully-featured} ${ssl-auth}"
11381187
tasks:
1139-
- ".latest"
1188+
- ".latest !.load-balancer"
11401189
- ".5.0"
11411190
- ".4.4"
11421191
- ".4.2"
@@ -1165,7 +1214,7 @@ buildvariants:
11651214
ssl-auth: "*"
11661215
display_name: "${swift-version} ${os-fully-featured} ${ssl-auth}"
11671216
tasks:
1168-
- ".latest"
1217+
- ".latest !.load-balancer"
11691218
- ".5.0"
11701219
- ".4.4"
11711220
- ".4.2"
@@ -1220,6 +1269,21 @@ buildvariants:
12201269
tasks:
12211270
- ".atlas-connect"
12221271

1272+
- matrix_name: "load-balancer-all"
1273+
matrix_spec:
1274+
os-fully-featured:
1275+
- "ubuntu-18.04"
1276+
- "ubuntu-20.04"
1277+
ssl-auth: "*"
1278+
swift-version:
1279+
- "5.2"
1280+
- "5.3"
1281+
- "5.4"
1282+
- "5.5-dev"
1283+
display_name: "Load Balancer ${swift-version} ${os-fully-featured} ${ssl-auth}"
1284+
tasks:
1285+
- ".load-balancer"
1286+
12231287
- matrix_name: "serverless"
12241288
matrix_spec:
12251289
os-fully-featured:

.evergreen/run-tests.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ set -o errexit # Exit the script with error if any of the commands fail
55
# variables
66
PROJECT_DIRECTORY=${PROJECT_DIRECTORY:-$PWD}
77
MONGODB_URI=${MONGODB_URI:-"NO_URI_PROVIDED"}
8+
SINGLE_MONGOS_LB_URI=${SINGLE_MONGOS_LB_URI:-"NO_URI_PROVIDED"}
9+
MULTI_MONGOS_LB_URI=${MULTI_MONGOS_LB_URI:-"NO_URI_PROVIDED"}
810
SWIFT_VERSION=${SWIFT_VERSION:-5.2.5}
911
INSTALL_DIR="${PROJECT_DIRECTORY}/opt"
1012
TOPOLOGY=${TOPOLOGY:-single}
@@ -58,7 +60,9 @@ if [ "$TEST_FILTER" != "NO_FILTER" ]; then
5860
FILTER_STATEMENT="--filter ${TEST_FILTER}"
5961
fi
6062

61-
MONGODB_TOPOLOGY=${TOPOLOGY} MONGODB_URI=$MONGODB_URI MONGODB_API_VERSION=$MONGODB_API_VERSION swift test $FILTER_STATEMENT 2>&1 | tee ${RAW_TEST_RESULTS}
63+
MONGODB_TOPOLOGY=${TOPOLOGY} MONGODB_URI=$MONGODB_URI SINGLE_MONGOS_LB_URI=$SINGLE_MONGOS_LB_URI \
64+
MULTI_MONGOS_LB_URI=$MULTI_MONGOS_LB_URI MONGODB_API_VERSION=$MONGODB_API_VERSION \
65+
swift test $FILTER_STATEMENT 2>&1 | tee ${RAW_TEST_RESULTS}
6266

6367
# save tests exit code
6468
EXIT_CODE=$?

Sources/TestsCommon/CommonTestUtils.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ open class MongoSwiftTestCase: XCTestCase {
132132
}
133133

134134
public static var multipleMongosLoadBalancedURI: String? {
135-
ProcessInfo.processInfo.environment["MULTIPLE_MONGOS_LB_URI"]
135+
ProcessInfo.processInfo.environment["MULTI_MONGOS_LB_URI"]
136136
}
137137

138138
/// Indicates that we are running the tests with SSL enabled, determined by the environment variable $SSL.
@@ -297,6 +297,15 @@ public struct TestRequirement: Decodable {
297297
)
298298
]
299299

300+
public static let changeStreamOnCollectionSupport = TestRequirement(
301+
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet, .loadBalanced]
302+
)
303+
304+
public static let changeStreamOnDBOrClientSupport = TestRequirement(
305+
minServerVersion: ServerVersion(major: 4, minor: 0, patch: 0),
306+
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet, .loadBalanced]
307+
)
308+
300309
public init(
301310
minServerVersion: ServerVersion? = nil,
302311
maxServerVersion: ServerVersion? = nil,

Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift

Lines changed: 20 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
358358
/// Prose test 1 of change stream spec.
359359
/// "ChangeStream must continuously track the last seen resumeToken"
360360
func testChangeStreamTracksResumeToken() throws {
361-
let testRequirements = TestRequirement(
362-
acceptableTopologies: [.replicaSet, .sharded]
363-
)
364-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
361+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
365362
guard unmetRequirement == nil else {
366363
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
367364
return
@@ -396,11 +393,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
396393
* is < 8, this is a driver-side error; for 8+, this is a server-side error).
397394
*/
398395
func testChangeStreamMissingId() throws {
399-
let testRequirements = TestRequirement(
400-
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet]
401-
)
402-
403-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
396+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
404397
guard unmetRequirement == nil else {
405398
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
406399
return
@@ -436,7 +429,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
436429
let testRequirements = TestRequirement(
437430
// TODO: SWIFT-1257: remove server version requirement
438431
maxServerVersion: ServerVersion(major: 4, minor: 9, patch: 0),
439-
acceptableTopologies: [.replicaSet, .sharded]
432+
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet, .loadBalanced]
440433
)
441434

442435
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
@@ -506,11 +499,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
506499
* ChangeStream will not attempt to resume on any error encountered while executing an aggregate command.
507500
*/
508501
func testChangeStreamFailedAggregate() throws {
509-
let testRequirements = TestRequirement(
510-
acceptableTopologies: [.replicaSet, .sharded]
511-
)
512-
513-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
502+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
514503
guard unmetRequirement == nil else {
515504
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
516505
return
@@ -562,11 +551,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
562551
* closed on the driver side.
563552
*/
564553
func testChangeStreamDoesntCloseOnEmptyBatch() throws {
565-
let testRequirements = TestRequirement(
566-
acceptableTopologies: [.replicaSet, .sharded]
567-
)
568-
569-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
554+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
570555
guard unmetRequirement == nil else {
571556
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
572557
return
@@ -594,11 +579,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
594579
* part of our evergreen matrix.
595580
*/
596581
func testChangeStreamFailedKillCursors() throws {
597-
let testRequirements = TestRequirement(
598-
acceptableTopologies: [.replicaSet, .sharded]
599-
)
600-
601-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
582+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
602583
guard unmetRequirement == nil else {
603584
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
604585
return
@@ -655,11 +636,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
655636
* - If resumeAfter was not specified, the getResumeToken result must be empty.
656637
*/
657638
func testChangeStreamResumeTokenUpdatesEmptyBatch() throws {
658-
let testRequirements = TestRequirement(
659-
acceptableTopologies: [.replicaSet, .sharded]
660-
)
661-
662-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
639+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
663640
guard unmetRequirement == nil else {
664641
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
665642
return
@@ -700,11 +677,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
700677
* - getResumeToken must return the _id of the previous document returned.
701678
*/
702679
func testChangeStreamResumeTokenUpdatesNonemptyBatch() throws {
703-
let testRequirements = TestRequirement(
704-
acceptableTopologies: [.replicaSet, .sharded]
705-
)
706-
707-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(testRequirements)
680+
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(.changeStreamOnCollectionSupport)
708681
guard unmetRequirement == nil else {
709682
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
710683
return
@@ -735,7 +708,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
735708
let client = try MongoClient.makeTestClient()
736709
let testRequirements = TestRequirement(
737710
minServerVersion: ServerVersion(major: 4, minor: 0),
738-
acceptableTopologies: [.replicaSet, .sharded]
711+
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet, .loadBalanced]
739712
)
740713

741714
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
@@ -791,7 +764,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
791764
let client = try MongoClient.makeTestClient()
792765
let testRequirements = TestRequirement(
793766
minServerVersion: ServerVersion(major: 4, minor: 0),
794-
acceptableTopologies: [.replicaSet, .sharded]
767+
acceptableTopologies: [.replicaSet, .sharded, .shardedReplicaSet, .loadBalanced]
795768
)
796769

797770
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
@@ -832,11 +805,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
832805

833806
func testChangeStreamOnACollection() throws {
834807
let client = try MongoClient.makeTestClient()
835-
let testRequirements = TestRequirement(
836-
acceptableTopologies: [.replicaSet, .sharded]
837-
)
838-
839-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
808+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
840809
guard unmetRequirement == nil else {
841810
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
842811
return
@@ -882,11 +851,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
882851

883852
func testChangeStreamWithPipeline() throws {
884853
let client = try MongoClient.makeTestClient()
885-
let testRequirements = TestRequirement(
886-
acceptableTopologies: [.replicaSet, .sharded]
887-
)
888-
889-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
854+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
890855
guard unmetRequirement == nil else {
891856
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
892857
return
@@ -915,11 +880,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
915880

916881
func testChangeStreamResumeToken() throws {
917882
let client = try MongoClient.makeTestClient()
918-
let testRequirements = TestRequirement(
919-
acceptableTopologies: [.replicaSet, .sharded]
920-
)
921-
922-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
883+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
923884
guard unmetRequirement == nil else {
924885
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
925886
return
@@ -994,11 +955,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
994955

995956
func testChangeStreamWithEventType() throws {
996957
let client = try MongoClient.makeTestClient()
997-
let testRequirements = TestRequirement(
998-
acceptableTopologies: [.replicaSet, .sharded]
999-
)
1000-
1001-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
958+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
1002959
guard unmetRequirement == nil else {
1003960
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
1004961
return
@@ -1046,11 +1003,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
10461003
let expectedDoc1 = MyFullDocumentType(id: 1, x: 1, y: 2)
10471004

10481005
let client = try MongoClient.makeTestClient()
1049-
let testRequirements = TestRequirement(
1050-
acceptableTopologies: [.replicaSet, .sharded]
1051-
)
1052-
1053-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
1006+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
10541007
guard unmetRequirement == nil else {
10551008
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
10561009
return
@@ -1095,11 +1048,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
10951048

10961049
func testChangeStreamOnACollectionWithCodableType() throws {
10971050
let client = try MongoClient.makeTestClient()
1098-
let testRequirements = TestRequirement(
1099-
acceptableTopologies: [.replicaSet, .sharded]
1100-
)
1101-
1102-
let unmetRequirement = try client.getUnmetRequirement(testRequirements)
1051+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnCollectionSupport)
11031052
guard unmetRequirement == nil else {
11041053
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
11051054
return
@@ -1165,9 +1114,9 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
11651114
func testDecodingInvalidateEventsOnCollection() throws {
11661115
// invalidated change stream on a collection
11671116
try self.withTestNamespace { client, _, collection in
1168-
let unmetRequirement = try MongoClient.makeTestClient().getUnmetRequirement(
1169-
TestRequirement(acceptableTopologies: [.replicaSet, .sharded])
1170-
)
1117+
let unmetRequirement = try MongoClient
1118+
.makeTestClient()
1119+
.getUnmetRequirement(.changeStreamOnCollectionSupport)
11711120
guard unmetRequirement == nil else {
11721121
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
11731122
return
@@ -1202,12 +1151,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase {
12021151
// invalidated change stream on a DB
12031152
try self.withTestNamespace { client, db, collection in
12041153
// DB change streams are supported as of 4.0
1205-
let unmetRequirement = try client.getUnmetRequirement(
1206-
TestRequirement(
1207-
minServerVersion: ServerVersion(major: 4, minor: 0),
1208-
acceptableTopologies: [.replicaSet, .sharded]
1209-
)
1210-
)
1154+
let unmetRequirement = try client.getUnmetRequirement(.changeStreamOnDBOrClientSupport)
12111155
guard unmetRequirement == nil else {
12121156
printSkipMessage(testName: self.name, unmetRequirement: unmetRequirement!)
12131157
return

0 commit comments

Comments
 (0)