From 7bc5eedcd8e0425be35c6939c34036abf1dafb60 Mon Sep 17 00:00:00 2001 From: Kaitlin Mahar Date: Tue, 11 Feb 2020 13:36:04 -0500 Subject: [PATCH 1/4] Update SyncChangeStreamTests.swift --- Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift index 103f203eb..c67b07e5e 100644 --- a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift +++ b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift @@ -269,11 +269,17 @@ final class ChangeStreamSpecTests: MongoSwiftTestCase, FailPointConfigured { } guard version >= test.minServerVersion else { - print("Skipping tests case \"\(test.description)\": minimum required server " + + print("Skipping test case \"\(test.description)\": minimum required server " + "version \(test.minServerVersion) not met.") continue } + guard !(test.description == "Change Stream should error when _id is projected out" && + version >= ServerVersion(major: 4, minor: 3)) else { + print("Skipping test case \"\(test.description)\"; see SWIFT-722") + continue + } + print("Executing test: \(test.description)") try db1.drop() From 2bc481ab1be814f6a068ce5fb63e19c71af14b62 Mon Sep 17 00:00:00 2001 From: Kaitlin Mahar Date: Wed, 12 Feb 2020 00:56:48 -0500 Subject: [PATCH 2/4] Skip additional failing tests --- .../SyncChangeStreamTests.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift index c67b07e5e..4993d3948 100644 --- a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift +++ b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift @@ -275,7 +275,7 @@ final class ChangeStreamSpecTests: MongoSwiftTestCase, FailPointConfigured { } guard !(test.description == "Change Stream should error when _id is projected out" && - version >= ServerVersion(major: 4, minor: 3)) else { + version >= ServerVersion(major: 4, minor: 3, patch: 4)) else { print("Skipping test case \"\(test.description)\"; see SWIFT-722") continue } @@ -350,6 +350,11 @@ final class SyncChangeStreamTests: MongoSwiftTestCase { return } + guard try MongoClient.makeTestClient().serverVersion() < ServerVersion(major: 4, minor: 3, patch: 4) else { + print("Skipping test; see SWIFT-722") + return + } + try withTestNamespace { client, _, coll in let changeStream = try coll.watch([["$project": ["_id": false]]]) for x in 0..<5 { @@ -530,9 +535,15 @@ final class SyncChangeStreamTests: MongoSwiftTestCase { } expect(killedAggs.count).to(equal(1)) + let version = try MongoClient.makeTestClient().serverVersion() // the next set of assertions relies on the presence of the NonResumableChangeStreamError label, which was // introduced in 4.1.1 via SERVER-40446. - guard try MongoClient.makeTestClient().serverVersion() >= ServerVersion(major: 4, minor: 1, patch: 1) else { + guard version >= ServerVersion(major: 4, minor: 1, patch: 1) else { + return + } + + // skip on 4.3.4+ due to removal of NonResumableChangeStreamError label; see SWIFT-722 + guard version < ServerVersion(major: 4, minor: 3, patch: 4) else { return } From d2b3c3359e678d34696680415e39a5eaa7e07c01 Mon Sep 17 00:00:00 2001 From: Kaitlin Mahar Date: Wed, 12 Feb 2020 13:13:31 -0500 Subject: [PATCH 3/4] skip as of 4.3.3 --- Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift index 4993d3948..a22eadf09 100644 --- a/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift +++ b/Tests/MongoSwiftSyncTests/SyncChangeStreamTests.swift @@ -275,7 +275,7 @@ final class ChangeStreamSpecTests: MongoSwiftTestCase, FailPointConfigured { } guard !(test.description == "Change Stream should error when _id is projected out" && - version >= ServerVersion(major: 4, minor: 3, patch: 4)) else { + version >= ServerVersion(major: 4, minor: 3, patch: 3)) else { print("Skipping test case \"\(test.description)\"; see SWIFT-722") continue } @@ -350,7 +350,7 @@ final class SyncChangeStreamTests: MongoSwiftTestCase { return } - guard try MongoClient.makeTestClient().serverVersion() < ServerVersion(major: 4, minor: 3, patch: 4) else { + guard try MongoClient.makeTestClient().serverVersion() < ServerVersion(major: 4, minor: 3, patch: 3) else { print("Skipping test; see SWIFT-722") return } @@ -542,8 +542,8 @@ final class SyncChangeStreamTests: MongoSwiftTestCase { return } - // skip on 4.3.4+ due to removal of NonResumableChangeStreamError label; see SWIFT-722 - guard version < ServerVersion(major: 4, minor: 3, patch: 4) else { + // skip on 4.3.3+ due to removal of NonResumableChangeStreamError label; see SWIFT-722 + guard version < ServerVersion(major: 4, minor: 3, patch: 3) else { return } From bae81872877a8fc130b524bd2511df1097f4f1cb Mon Sep 17 00:00:00 2001 From: Kaitlin Mahar Date: Thu, 13 Feb 2020 15:21:22 -0500 Subject: [PATCH 4/4] Add async serverVersion --- Tests/MongoSwiftTests/AsyncTestUtils.swift | 14 ++++++++++++++ Tests/MongoSwiftTests/ChangeStreamTests.swift | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/Tests/MongoSwiftTests/AsyncTestUtils.swift b/Tests/MongoSwiftTests/AsyncTestUtils.swift index 8eb44e35b..3c8fff746 100644 --- a/Tests/MongoSwiftTests/AsyncTestUtils.swift +++ b/Tests/MongoSwiftTests/AsyncTestUtils.swift @@ -28,6 +28,20 @@ extension MongoClient { XCTFail("Error closing test client: \(error)") } } + + internal func serverVersion() -> EventLoopFuture { + return self.db("admin").runCommand( + ["buildInfo": 1], + options: RunCommandOptions( + readPreference: ReadPreference(.primary) + ) + ).flatMapThrowing { reply in + guard let versionString = reply["version"]?.stringValue else { + throw TestError(message: " reply missing version string: \(reply)") + } + return try ServerVersion(versionString) + } + } } extension MongoDatabase { diff --git a/Tests/MongoSwiftTests/ChangeStreamTests.swift b/Tests/MongoSwiftTests/ChangeStreamTests.swift index 2425ffeb6..4135eab6c 100644 --- a/Tests/MongoSwiftTests/ChangeStreamTests.swift +++ b/Tests/MongoSwiftTests/ChangeStreamTests.swift @@ -48,6 +48,11 @@ final class ChangeStreamTests: MongoSwiftTestCase { } try self.withTestClient { client in + guard try client.serverVersion().wait() < ServerVersion(major: 4, minor: 3, patch: 3) else { + print("Skipping test; see SWIFT-722") + return + } + let db = client.db(type(of: self).testDatabase) try? db.collection(self.getCollectionName()).drop().wait() let coll = try db.createCollection(self.getCollectionName()).wait()