field_ios

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

TeraDiagnosticPolicyTests.swift (3225B)


      1 import Foundation
      2 import RadrootsKit
      3 @testable import TeraApp
      4 import XCTest
      5 
      6 final class TeraDiagnosticPolicyTests: XCTestCase {
      7   func testAllSinksReceiveOnlyClosedFieldsAndNoRawMessageCategoryOrValues() async throws {
      8     let capture = DiagnosticSink()
      9     let buffer = TeraDiagnosticsBuffer()
     10     let telemetry = TeraSanitizedTelemetry(sink: RadrootsMultiplexTelemetry([capture, buffer]))
     11     let canary = "ordinary private text 49.123456,-123.987654 Bearer CANARY_TOKEN /Users/private/file"
     12     let event = try RadrootsTelemetryEvent(
     13       name: "ios.lifecycle.operation_completed", category: "private_category", message: canary,
     14       fields: [
     15         .string("operation", "start"), .string("phase", "running"),
     16         .string("code", canary), .string("authorization", canary),
     17         .string("plain", canary), .integer("count", 7), .integer("id", 123_456_789),
     18         .stringList("list", [canary]), .double("latitude", 49.123456),
     19       ]
     20     )
     21     await telemetry.record(event)
     22     let observed = await capture.events
     23     let safe = try XCTUnwrap(observed.first)
     24     XCTAssertNil(safe.message)
     25     XCTAssertEqual(safe.category, "ios_lifecycle")
     26     XCTAssertEqual(safe.fields.map(\.key), ["operation", "phase", "count"])
     27     XCTAssertFalse(String(describing: safe).contains(canary))
     28     let records = await buffer.records()
     29     XCTAssertEqual(records.first?.fields, ["operation": "start", "phase": "running", "count": "7"])
     30     XCTAssertEqual(TeraDiagnosticPolicy.sanitized(safe), safe)
     31   }
     32 
     33   func testDirectBufferRejectsUnknownNamesKeysAndHighCardinalityValues() async throws {
     34     let buffer = TeraDiagnosticsBuffer(capacity: 16)
     35     for index in 0 ..< 40 {
     36       let event = try RadrootsTelemetryEvent(
     37         name: "private.post.\(index)", category: "private_location",
     38         message: "Raw private content", fields: [.string("unknown", "Bearer canary")]
     39       )
     40       await buffer.record(event)
     41     }
     42     let records = await buffer.records()
     43     XCTAssertEqual(records.count, 16)
     44     XCTAssertTrue(records.allSatisfy { $0.name == "ios.diagnostics.redacted" && $0.category == "ios_lifecycle" && $0.fields.isEmpty })
     45     let event = try RadrootsTelemetryEvent(name: "ios.lifecycle.active", fields: [
     46       .integer("count", Int64.max), .integer("schema", -1), .string("phase", "secret"),
     47     ])
     48     await buffer.record(event)
     49     let final = await buffer.records()
     50     XCTAssertEqual(final.last?.fields, [:])
     51   }
     52 
     53   func testMetadataUsesFiniteCodesAndBoundedNumericBuilds() {
     54     let canary = "public key or private content /Users/person/file"
     55     XCTAssertEqual(TeraDiagnosticPolicy.version(canary), "unavailable")
     56     XCTAssertEqual(TeraDiagnosticPolicy.version("0.1.0-alpha"), "0.1.0-alpha")
     57     XCTAssertEqual(TeraDiagnosticPolicy.build(canary), "unavailable")
     58     XCTAssertEqual(TeraDiagnosticPolicy.build(String(repeating: "1", count: 11)), "unavailable")
     59     XCTAssertEqual(TeraDiagnosticPolicy.build("1"), "1")
     60     XCTAssertEqual(TeraDiagnosticPolicy.code(canary, allowed: TeraDiagnosticPolicy.phases), "unavailable")
     61   }
     62 }
     63 
     64 private actor DiagnosticSink: RadrootsTelemetry {
     65   var events: [RadrootsTelemetryEvent] = []
     66   func record(_ event: RadrootsTelemetryEvent) {
     67     events.append(event)
     68   }
     69 }