import unittest import shutil from detection.utils import read_file_content from .final_tests_util import clone_repo, Path, inject_random_backdoor from detection.Regexdetection import find_dangerous_functions from detection.GPTdetection import detectGPT class TestFinalTests(unittest.TestCase): def setUp(self) -> None: shutil.rmtree("./tmp/repo", ignore_errors=True) clone_repo("https://github.com/injetlee/Python.git", "./tmp/repo") sampleRate = 0.1 self.injectedNum = inject_random_backdoor("./tmp/repo", sample_rate=sampleRate) print(self.injectedNum) project_path = Path("./tmp/repo") self.all_python_files = list(project_path.rglob("*.py")) self.filesNum = len(self.all_python_files) self.trueRate = self.injectedNum / self.filesNum print(self.trueRate) def test_final_tests(self): detectedNum = 0 possibly_dangerous_file = [] for file in self.all_python_files: content = read_file_content(str(file)) results = find_dangerous_functions(content, ".py") if ( len(results["high"]) > 0 or len(results["medium"]) > 0 or len(results["low"]) > 0 ): detectedNum += 1 possibly_dangerous_file.append(file) print(detectedNum / self.filesNum) self.assertAlmostEqual(detectedNum / self.filesNum, self.trueRate, places=1) GPTdetectedNum = 0 for i in possibly_dangerous_file: content = read_file_content(str(i)) results = {} try: results = detectGPT(content) if ( len(results["high"]) > 0 or len(results["medium"]) > 0 or len(results["low"]) > 0 ): GPTdetectedNum += 1 print(GPTdetectedNum) self.assertGreaterEqual(GPTdetectedNum, detectedNum) except Exception as e: print(e) if __name__ == "__main__": unittest.main()