field_ios

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

TeraOpenedMediaTests.swift (3109B)


      1 import Foundation
      2 @testable import TeraApp
      3 import XCTest
      4 
      5 final class TeraOpenedMediaTests: XCTestCase {
      6   func testConcurrentRepeatedCloseLeavesOnlyTheUsableRustOwner() async throws {
      7     let fixture = try MediaOwnershipFixture()
      8     defer { fixture.remove() }
      9     let runtime = try await fixture.runtime()
     10     let original = try fixture.original()
     11     let descriptor = original.fileDescriptor
     12     let probe = try TeraOpenFileProbe(url: fixture.root.appendingPathComponent("original.png"))
     13     let opened = try TeraOpenedMedia(
     14       handles: [TeraPreparedMediaHandle(media: fixture.media, fileDescriptor: UInt64(descriptor))],
     15       files: [original]
     16     )
     17     XCTAssertEqual(probe.descriptorCount, 2)
     18     await TeraOpenedMediaCloseFixture.closeConcurrently(opened)
     19     XCTAssertFalse(probe.owns(descriptor))
     20     XCTAssertEqual(probe.descriptorCount, 1)
     21     let saved = try await fixture.save(runtime, handle: XCTUnwrap(opened.handles.first))
     22     XCTAssertEqual(saved.form?.media.first?.sha256, fixture.media.sha256)
     23     _ = try await runtime.shutdown()
     24   }
     25 
     26   func testDeinitClosesTheOriginalAndReleasesTheLastRustHandle() throws {
     27     let fixture = try MediaOwnershipFixture()
     28     defer { fixture.remove() }
     29     let original = try fixture.original()
     30     let descriptor = original.fileDescriptor
     31     let probe = try TeraOpenFileProbe(url: fixture.root.appendingPathComponent("original.png"))
     32     var opened: TeraOpenedMedia? = try TeraOpenedMedia(
     33       handles: [TeraPreparedMediaHandle(media: fixture.media, fileDescriptor: UInt64(descriptor))],
     34       files: [original]
     35     )
     36     weak let weakOwner = opened
     37     XCTAssertEqual(opened?.handles.count, 1)
     38     XCTAssertEqual(probe.descriptorCount, 2)
     39     opened = nil
     40     XCTAssertNil(weakOwner)
     41     XCTAssertFalse(probe.owns(descriptor))
     42     XCTAssertEqual(probe.descriptorCount, 0)
     43   }
     44 
     45   func testProductionPartialOpenFailureReleasesBothNativeAndRustResources() async throws {
     46     let fixture = try BackgroundUploadFixture()
     47     defer { fixture.remove() }
     48     let coordinator = fixture.coordinator(transfer: BackgroundTransferHarness())
     49     let probe = try TeraOpenFileProbe(url: fixture.stagedFileURL)
     50     var control: TeraOpenedMedia? = try await coordinator.open([fixture.media])
     51     XCTAssertEqual(probe.descriptorCount, 2)
     52     control?.close()
     53     control = nil
     54     XCTAssertEqual(probe.descriptorCount, 0)
     55     let missing = missingMedia(fixture.media)
     56     for _ in 0 ..< 16 {
     57       do {
     58         let unexpected = try await coordinator.open([fixture.media, missing])
     59         unexpected.close()
     60         XCTFail("The second staged file does not exist")
     61       } catch {}
     62       XCTAssertEqual(probe.descriptorCount, 0)
     63     }
     64   }
     65 
     66   private func missingMedia(_ media: TeraPreparedMedia) -> TeraPreparedMedia {
     67     let missing = String(repeating: "f", count: 64)
     68     return TeraPreparedMedia(
     69       opaqueReference: "media:\(missing)", remoteURL: nil, sha256: missing,
     70       mediaType: media.mediaType, byteSize: media.byteSize, width: media.width,
     71       height: media.height, alt: media.alt, preparedAtUnixSeconds: media.preparedAtUnixSeconds
     72     )
     73   }
     74 }