Files
applecontainercompose/Tests/laravel_regression.py
T
2026-11-09 08:20:57 +00:00

30 lines
2.3 KiB
Python

#!/usr/bin/env python3
"""Usage: python3 Tests/laravel_regression.py /absolute/path/container-compose"""
import json, os, pathlib, subprocess, sys, tempfile
binary=str(pathlib.Path(sys.argv[1]).resolve())
with tempfile.TemporaryDirectory(prefix='container-compose-laravel-',dir=os.environ.get('CONTAINER_COMPOSE_TEST_TMPDIR', '/Volumes/ChatGPT' if pathlib.Path('/Volumes/ChatGPT').is_dir() else tempfile.gettempdir())) as tmp:
root=pathlib.Path(tmp); calls=root/'calls'
runtime=root/'container'
runtime.write_text('#!'+sys.executable+'\nimport os,json,sys\nwith open(os.environ["CALLS"],"a") as f: f.write(json.dumps(sys.argv[1:])+"\\n")\n')
runtime.chmod(0o755)
env=dict(os.environ,PATH=str(root)+':'+os.environ.get('PATH',''),CALLS=str(calls),UID='1234',GID='2345')
path=root/'compose.yaml'
def run(command='config'):
return subprocess.run([binary,'-f',str(path),command],env=env,text=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,timeout=10)
cases=[('', 'Compose file is empty'),(' # comment\n','mapping at its root'),('name: wrong\n','Missing top-level services'),('services: []\n','nonempty mapping'),('services: {}\n','nonempty mapping'),('services: [\n','Invalid YAML')]
for content,expected in cases:
path.write_text(content);p=run();assert p.returncode!=0 and expected in p.stdout and path.name in p.stdout,p.stdout
path.write_text((pathlib.Path(__file__).parent/'Fixtures/laravel.yaml').read_text())
p=run();assert p.returncode==0 and 'Validated 4 services' in p.stdout,p.stdout
p=run('build');assert p.returncode==0,p.stdout
records=[json.loads(x) for x in calls.read_text().splitlines()]
assert len(records)==2,records
assert records[0]==['build','-t','laravel-nginx:latest',str((root/'docker/nginx').resolve())],records
assert records[1]==['build','-t','laravel-web:latest','--build-arg','gid=2345','--build-arg','uid=1234',str((root/'docker/php').resolve())],records
calls.write_text('')
path.write_text('services:\n web:\n build:\n context: .\n args: ["UID", "LITERAL=hello world"]\n')
p=run('build');assert p.returncode==0,p.stdout
records=[json.loads(x) for x in calls.read_text().splitlines()]
assert ['--build-arg','UID=1234','--build-arg','LITERAL=hello world']==records[0][3:7],records
print('PASS: 9 Laravel and file diagnostic cases')