mirror of
https://github.com/Such-Software/adaptive-multi-protocol-gateway.git
synced 2026-10-17 07:31:32 +02:00
Plan managed state artifact copies
This commit is contained in:
@@ -209,6 +209,45 @@ port = 1965
|
||||
)
|
||||
self.assertTrue(artifact_path.exists())
|
||||
|
||||
def test_apply_dry_run_write_artifacts_prints_state_copy_plan(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp).resolve()
|
||||
config_path = _write_config(
|
||||
root,
|
||||
"""
|
||||
[site.protocols.i2p]
|
||||
enabled = true
|
||||
renderer = "privacy-html"
|
||||
daemon = "i2pd"
|
||||
daemon_policy = "auto"
|
||||
""",
|
||||
)
|
||||
output = root / "out/i2p"
|
||||
output.mkdir(parents=True)
|
||||
(output / ".ampg-output").write_text("generated by AMPG\n", encoding="utf-8")
|
||||
|
||||
stdout = io.StringIO()
|
||||
with contextlib.redirect_stdout(stdout):
|
||||
status = main(
|
||||
[
|
||||
"--config",
|
||||
str(config_path),
|
||||
"apply",
|
||||
"--dry-run",
|
||||
"--write-artifacts",
|
||||
"--platform",
|
||||
"android-termux",
|
||||
]
|
||||
)
|
||||
|
||||
output_text = stdout.getvalue()
|
||||
self.assertEqual(0, status)
|
||||
self.assertIn("AMPG_APPLY_STATE_COPY site=example protocol=i2p", output_text)
|
||||
self.assertIn("kind=daemon-config", output_text)
|
||||
self.assertIn("kind=loopback-config", output_text)
|
||||
self.assertIn(str(root / ".ampg/state/example/i2p/i2pd-tunnels.conf"), output_text)
|
||||
self.assertIn(str(root / ".ampg/state/example/i2p/nginx-loopback.conf"), output_text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -10,6 +10,7 @@ from ampg.install_plan import (
|
||||
blocked_install_steps,
|
||||
install_artifacts,
|
||||
install_plan,
|
||||
install_state_copies,
|
||||
write_install_artifacts,
|
||||
)
|
||||
from ampg.platforms import platform_by_name
|
||||
@@ -263,6 +264,46 @@ daemon_policy = "auto"
|
||||
).exists()
|
||||
)
|
||||
|
||||
def test_state_copy_plan_maps_review_artifacts_to_managed_state(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp).resolve()
|
||||
config = load_config(
|
||||
_write_config(
|
||||
root,
|
||||
"""
|
||||
[site.protocols.i2p]
|
||||
enabled = true
|
||||
renderer = "privacy-html"
|
||||
daemon = "i2pd"
|
||||
daemon_policy = "auto"
|
||||
""",
|
||||
)
|
||||
)
|
||||
write_install_artifacts(
|
||||
config,
|
||||
platform_provider=platform_by_name("android-termux"),
|
||||
daemon_probe=_probe(installed=False, running=False),
|
||||
)
|
||||
|
||||
copies = install_state_copies(
|
||||
config,
|
||||
platform_provider=platform_by_name("android-termux"),
|
||||
daemon_probe=_probe(installed=False, running=False),
|
||||
)
|
||||
|
||||
by_kind = {copy.kind: copy for copy in copies}
|
||||
self.assertEqual({"daemon-config", "loopback-config"}, set(by_kind))
|
||||
self.assertEqual("planned", by_kind["daemon-config"].status)
|
||||
self.assertEqual(
|
||||
root / ".ampg/state/example/i2p/i2pd-tunnels.conf",
|
||||
by_kind["daemon-config"].target,
|
||||
)
|
||||
self.assertEqual(
|
||||
root / ".ampg/state/example/i2p/nginx-loopback.conf",
|
||||
by_kind["loopback-config"].target,
|
||||
)
|
||||
self.assertIn("cp", by_kind["daemon-config"].command)
|
||||
|
||||
def test_install_plan_cli_can_write_managed_artifacts(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
|
||||
Reference in New Issue
Block a user