59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
"""Isolated Bash helper checks; only dummy values, no browsers or secret stores."""
|
|
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
import tempfile
|
|
|
|
|
|
template = Path(__file__).with_name("template.sh").resolve()
|
|
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
env_file = Path(directory) / ".env"
|
|
environment = {**os.environ, "ENV_FILE": str(env_file)}
|
|
|
|
def run(command, value="", input="", expected=0):
|
|
result = subprocess.run(
|
|
["bash", "-c", 'source "$1"; ' + command, "check", str(template)],
|
|
env={**environment, "DUMMY_VALUE": value},
|
|
input=input, text=True, capture_output=True,
|
|
)
|
|
assert (result.returncode == 0) == (expected == 0), result.stderr
|
|
return result
|
|
|
|
for value in ("dummy#value", " spaces ", 'a"b', r"dollar$and\backslash", "replacement"):
|
|
run('write_env DUMMY_KEY "$DUMMY_VALUE"', value)
|
|
parsed = subprocess.run(
|
|
["node", "-e", "process.stdout.write(JSON.stringify(require('node:util').parseEnv(require('node:fs').readFileSync(process.argv[1], 'utf8'))))", str(env_file)],
|
|
text=True, capture_output=True, check=True,
|
|
)
|
|
assert json.loads(parsed.stdout)["DUMMY_KEY"] == value
|
|
assert run("_existing DUMMY_KEY").stdout == value
|
|
assert env_file.stat().st_mode & 0o777 == 0o600
|
|
assert env_file.read_text().count("DUMMY_KEY=") == 1
|
|
|
|
run("write_env OTHER_KEY unchanged")
|
|
run("write_env DUMMY_KEY replacement")
|
|
assert run("_existing OTHER_KEY").stdout == "unchanged"
|
|
saved = env_file.read_bytes()
|
|
for value in ("", "can't", "two\nlines", "carriage\rreturn"):
|
|
run('write_env DUMMY_KEY "$DUMMY_VALUE"', value, expected=1)
|
|
assert env_file.read_bytes() == saved
|
|
run('write_env "BAD-KEY" value', expected=1)
|
|
run('write_env HOME value', expected=1)
|
|
for helper in ("ask", "ask_secret"):
|
|
run(f'{helper} NEW_KEY prompt', expected=1)
|
|
run(f'{helper} NEW_KEY prompt', input="\n", expected=1)
|
|
run(f'{helper} DUMMY_KEY prompt; [[ "$DUMMY_KEY" == replacement ]]', input="\n")
|
|
run(f'{helper} NEW_KEY prompt; [[ "$NEW_KEY" == captured ]]', input="captured\n")
|
|
run("pause", expected=1)
|
|
run("confirm question", expected=1)
|
|
run("confirm question", input="yesterday\n", expected=1)
|
|
run("confirm question", input="yes\n")
|
|
env_file.write_text('DUMMY_KEY="unsupported"\n')
|
|
run('write_env DUMMY_KEY replacement', expected=1)
|
|
assert env_file.read_text() == 'DUMMY_KEY="unsupported"\n'
|
|
|
|
print("Wizard helper checks passed")
|