import json from pathlib import Path import subprocess import tempfile import unittest SCRIPT = Path(__file__).resolve().parents[1] / 'runner/configure-docker.py' class DockerConfigurationTest(unittest.TestCase): def test_merge_preserves_existing_settings_and_is_idempotent(self): with tempfile.TemporaryDirectory() as directory: path = Path(directory) / 'daemon.json' original = {'features': {'buildkit': True}, 'insecure-registries': ['existing:5000']} path.write_text(json.dumps(original)) for _ in range(2): result = subprocess.run(['python3', str(SCRIPT), str(path)], capture_output=True, text=True) self.assertEqual(0, result.returncode, result.stderr) actual = json.loads(path.read_text()) self.assertEqual(original['features'], actual['features']) self.assertEqual(['existing:5000', '192.168.2.28:3000'], actual['insecure-registries']) self.assertEqual(original, json.loads(path.with_name('daemon.json.before-agiledancers').read_text())) def test_invalid_configuration_is_left_unchanged(self): with tempfile.TemporaryDirectory() as directory: path = Path(directory) / 'daemon.json' original = '{"insecure-registries": "invalid"}' path.write_text(original) result = subprocess.run(['python3', str(SCRIPT), str(path)], capture_output=True, text=True) self.assertNotEqual(0, result.returncode) self.assertEqual(original, path.read_text())