File size: 1,727 Bytes
2695555 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | from _util import carregar_tars
import builtins
tars = carregar_tars()
casos_perigosos = ["rm -rf /", "rm -rf ~/projeto", "sudo dd if=/dev/zero of=/dev/sda", "mkfs.ext4 /dev/sdb1", "shutdown now", ":(){ :|:& };:"]
casos_seguros = ["ls -la", "echo oi", "rm arquivo.txt", "df -h", "cat README.md"]
for cmd in casos_perigosos:
assert tars._comando_e_perigoso(cmd), f"deveria ser perigoso: {cmd}"
print("OK: todos os comandos perigosos foram detectados")
for cmd in casos_seguros:
assert not tars._comando_e_perigoso(cmd), f"nao deveria ser perigoso: {cmd}"
print("OK: comandos seguros nao disparam confirmacao")
# mv que some com o arquivo ou tira a raiz/a pasta pessoal do lugar (o padrão antigo não pegava nada útil)
for cmd in ["mv ~/projeto /dev/null", "mv -f dados.db /dev/null", "mv / /tmp/x", "mv ~ /tmp/casa", "mv $HOME /mnt/x"]:
assert tars._comando_e_perigoso(cmd), f"deveria ser perigoso: {cmd}"
for cmd in ["mv a.txt b.txt", "mv ~/a.txt ~/b.txt", "mv relatorio.pdf ~/Documentos/", "ls /dev/null"]:
assert not tars._comando_e_perigoso(cmd), f"nao deveria ser perigoso: {cmd}"
print("OK: mv pra /dev/null e mv da raiz/da casa pedem confirmação; mv comum não")
# Simula usuario recusando -> comando nao roda
builtins.input = lambda *a, **k: "n"
r = tars.executar_terminal("rm -rf /tmp/teste")
assert r["sucesso"] is False
assert "cancelled" in r["mensagem"].lower()
print("OK: recusa cancela o comando:", r["mensagem"])
# Simula usuario confirmando -> comando roda de fato
builtins.input = lambda *a, **k: "s"
r = tars.executar_terminal("echo teste_perigoso_confirmado")
print("resultado apos confirmar (comando inofensivo usado so p/ nao mexer no disco de verdade):", r)
print("\nTUDO OK.")
|