commit 2a42015ff814340eff87a27569fe93c1c0f52a53
parent 9288634d7348740710d4fac64e90bf699a9ed0d8
Author: triesap <tyson@radroots.org>
Date: Wed, 8 Apr 2026 22:13:55 +0000
tests: move hyf internal-error faulting into test seams
Diffstat:
5 files changed, 131 insertions(+), 109 deletions(-)
diff --git a/src/hyf_core/metadata.mojo b/src/hyf_core/metadata.mojo
@@ -1,5 +1,3 @@
-from std.os import getenv
-
from hyf_core.package_surface import hyf_package_name, hyf_package_version
@@ -26,12 +24,6 @@ struct HyfBuildIdentity(Copyable, Movable):
var assisted_execution_available: Bool
def current_package_surface() raises -> HyfPackageSurface:
- if (
- getenv("HYF_TEST_FAULT_CURRENT_PACKAGE_SURFACE", "")
- == "invalid_unquoted_version"
- ):
- raise Error("simulated invalid package surface")
-
return HyfPackageSurface(
package_name=hyf_package_name(),
package_version=hyf_package_version(),
diff --git a/src/hyf_stdio/server.mojo b/src/hyf_stdio/server.mojo
@@ -173,7 +173,11 @@ def _dispatch_business_capability(
return _dispatch_capability_result(request_id, request.trace_id, result)
-def handle_request(request: WireRequest) raises -> String:
+@parameter
+def handle_request_with_control_builders[
+ status_builder: def() raises -> Value,
+ capabilities_builder: def() raises -> Value,
+](request: WireRequest) raises -> String:
var request_id = String(request.request_id)
var trace_id = request.trace_id
try:
@@ -183,7 +187,7 @@ def handle_request(request: WireRequest) raises -> String:
version=hyf_protocol_version(),
request_id=request_id,
trace_id=trace_id,
- output=build_status_output(),
+ output=status_builder(),
meta=None,
)
)
@@ -193,7 +197,7 @@ def handle_request(request: WireRequest) raises -> String:
version=hyf_protocol_version(),
request_id=request_id,
trace_id=trace_id,
- output=build_capabilities_output(),
+ output=capabilities_builder(),
meta=None,
)
)
@@ -225,10 +229,22 @@ def handle_request(request: WireRequest) raises -> String:
)
-def handle_request_line(line: String) raises -> String:
+def handle_request(request: WireRequest) raises -> String:
+ return handle_request_with_control_builders[
+ build_status_output, build_capabilities_output
+ ](request)
+
+
+@parameter
+def handle_request_line_with_control_builders[
+ status_builder: def() raises -> Value,
+ capabilities_builder: def() raises -> Value,
+](line: String) raises -> String:
try:
var request = decode_request(line)
- return handle_request(request^)
+ return handle_request_with_control_builders[
+ status_builder, capabilities_builder
+ ](request^)
except e:
var correlation = extract_request_correlation(line)
return encode_error(
@@ -241,6 +257,12 @@ def handle_request_line(line: String) raises -> String:
)
+def handle_request_line(line: String) raises -> String:
+ return handle_request_line_with_control_builders[
+ build_status_output, build_capabilities_output
+ ](line)
+
+
def run_stdio_server() raises:
if stdin.isatty():
return
diff --git a/tests/internal_error_stdio_main.mojo b/tests/internal_error_stdio_main.mojo
@@ -0,0 +1,31 @@
+from std.io.io import _fdopen
+from std.sys import stdin
+
+from mojson import Value, loads
+
+from hyf_stdio.server import handle_request_line_with_control_builders
+
+
+def _read_request_line() raises -> String:
+ with _fdopen["r"](stdin) as input_file:
+ return input_file.readline()
+
+
+def _failing_status_output() raises -> Value:
+ raise Error("simulated test-only status builder failure")
+
+
+def _unused_capabilities_output() raises -> Value:
+ return loads("{}")
+
+
+def main() raises:
+ if stdin.isatty():
+ return
+
+ var line = _read_request_line()
+ print(
+ handle_request_line_with_control_builders[
+ _failing_status_output, _unused_capabilities_output
+ ](line)
+ )
diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo
@@ -1,4 +1,3 @@
-from std.os import getenv, setenv, unsetenv
from std.pathlib import Path, _dir_of_current_file
from std.testing import (
TestSuite,
@@ -15,25 +14,29 @@ from hyf_core.backends.selector import (
)
from hyf_core.metadata import current_build_identity, current_package_surface
from hyf_core.request_context import default_request_context
+from hyf_stdio.control.capabilities import build_capabilities_output
from hyf_stdio.codec import decode_request, encode_error, encode_success
from hyf_stdio.envelope import WireErrorResponse, WireSuccessResponse
from hyf_stdio.errors import WireError
-from hyf_stdio.server import handle_request_line
+from hyf_stdio.server import (
+ handle_request_line,
+ handle_request_line_with_control_builders,
+)
comptime _EXPECTED_INTERNAL_ERROR_MESSAGE = (
"internal hyf daemon error; inspect local diagnostics"
)
-comptime _PACKAGE_SURFACE_FAULT_ENV = (
- "HYF_TEST_FAULT_CURRENT_PACKAGE_SURFACE"
-)
-
def _dispatch(line: String) raises -> Value:
return loads(handle_request_line(line))
+def _failing_status_output() raises -> Value:
+ raise Error("simulated test-only status builder failure")
+
+
def _test_manifest_path() raises -> Path:
return _dir_of_current_file() / ".." / "pixi.toml"
@@ -684,51 +687,33 @@ def test_invalid_request_preserves_request_and_trace_correlation() raises:
def test_internal_error_is_bounded_on_wire() raises:
- var original_fault = getenv(_PACKAGE_SURFACE_FAULT_ENV, "")
- _ = setenv(
- _PACKAGE_SURFACE_FAULT_ENV, "invalid_unquoted_version"
- )
- try:
- var result = _dispatch(
+ var result = loads(
+ handle_request_line_with_control_builders[
+ _failing_status_output, build_capabilities_output
+ ](
'{"version":1,"request_id":"status-internal-1","trace_id":"trace-status-internal-1","capability":"sys.status","input":{}}'
)
+ )
- assert_equal(Int(result["version"].int_value()), 1)
- assert_equal(
- result["request_id"].string_value(), "status-internal-1"
- )
- assert_equal(
- result["trace_id"].string_value(), "trace-status-internal-1"
- )
- assert_equal(result["ok"].bool_value(), False)
- assert_equal(
- result["error"]["code"].string_value(), "internal_error"
- )
- assert_equal(
- result["error"]["message"].string_value(),
- _EXPECTED_INTERNAL_ERROR_MESSAGE,
- )
- assert_true(
- result["error"]["message"].string_value().find("quoted string")
- < 0
- )
- assert_true(
- result["error"]["message"].string_value().find(
- "unable to derive hyf package surface"
- )
- < 0
- )
- except e:
- if original_fault == "":
- _ = unsetenv(_PACKAGE_SURFACE_FAULT_ENV)
- else:
- _ = setenv(_PACKAGE_SURFACE_FAULT_ENV, original_fault)
- raise e^
-
- if original_fault == "":
- _ = unsetenv(_PACKAGE_SURFACE_FAULT_ENV)
- else:
- _ = setenv(_PACKAGE_SURFACE_FAULT_ENV, original_fault)
+ assert_equal(Int(result["version"].int_value()), 1)
+ assert_equal(
+ result["request_id"].string_value(), "status-internal-1"
+ )
+ assert_equal(
+ result["trace_id"].string_value(), "trace-status-internal-1"
+ )
+ assert_equal(result["ok"].bool_value(), False)
+ assert_equal(
+ result["error"]["code"].string_value(), "internal_error"
+ )
+ assert_equal(
+ result["error"]["message"].string_value(),
+ _EXPECTED_INTERNAL_ERROR_MESSAGE,
+ )
+ assert_true(
+ result["error"]["message"].string_value().find("simulated test-only")
+ < 0
+ )
def main() raises:
diff --git a/tests/test_stdio_contract.mojo b/tests/test_stdio_contract.mojo
@@ -1,4 +1,3 @@
-from std.os import getenv, setenv, unsetenv
from std.os import Pipe, Process
from std.testing import assert_equal, assert_true, TestSuite
from std.ffi import CStringSlice, c_int, external_call
@@ -10,9 +9,6 @@ from mojson import Value, loads
comptime _EXPECTED_INTERNAL_ERROR_MESSAGE = (
"internal hyf daemon error; inspect local diagnostics"
)
-comptime _PACKAGE_SURFACE_FAULT_ENV = (
- "HYF_TEST_FAULT_CURRENT_PACKAGE_SURFACE"
-)
def _dup2(oldfd: c_int, newfd: c_int) -> c_int:
@@ -32,13 +28,16 @@ def _read_pipe_to_string(mut pipe: Pipe) raises -> String:
return output^
-def _run_hyf(request_json: String) raises -> Value:
+def _run_entrypoint(entrypoint: String, request_json: String) raises -> Value:
var stdin_pipe = Pipe()
var stdout_pipe = Pipe()
var output = String("")
var command = String("mojo")
+ var include_flag = String("-I")
+ var include_path = String("src")
+ var entrypoint_path = String(entrypoint)
var argv = List[Optional[CStringSlice[ImmutAnyOrigin]]](
- length=4, fill={}
+ length=6, fill={}
)
argv[0] = rebind[CStringSlice[ImmutAnyOrigin]](
command.as_c_string_slice()
@@ -47,7 +46,13 @@ def _run_hyf(request_json: String) raises -> Value:
"run".as_c_string_slice()
)
argv[2] = rebind[CStringSlice[ImmutAnyOrigin]](
- "src/main.mojo".as_c_string_slice()
+ include_flag.as_c_string_slice()
+ )
+ argv[3] = rebind[CStringSlice[ImmutAnyOrigin]](
+ include_path.as_c_string_slice()
+ )
+ argv[4] = rebind[CStringSlice[ImmutAnyOrigin]](
+ entrypoint_path.as_c_string_slice()
)
var pid = vfork()
@@ -87,6 +92,10 @@ def _run_hyf(request_json: String) raises -> Value:
raise Error("hyf process returned no stdout payload")
return loads(output)
+
+def _run_hyf(request_json: String) raises -> Value:
+ return _run_entrypoint("src/main.mojo", request_json)
+
def _has_key(value: Value, key: String) -> Bool:
for candidate in value.object_keys():
if candidate == key:
@@ -185,49 +194,32 @@ def test_strict_semantic_rank_failure() raises:
def test_internal_error_is_bounded_on_wire() raises:
- var original_fault = getenv(_PACKAGE_SURFACE_FAULT_ENV, "")
- _ = setenv(
- _PACKAGE_SURFACE_FAULT_ENV, "invalid_unquoted_version"
+ var response = _run_entrypoint(
+ "tests/internal_error_stdio_main.mojo",
+ '{"version":1,"request_id":"status-internal-proc-1","trace_id":"trace-status-internal-proc-1","capability":"sys.status","input":{}}',
)
- try:
- var response = _run_hyf(
- '{"version":1,"request_id":"status-internal-proc-1","trace_id":"trace-status-internal-proc-1","capability":"sys.status","input":{}}'
- )
- assert_equal(Int(response["version"].int_value()), 1)
- assert_equal(
- response["request_id"].string_value(),
- "status-internal-proc-1",
- )
- assert_equal(
- response["trace_id"].string_value(),
- "trace-status-internal-proc-1",
- )
- assert_true(not response["ok"].bool_value())
- assert_equal(
- response["error"]["code"].string_value(), "internal_error"
- )
- assert_equal(
- response["error"]["message"].string_value(),
- _EXPECTED_INTERNAL_ERROR_MESSAGE,
- )
- assert_true(
- response["error"]["message"].string_value().find(
- "quoted string"
- )
- < 0
- )
- except e:
- if original_fault == "":
- _ = unsetenv(_PACKAGE_SURFACE_FAULT_ENV)
- else:
- _ = setenv(_PACKAGE_SURFACE_FAULT_ENV, original_fault)
- raise e^
-
- if original_fault == "":
- _ = unsetenv(_PACKAGE_SURFACE_FAULT_ENV)
- else:
- _ = setenv(_PACKAGE_SURFACE_FAULT_ENV, original_fault)
+ assert_equal(Int(response["version"].int_value()), 1)
+ assert_equal(
+ response["request_id"].string_value(),
+ "status-internal-proc-1",
+ )
+ assert_equal(
+ response["trace_id"].string_value(),
+ "trace-status-internal-proc-1",
+ )
+ assert_true(not response["ok"].bool_value())
+ assert_equal(
+ response["error"]["code"].string_value(), "internal_error"
+ )
+ assert_equal(
+ response["error"]["message"].string_value(),
+ _EXPECTED_INTERNAL_ERROR_MESSAGE,
+ )
+ assert_true(
+ response["error"]["message"].string_value().find("simulated test-only")
+ < 0
+ )
def main() raises: