import unittest from snekbox import Snekbox snek = Snekbox() class SnekTests(unittest.TestCase): def test_nsjail(self): result = snek.python3('print("test")') self.assertEquals(result.strip(), 'test') # def test_memory_error(self): # code = ('x = "*"\n' # 'while True:\n' # ' x = x * 99\n') # result = snek.python3(code) # self.assertEquals(result.strip(), 'timed out or memory limit exceeded') def test_timeout(self): code = ( 'x = "*"\n' 'while True:\n' ' try:\n' ' x = x * 99\n' ' except:\n' ' continue\n' ) result = snek.python3(code) self.assertEquals(result.strip(), 'timed out or memory limit exceeded') def test_kill(self): code = ('import subprocess\n' 'print(subprocess.check_output("kill -9 6", shell=True).decode())') result = snek.python3(code) if 'ModuleNotFoundError' in result.strip(): self.assertIn('ModuleNotFoundError', result.strip()) else: self.assertIn('(PIDs left: 0)', result.strip()) def test_forkbomb(self): code = ('import os\n' 'while 1:\n' ' os.fork()') result = snek.python3(code) self.assertIn('Resource temporarily unavailable', result.strip()) def test_juan_golf(self): # in honour of Juan code = ("func = lambda: None\n" "CodeType = type(func.__code__)\n" "bytecode = CodeType(0,1,0,0,0,b'',(),(),(),'','',1,b'')\n" "exec(bytecode)") result = snek.python3(code) self.assertEquals('unknown error, code: 111', result.strip())