| """Tests for the caching system.""" |
|
|
| import os |
| import sys |
| import tempfile |
| import unittest |
|
|
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) |
|
|
| from shield_agents.cache import ScanCache |
|
|
|
|
| class TestScanCache(unittest.TestCase): |
| """Test the scan cache.""" |
|
|
| def setUp(self): |
| self.tmpdir = tempfile.mkdtemp() |
| self.cache = ScanCache(cache_dir=os.path.join(self.tmpdir, ".shield-cache")) |
|
|
| def tearDown(self): |
| import shutil |
| shutil.rmtree(self.tmpdir, ignore_errors=True) |
|
|
| def test_file_changed_detection(self): |
| |
| test_file = os.path.join(self.tmpdir, "test.py") |
| with open(test_file, "w") as f: |
| f.write("print('hello')") |
|
|
| |
| self.assertTrue(self.cache.is_file_changed(test_file)) |
|
|
| |
| self.cache.update_file(test_file, [{"title": "test", "severity": "LOW"}]) |
| self.cache.save() |
|
|
| |
| self.assertFalse(self.cache.is_file_changed(test_file)) |
|
|
| def test_modified_file_detection(self): |
| test_file = os.path.join(self.tmpdir, "test.py") |
| with open(test_file, "w") as f: |
| f.write("print('hello')") |
| |
| self.cache.update_file(test_file, []) |
| self.cache.save() |
|
|
| |
| with open(test_file, "w") as f: |
| f.write("print('modified')") |
|
|
| |
| self.assertTrue(self.cache.is_file_changed(test_file)) |
|
|
| def test_get_cached_findings(self): |
| test_file = os.path.join(self.tmpdir, "test.py") |
| with open(test_file, "w") as f: |
| f.write("x = 1") |
|
|
| findings = [{"title": "SQL Injection", "severity": "CRITICAL"}] |
| self.cache.update_file(test_file, findings) |
| self.cache.save() |
|
|
| cached = self.cache.get_cached_findings(test_file) |
| self.assertEqual(len(cached), 1) |
| self.assertEqual(cached[0]["title"], "SQL Injection") |
|
|
| def test_get_changed_files(self): |
| f1 = os.path.join(self.tmpdir, "a.py") |
| f2 = os.path.join(self.tmpdir, "b.py") |
|
|
| with open(f1, "w") as f: |
| f.write("a = 1") |
| with open(f2, "w") as f: |
| f.write("b = 2") |
|
|
| |
| self.cache.update_file(f1, []) |
| self.cache.save() |
|
|
| changed = self.cache.get_changed_files([f1, f2]) |
| self.assertIn(f2, changed) |
| self.assertNotIn(f1, changed) |
|
|
| def test_clear_cache(self): |
| test_file = os.path.join(self.tmpdir, "test.py") |
| with open(test_file, "w") as f: |
| f.write("x = 1") |
|
|
| self.cache.update_file(test_file, []) |
| self.cache.save() |
| self.cache.clear() |
|
|
| |
| self.assertTrue(self.cache.is_file_changed(test_file)) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|