TeraNativeExecutionFixture.swift (2991B)
1 import Foundation 2 import RadrootsKit 3 @testable import TeraApp 4 5 actor NativeExecutionTransfer: RadrootsBackgroundTransfer { 6 let base: BackgroundTransferHarness 7 let unknownInventory: Bool 8 let replaceExecution: Bool 9 private var reads = 0 10 11 init(base: BackgroundTransferHarness = BackgroundTransferHarness(), unknownInventory: Bool = false, 12 replaceExecution: Bool = false) 13 { 14 self.base = base 15 self.unknownInventory = unknownInventory 16 self.replaceExecution = replaceExecution 17 } 18 19 func enqueue(_ request: RadrootsBackgroundTransferRequest) async throws -> RadrootsBackgroundTransferHandle { 20 _ = try await base.enqueue(request) 21 throw RadrootsBackgroundTransferError.transferFailure 22 } 23 24 func retry(_ request: RadrootsBackgroundTransferRequest) async throws -> RadrootsBackgroundTransferHandle { 25 _ = try await base.retry(request) 26 throw RadrootsBackgroundTransferError.transferFailure 27 } 28 29 func snapshot(for identifier: RadrootsBackgroundTransferIdentifier) async throws -> RadrootsBackgroundTransferSnapshot? { 30 if unknownInventory { 31 throw RadrootsBackgroundTransferError.transferFailure 32 } 33 reads += 1 34 let value = try await base.snapshot(for: identifier) 35 guard replaceExecution, reads > 1, let value else { return value } 36 return try RadrootsBackgroundTransferSnapshot(request: value.request, state: value.state, executionID: UUID()) 37 } 38 39 func snapshots() async throws -> [RadrootsBackgroundTransferSnapshot] { 40 if unknownInventory { 41 throw RadrootsBackgroundTransferError.transferFailure 42 } 43 return try await base.snapshots() 44 } 45 46 func cancel(_ identifier: RadrootsBackgroundTransferIdentifier) async throws { 47 try await base.cancel(identifier) 48 } 49 50 func expire(_ identifier: RadrootsBackgroundTransferIdentifier) async throws { 51 try await base.expire(identifier) 52 } 53 54 func settle(_ identifier: RadrootsBackgroundTransferIdentifier, verification: RadrootsBackgroundTransferVerification) async throws { 55 try await base.settle(identifier, verification: verification) 56 } 57 58 func handleEventsForBackgroundURLSession(identifier _: String, completionHandler: @escaping @Sendable () -> Void) async { 59 completionHandler() 60 } 61 } 62 63 actor LostNativeAdmission { 64 private(set) var starts = 0 65 private var active: Set<RadrootsBackgroundTransferIdentifier> = [] 66 67 nonisolated var adapters: RadrootsAppleBackgroundTransferAdapters { 68 .init(enqueue: { request, _ in try await self.enqueue(request) }, 69 cancel: { _ in throw RadrootsBackgroundTransferError.transferFailure }, 70 activeTransferIdentifiers: { await self.identifiers() }, 71 handleBackgroundEvents: { _, completion in completion() }) 72 } 73 74 func enqueue(_ request: RadrootsBackgroundTransferRequest) throws { 75 starts += 1 76 active.insert(request.identifier) 77 throw RadrootsBackgroundTransferError.transferFailure 78 } 79 80 func identifiers() -> Set<RadrootsBackgroundTransferIdentifier> { 81 active 82 } 83 }