TeraPublicationEvidenceTests.swift (2554B)
1 @testable import TeraApp 2 import TeraKitBindings 3 import XCTest 4 5 final class TeraPublicationEvidenceTests: XCTestCase { 6 func testLateCallbacksCannotEraseFirstStopAcceptanceOrDurableCounters() { 7 let before = evidence(.unknown) 8 let stopped = evidence(.unknown, stop: 10, revision: 3) 9 let accepted = evidence(.accepted, stop: 10, revision: 3, facts: 1) 10 XCTAssertTrue(stopped.follows(before)) 11 XCTAssertTrue(accepted.follows(stopped)) 12 XCTAssertFalse(before.follows(stopped)) 13 XCTAssertFalse(stopped.follows(accepted)) 14 XCTAssertFalse(evidence(.accepted, stop: 11, revision: 4, facts: 1).follows(accepted)) 15 XCTAssertFalse(evidence(.accepted, stop: 10, revision: 2, facts: 1).follows(accepted)) 16 XCTAssertFalse(evidence(.accepted, stop: 10, revision: 4).follows(accepted)) 17 XCTAssertFalse(evidence(.notIssued).follows(before)) 18 XCTAssertFalse(before.follows(evidence(.partiallyAccepted))) 19 XCTAssertTrue(accepted.follows(evidence(.partiallyAccepted))) 20 } 21 22 func testGeneratedEvidenceRejectsInvalidBoundsAndFalseAbsenceClaims() throws { 23 let valid = FfiPublicationDeliveryEvidence(state: .notIssued, stopRequestedAtUnixMs: 10, 24 schedulingRevision: 2, retainedFacts: 0, recordedAttempts: 0, unresolvedClaims: false) 25 XCTAssertEqual(try TeraPublicationEvidence.decode(valid).state, .notIssued) 26 var invalid = valid 27 invalid.unresolvedClaims = true 28 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 29 invalid = valid; invalid.retainedFacts = 1 30 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 31 invalid = valid; invalid.recordedAttempts = 1 32 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 33 invalid = valid; invalid.schedulingRevision = 0 34 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 35 invalid = valid; invalid.stopRequestedAtUnixMs = 0 36 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 37 invalid = valid; invalid.state = .unknown; invalid.retainedFacts = 1025 38 XCTAssertThrowsError(try TeraPublicationEvidence.decode(invalid)) 39 } 40 41 private func evidence(_ state: TeraPublicationDeliveryState, stop: UInt64? = nil, 42 revision: UInt64 = 2, facts: UInt32 = 0) -> TeraPublicationEvidence 43 { 44 TeraPublicationEvidence(state: state, stopRequestedAtUnixMilliseconds: stop, schedulingRevision: revision, 45 retainedFacts: facts, recordedAttempts: 0, unresolvedClaims: state == .unknown) 46 } 47 }