| from . import run |
| import time |
| from pathlib import Path |
|
|
| ROOT = Path(__file__).resolve().parent / "evil_programs" |
|
|
|
|
| def assert_no_running_evil(): |
| result = run( |
| ["pgrep", "-f", ROOT], timeout_seconds=1, max_output_size=1024 |
| ) |
| assert ( |
| result.exit_code == 1 |
| ), f"There are still evil processes running: {result.stdout}" |
| assert len(result.stderr) == 0 |
| assert len(result.stdout) == 0 |
|
|
|
|
| def test_fork_once(): |
| |
| |
| result = run( |
| ["python3", ROOT / "fork_once.py"], |
| timeout_seconds=2, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == 0 |
| assert result.timeout == False |
| assert len(result.stderr) == 0 |
| assert len(result.stdout) == 0 |
| assert_no_running_evil() |
|
|
|
|
| def test_close_outputs(): |
| |
| result = run( |
| ["python3", ROOT / "close_outputs.py"], |
| timeout_seconds=2, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == -1 |
| assert result.timeout == True |
| assert len(result.stderr) == 0 |
| assert result.stdout == "This is the end\n" |
| assert_no_running_evil() |
|
|
|
|
| def test_unbounded_output(): |
| result = run( |
| ["python3", ROOT / "unbounded_output.py"], |
| timeout_seconds=3, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == -1 |
| assert result.timeout == True |
| assert len(result.stderr) == 0 |
| assert len(result.stdout) == 1024 |
| assert_no_running_evil() |
|
|
|
|
| def test_sleep_forever(): |
| result = run( |
| ["python3", ROOT / "sleep_forever.py"], |
| timeout_seconds=2, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == -1 |
| assert result.timeout == True |
| assert len(result.stderr) == 0 |
| assert len(result.stdout) == 0 |
| assert_no_running_evil() |
|
|
|
|
| def test_fork_bomb(): |
| result = run( |
| ["python3", ROOT / "fork_bomb.py"], |
| timeout_seconds=2, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == -1 |
| assert result.timeout == True |
| assert len(result.stderr) == 0 |
| assert len(result.stdout) == 0 |
| |
| |
| |
| time.sleep(2) |
| assert_no_running_evil() |
|
|
|
|
| def test_block_on_inputs(): |
| |
| |
| result = run( |
| ["python3", ROOT / "block_on_inputs.py"], |
| timeout_seconds=2, |
| max_output_size=1024, |
| ) |
| assert result.exit_code == 1 |
| assert result.timeout == False |
| assert len(result.stdout) == 0 |
| assert "EOF when reading a line" in result.stderr |
| assert_no_running_evil() |
|
|