Files
knowledge-governance/deploy/cloud-test/test_deployment.py
T
姚章浩 a50cd73423
build / build (push) Successful in 1m21s
fix(deploy): 校验云执行器授权配置与稳定启动
2026-10-31 04:26:54 +08:00

79 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""Execute deployment scripts with fake external CLIs; never touch Docker/SSH."""
import json
import os
from pathlib import Path
import subprocess
import tempfile
import unittest
HERE = Path(__file__).resolve().parent
class DeploymentTest(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory()
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name)
self.trace = self.root / "trace.jsonl"
self.env = dict(os.environ, PATH=str(self.root) + ":" + os.environ["PATH"], TRACE=str(self.trace))
self.stub("docker", "if 'inspect' in sys.argv: print('network=172.21.0.3 ')")
self.stub("ssh", "")
def stub(self, name, body):
path = self.root / name
path.write_text("#!/usr/bin/env python3\nimport os,sys,json\nwith open(os.environ['TRACE'],'a') as f: f.write(json.dumps(sys.argv)+chr(10))\n" + body + "\n")
path.chmod(0o755)
def calls(self):
return [json.loads(line) for line in self.trace.read_text().splitlines()] if self.trace.exists() else []
def run_script(self, name):
return subprocess.run(["bash", str(HERE / name)], env=self.env, capture_output=True, text=True)
def test_invalid_socket_rejected_before_ssh(self):
self.env['REMOTE_SOCKET'] = '/run/kgtest-pg/pg.sock'
result = self.run_script('pg-forward.sh')
self.assertNotEqual(result.returncode, 0)
self.assertFalse(any(Path(c[0]).name == 'ssh' for c in self.calls()))
def test_executor_mounts_socket_and_secret(self):
self.stub('id', "print('0')")
self.stub('sleep', '')
self.stub('docker', "if sys.argv[1:2] == ['inspect']:\n if '--format' in sys.argv: print('running 0')\n else: sys.exit(1)")
secret = self.root / 'pgpass'
secret.write_text('localhost:5432:governance:tester:example-only\n')
secret.chmod(0o600)
envfile = self.root / 'executor.env'
envfile.write_text('LIBRARY_WORKER_ROLE=release-executor\nPGPASSFILE=/run/secrets/governance_pgpass\n')
envfile.chmod(0o600)
self.env.update(RELEASE_EXECUTOR_IMAGE='fixture:only', RELEASE_EXECUTOR_ENV=str(envfile),
RELEASE_ARCHIVE_ROOT=str(self.root / 'archive'), RELEASE_JOURNAL_ROOT=str(self.root / 'journal'),
RELEASE_GATE_STATE=str(self.root), RELEASE_PG_SOCKET_DIR=str(self.root),
RELEASE_PGPASS_FILE=str(secret), RELEASE_BUNDLE_DIR=str(self.root / 'bundles'))
result = self.run_script('run-release-executor.sh')
self.assertEqual(result.returncode, 0, result.stderr)
call = next(c for c in self.calls() if c[1:2] == ['run'])
self.assertEqual(call[-1], '/app/worker')
self.assertEqual(call[call.index('--user') + 1], '0:0')
self.assertEqual(call[call.index('--network') + 1], 'weknora-test-v071-network')
self.assertIn(str(self.root) + ':/run/kgtest-pg:ro', call)
self.assertIn(str(secret) + ':/run/secrets/governance_pgpass:ro', call)
bundles = self.root / 'bundles'
self.assertIn(str(bundles) + ':' + str(bundles), call)
self.assertEqual(bundles.stat().st_mode & 0o777, 0o700)
self.assertNotIn('example-only', result.stdout + result.stderr + json.dumps(self.calls()))
def test_libpq_socket_directory_contract(self):
result = self.run_script("pg-forward.sh")
self.assertEqual(result.returncode, 0, result.stderr)
ssh = [c for c in self.calls() if Path(c[0]).name == "ssh"]
forward = ssh[-1]
self.assertEqual(forward[forward.index("-R") + 1], "/run/kgtest-pg/.s.PGSQL.5432:172.21.0.3:5432")
self.assertIn("host=/run/kgtest-pg&", result.stdout)
self.assertNotIn("host=/run/kgtest-pg/.s.PGSQL", result.stdout)
if __name__ == "__main__":
unittest.main()