|
@@ -33,7 +33,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
override func setUp() {
|
|
|
super.setUp()
|
|
|
|
|
|
- do { try Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared").removeAll() } catch {}
|
|
|
+ do { try Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared").removeAll() } catch {}
|
|
|
do { try Keychain(service: "Twitter").removeAll() } catch {}
|
|
|
|
|
|
do { try Keychain(server: NSURL(string: "https://example.com")!, protocolType: .HTTPS).removeAll() } catch {}
|
|
@@ -88,11 +88,11 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertNil(try! keychain.get("password"))
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
func testGenericPasswordSubscripting() {
|
|
|
do {
|
|
|
// Add Keychain items
|
|
|
- let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
|
|
|
|
|
|
keychain["username"] = "kishikawa_katsumi"
|
|
|
keychain["password"] = "password_1234"
|
|
@@ -106,7 +106,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do {
|
|
|
// Update Keychain items
|
|
|
- let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
|
|
|
|
|
|
keychain["username"] = "katsumi_kishikawa"
|
|
|
keychain["password"] = "1234_password"
|
|
@@ -120,7 +120,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do {
|
|
|
// Remove Keychain items
|
|
|
- let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
|
|
|
|
|
|
keychain["username"] = nil
|
|
|
keychain["password"] = nil
|
|
@@ -218,7 +218,8 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
func testDefaultInitializer() {
|
|
|
let keychain = Keychain()
|
|
|
- XCTAssertEqual(keychain.service, "")
|
|
|
+ XCTAssertEqual(keychain.service, NSBundle.mainBundle().bundleIdentifier)
|
|
|
+ XCTAssertEqual(keychain.service, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertNil(keychain.accessGroup)
|
|
|
}
|
|
|
|
|
@@ -229,15 +230,15 @@ class KeychainAccessTests: XCTestCase {
|
|
|
}
|
|
|
|
|
|
func testInitializerWithAccessGroup() {
|
|
|
- let keychain = Keychain(accessGroup: "12ABCD3E4F.shared")
|
|
|
- XCTAssertEqual(keychain.service, "")
|
|
|
- XCTAssertEqual(keychain.accessGroup, "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(accessGroup: "27AEDK3C9F.shared")
|
|
|
+ XCTAssertEqual(keychain.service, "com.kishikawakatsumi.TestHost")
|
|
|
+ XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared")
|
|
|
}
|
|
|
|
|
|
func testInitializerWithServiceAndAccessGroup() {
|
|
|
- let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(service: "com.example.github-token", accessGroup: "27AEDK3C9F.shared")
|
|
|
XCTAssertEqual(keychain.service, "com.example.github-token")
|
|
|
- XCTAssertEqual(keychain.accessGroup, "12ABCD3E4F.shared")
|
|
|
+ XCTAssertEqual(keychain.accessGroup, "27AEDK3C9F.shared")
|
|
|
}
|
|
|
|
|
|
func testInitializerWithServer() {
|
|
@@ -458,67 +459,74 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
#if os(iOS) || os(tvOS)
|
|
|
func testSetAttributes() {
|
|
|
- do {
|
|
|
- var attributes = [String: AnyObject]()
|
|
|
- attributes[String(kSecAttrDescription)] = "Description Test"
|
|
|
- attributes[String(kSecAttrComment)] = "Comment Test"
|
|
|
- attributes[String(kSecAttrCreator)] = "Creator Test"
|
|
|
- attributes[String(kSecAttrType)] = "Type Test"
|
|
|
- attributes[String(kSecAttrLabel)] = "Label Test"
|
|
|
- attributes[String(kSecAttrIsInvisible)] = true
|
|
|
- attributes[String(kSecAttrIsNegative)] = true
|
|
|
-
|
|
|
- let keychain = Keychain(service: "Twitter")
|
|
|
- .attributes(attributes)
|
|
|
- .accessibility(.WhenPasscodeSetThisDeviceOnly, authenticationPolicy: .UserPresence)
|
|
|
-
|
|
|
- XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
|
|
|
+ let expectation = expectationWithDescription("Touch ID authentication")
|
|
|
|
|
|
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
|
|
|
do {
|
|
|
- let attributes = try keychain.get("kishikawakatsumi") { $0 }
|
|
|
- XCTAssertNil(attributes)
|
|
|
- } catch {
|
|
|
- XCTFail("error occurred")
|
|
|
- }
|
|
|
+ var attributes = [String: AnyObject]()
|
|
|
+ attributes[String(kSecAttrDescription)] = "Description Test"
|
|
|
+ attributes[String(kSecAttrComment)] = "Comment Test"
|
|
|
+ attributes[String(kSecAttrCreator)] = "Creator Test"
|
|
|
+ attributes[String(kSecAttrType)] = "Type Test"
|
|
|
+ attributes[String(kSecAttrLabel)] = "Label Test"
|
|
|
+ attributes[String(kSecAttrIsInvisible)] = true
|
|
|
+ attributes[String(kSecAttrIsNegative)] = true
|
|
|
+
|
|
|
+ let keychain = Keychain(service: "Twitter")
|
|
|
+ .attributes(attributes)
|
|
|
+ .accessibility(.WhenPasscodeSetThisDeviceOnly, authenticationPolicy: .UserPresence)
|
|
|
+
|
|
|
+ XCTAssertNil(keychain["kishikawakatsumi"], "not stored password")
|
|
|
+
|
|
|
+ do {
|
|
|
+ let attributes = try keychain.get("kishikawakatsumi") { $0 }
|
|
|
+ XCTAssertNil(attributes)
|
|
|
+ } catch {
|
|
|
+ XCTFail("error occurred")
|
|
|
+ }
|
|
|
|
|
|
- keychain["kishikawakatsumi"] = "password1234"
|
|
|
- XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
|
|
|
+ keychain["kishikawakatsumi"] = "password1234"
|
|
|
+ XCTAssertEqual(keychain["kishikawakatsumi"], "password1234", "stored password")
|
|
|
|
|
|
- do {
|
|
|
- let attributes = try keychain.get("kishikawakatsumi") { $0 }
|
|
|
- XCTAssertEqual(attributes?.`class`, ItemClass.GenericPassword.rawValue)
|
|
|
- XCTAssertEqual(attributes?.data, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
|
|
|
- XCTAssertNil(attributes?.ref)
|
|
|
- XCTAssertNotNil(attributes?.persistentRef)
|
|
|
- XCTAssertEqual(attributes?.accessible, Accessibility.WhenPasscodeSetThisDeviceOnly.rawValue)
|
|
|
- XCTAssertNotNil(attributes?.accessControl)
|
|
|
- XCTAssertEqual(attributes?.accessGroup, "")
|
|
|
- XCTAssertNotNil(attributes?.synchronizable)
|
|
|
- XCTAssertNotNil(attributes?.creationDate)
|
|
|
- XCTAssertNotNil(attributes?.modificationDate)
|
|
|
- XCTAssertEqual(attributes?.attributeDescription, "Description Test")
|
|
|
- XCTAssertEqual(attributes?.comment, "Comment Test")
|
|
|
- XCTAssertEqual(attributes?.creator, "Creator Test")
|
|
|
- XCTAssertEqual(attributes?.type, "Type Test")
|
|
|
- XCTAssertEqual(attributes?.label, "Label Test")
|
|
|
- XCTAssertEqual(attributes?.isInvisible, true)
|
|
|
- XCTAssertEqual(attributes?.isNegative, true)
|
|
|
- XCTAssertEqual(attributes?.account, "kishikawakatsumi")
|
|
|
- XCTAssertEqual(attributes?.service, "Twitter")
|
|
|
- XCTAssertNil(attributes?.generic)
|
|
|
- XCTAssertNil(attributes?.securityDomain)
|
|
|
- XCTAssertNil(attributes?.server)
|
|
|
- XCTAssertNil(attributes?.`protocol`)
|
|
|
- XCTAssertNil(attributes?.authenticationType)
|
|
|
- XCTAssertNil(attributes?.port)
|
|
|
- XCTAssertNil(attributes?.path)
|
|
|
-
|
|
|
- XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.GenericPassword.rawValue)
|
|
|
- XCTAssertEqual(attributes![String(kSecValueData)] as? NSData, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
|
|
|
- } catch {
|
|
|
- XCTFail("error occurred")
|
|
|
+ do {
|
|
|
+ let attributes = try keychain.get("kishikawakatsumi") { $0 }
|
|
|
+ XCTAssertEqual(attributes?.`class`, ItemClass.GenericPassword.rawValue)
|
|
|
+ XCTAssertEqual(attributes?.data, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
|
|
|
+ XCTAssertNil(attributes?.ref)
|
|
|
+ XCTAssertNotNil(attributes?.persistentRef)
|
|
|
+ XCTAssertEqual(attributes?.accessible, Accessibility.WhenPasscodeSetThisDeviceOnly.rawValue)
|
|
|
+ XCTAssertNotNil(attributes?.accessControl)
|
|
|
+ XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
+ XCTAssertNotNil(attributes?.synchronizable)
|
|
|
+ XCTAssertNotNil(attributes?.creationDate)
|
|
|
+ XCTAssertNotNil(attributes?.modificationDate)
|
|
|
+ XCTAssertEqual(attributes?.attributeDescription, "Description Test")
|
|
|
+ XCTAssertEqual(attributes?.comment, "Comment Test")
|
|
|
+ XCTAssertEqual(attributes?.creator, "Creator Test")
|
|
|
+ XCTAssertEqual(attributes?.type, "Type Test")
|
|
|
+ XCTAssertEqual(attributes?.label, "Label Test")
|
|
|
+ XCTAssertEqual(attributes?.isInvisible, true)
|
|
|
+ XCTAssertEqual(attributes?.isNegative, true)
|
|
|
+ XCTAssertEqual(attributes?.account, "kishikawakatsumi")
|
|
|
+ XCTAssertEqual(attributes?.service, "Twitter")
|
|
|
+ XCTAssertNil(attributes?.generic)
|
|
|
+ XCTAssertNil(attributes?.securityDomain)
|
|
|
+ XCTAssertNil(attributes?.server)
|
|
|
+ XCTAssertNil(attributes?.`protocol`)
|
|
|
+ XCTAssertNil(attributes?.authenticationType)
|
|
|
+ XCTAssertNil(attributes?.port)
|
|
|
+ XCTAssertNil(attributes?.path)
|
|
|
+
|
|
|
+ XCTAssertEqual(attributes![String(kSecClass)] as? String, ItemClass.GenericPassword.rawValue)
|
|
|
+ XCTAssertEqual(attributes![String(kSecValueData)] as? NSData, "password1234".dataUsingEncoding(NSUTF8StringEncoding))
|
|
|
+
|
|
|
+ expectation.fulfill()
|
|
|
+ } catch {
|
|
|
+ XCTFail("error occurred")
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ waitForExpectationsWithTimeout(10.0, handler: nil)
|
|
|
|
|
|
do {
|
|
|
var attributes = [String: AnyObject]()
|
|
@@ -558,7 +566,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
} else {
|
|
|
XCTAssertNotNil(attributes?.accessControl)
|
|
|
}
|
|
|
- XCTAssertEqual(attributes?.accessGroup, "")
|
|
|
+ XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertNotNil(attributes?.synchronizable)
|
|
|
XCTAssertNotNil(attributes?.creationDate)
|
|
|
XCTAssertNotNil(attributes?.modificationDate)
|
|
@@ -600,7 +608,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
} else {
|
|
|
XCTAssertNotNil(attributes?.accessControl)
|
|
|
}
|
|
|
- XCTAssertEqual(attributes?.accessGroup, "")
|
|
|
+ XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertNotNil(attributes?.synchronizable)
|
|
|
XCTAssertNotNil(attributes?.creationDate)
|
|
|
XCTAssertNotNil(attributes?.modificationDate)
|
|
@@ -643,7 +651,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
} else {
|
|
|
XCTAssertNotNil(attributes?.accessControl)
|
|
|
}
|
|
|
- XCTAssertEqual(attributes?.accessGroup, "")
|
|
|
+ XCTAssertEqual(attributes?.accessGroup, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertNotNil(attributes?.synchronizable)
|
|
|
XCTAssertNotNil(attributes?.creationDate)
|
|
|
XCTAssertNotNil(attributes?.modificationDate)
|
|
@@ -747,11 +755,11 @@ class KeychainAccessTests: XCTestCase {
|
|
|
}
|
|
|
|
|
|
// MARK:
|
|
|
-
|
|
|
- #if os(iOS)
|
|
|
+
|
|
|
+ #if !os(OSX) // Disable on CI
|
|
|
func testErrorHandling() {
|
|
|
do {
|
|
|
- let keychain = Keychain(service: "Twitter", accessGroup: "12ABCD3E4F.shared")
|
|
|
+ let keychain = Keychain(service: "Twitter", accessGroup: "27AEDK3C9F.shared")
|
|
|
try keychain.removeAll()
|
|
|
XCTAssertTrue(true, "no error occurred")
|
|
|
} catch {
|
|
@@ -894,7 +902,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do { try Keychain().set(username_1, key: "username") } catch {}
|
|
|
XCTAssertEqual(try! Keychain().get("username"), username_1, "stored username")
|
|
|
- XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "stored username")
|
|
|
+ XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password")
|
|
|
XCTAssertNil(try! Keychain(service: service_2).get("username"), "not stored username")
|
|
|
XCTAssertNil(try! Keychain(service: service_3).get("username"), "not stored username")
|
|
|
|
|
@@ -918,7 +926,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do { try Keychain().set(password_1, key: "password") } catch {}
|
|
|
XCTAssertEqual(try! Keychain().get("password"), password_1, "stored password")
|
|
|
- XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "stored password")
|
|
|
+ XCTAssertNil(try! Keychain(service: service_1).get("password"), "not stored password")
|
|
|
XCTAssertNil(try! Keychain(service: service_2).get("password"), "not stored password")
|
|
|
XCTAssertNil(try! Keychain(service: service_3).get("password"), "not stored password")
|
|
|
|
|
@@ -942,7 +950,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do { try Keychain().remove("username") } catch {}
|
|
|
XCTAssertNil(try! Keychain().get("username"), "removed username")
|
|
|
- XCTAssertNil(try! Keychain(service: service_1).get("username"), "removed username")
|
|
|
+ XCTAssertEqual(try! Keychain(service: service_1).get("username"), username_1, "left username")
|
|
|
XCTAssertEqual(try! Keychain(service: service_2).get("username"), username_2, "left username")
|
|
|
XCTAssertEqual(try! Keychain(service: service_3).get("username"), username_3, "left username")
|
|
|
|
|
@@ -966,7 +974,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
do { try Keychain().remove("password") } catch {}
|
|
|
XCTAssertNil(try! Keychain().get("password"), "removed password")
|
|
|
- XCTAssertNil(try! Keychain(service: service_1).get("password"), "removed password")
|
|
|
+ XCTAssertEqual(try! Keychain(service: service_1).get("password"), password_1, "left password")
|
|
|
XCTAssertEqual(try! Keychain(service: service_2).get("password"), password_2, "left password")
|
|
|
XCTAssertEqual(try! Keychain(service: service_3).get("password"), password_3, "left password")
|
|
|
|
|
@@ -1013,7 +1021,7 @@ class KeychainAccessTests: XCTestCase {
|
|
|
|
|
|
// MARK:
|
|
|
|
|
|
-#if os(iOS)
|
|
|
+ #if !os(OSX) // Disable on CI
|
|
|
func testAllKeys() {
|
|
|
do {
|
|
|
let keychain = Keychain()
|
|
@@ -1029,34 +1037,48 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(allItems.count, 3)
|
|
|
|
|
|
let sortedItems = allItems.sort { (item1, item2) -> Bool in
|
|
|
- let value1 = item1["value"] as! String
|
|
|
- let value2 = item2["value"] as! String
|
|
|
- return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
|
|
|
+ let key1 = item1["key"] as! String
|
|
|
+ let key2 = item2["key"] as! String
|
|
|
+ return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
|
|
|
}
|
|
|
|
|
|
- XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
|
|
|
+ #if !os(OSX)
|
|
|
+ XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
|
|
|
- XCTAssertEqual(sortedItems[0]["service"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[0]["value"] as? String, "value1")
|
|
|
XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
|
|
|
XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
|
|
|
XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "AfterFirstUnlock")
|
|
|
|
|
|
- XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
|
|
|
- XCTAssertEqual(sortedItems[1]["service"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[1]["value"] as? String, "value2")
|
|
|
XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
|
|
|
XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
|
|
|
XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlock")
|
|
|
|
|
|
- XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[2]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[2]["synchronizable"] as? String, "false")
|
|
|
- XCTAssertEqual(sortedItems[2]["service"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[2]["value"] as? String, "value3")
|
|
|
XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
|
|
|
XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
|
|
|
XCTAssertEqual(sortedItems[2]["accessibility"] as? String, "AfterFirstUnlock")
|
|
|
+ #else
|
|
|
+ XCTAssertEqual(sortedItems[0]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
+ XCTAssertEqual(sortedItems[0]["key"] as? String, "key1")
|
|
|
+ XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
|
|
|
+
|
|
|
+ XCTAssertEqual(sortedItems[1]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
+ XCTAssertEqual(sortedItems[1]["key"] as? String, "key2")
|
|
|
+ XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
|
|
|
+
|
|
|
+ XCTAssertEqual(sortedItems[2]["service"] as? String, "com.kishikawakatsumi.TestHost")
|
|
|
+ XCTAssertEqual(sortedItems[2]["key"] as? String, "key3")
|
|
|
+ XCTAssertEqual(sortedItems[2]["class"] as? String, "GenericPassword")
|
|
|
+ #endif
|
|
|
}
|
|
|
do {
|
|
|
let keychain = Keychain(service: "service1")
|
|
@@ -1078,12 +1100,13 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(allItems.count, 2)
|
|
|
|
|
|
let sortedItems = allItems.sort { (item1, item2) -> Bool in
|
|
|
- let value1 = item1["value"] as! String
|
|
|
- let value2 = item2["value"] as! String
|
|
|
- return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
|
|
|
+ let key1 = item1["key"] as! String
|
|
|
+ let key2 = item2["key"] as! String
|
|
|
+ return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
|
|
|
}
|
|
|
|
|
|
- XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "")
|
|
|
+ #if !os(OSX)
|
|
|
+ XCTAssertEqual(sortedItems[0]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "true")
|
|
|
XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
|
|
|
XCTAssertEqual(sortedItems[0]["value"] as? String, "service1_value1")
|
|
@@ -1091,13 +1114,22 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
|
|
|
XCTAssertEqual(sortedItems[0]["accessibility"] as? String, "WhenUnlockedThisDeviceOnly")
|
|
|
|
|
|
- XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "")
|
|
|
+ XCTAssertEqual(sortedItems[1]["accessGroup"] as? String, "27AEDK3C9F.com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedItems[1]["synchronizable"] as? String, "false")
|
|
|
XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
|
|
|
XCTAssertEqual(sortedItems[1]["value"] as? String, "service1_value2")
|
|
|
XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
|
|
|
XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
|
|
|
XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "AfterFirstUnlockThisDeviceOnly")
|
|
|
+ #else
|
|
|
+ XCTAssertEqual(sortedItems[0]["service"] as? String, "service1")
|
|
|
+ XCTAssertEqual(sortedItems[0]["key"] as? String, "service1_key1")
|
|
|
+ XCTAssertEqual(sortedItems[0]["class"] as? String, "GenericPassword")
|
|
|
+
|
|
|
+ XCTAssertEqual(sortedItems[1]["service"] as? String, "service1")
|
|
|
+ XCTAssertEqual(sortedItems[1]["key"] as? String, "service1_key2")
|
|
|
+ XCTAssertEqual(sortedItems[1]["class"] as? String, "GenericPassword")
|
|
|
+ #endif
|
|
|
}
|
|
|
do {
|
|
|
let keychain = Keychain(server: "https://google.com", protocolType: .HTTPS)
|
|
@@ -1119,11 +1151,12 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(allItems.count, 2)
|
|
|
|
|
|
let sortedItems = allItems.sort { (item1, item2) -> Bool in
|
|
|
- let value1 = item1["value"] as! String
|
|
|
- let value2 = item2["value"] as! String
|
|
|
- return value1.compare(value2) == NSComparisonResult.OrderedAscending || value1.compare(value2) == NSComparisonResult.OrderedSame
|
|
|
+ let key1 = item1["key"] as! String
|
|
|
+ let key2 = item2["key"] as! String
|
|
|
+ return key1.compare(key2) == .OrderedAscending || key1.compare(key2) == .OrderedSame
|
|
|
}
|
|
|
|
|
|
+ #if !os(OSX)
|
|
|
XCTAssertEqual(sortedItems[0]["synchronizable"] as? String, "false")
|
|
|
XCTAssertEqual(sortedItems[0]["value"] as? String, "google.com_value1")
|
|
|
XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1")
|
|
@@ -1141,19 +1174,34 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default")
|
|
|
XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS")
|
|
|
XCTAssertEqual(sortedItems[1]["accessibility"] as? String, "Always")
|
|
|
+ #else
|
|
|
+ XCTAssertEqual(sortedItems[0]["key"] as? String, "google.com_key1")
|
|
|
+ XCTAssertEqual(sortedItems[0]["server"] as? String, "google.com")
|
|
|
+ XCTAssertEqual(sortedItems[0]["class"] as? String, "InternetPassword")
|
|
|
+ XCTAssertEqual(sortedItems[0]["authenticationType"] as? String, "Default")
|
|
|
+ XCTAssertEqual(sortedItems[0]["protocol"] as? String, "HTTPS")
|
|
|
+
|
|
|
+ XCTAssertEqual(sortedItems[1]["key"] as? String, "google.com_key2")
|
|
|
+ XCTAssertEqual(sortedItems[1]["server"] as? String, "google.com")
|
|
|
+ XCTAssertEqual(sortedItems[1]["class"] as? String, "InternetPassword")
|
|
|
+ XCTAssertEqual(sortedItems[1]["authenticationType"] as? String, "Default")
|
|
|
+ XCTAssertEqual(sortedItems[1]["protocol"] as? String, "HTTPS")
|
|
|
+ #endif
|
|
|
}
|
|
|
+
|
|
|
+ #if !os(OSX)
|
|
|
do {
|
|
|
let allKeys = Keychain.allKeys(.GenericPassword)
|
|
|
XCTAssertEqual(allKeys.count, 5)
|
|
|
|
|
|
let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
|
|
|
- return key1.1.compare(key2.1) == NSComparisonResult.OrderedAscending || key1.1.compare(key2.1) == NSComparisonResult.OrderedSame
|
|
|
+ return key1.1.compare(key2.1) == .OrderedAscending || key1.1.compare(key2.1) == .OrderedSame
|
|
|
}
|
|
|
- XCTAssertEqual(sortedKeys[0].0, "")
|
|
|
+ XCTAssertEqual(sortedKeys[0].0, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedKeys[0].1, "key1")
|
|
|
- XCTAssertEqual(sortedKeys[1].0, "")
|
|
|
+ XCTAssertEqual(sortedKeys[1].0, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedKeys[1].1, "key2")
|
|
|
- XCTAssertEqual(sortedKeys[2].0, "")
|
|
|
+ XCTAssertEqual(sortedKeys[2].0, "com.kishikawakatsumi.TestHost")
|
|
|
XCTAssertEqual(sortedKeys[2].1, "key3")
|
|
|
XCTAssertEqual(sortedKeys[3].0, "service1")
|
|
|
XCTAssertEqual(sortedKeys[3].1, "service1_key1")
|
|
@@ -1165,14 +1213,16 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(allKeys.count, 2)
|
|
|
|
|
|
let sortedKeys = allKeys.sort { (key1, key2) -> Bool in
|
|
|
- return key1.1.compare(key2.1) == NSComparisonResult.OrderedAscending || key1.1.compare(key2.1) == NSComparisonResult.OrderedSame
|
|
|
+ return key1.1.compare(key2.1) == .OrderedAscending || key1.1.compare(key2.1) == .OrderedSame
|
|
|
}
|
|
|
XCTAssertEqual(sortedKeys[0].0, "google.com")
|
|
|
XCTAssertEqual(sortedKeys[0].1, "google.com_key1")
|
|
|
XCTAssertEqual(sortedKeys[1].0, "google.com")
|
|
|
XCTAssertEqual(sortedKeys[1].1, "google.com_key2")
|
|
|
}
|
|
|
+ #endif
|
|
|
}
|
|
|
+ #endif
|
|
|
|
|
|
func testDescription() {
|
|
|
do {
|
|
@@ -1182,7 +1232,6 @@ class KeychainAccessTests: XCTestCase {
|
|
|
XCTAssertEqual(keychain.debugDescription, "[]")
|
|
|
}
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
// MARK:
|
|
|
|