23 lines
1.6 KiB
Python
23 lines
1.6 KiB
Python
import pathlib,subprocess,sys,json,os,signal
|
|
root=pathlib.Path.cwd();out=pathlib.Path(sys.argv[1]);out.mkdir(parents=True,exist_ok=True)
|
|
assert root != pathlib.Path('/mnt/storage/src/mosaic-stack')
|
|
assert os.environ.get('DOCKER_HOST')=='unix:///nonexistent.sock'
|
|
muts=[
|
|
('checkout-execstart','scripts/discord-service.sh','ExecStart=$node $root/packages/discord/src/cli.mjs run %i --supervised --repo $root','ExecStart=$REPO/scripts/discord.sh run %i --supervised','pinned Discord'),
|
|
('missing-pi-accepted','scripts/discord-service.sh','[ -f "$root/node_modules/.bin/pi" ] || die',': || die','pinned Discord'),
|
|
('offline-calls-getMe','packages/discord/src/cli.mjs','if (opts.offline) {','if (false) {','check --offline validates'),
|
|
]
|
|
results=[]
|
|
for name,file,old,new,pattern in muts:
|
|
p=root/file;original=p.read_text();assert original.count(old)==1,(name,original.count(old))
|
|
try:
|
|
p.write_text(original.replace(old,new,1))
|
|
with (out/(name+'.txt')).open('w') as log:
|
|
child=subprocess.Popen(['node','--test','--test-name-pattern='+pattern,'packages/discord/tests/copy-service.test.mjs' if name!='offline-calls-getMe' else 'packages/discord/tests/offline-check.test.mjs'],stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
|
|
try:code=child.wait(timeout=60);status='killed' if code else 'survived'
|
|
except subprocess.TimeoutExpired:os.killpg(child.pid,signal.SIGKILL);child.wait();code=124;status='timeout'
|
|
row={'name':name,'exit':code,'status':status};results.append(row);print(json.dumps(row),flush=True)
|
|
(out/'summary.json').write_text(json.dumps(results,indent=2)+'\n')
|
|
finally:p.write_text(original)
|
|
sys.exit(any(r['status']!='killed' for r in results))
|