diff options
author | 2022-11-22 12:31:05 -0500 | |
---|---|---|
committer | 2022-11-22 12:31:05 -0500 | |
commit | 9400107e00d37b1809dd1ff8276a6b5bbba9dfdd (patch) | |
tree | 59e5ab5410eb23dd0a5c0c44e83d93093c67d5e4 /tests/test_nsjail.py | |
parent | Move cfgs to file from process call (diff) |
Refactor file parse timeout
Diffstat (limited to 'tests/test_nsjail.py')
-rw-r--r-- | tests/test_nsjail.py | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/tests/test_nsjail.py b/tests/test_nsjail.py index 493e1f1..dca0a8f 100644 --- a/tests/test_nsjail.py +++ b/tests/test_nsjail.py @@ -17,19 +17,17 @@ class NsJailTests(unittest.TestCase): def setUp(self): super().setUp() - self.nsjail = NsJail() - # Set a lower memfs size limit so tests don't exceed time limit - self.nsjail.memfs_instance_size = 2 * 1024 * 1024 # 2MiB - + # Specify lower limits for unit tests to complete within time limits + self.nsjail = NsJail(memfs_instance_size=2 * 1024 * 1024) self.logger = logging.getLogger("snekbox.nsjail") self.logger.setLevel(logging.WARNING) def eval_code(self, code: str): return self.nsjail.python3(["-c", code]) - def eval_file(self, code: str, name: str = "test.py"): + def eval_file(self, code: str, name: str = "test.py", **kwargs): file = FileAttachment(name, code) - return self.nsjail.python3([name], [file]) + return self.nsjail.python3([name], [file], **kwargs) def test_print_returns_0(self): for fn in (self.eval_code, self.eval_file): @@ -185,6 +183,30 @@ class NsJailTests(unittest.TestCase): self.assertIn("Resource temporarily unavailable", result.stdout) self.assertEqual(result.stderr, None) + def test_file_parsing_timeout(self): + code = dedent( + """ + import os + data = "a" * 1024 + size = 32 * 1024 * 1024 + + with open("src", "w") as f: + for _ in range((size // 1024) - 5): + f.write(data) + + for i in range(100): + os.symlink("src", f"output{i}") + """ + ).strip() + + nsjail = NsJail(memfs_instance_size=48 * 1024 * 1024, files_timeout=1) + result = nsjail.python3(["-c", code]) + self.assertEqual(result.returncode, None) + self.assertEqual( + result.stdout, "TimeoutError: Exceeded time limit while parsing attachments" + ) + self.assertEqual(result.stderr, None) + def test_sigsegv_returns_139(self): # In honour of Juan. code = dedent( """ |