MockCuttlefish.swift
1 // 2 // MockCuttlefish.swift 3 // TrustedPeersHelperUnitTests 4 // 5 // Created by Ben Williamson on 5/1/18. 6 // 7 8 import Foundation 9 import XCTest 10 11 enum Handler { 12 case reset((ResetRequest, @escaping (ResetResponse?, Error?) -> Void) -> Void) 13 case establish((EstablishRequest, @escaping (EstablishResponse?, Error?) -> Void) -> Void) 14 case joinWithVoucher((JoinWithVoucherRequest, @escaping (JoinWithVoucherResponse?, Error?) -> Void) -> Void) 15 case updateTrust((UpdateTrustRequest, @escaping (UpdateTrustResponse?, Error?) -> Void) -> Void) 16 case setRecoveryKey((SetRecoveryKeyRequest, @escaping (SetRecoveryKeyResponse?, Error?) -> Void) -> Void) 17 case fetchChanges((FetchChangesRequest, @escaping (FetchChangesResponse?, Error?) -> Void) -> Void) 18 case fetchViableBottles((FetchViableBottlesRequest, @escaping (FetchViableBottlesResponse?, Error?) -> Void) -> Void) 19 case fetchPolicyDocuments((FetchPolicyDocumentsRequest, 20 @escaping (FetchPolicyDocumentsResponse?, Error?) -> Void) -> Void) 21 } 22 23 class MockCuttlefishAPIAsyncClient: CuttlefishAPIAsync { 24 25 var handlers: [Handler] = [] 26 var index: Int = 0 27 28 func expect(_ handler: Handler) { 29 self.handlers.append(handler) 30 } 31 32 func next() -> Handler { 33 if index >= handlers.count { 34 XCTFail("MockCuttlefish: Not expecting any more calls.") 35 self.dump() 36 abort() 37 } 38 return handlers[index] 39 } 40 41 func dump() { 42 print("---") 43 for i in 0 ..< handlers.count { 44 print("\(i) \(i == index ? "->" : " ") \(handlers[i])") 45 } 46 print("---") 47 } 48 49 func reset(_ request: ResetRequest, completion: @escaping (ResetResponse?, Error?) -> Void) { 50 print("MockCuttlefish: reset called") 51 if case .reset(let f) = next() { 52 index += 1 53 f(request, completion) 54 } else { 55 XCTFail("Unexpected: reset") 56 print("Unexpected: reset") 57 self.dump() 58 abort() 59 } 60 } 61 62 func establish(_ request: EstablishRequest, completion: @escaping (EstablishResponse?, Error?) -> Void) { 63 print("MockCuttlefish: establish called") 64 if case .establish(let f) = next() { 65 index += 1 66 f(request, completion) 67 } else { 68 XCTFail("Unexpected: establish") 69 print("Unexpected: establish") 70 self.dump() 71 abort() 72 } 73 } 74 75 func joinWithVoucher(_ request: JoinWithVoucherRequest, 76 completion: @escaping (JoinWithVoucherResponse?, Error?) -> Void) { 77 print("MockCuttlefish: joinWithVoucher called") 78 if case .joinWithVoucher(let f) = next() { 79 index += 1 80 f(request, completion) 81 } else { 82 XCTFail("Unexpected: joinWithVoucher") 83 print("Unexpected: joinWithVoucher") 84 self.dump() 85 abort() 86 } 87 } 88 89 func updateTrust(_ request: UpdateTrustRequest, completion: @escaping (UpdateTrustResponse?, Error?) -> Void) { 90 print("MockCuttlefish: updateTrust called") 91 if case .updateTrust(let f) = next() { 92 index += 1 93 f(request, completion) 94 } else { 95 XCTFail("Unexpected: updateTrust") 96 print("Unexpected: updateTrust") 97 self.dump() 98 abort() 99 } 100 } 101 102 func setRecoveryKey(_ request: SetRecoveryKeyRequest, 103 completion: @escaping (SetRecoveryKeyResponse?, Error?) -> Void) { 104 print("MockCuttlefish: setRecoveryKey called") 105 if case .setRecoveryKey(let f) = next() { 106 index += 1 107 f(request, completion) 108 } else { 109 XCTFail("Unexpected: setRecoveryKey") 110 print("Unexpected: setRecoveryKey") 111 self.dump() 112 abort() 113 } 114 } 115 116 func fetchChanges(_ request: FetchChangesRequest, completion: @escaping (FetchChangesResponse?, Error?) -> Void) { 117 print("MockCuttlefish: fetchChanges called") 118 if case .fetchChanges(let f) = next() { 119 index += 1 120 f(request, completion) 121 } else { 122 XCTFail("Unexpected: fetchChanges") 123 print("Unexpected: fetchChanges") 124 self.dump() 125 abort() 126 } 127 } 128 129 func fetchViableBottles(_ request: FetchViableBottlesRequest, completion: @escaping (FetchViableBottlesResponse?, Error?) -> Void) { 130 print("MockCuttlefish: fetchViableBottles called") 131 if case .fetchViableBottles(let f) = next() { 132 index += 1 133 f(request, completion) 134 } else { 135 XCTFail("Unexpected: fetchViableBottles") 136 self.dump() 137 abort() 138 } 139 } 140 141 func fetchPolicyDocuments(_ request: FetchPolicyDocumentsRequest, 142 completion: @escaping (FetchPolicyDocumentsResponse?, Error?) -> Void) { 143 print("MockCuttlefish: fetchPolicyDocuments called") 144 if case .fetchPolicyDocuments(let f) = next() { 145 index += 1 146 f(request, completion) 147 } else { 148 XCTFail("Unexpected: fetchPolicyDocuments") 149 print("Unexpected: fetchPolicyDocuments") 150 self.dump() 151 abort() 152 } 153 } 154 155 func validatePeers(_: ValidatePeersRequest, completion: @escaping (ValidatePeersResponse?, Error?) -> Void) { 156 completion(ValidatePeersResponse(), nil) 157 } 158 func reportHealth(_: ReportHealthRequest, completion: @escaping (ReportHealthResponse?, Error?) -> Void) { 159 print("MockCuttlefish: reportHealth called") 160 completion(ReportHealthResponse(), nil) 161 } 162 func pushHealthInquiry(_: PushHealthInquiryRequest, completion: @escaping (PushHealthInquiryResponse?, Error?) -> Void) { 163 completion(PushHealthInquiryResponse(), nil) 164 } 165 func getRepairAction(_: GetRepairActionRequest, completion: @escaping (GetRepairActionResponse?, Error?) -> Void) { 166 completion(GetRepairActionResponse(), nil) 167 } 168 func getSupportAppInfo(_: GetSupportAppInfoRequest, completion: @escaping (GetSupportAppInfoResponse?, Error?) -> Void) { 169 completion(GetSupportAppInfoResponse(), nil) 170 } 171 func getClubCertificates(_: GetClubCertificatesRequest, completion: @escaping (GetClubCertificatesResponse?, Error?) -> Void) { 172 completion(GetClubCertificatesResponse(), nil) 173 } 174 func fetchSosiCloudIdentity(_: FetchSOSiCloudIdentityRequest, completion: @escaping (FetchSOSiCloudIdentityResponse?, Error?) -> Void) { 175 completion(FetchSOSiCloudIdentityResponse(), nil) 176 } 177 func addCustodianRecoveryKey(_: AddCustodianRecoveryKeyRequest, completion: @escaping (AddCustodianRecoveryKeyResponse?, Error?) -> Void) { 178 completion(AddCustodianRecoveryKeyResponse(), nil) 179 } 180 func resetAccountCdpcontents(_: ResetAccountCDPContentsRequest, completion: @escaping (ResetAccountCDPContentsResponse?, Error?) -> Void) { 181 completion(ResetAccountCDPContentsResponse(), nil) 182 } 183 }