1 // Copyright 2014 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 #if !defined(__has_feature) || !__has_feature(objc_arc) 6 #error "This file requires ARC support." 7 #endif 8 9 #import "remoting/ios/host_refresh.h" 10 11 #import "base/compiler_specific.h" 12 #import "testing/gtest_mac.h" 13 14 #import "remoting/ios/host.h" 15 #import "remoting/ios/host_refresh_test_helper.h" 16 17 @interface HostRefreshDelegateTester : NSObject<HostRefreshDelegate> 18 19 @property(nonatomic) NSArray* hostList; 20 @property(nonatomic) NSString* errorMessage; 21 22 @end 23 24 @implementation HostRefreshDelegateTester 25 26 @synthesize hostList = _hostList; 27 @synthesize errorMessage = _errorMessage; 28 29 - (void)hostListRefresh:(NSArray*)hostList 30 errorMessage:(NSString*)errorMessage { 31 _hostList = hostList; 32 _errorMessage = errorMessage; 33 } 34 35 - (bool)receivedHosts { 36 return (_hostList.count > 0); 37 } 38 39 - (bool)receivedErrorMessage { 40 return (_errorMessage != nil); 41 } 42 43 @end 44 45 namespace remoting { 46 47 namespace { 48 49 NSString* kErrorMessageTest = @"TestErrorMessage"; 50 51 } // namespace 52 53 class HostRefreshTest : public ::testing::Test { 54 protected: 55 virtual void SetUp() OVERRIDE { 56 hostRefreshProcessor_ = [[HostRefresh allocWithZone:nil] init]; 57 delegateTester_ = [[HostRefreshDelegateTester alloc] init]; 58 [hostRefreshProcessor_ setDelegate:delegateTester_]; 59 } 60 61 void CreateHostList(int numHosts) { 62 [hostRefreshProcessor_ 63 setJsonData:HostRefreshTestHelper::GetHostList(numHosts)]; 64 } 65 66 NSError* CreateErrorFromString(NSString* message) { 67 NSDictionary* errorDictionary = nil; 68 69 if (message != nil) { 70 errorDictionary = @{NSLocalizedDescriptionKey : message}; 71 } 72 73 return [[NSError alloc] initWithDomain:@"HostRefreshTest" 74 code:EPERM 75 userInfo:errorDictionary]; 76 } 77 78 HostRefresh* hostRefreshProcessor_; 79 HostRefreshDelegateTester* delegateTester_; 80 }; 81 82 TEST_F(HostRefreshTest, ErrorFormatter) { 83 [hostRefreshProcessor_ connection:nil 84 didFailWithError:CreateErrorFromString(nil)]; 85 ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil); 86 87 [hostRefreshProcessor_ connection:nil 88 didFailWithError:CreateErrorFromString(@"")]; 89 ASSERT_FALSE(hostRefreshProcessor_.errorMessage == nil); 90 91 [hostRefreshProcessor_ connection:nil 92 didFailWithError:CreateErrorFromString(kErrorMessageTest)]; 93 ASSERT_TRUE([hostRefreshProcessor_.errorMessage 94 rangeOfString:kErrorMessageTest].location != NSNotFound); 95 } 96 97 TEST_F(HostRefreshTest, JSONParsing) { 98 // There were no hosts returned 99 CreateHostList(0); 100 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 101 ASSERT_TRUE(delegateTester_.hostList.count == 0); 102 103 CreateHostList(1); 104 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 105 ASSERT_TRUE(delegateTester_.hostList.count == 1); 106 107 Host* host = static_cast<Host*>([delegateTester_.hostList objectAtIndex:0]); 108 ASSERT_NSEQ(HostRefreshTestHelper::CreatedTimeTest, host.createdTime); 109 ASSERT_NSEQ(HostRefreshTestHelper::HostIdTest, host.hostId); 110 ASSERT_NSEQ(HostRefreshTestHelper::HostNameTest, host.hostName); 111 ASSERT_NSEQ(HostRefreshTestHelper::HostVersionTest, host.hostVersion); 112 ASSERT_NSEQ(HostRefreshTestHelper::KindTest, host.kind); 113 ASSERT_NSEQ(HostRefreshTestHelper::JabberIdTest, host.jabberId); 114 ASSERT_NSEQ(HostRefreshTestHelper::PublicKeyTest, host.publicKey); 115 ASSERT_NSEQ(HostRefreshTestHelper::StatusTest, host.status); 116 ASSERT_NSEQ(HostRefreshTestHelper::UpdatedTimeTest, host.updatedTime); 117 118 CreateHostList(11); 119 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 120 ASSERT_TRUE(delegateTester_.hostList.count == 11); 121 122 // An error in parsing returns no hosts 123 [hostRefreshProcessor_ 124 setJsonData: 125 [NSMutableData 126 dataWithData: 127 [@"{\"dataaaaaafa\":{\"kiffffnd\":\"chromoting#hostList\"}}" 128 dataUsingEncoding:NSUTF8StringEncoding]]]; 129 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 130 ASSERT_TRUE(delegateTester_.hostList.count == 0); 131 } 132 133 TEST_F(HostRefreshTest, HostListDelegateNoList) { 134 // Hosts were not processed at all 135 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 136 ASSERT_FALSE([delegateTester_ receivedHosts]); 137 ASSERT_TRUE([delegateTester_ receivedErrorMessage]); 138 139 // There were no hosts returned 140 CreateHostList(0); 141 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 142 ASSERT_FALSE([delegateTester_ receivedHosts]); 143 ASSERT_TRUE([delegateTester_ receivedErrorMessage]); 144 } 145 146 TEST_F(HostRefreshTest, HostListDelegateHasList) { 147 CreateHostList(1); 148 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 149 ASSERT_TRUE([delegateTester_ receivedHosts]); 150 ASSERT_FALSE([delegateTester_ receivedErrorMessage]); 151 } 152 153 TEST_F(HostRefreshTest, HostListDelegateHasListWithError) { 154 CreateHostList(1); 155 156 [hostRefreshProcessor_ connection:nil 157 didFailWithError:CreateErrorFromString(kErrorMessageTest)]; 158 159 [hostRefreshProcessor_ connectionDidFinishLoading:nil]; 160 ASSERT_TRUE([delegateTester_ receivedHosts]); 161 ASSERT_TRUE([delegateTester_ receivedErrorMessage]); 162 } 163 164 TEST_F(HostRefreshTest, ConnectionFailed) { 165 [hostRefreshProcessor_ connection:nil didFailWithError:nil]; 166 ASSERT_FALSE([delegateTester_ receivedHosts]); 167 ASSERT_TRUE([delegateTester_ receivedErrorMessage]); 168 } 169 170 } // namespace remoting