RadrootsReceiptPrivacyTests.swift (2565B)
1 import Foundation 2 @testable import RadrootsKit 3 import Testing 4 5 @Test func receiptPersistenceAndDiagnosticsExcludeTransientAuthorityAndHostMetadata() async throws { 6 let roots = try appleTransferRoots() 7 defer { try? FileManager.default.removeItem(at: roots.dataRoot.deletingLastPathComponent()) } 8 let markers = ["AUTH_SENTINEL_809d", "DRAFT_SENTINEL_81ac", "LOCATION_SENTINEL_717d"] 9 let request = try RadrootsBackgroundTransferRequest( 10 identifier: RadrootsBackgroundTransferIdentifier("privacy.receipt"), 11 remoteURL: #require(URL(string: "https://example.org/upload")), method: .put, 12 operation: .upload(source: .file(RadrootsFileReference(scope: .cache, relativePath: "body"))), 13 headers: ["Authorization": markers[0]], metadata: [markers[1]: markers[2]], responsePolicy: .boundedJSON() 14 ) 15 let response = try RadrootsBackgroundTransferResponse(statusCode: 200, mediaType: "application/json", 16 body: Data(#"{"url":"https://example.org/blob"}"#.utf8)) 17 let snapshot = try RadrootsBackgroundTransferSnapshot(request: request, state: .awaitingVerification, 18 response: response, executionID: UUID()) 19 let store = RadrootsAppleBackgroundTransferStore(roots: roots) 20 try await store.saveSnapshot(snapshot) 21 let serializedRequest = try JSONEncoder().encode(request) 22 let serializedSnapshot = try JSONEncoder().encode(snapshot) 23 let persistedFile = RadrootsFileReference(scope: .data, relativePath: "background_transfers/transfers.json") 24 let persistedURL = try roots.resolvedURL(for: persistedFile) 25 let persisted = try Data(contentsOf: persistedURL) 26 let diagnostics = [String(reflecting: request), String(describing: request), String(reflecting: snapshot), 27 String(describing: snapshot), String(reflecting: response), String(describing: response)] 28 for marker in markers { 29 #expect(![serializedRequest, serializedSnapshot, persisted].contains { $0.range(of: Data(marker.utf8)) != nil }) 30 #expect(!diagnostics.contains { $0.contains(marker) }) 31 } 32 #expect(!diagnostics.contains { $0.contains("https://example.org/blob") }) 33 let recovered = try #require(try await store.loadSnapshots().first) 34 #expect(recovered.request.headers.isEmpty && recovered.request.metadata.isEmpty) 35 #expect(recovered.response == response && recovered.executionID == snapshot.executionID) 36 #expect(request.headers["Authorization"] == markers[0]) 37 }