field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }