field_ios

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

FieldIdentityImportFailureUITestProbe.swift (2182B)


      1 #if DEBUG
      2 import Foundation
      3 
      4 enum FieldIdentityImportFailureUITestProbe {
      5     private static let enabledKey = "RADROOTS_FIELD_IOS_UI_TEST_IDENTITY_IMPORT_FAILURE_PROBE"
      6     private static let candidateSecretKey = "RADROOTS_FIELD_IOS_UI_TEST_IDENTITY_IMPORT_FAILURE_SECRET"
      7     private static let defaultCandidateSecret = "0000000000000000000000000000000000000000000000000000000000000002"
      8 
      9     static var isRequested: Bool {
     10         FieldUITestHarness.string(enabledKey) == "true"
     11     }
     12 
     13     static func value(
     14         secureStore: FieldSecureIdentityStore,
     15         service: FieldRuntimeService
     16     ) async -> String? {
     17         guard isRequested else {
     18             return nil
     19         }
     20         let previousSecret = try? secureStore.loadSelectedSecretHex()
     21         let candidateSecret = FieldUITestHarness.string(candidateSecretKey) ?? defaultCandidateSecret
     22         var importFailed = false
     23         var errorContainsForcedRestore = false
     24 
     25         do {
     26             _ = try await secureStore.importSecret(
     27                 candidateSecret,
     28                 label: "UI Test Import Failure",
     29                 using: service
     30             )
     31         } catch {
     32             importFailed = true
     33             errorContainsForcedRestore = error.localizedDescription.contains("Forced identity import restore failure")
     34         }
     35 
     36         let selectedSecretAfterImport = try? secureStore.loadSelectedSecretHex()
     37         var runtimePreviousRestored = false
     38         if previousSecret != nil,
     39            let restored = try? await secureStore.restoreStoredIdentity(
     40             label: "Radroots Field",
     41             using: service
     42            ) {
     43             runtimePreviousRestored = restored.isSelected
     44         }
     45 
     46         return [
     47             "previous_secret_present=\(previousSecret != nil)",
     48             "import_failed=\(importFailed)",
     49             "error_contains_forced_restore=\(errorContainsForcedRestore)",
     50             "selected_secret_preserved=\(selectedSecretAfterImport == previousSecret)",
     51             "candidate_secret_selected=\(selectedSecretAfterImport == candidateSecret)",
     52             "runtime_previous_restored=\(runtimePreviousRestored)"
     53         ].joined(separator: ";")
     54     }
     55 }
     56 #endif