import contextlib
import json
import os
import pathlib
import subprocess
import unittest

os.umask(0o077)
R = pathlib.Path('/evidence')
out = {}
with (R/'tests.log').open('w') as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
    suite = unittest.TestSuite()
    for pattern in ('test_receiver_return.py','test_metadata_only.py','test_metadata_connection.py','test_det_result_path.py'):
        suite.addTests(unittest.defaultTestLoader.discover('/source/tests',pattern=pattern))
    result = unittest.TextTestRunner(stream=log,verbosity=2).run(suite)
out.update(tests=result.testsRun,errors=len(result.errors),failures=len(result.failures))
sdk = []
for value in (0, 1):
    p = subprocess.run(['python3','/source/tests/sdk_receiver_return_probe.py',str(value)],
                       capture_output=True,text=True,timeout=15)
    (R/('sdk-'+str(value)+'.log')).write_text(p.stdout+p.stderr)
    rows = [json.loads(line) for line in p.stdout.splitlines() if line.startswith('{')]
    assert p.returncode == 0 and len(rows) == 1, 'SDK fixture failed'
    sdk.append(rows[0])
assert sdk[0]['elapsed_s'] > 2.8 and sdk[0]['elapsed_s']-sdk[1]['elapsed_s'] > 2.5
assert all(x['calls']==3 and x['eos'] and not x['wait_alive'] for x in sdk)
out.update(sdk=0,sdk_results=sdk)
(R/'verify.json').write_text(json.dumps(out,indent=2))
print(json.dumps(out))
raise SystemExit(1 if out['errors'] or out['failures'] else 0)
