2020
2121
2222def validate_responses (responses ):
23- by_id = {response .get ("id" ): response for response in responses }
24- if set (by_id ) != {1 , 2 }:
25- raise ValueError (f"expected response IDs 1 and 2, got { sorted (by_id )} " )
23+ if not all (isinstance (response , dict ) for response in responses ):
24+ raise ValueError ("expected each stdout payload to be a JSON object" )
25+
26+ response_ids = [response .get ("id" ) for response in responses ]
27+ if len (responses ) != 2 or set (response_ids ) != {1 , 2 }:
28+ raise ValueError (f"expected response IDs 1 and 2 only, got { response_ids } " )
29+ by_id = {response ["id" ]: response for response in responses }
2630
2731 server_info = by_id [1 ].get ("result" , {}).get ("serverInfo" , {})
2832 if server_info .get ("name" ) != "funasr" :
@@ -34,6 +38,21 @@ def validate_responses(responses):
3438 raise ValueError (f"transcribe_audio missing from tools/list: { tool_names } " )
3539
3640
41+ def parse_responses (stdout ):
42+ responses = []
43+ for line_number , raw_line in enumerate (stdout .splitlines (), start = 1 ):
44+ line = raw_line .strip ()
45+ if not line :
46+ continue
47+ try :
48+ responses .append (json .loads (line ))
49+ except json .JSONDecodeError as error :
50+ raise ValueError (
51+ f"non-JSON stdout on line { line_number } : { line [:120 ]} "
52+ ) from error
53+ return responses
54+
55+
3756def run_smoke_test (image , timeout ):
3857 payload = "" .join (f"{ json .dumps (request )} \n " for request in REQUESTS )
3958 completed = subprocess .run (
@@ -49,9 +68,7 @@ def run_smoke_test(image, timeout):
4968 f"container exited with { completed .returncode } : { completed .stderr .strip ()} "
5069 )
5170
52- responses = [
53- json .loads (line ) for line in completed .stdout .splitlines () if line .strip ()
54- ]
71+ responses = parse_responses (completed .stdout )
5572 validate_responses (responses )
5673
5774
0 commit comments