Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/swift/TraverseEmbedder/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ let package = Package(
targets: [
.binaryTarget(
name: "TraverseSwiftHost",
url: "https://github.com/traverse-framework/traverse/releases/download/swift-host-v0.14.0-3/TraverseSwiftHost.xcframework.zip",
checksum: "2007d783b143707c1120090ef8fada70ee21f72c4e7c44751f263e88160d741f"
url: "https://github.com/traverse-framework/traverse/releases/download/swift-host-v0.14.0-4/TraverseSwiftHost.xcframework.zip",
checksum: "959fd0054d852e423d30999d405cb2cd5e6628cb2952eea0d8709e647dcca4d2"
),
.target(
name: "TraverseEmbedder",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import CryptoKit
import Foundation
import Testing
@testable import TraverseEmbedder

/// Spec 074 FR-003 (1.1.0, #1615): an over-budget invocation surfaces the
/// stable resource-limit status and the `bridge_timeout` code through
/// `TraverseBridgeError`, instead of the opaque `-5` / `bridge_trap`.
@Test func overBudgetInvocationReportsAStableTimeout() throws {
let url = try #require(Bundle.module.url(forResource: "client_bridge.wasm", withExtension: nil, subdirectory: "Fixtures"))
let wasm = Array(try Data(contentsOf: url))
let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true)
let runtime = root.appendingPathComponent("runtime", isDirectory: true)
try FileManager.default.createDirectory(at: runtime, withIntermediateDirectories: true)
try Data(wasm).write(to: runtime.appendingPathComponent("runtime.wasm"))
let bundle = try TraverseBundle(
rootURL: root,
runtimeWasmDigest: "sha256:" + SHA256.hash(data: Data(wasm)).map { String(format: "%02x", $0) }.joined()
)
let client = try WasmiHostBridgeClient(bundle: bundle, limits: try TraverseHostLimits(fuelPerInvocation: 64))
do {
_ = try client.initialize(configJSON: Data("{}".utf8))
Issue.record("a 64-unit fuel budget (enough to create the host) must not complete initialize")
} catch let error as TraverseBridgeError {
#expect(error.status == -4)
#expect(error.code == "bridge_timeout")
}
}
Loading