1// Copyright 2020 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "ios/chrome/common/credential_provider/archivable_credential.h" 6 7#import "base/test/ios/wait_util.h" 8#include "testing/gtest_mac.h" 9#include "testing/platform_test.h" 10 11#if !defined(__has_feature) || !__has_feature(objc_arc) 12#error "This file requires ARC support." 13#endif 14 15namespace { 16 17using ArchivableCredentialTest = PlatformTest; 18 19ArchivableCredential* TestCredential() { 20 return [[ArchivableCredential alloc] initWithFavicon:@"favicon" 21 keychainIdentifier:@"keychainIdentifier" 22 rank:5 23 recordIdentifier:@"recordIdentifier" 24 serviceIdentifier:@"serviceIdentifier" 25 serviceName:@"serviceName" 26 user:@"user" 27 validationIdentifier:@"validationIdentifier"]; 28} 29 30// Tests that an ArchivableCredential can be created. 31TEST_F(ArchivableCredentialTest, create) { 32 ArchivableCredential* credential = 33 [[ArchivableCredential alloc] initWithFavicon:@"favicon" 34 keychainIdentifier:@"keychainIdentifier" 35 rank:5 36 recordIdentifier:@"recordIdentifier" 37 serviceIdentifier:@"serviceIdentifier" 38 serviceName:@"serviceName" 39 user:@"user" 40 validationIdentifier:@"validationIdentifier"]; 41 EXPECT_TRUE(credential); 42} 43 44// Tests that an ArchivableCredential can be converted to NSData. 45TEST_F(ArchivableCredentialTest, createData) { 46 ArchivableCredential* credential = TestCredential(); 47 EXPECT_TRUE(credential); 48 NSError* error = nil; 49 NSData* data = [NSKeyedArchiver archivedDataWithRootObject:credential 50 requiringSecureCoding:YES 51 error:&error]; 52 EXPECT_TRUE(data); 53 EXPECT_FALSE(error); 54} 55 56// Tests that an ArchivableCredential can be retrieved from NSData. 57TEST_F(ArchivableCredentialTest, retrieveData) { 58 ArchivableCredential* credential = TestCredential(); 59 NSError* error = nil; 60 NSData* data = [NSKeyedArchiver archivedDataWithRootObject:credential 61 requiringSecureCoding:YES 62 error:&error]; 63 EXPECT_TRUE(data); 64 EXPECT_FALSE(error); 65 66 ArchivableCredential* unarchivedCredential = 67 [NSKeyedUnarchiver unarchivedObjectOfClass:[ArchivableCredential class] 68 fromData:data 69 error:&error]; 70 EXPECT_TRUE(unarchivedCredential); 71 EXPECT_TRUE( 72 [unarchivedCredential isKindOfClass:[ArchivableCredential class]]); 73 74 EXPECT_NSEQ(credential.favicon, unarchivedCredential.favicon); 75 EXPECT_NSEQ(credential.keychainIdentifier, 76 unarchivedCredential.keychainIdentifier); 77 EXPECT_EQ(credential.rank, unarchivedCredential.rank); 78 EXPECT_NSEQ(credential.recordIdentifier, 79 unarchivedCredential.recordIdentifier); 80 EXPECT_NSEQ(credential.serviceIdentifier, 81 unarchivedCredential.serviceIdentifier); 82 EXPECT_NSEQ(credential.serviceName, unarchivedCredential.serviceName); 83 EXPECT_NSEQ(credential.user, unarchivedCredential.user); 84 EXPECT_NSEQ(credential.validationIdentifier, 85 unarchivedCredential.validationIdentifier); 86} 87 88// Tests ArchivableCredential equality. 89TEST_F(ArchivableCredentialTest, equality) { 90 ArchivableCredential* credential = TestCredential(); 91 ArchivableCredential* credentialIdentical = TestCredential(); 92 EXPECT_NSEQ(credential, credentialIdentical); 93 EXPECT_EQ(credential.hash, credentialIdentical.hash); 94 95 ArchivableCredential* credentialSameIdentifier = [[ArchivableCredential alloc] 96 initWithFavicon:@"other_favicon" 97 keychainIdentifier:@"other_keychainIdentifier" 98 rank:credential.rank + 10 99 recordIdentifier:@"recordIdentifier" 100 serviceIdentifier:@"other_serviceIdentifier" 101 serviceName:@"other_serviceName" 102 user:@"other_user" 103 validationIdentifier:@"other_validationIdentifier"]; 104 EXPECT_NSNE(credential, credentialSameIdentifier); 105 106 ArchivableCredential* credentialDiferentIdentifier = 107 [[ArchivableCredential alloc] initWithFavicon:@"favicon" 108 keychainIdentifier:@"keychainIdentifier" 109 rank:credential.rank 110 recordIdentifier:@"other_recordIdentifier" 111 serviceIdentifier:@"serviceIdentifier" 112 serviceName:@"serviceName" 113 user:@"user" 114 validationIdentifier:@"validationIdentifier"]; 115 EXPECT_NSNE(credential, credentialDiferentIdentifier); 116 117 EXPECT_NSNE(credential, nil); 118} 119} 120