From 65cfe84d30c51cf6973dec29c261f2de579a858a Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Thu, 2 Feb 2017 09:52:06 -0600 Subject: [PATCH 1/6] Allow swift sdk to delete a wildcard --- CSyncSDK/Operation.swift | 4 +-- CSyncSDKTests/ListenTests.swift | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CSyncSDK/Operation.swift b/CSyncSDK/Operation.swift index 8bf8db5..87b4321 100644 --- a/CSyncSDK/Operation.swift +++ b/CSyncSDK/Operation.swift @@ -196,8 +196,8 @@ class PubOperation : Operation return nil } - guard !key.isKeyPattern else { - error = err(CSError.invalidKey, msg:"Key may not contain wildcard characters") + guard !key.isKeyPattern || delete == true else { + error = err(CSError.invalidKey, msg:"Only delete pubs may contain a wildcard") return nil } diff --git a/CSyncSDKTests/ListenTests.swift b/CSyncSDKTests/ListenTests.swift index d25c970..e24b839 100644 --- a/CSyncSDKTests/ListenTests.swift +++ b/CSyncSDKTests/ListenTests.swift @@ -156,6 +156,54 @@ class ListenTests: XCTestCase { waitForExpectations(timeout: 10.0, handler:nil) } + + func testDeleteWildcard(){ + let expectation = self.expectation(description: "\(#function)") + let config = getConfig() + let uuid = UUID().uuidString + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + //Check to be sure the right 3 keys are deleted + var keyOne = false, keyTwo = false, keyThree = false + let listenKey = app.key("tests.DeleteWildcard." + uuid + "a.*") + let writeKey = app.key("tests.DeleteWildcard." + uuid + "a.b") + writeKey.write("b") + let writeKey2 = app.key("tests.DeleteWildcard." + uuid + "a.c") + writeKey2.write("c") + let writeKey3 = app.key("tests.DeleteWildcard." + uuid + "a.d") + writeKey3.write("d") + let writeKey4 = app.key("tests.DeleteWildcard." + uuid + "b.e") + writeKey4.write("be") + let writeKey5 = app.key("tests.DeleteWildcard." + uuid + "a.e.f") + writeKey5.write("aef") + let writeKey6 = app.key("tests.DeleteWildcard." + uuid + "b.a.g") + writeKey6.write("bag") + listenKey.listen { (value, error) -> () in + if let key = value?.key { + if key == "tests.DeleteWildcard." + uuid + "a.b" && (value?.exists)! == false { + keyOne = true + } else if key == "tests.DeleteWildcard." + uuid + "a.c" && value?.exists == false { + keyTwo = true + } else if key == "tests.DeleteWildcard." + uuid + "a.d" && value?.exists == false { + keyThree = true + } else if key == "tests.DeleteWildcard." + uuid + "b.e" && value?.exists == false { + XCTFail("a.* delete should not delete b.e") + } else if key == "tests.DeleteWildcard." + uuid + "a.e.f" && value?.exists == false { + XCTFail("a.* delete should not delete a.e.f") + } else if key == "tests.DeleteWildcard." + uuid + "b.a.g" && value?.exists == false { + XCTFail("a.* delete should not delete b.a.g") + } + //If all three keys that we expected to get deleted were deleted, pass + if keyOne && keyTwo && keyThree { + expectation.fulfill() + } + } + } + let writeKey7 = app.key("tests.DeleteWildcard." + uuid + "a.*") + writeKey7.delete() + } + waitForExpectations(timeout: 20.0, handler:nil) + } /* func testListenNullData() { let expectation = expectationWithDescription("\(#function)") From 486405982c312e5c4225b637a1cdcc32c855bfd8 Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Wed, 8 Feb 2017 07:06:20 -0600 Subject: [PATCH 2/6] Added delete nonexistent node tests --- CSyncSDKTests/WriteTests.swift | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/CSyncSDKTests/WriteTests.swift b/CSyncSDKTests/WriteTests.swift index ba12bc6..2e0b173 100644 --- a/CSyncSDKTests/WriteTests.swift +++ b/CSyncSDKTests/WriteTests.swift @@ -215,4 +215,40 @@ class WriteTests: XCTestCase { waitForExpectations(timeout: 10.0, handler:nil) } + func testDeleteWildcardThatDoesNotExist() { + let expectation = self.expectation(description: "\(#function)") + + // Connect to the CSync store + let config = getConfig() + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + } + + let testKey = app.key(testKeyString("\(#function)")+".*") + testKey.delete() {key, error in + // Wildcard deletes should always return success, even if nothing was deleted + assert(error == nil) + expectation.fulfill() + } + waitForExpectations(timeout: 10.0, handler:nil) + } + + func testDeleteThatDoesNotExist() { + let expectation = self.expectation(description: "\(#function)") + + // Connect to the CSync store + let config = getConfig() + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + } + + let testKey = app.key(testKeyString("\(#function)")) + testKey.delete() {key, error in + // Single Key deletes will return an error if you delete something that doesn't exist. + assert(error?.code == CSError.requestError.rawValue) + expectation.fulfill() + } + waitForExpectations(timeout: 10.0, handler:nil) + } + } From 793f26161ae627678647a2b026f3d2c2f7f22709 Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Thu, 9 Feb 2017 09:31:08 -0600 Subject: [PATCH 3/6] Fixed Delete wildcard with PR feedback --- CSyncSDK/Operation.swift | 2 +- CSyncSDKTests/ListenTests.swift | 47 -------------------------------- CSyncSDKTests/WriteTests.swift | 48 +++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/CSyncSDK/Operation.swift b/CSyncSDK/Operation.swift index 87b4321..53b5bc6 100644 --- a/CSyncSDK/Operation.swift +++ b/CSyncSDK/Operation.swift @@ -197,7 +197,7 @@ class PubOperation : Operation } guard !key.isKeyPattern || delete == true else { - error = err(CSError.invalidKey, msg:"Only delete pubs may contain a wildcard") + error = err(CSError.invalidKey, msg:"Key for write may not contain wildcard characters") return nil } diff --git a/CSyncSDKTests/ListenTests.swift b/CSyncSDKTests/ListenTests.swift index e24b839..cf2a475 100644 --- a/CSyncSDKTests/ListenTests.swift +++ b/CSyncSDKTests/ListenTests.swift @@ -157,53 +157,6 @@ class ListenTests: XCTestCase { waitForExpectations(timeout: 10.0, handler:nil) } - func testDeleteWildcard(){ - let expectation = self.expectation(description: "\(#function)") - let config = getConfig() - let uuid = UUID().uuidString - let app = App(host: config.host, port: config.port, options: config.options) - app.authenticate(config.authenticationProvider, token: config.token) { authData, error in - //Check to be sure the right 3 keys are deleted - var keyOne = false, keyTwo = false, keyThree = false - let listenKey = app.key("tests.DeleteWildcard." + uuid + "a.*") - let writeKey = app.key("tests.DeleteWildcard." + uuid + "a.b") - writeKey.write("b") - let writeKey2 = app.key("tests.DeleteWildcard." + uuid + "a.c") - writeKey2.write("c") - let writeKey3 = app.key("tests.DeleteWildcard." + uuid + "a.d") - writeKey3.write("d") - let writeKey4 = app.key("tests.DeleteWildcard." + uuid + "b.e") - writeKey4.write("be") - let writeKey5 = app.key("tests.DeleteWildcard." + uuid + "a.e.f") - writeKey5.write("aef") - let writeKey6 = app.key("tests.DeleteWildcard." + uuid + "b.a.g") - writeKey6.write("bag") - listenKey.listen { (value, error) -> () in - if let key = value?.key { - if key == "tests.DeleteWildcard." + uuid + "a.b" && (value?.exists)! == false { - keyOne = true - } else if key == "tests.DeleteWildcard." + uuid + "a.c" && value?.exists == false { - keyTwo = true - } else if key == "tests.DeleteWildcard." + uuid + "a.d" && value?.exists == false { - keyThree = true - } else if key == "tests.DeleteWildcard." + uuid + "b.e" && value?.exists == false { - XCTFail("a.* delete should not delete b.e") - } else if key == "tests.DeleteWildcard." + uuid + "a.e.f" && value?.exists == false { - XCTFail("a.* delete should not delete a.e.f") - } else if key == "tests.DeleteWildcard." + uuid + "b.a.g" && value?.exists == false { - XCTFail("a.* delete should not delete b.a.g") - } - //If all three keys that we expected to get deleted were deleted, pass - if keyOne && keyTwo && keyThree { - expectation.fulfill() - } - } - } - let writeKey7 = app.key("tests.DeleteWildcard." + uuid + "a.*") - writeKey7.delete() - } - waitForExpectations(timeout: 20.0, handler:nil) - } /* func testListenNullData() { let expectation = expectationWithDescription("\(#function)") diff --git a/CSyncSDKTests/WriteTests.swift b/CSyncSDKTests/WriteTests.swift index 2e0b173..4b35192 100644 --- a/CSyncSDKTests/WriteTests.swift +++ b/CSyncSDKTests/WriteTests.swift @@ -251,4 +251,52 @@ class WriteTests: XCTestCase { waitForExpectations(timeout: 10.0, handler:nil) } + func testDeleteWildcard(){ + let expectation = self.expectation(description: "\(#function)") + let config = getConfig() + let uuid = UUID().uuidString + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + //Check to be sure the right 3 keys are deleted + var keyOne = false, keyTwo = false, keyThree = false + let listenKey = app.key("tests.DeleteWildcard." + uuid + "a.*") + let writeKey = app.key("tests.DeleteWildcard." + uuid + "a.b") + writeKey.write("b") + let writeKey2 = app.key("tests.DeleteWildcard." + uuid + "a.c") + writeKey2.write("c") + let writeKey3 = app.key("tests.DeleteWildcard." + uuid + "a.d") + writeKey3.write("d") + let writeKey4 = app.key("tests.DeleteWildcard." + uuid + "b.e") + writeKey4.write("be") + let writeKey5 = app.key("tests.DeleteWildcard." + uuid + "a.e.f") + writeKey5.write("aef") + let writeKey6 = app.key("tests.DeleteWildcard." + uuid + "b.a.g") + writeKey6.write("bag") + listenKey.listen { (value, error) -> () in + if let key = value?.key { + if key == "tests.DeleteWildcard." + uuid + "a.b" && (value?.exists)! == false { + keyOne = true + } else if key == "tests.DeleteWildcard." + uuid + "a.c" && value?.exists == false { + keyTwo = true + } else if key == "tests.DeleteWildcard." + uuid + "a.d" && value?.exists == false { + keyThree = true + } else if key == "tests.DeleteWildcard." + uuid + "b.e" && value?.exists == false { + XCTFail("a.* delete should not delete b.e") + } else if key == "tests.DeleteWildcard." + uuid + "a.e.f" && value?.exists == false { + XCTFail("a.* delete should not delete a.e.f") + } else if key == "tests.DeleteWildcard." + uuid + "b.a.g" && value?.exists == false { + XCTFail("a.* delete should not delete b.a.g") + } + //If all three keys that we expected to get deleted were deleted, pass + if keyOne && keyTwo && keyThree { + expectation.fulfill() + } + } + } + let writeKey7 = app.key("tests.DeleteWildcard." + uuid + "a.*") + writeKey7.delete() + } + waitForExpectations(timeout: 20.0, handler:nil) + } + } From 0a9acdeb4fee14847934a03518c6663d9fcdb17c Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Thu, 9 Feb 2017 09:38:00 -0600 Subject: [PATCH 4/6] Added a few more Wildcard delete tests --- CSyncSDKTests/WriteTests.swift | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/CSyncSDKTests/WriteTests.swift b/CSyncSDKTests/WriteTests.swift index 4b35192..14145e2 100644 --- a/CSyncSDKTests/WriteTests.swift +++ b/CSyncSDKTests/WriteTests.swift @@ -299,4 +299,70 @@ class WriteTests: XCTestCase { waitForExpectations(timeout: 20.0, handler:nil) } + func testDeleteWildcardInMiddle(){ + let expectation = self.expectation(description: "\(#function)") + let config = getConfig() + let uuid = UUID().uuidString + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + //Check to be sure the right 3 keys are deleted + var keyOne = false, keyTwo = false, keyThree = false + let listenKey = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.*.e") + let writeKey = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.b.e") + writeKey.write("b") + let writeKey2 = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.c.e") + writeKey2.write("c") + let writeKey3 = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.d.e") + writeKey3.write("d") + let writeKey4 = app.key("tests.DeleteWildcardInMiddle." + uuid + "b.e.e") + writeKey4.write("be") + let writeKey5 = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.e.e.f") + writeKey5.write("aef") + let writeKey6 = app.key("tests.DeleteWildcardInMiddle." + uuid + "b.a.e.g") + writeKey6.write("bag") + listenKey.listen { (value, error) -> () in + if let key = value?.key { + if key == "tests.DeleteWildcardInMiddle." + uuid + "a.b.e" && (value?.exists)! == false { + keyOne = true + } else if key == "tests.DeleteWildcardInMiddle." + uuid + "a.c.e" && value?.exists == false { + keyTwo = true + } else if key == "tests.DeleteWildcardInMiddle." + uuid + "a.d.e" && value?.exists == false { + keyThree = true + } else if key == "tests.DeleteWildcardInMiddle." + uuid + "b.e.e" && value?.exists == false { + XCTFail("a.* delete should not delete b.e") + } else if key == "tests.DeleteWildcardInMiddle." + uuid + "a.e.e.f" && value?.exists == false { + XCTFail("a.* delete should not delete a.e.f") + } else if key == "tests.DeleteWildcardInMiddle." + uuid + "b.a.e.g" && value?.exists == false { + XCTFail("a.* delete should not delete b.a.g") + } + //If all three keys that we expected to get deleted were deleted, pass + if keyOne && keyTwo && keyThree { + expectation.fulfill() + } + } + } + let writeKey7 = app.key("tests.DeleteWildcardInMiddle." + uuid + "a.*.e") + writeKey7.delete() + } + waitForExpectations(timeout: 20.0, handler:nil) + } + + func testDeleteNonexistantWildcard(){ + //Deleting something that does not exist should return a success + let expectation = self.expectation(description: "\(#function)") + let config = getConfig() + let uuid = UUID().uuidString + let app = App(host: config.host, port: config.port, options: config.options) + app.authenticate(config.authenticationProvider, token: config.token) { authData, error in + let writeKey7 = app.key("tests.DeleteNonexistantWildcard.*") + writeKey7.delete(){ key, error in + assert(error == nil) + assert(key.key == "tests.DeleteNonexistantWildcard.*") + expectation.fulfill() + } + + } + waitForExpectations(timeout: 10.0, handler:nil) + } + } From 5fb3544a64cca1d5281581df7babd3394a0d12af Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Thu, 9 Feb 2017 09:46:45 -0600 Subject: [PATCH 5/6] slight test improvement --- CSyncSDKTests/WriteTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/CSyncSDKTests/WriteTests.swift b/CSyncSDKTests/WriteTests.swift index 14145e2..973dfcc 100644 --- a/CSyncSDKTests/WriteTests.swift +++ b/CSyncSDKTests/WriteTests.swift @@ -351,7 +351,6 @@ class WriteTests: XCTestCase { //Deleting something that does not exist should return a success let expectation = self.expectation(description: "\(#function)") let config = getConfig() - let uuid = UUID().uuidString let app = App(host: config.host, port: config.port, options: config.options) app.authenticate(config.authenticationProvider, token: config.token) { authData, error in let writeKey7 = app.key("tests.DeleteNonexistantWildcard.*") From 0525b3448894e48d9fd4df0c9c2baf81fc138013 Mon Sep 17 00:00:00 2001 From: "Thomas G. Boop" Date: Thu, 9 Feb 2017 09:50:20 -0600 Subject: [PATCH 6/6] Corrected spacing on listen tests --- CSyncSDKTests/ListenTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/CSyncSDKTests/ListenTests.swift b/CSyncSDKTests/ListenTests.swift index cf2a475..d25c970 100644 --- a/CSyncSDKTests/ListenTests.swift +++ b/CSyncSDKTests/ListenTests.swift @@ -156,7 +156,6 @@ class ListenTests: XCTestCase { waitForExpectations(timeout: 10.0, handler:nil) } - /* func testListenNullData() { let expectation = expectationWithDescription("\(#function)")