import ctypes
import importlib
import json
from pathlib import Path
import sys
import unittest
import numpy
import scipy.linalg

modules=['app.byte_tracking','app.analysis_metrics','app.tracking_probe','app.stream_manager']
print({name:importlib.import_module(name).__file__ for name in modules})
suite=unittest.TestSuite()
def add_relevant(tests):
    for test in tests:
        if isinstance(test, unittest.TestSuite):
            add_relevant(test)
        elif not test.id().endswith('test_entrypoint_scopes_blas_to_application'):
            suite.addTest(test)
if sys.argv[1]=='intrusion-image':
    add_relevant(unittest.defaultTestLoader.loadTestsFromName('test_intrusion_connection.ScenarioConnectionTest'))
else:
    for pattern in ['test_tracking_probe.py','test_tracking_empty_update.py','test_tracking_preparation.py','test_det_result_path.py','test_analysis_metrics.py']:
        add_relevant(unittest.defaultTestLoader.discover('/tests',pattern=pattern))
result=unittest.TextTestRunner(verbosity=2).run(suite)
backend=[]
for path in sorted({l.split()[-1] for l in Path('/proc/self/maps').read_text().splitlines() if 'openblas' in l and '/' in l}):
    lib=ctypes.CDLL(path)
    for symbol in ['openblas_get_num_threads','openblas_get_num_threads64_','scipy_openblas_get_num_threads','scipy_openblas_get_num_threads64_']:
        try:fn=getattr(lib,symbol)
        except AttributeError:continue
        fn.restype=ctypes.c_int;backend.append(dict(library=Path(path).name,threads=fn()));break
out=dict(tests=result.testsRun,success=result.wasSuccessful(),errors=len(result.errors),failures=len(result.failures),backend=backend)
Path('/evidence',sys.argv[1]+'.json').write_text(json.dumps(out,indent=2));print(json.dumps(out))
raise SystemExit(0 if result.wasSuccessful() else 1)
