import json from pathlib import Path import tempfile import unittest from samsara.collectors.demo import collect_demo, LINUX_DEMO_HOST from samsara.analyzers.assessment import assess try: from samsara.collectors.importer import load_inventory except ImportError: load_inventory = None @unittest.skipIf(load_inventory is None, 'jsonschema not installed') class ImportTests(unittest.TestCase): def load(self, data): with tempfile.TemporaryDirectory() as folder: path = Path(folder) / 'inventory.json' path.write_text(json.dumps(data)) return load_inventory(path) def test_linux_inventory_and_nfs_evidence(self): data = self.load(collect_demo(LINUX_DEMO_HOST)) self.assertEqual(data['server']['platform'], 'linux') result = assess(data) self.assertTrue(any('/srv/reports' in item['evidence'] for item in result['findings'])) self.assertTrue(any('certificates:' in item['evidence'] for item in result['findings'])) def test_report_wrapper_recomputed_and_sensitive_fields_removed(self): data = collect_demo(LINUX_DEMO_HOST) data['synthetic'] = False data['inventory']['services'][0]['arguments'] = '--password=SECRET' data['checks']['services']['message'] = 'SECRET command diagnostics' imported = self.load({'inventory_result': data, 'assessment': {'level': 'safe'}}) self.assertFalse(imported['synthetic']) self.assertNotIn('SECRET', json.dumps(imported)) self.assertNotEqual(assess(imported)['level'], 'safe') def test_rejects_missing_checks_and_malformed_rows(self): for mutation in ['check', 'row', 'version']: data = collect_demo(LINUX_DEMO_HOST) if mutation == 'check': del data['checks']['services'] elif mutation == 'row': data['inventory']['services'] = [{}] else: data['schema_version'] = '99' with self.subTest(mutation=mutation), self.assertRaises(ValueError): self.load(data)