import glob
import os
import pathlib
import subprocess
import sys
import unittest
import contextlib
import json

assert not glob.glob('/dev/nvidia*')
root = pathlib.Path('/evidence')
sys.path.append('/tool-overlay')
os.environ['DATABASE_URL'] = 'postgresql://u:p' + chr(64) + 'localhost:1/db'
os.environ['REDIS_STREAMS_ENABLED'] = 'false'
native = '/opt/contextra/native/nvinferserver_rfdetr'
with (root / 'native.log').open('w') as log:
    subprocess.run(['make', '-C', native, 'all', 'check', 'BUILD_DIR=/evidence/native'],
                   check=True, stdout=log, stderr=subprocess.STDOUT, timeout=120)
    subprocess.run(['g++', '-std=c++14', '-shared', '-fPIC',
                    '/opt/contextra/tests/native_metadata_fixture.cpp',
                    '-I/opt/nvidia/deepstream/deepstream/sources/includes',
                    '-I/usr/include/gstreamer-1.0', '-I/usr/include/glib-2.0',
                    '-I/usr/lib/x86_64-linux-gnu/glib-2.0/include',
                    '-L/opt/nvidia/deepstream/deepstream/lib', '-lnvds_meta', '-lnvdsgst_meta',
                    '-lgstreamer-1.0', '-lgobject-2.0', '-lglib-2.0',
                    '-o', '/evidence/fixture.so'], check=True, stdout=log, stderr=subprocess.STDOUT)
with (root / 'sdk.log').open('w') as log:
    subprocess.run(['python3', 'tests/native_metadata_sdk_probe.py', '/evidence/fixture.so'],
                   check=True, stdout=log, stderr=subprocess.STDOUT, timeout=30)
with (root / 'unit.log').open('w') as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
    result = unittest.TextTestRunner(stream=log, verbosity=2).run(unittest.defaultTestLoader.discover('tests'))
summary = dict(tests=result.testsRun, failures=len(result.failures), errors=len(result.errors), skipped=len(result.skipped), gpu_devices=0)
(root / 'result.json').write_text(json.dumps(summary))
print(json.dumps(summary))
raise SystemExit(not result.wasSuccessful())
