hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

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:
Msrc/hyf_core/metadata.mojo | 8--------
Msrc/hyf_stdio/server.mojo | 32+++++++++++++++++++++++++++-----
Atests/internal_error_stdio_main.mojo | 31+++++++++++++++++++++++++++++++
Mtests/test_hyf.mojo | 81++++++++++++++++++++++++++++++++-----------------------------------------------
Mtests/test_stdio_contract.mojo | 88++++++++++++++++++++++++++++++++++++-------------------------------------------
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: