field_ios

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

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 }