30 lines
1.7 KiB
Python
30 lines
1.7 KiB
Python
import os, pathlib, subprocess, tempfile
|
|
repo=pathlib.Path(__file__).resolve().parents[1]
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
p=pathlib.Path(tmp); target=p/'telegraf'; target.mkdir()
|
|
(target/'bcachefs.sh').write_text('original')
|
|
subprocess.run([str(repo/'install.sh'),str(target)],check=True,stdout=subprocess.DEVNULL)
|
|
assert (next(target.glob('bcachefs-backup.*'))/'bcachefs.sh').read_text()=='original'
|
|
for script in repo.glob('bcachefs*.sh'): assert (target/script.name).resolve()==script.resolve()
|
|
subprocess.run([str(repo/'install.sh'),str(target)],check=True)
|
|
assert len(list(target.glob('bcachefs-backup.*')))==1
|
|
stub=p/'kubectl'; stub.write_text('''#!/bin/bash
|
|
if [[ $1 == get ]]; then
|
|
printf '%s\\n' "${MOCK_PODS-brunner-ninja-test}"
|
|
else
|
|
exit "${MOCK_CP_STATUS:-0}"
|
|
fi
|
|
'''); stub.chmod(0o755)
|
|
log=p/'test log'; log.write_text('test')
|
|
env=dict(os.environ,PATH=tmp+':'+os.environ['PATH'],TMPDIR=tmp)
|
|
def run(extra={}):
|
|
return subprocess.run([str(repo/'paste_log.sh'),str(log)],env=env|extra,text=True,capture_output=True)
|
|
result=run(); assert result.returncode==0 and result.stdout.startswith('https://brunner.ninja/pastes/'),result
|
|
result=run({'MOCK_CP_STATUS':'7'}); assert result.returncode==7 and not result.stdout,result
|
|
for pods in ['', 'brunner-ninja-a\nbrunner-ninja-b']:
|
|
result=run({'MOCK_PODS':pods}); assert result.returncode==1 and not result.stdout,result
|
|
assert not list(p.glob('*.log'))
|
|
result=subprocess.run(['bash','-c','source "$1"; paste_log /nonexistent; echo survived','bash',str(repo/'paste_log.sh')],capture_output=True,text=True)
|
|
assert result.returncode==0 and result.stdout.strip()=='survived'
|
|
print('PASS: installer backup/idempotency, upload success/failure, pod selection, cleanup, sourced-shell survival')
|