85 lines
3.5 KiB
Python
85 lines
3.5 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from monitors.yumi import chatapp_cron_deploy as cron
|
|
|
|
|
|
class ChatappCronDeployTests(unittest.TestCase):
|
|
def test_overview_does_not_read_remote_metadata_when_disabled(self) -> None:
|
|
with (
|
|
patch.object(cron, "CHATAPP_CRON_ENABLED", False),
|
|
patch.object(cron, "read_chatapp_cron_metadata") as read_metadata_mock,
|
|
):
|
|
payload = cron.build_chatapp_cron_overview_payload()
|
|
|
|
self.assertTrue(payload["ok"])
|
|
self.assertFalse(payload["enabled"])
|
|
self.assertEqual(payload["metadata"], {})
|
|
read_metadata_mock.assert_not_called()
|
|
|
|
def test_activate_uploads_binary_and_recreates_compose_service(self) -> None:
|
|
host = {
|
|
"host": "cron",
|
|
"ip": "10.3.1.14",
|
|
"instanceId": "ins-nt6bsay0",
|
|
"sshHost": "10.3.1.14",
|
|
"sshUser": "root",
|
|
"sshUseSudo": False,
|
|
"sshPort": 22,
|
|
}
|
|
|
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
binary_path = Path(tmp_dir) / "week-star-job"
|
|
binary_path.write_text("binary", encoding="utf-8")
|
|
binary_path.chmod(0o755)
|
|
|
|
with (
|
|
patch.object(cron, "CHATAPP_CRON_SERVICE_NAME", "chatapp-cron"),
|
|
patch.object(cron, "CHATAPP_CRON_HOST", "cron"),
|
|
patch.object(cron, "CHATAPP_CRON_REMOTE_DIR", "/opt/deploy/runtime/current"),
|
|
patch.object(cron, "CHATAPP_CRON_COMPOSE_FILE", "/opt/deploy/runtime/current/docker-compose.yml"),
|
|
patch.object(cron, "CHATAPP_CRON_COMPOSE_SERVICE", "week-star-job"),
|
|
patch.object(cron, "CHATAPP_CRON_BINARY_PATH", "/opt/deploy/runtime/current/week-star-job/service"),
|
|
patch.object(
|
|
cron,
|
|
"CHATAPP_CRON_RELEASE_META_PATH",
|
|
"/opt/deploy/runtime/current/.hy-app-monitor-chatapp-cron-release.json",
|
|
),
|
|
patch.object(cron, "chatapp_cron_host_record", return_value=host),
|
|
patch.object(cron, "copy_local_path_to_host") as copy_mock,
|
|
patch.object(
|
|
cron,
|
|
"run_host_script_checked",
|
|
return_value={"target": "cron", "status": "ok", "output": "week-star-job running"},
|
|
) as run_remote_mock,
|
|
):
|
|
result = cron.activate_chatapp_cron_binary(
|
|
{
|
|
"binaryPath": str(binary_path),
|
|
"gitRef": "main",
|
|
"commit": "f0f6205abc1234567890",
|
|
}
|
|
)
|
|
|
|
copy_mock.assert_called_once()
|
|
self.assertEqual(copy_mock.call_args.args[0], host)
|
|
self.assertEqual(copy_mock.call_args.args[1], binary_path)
|
|
|
|
run_remote_mock.assert_called_once()
|
|
remote_script = run_remote_mock.call_args.args[1]
|
|
self.assertIn("COMPOSE_SERVICE=week-star-job", remote_script)
|
|
self.assertIn("BINARY_PATH=/opt/deploy/runtime/current/week-star-job/service", remote_script)
|
|
self.assertIn('up -d --no-deps --force-recreate "$COMPOSE_SERVICE"', remote_script)
|
|
self.assertIn("META_BLOB=", remote_script)
|
|
|
|
self.assertEqual(result["metadata"]["commit"], "f0f6205abc1234567890")
|
|
self.assertEqual(result["metadata"]["component"], "week-star-job")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|