11#!/usr/bin/env python3
2- """Smoke test for SourceOS terminal command wrapper v0."""
2+ """Smoke tests for TurtleTerm / SourceOS terminal command wrappers v0."""
33
44from __future__ import annotations
55
1212
1313
1414REPO_ROOT = Path (__file__ ).resolve ().parents [3 ]
15- WRAPPER = REPO_ROOT / "assets" / "sourceos" / "bin" / "sourceos-term"
15+ SOURCEOS_WRAPPER = REPO_ROOT / "assets" / "sourceos" / "bin" / "sourceos-term"
16+ TURTLE_WRAPPER = REPO_ROOT / "assets" / "sourceos" / "bin" / "turtle-term"
1617
1718
1819def read_ndjson (path : Path ) -> list [dict ]:
1920 return [json .loads (line ) for line in path .read_text (encoding = "utf-8" ).splitlines () if line .strip ()]
2021
2122
22- def main ( ) -> int :
23+ def run_wrapper ( wrapper : Path , session_id : str , workspace : str , expected_text : str ) -> tuple [ list [ dict ], dict ] :
2324 with tempfile .TemporaryDirectory () as tmp :
2425 tmp_path = Path (tmp )
2526 events = tmp_path / "events.ndjson"
@@ -28,18 +29,19 @@ def main() -> int:
2829 env = dict (os .environ )
2930 env .update (
3031 {
31- "SOURCEOS_TERMINAL_SESSION_ID" : "sourceos-term-test" ,
32- "SOURCEOS_WORKSPACE" : "sourceos-test" ,
32+ "SOURCEOS_TERMINAL_SESSION_ID" : session_id ,
33+ "SOURCEOS_WORKSPACE" : workspace ,
3334 "SOURCEOS_TERMINAL_EVENTS" : str (events ),
3435 "SOURCEOS_TERMINAL_RECEIPTS" : str (receipts ),
3536 "SOURCEOS_ACTOR_ID" : "test:smoke" ,
3637 "SOURCEOS_POLICY_BUNDLE_ID" : "policy:test" ,
3738 "SOURCEOS_EXECUTION_DOMAIN" : "host" ,
3839 }
3940 )
41+ env .pop ("SOURCEOS_TERMINAL_FRONTEND" , None )
4042
4143 result = subprocess .run (
42- [sys .executable , str (WRAPPER ), "run" , "--" , sys .executable , "-c" , "print('sourceos-smoke ')" ],
44+ [sys .executable , str (wrapper ), "run" , "--" , sys .executable , "-c" , f "print('{ expected_text } ')" ],
4345 cwd = str (REPO_ROOT ),
4446 env = env ,
4547 text = True ,
@@ -49,7 +51,7 @@ def main() -> int:
4951 )
5052
5153 assert result .returncode == 0 , result .stderr
52- assert "sourceos-smoke" in result .stdout
54+ assert expected_text in result .stdout
5355 assert events .exists (), "event stream missing"
5456
5557 event_rows = read_ndjson (events )
@@ -66,13 +68,24 @@ def main() -> int:
6668
6769 receipt = json .loads (receipt_path .read_text (encoding = "utf-8" ))
6870 assert receipt ["schema" ] == "sourceos.terminal.receipt.v0"
69- assert receipt ["session_id" ] == "sourceos-term-test"
70- assert receipt ["workspace_id" ] if "workspace_id" in receipt else True
71+ assert receipt ["session_id" ] == session_id
72+ assert receipt ["workspace_id" ] == workspace
7173 assert receipt ["exit_status" ] == 0
72- assert receipt ["command_argv" ][- 2 :] == ["-c" , "print('sourceos-smoke ')" ]
74+ assert receipt ["command_argv" ][- 2 :] == ["-c" , f "print('{ expected_text } ')" ]
7375 assert receipt ["stdout_digest" ].startswith ("sha256:" )
7476 assert receipt ["stderr_digest" ].startswith ("sha256:" )
7577
78+ session = [row for row in event_rows if row .get ("schema" ) == "sourceos.terminal.session.v0" ][- 1 ]
79+ return event_rows , session
80+
81+
82+ def main () -> int :
83+ _ , sourceos_session = run_wrapper (SOURCEOS_WRAPPER , "sourceos-term-test" , "sourceos-test" , "sourceos-smoke" )
84+ assert sourceos_session ["frontend" ] == "sourceos-term"
85+
86+ _ , turtle_session = run_wrapper (TURTLE_WRAPPER , "turtle-term-test" , "turtle-test" , "turtle-smoke" )
87+ assert turtle_session ["frontend" ] == "turtle-term"
88+
7689 return 0
7790
7891
0 commit comments