def test_use_random_randint(self): result = challenge_test.run_tests(CHALLENGE_CODE_20, TEST_CODE9, 'random_int') self.assertTrue(result.success) result = challenge_test.run_tests(CHALLENGE_CODE_21, TEST_CODE9, 'random_int') self.assertTrue(result.success) result = challenge_test.run_tests(CHALLENGE_CODE_22, TEST_CODE9, 'random_int') self.assertFalse(result.success) self.assertTrue( 'Não deveria executar o randint com os argumentos 1, 10' in result.failure_msgs[0])
def test_one_failure(self): result = challenge_test.run_tests(CHALLENGE_CODE_3, TEST_CODE1, 'ex1') self.assertEqual(2, result.result_obj.testsRun) self.assertFalse(result.success) self.assertEqual(1, len(result.failure_msgs)) self.assertEqual('Não funcionou para caso com zero.', result.failure_msgs[0])
def test_run_program_with_error(self): result = challenge_test.run_tests(CHALLENGE_CODE_10, TEST_CODE4, None) self.assertFalse(result.success) self.assertEqual(2, len(result.failure_msgs)) for i in range(2): self.assertEqual('Não funcionou para algum teste', result.failure_msgs[i])
def test_doesnt_break_with_missing_function(self): f_name = 'wrong_name' result = challenge_test.run_tests(CHALLENGE_CODE_1, TEST_CODE1, f_name) self.assertFalse(result.success) self.assertEqual(1, len(result.failure_msgs)) self.assertEqual( 'Função não encontrada. Sua função deveria se chamar {}'.format( f_name), result.failure_msgs[0])
def test_division_by_zero(self): result = challenge_test.run_tests(CHALLENGE_CODE_4, TEST_CODE1, 'ex1') self.assertEqual(2, result.result_obj.testsRun) self.assertFalse(result.success) self.assertEqual(2, len(result.failure_msgs)) self.assertEqual('Não funcionou para caso com zero.', result.failure_msgs[0]) self.assertEqual(challenge_test.DEFAULT_MSG, result.failure_msgs[1])
def test_timeout(self): result = challenge_test.run_tests(CHALLENGE_CODE_2, TEST_CODE1, 'ex1') self.assertEqual(2, result.result_obj.testsRun) self.assertFalse(result.success) self.assertEqual(2, len(result.failure_msgs)) self.assertEqual(challenge_test.TIME_LIMIT_EXCEEDED, result.failure_msgs[0]) self.assertEqual(challenge_test.TIME_LIMIT_EXCEEDED, result.failure_msgs[1])
def handle(event, context): answer = event['answer'] test_code = event['test_code'] function_name = event['function_name'] result = ch.run_tests(answer, test_code, function_name) retval = { 'failure_msgs': result.failure_msgs, 'success': result.success, 'stack_traces': result.stack_traces, } return json.dumps(retval)
def run_code(challenge, answer): answer = answer.decode('utf-8') test_code = challenge.test_file.read().decode('utf-8') if settings.DEV_SERVER: return ch.run_tests(answer, test_code, challenge.function_name) else: lamb = boto3.client('lambda') args = { 'answer': answer, 'test_code': test_code, 'function_name': challenge.function_name, } response = lamb.invoke(FunctionName="testRunner", InvocationType='RequestResponse', Payload=json.dumps(args)) feedback = response['Payload'].read().decode('utf-8') feedback = json.loads(json.loads(feedback)) return TestResults(feedback['failure_msgs'], feedback['success'], feedback['stack_traces'])
def executa_codigo(exercicio, resposta): resposta = resposta.decode('utf-8') testes = exercicio.testes.read().decode('utf-8') if settings.DEV_SERVER: return ch.run_tests(resposta, testes, exercicio.nome_funcao) else: kwargs = { 'region_name': 'us-east-1', } if settings.AWS_ACCESS_KEY: kwargs['aws_access_key_id'] = settings.AWS_ACCESS_KEY if settings.AWS_SECRET_KEY: kwargs['aws_secret_access_key'] = settings.AWS_SECRET_KEY lamb = boto3.client('lambda', **kwargs) args = { 'answer': resposta, 'test_code': testes, 'function_name': exercicio.nome_funcao, } response = lamb.invoke(FunctionName="testRunner", InvocationType='RequestResponse', Payload=json.dumps(args)) feedback = response['Payload'].read().decode('utf-8') feedback = json.loads(feedback) if isinstance( feedback, dict) and 'Task timed out after' in feedback['errorMessage']: msg = feedback['errorMessage'] msg = msg[msg.index('Task timed out'):] feedback = { 'success': False, 'failure_msgs': [ch.TIME_LIMIT_EXCEEDED], 'stack_traces': [msg], 'stdouts': [''], } else: feedback = json.loads(feedback) return TestResults(feedback['failure_msgs'], feedback['success'], feedback['stack_traces'], feedback['stdouts'])
def test_print_failure(self): result = challenge_test.run_tests(CHALLENGE_CODE_6, TEST_CODE2, 'code_with_print') self.assertEqual(1, result.result_obj.testsRun) self.assertFalse(result.success)
def test_doesnt_allow_input_in_function_challenge(self): result = challenge_test.run_tests(CHALLENGE_CODE_19, TEST_CODE8, 'do_nothing') self.assertFalse(result.success) self.assertTrue('input' in result.failure_msgs[0])
def test_append(self): result = challenge_test.run_tests(CHALLENGE_CODE_18, TEST_CODE7, None) self.assertTrue(result.success)
def test_write(self): result = challenge_test.run_tests(CHALLENGE_CODE_17, TEST_CODE6, None) self.assertTrue(result.success)
def test_write_file_opened_for_reading(self): result = challenge_test.run_tests(CHALLENGE_CODE_16, TEST_CODE5, None) self.assertFalse(result.success) self.assertTrue('UnsupportedOperation' in result.stack_traces[0]) self.assertTrue('not writable' in result.stack_traces[0])
def test_open_file_that_doesnt_exist(self): result = challenge_test.run_tests(CHALLENGE_CODE_13, TEST_CODE5, None) self.assertFalse(result.success) self.assertTrue('FileNotFoundError' in result.stack_traces[0])
def test_with_open(self): result = challenge_test.run_tests(CHALLENGE_CODE_12, TEST_CODE5, None) self.assertTrue(result.success)
code = None try: with open(filename) as f: code = f.read() except FileNotFoundError: print('File {} not found'.format(filename)) return code target_code = load_code(args.target_filename) test_code = load_code(args.test_filename) result = None if target_code is not None and test_code is not None: result = ch.run_tests(target_code, test_code, args.function_name) if result: if result.success: print('Passed all tests!') else: print('Did not pass all tests :(') print('Failure messages:') for msg in result.failure_msgs: print(msg) if args.verbose: print('\nStack traces:') for st in result.stack_traces: print(st) print() else:
def test_run_program_if_none_function(self): result = challenge_test.run_tests(CHALLENGE_CODE_9, TEST_CODE4, None) self.assertEqual(2, result.result_obj.testsRun) self.assertTrue(result.success)
def test_doesnt_break_with_multiple_inputs(self): result = challenge_test.run_tests(CHALLENGE_CODE_23, TEST_CODE10, None) self.assertTrue(result.success)
def test_doesnt_break_with_syntax_error(self): result = challenge_test.run_tests(CHALLENGE_CODE_0, TEST_CODE1, 'ex1') self.assertFalse(result.success) self.assertEqual(1, len(result.failure_msgs)) self.assertEqual('Erro de sintaxe (código Python inválido)', result.failure_msgs[0])
def test_pass_all_tests(self): result = challenge_test.run_tests(CHALLENGE_CODE_1, TEST_CODE1, 'ex1') self.assertEqual(2, result.result_obj.testsRun) self.assertTrue(result.success) self.assertEqual(0, len(result.failure_msgs))
def test_get_stdout(self): result = challenge_test.run_tests(CHALLENGE_CODE_24, TEST_CODE11, None) self.assertFalse(result.success) self.assertEqual([('Começando', ), ('Continuar? ', 'sim'), ('Continuar? ', 'sim'), ('Continuar? ', 'não'), ('Fim', )], result.stdouts[0])
def test_fail_input(self): result = challenge_test.run_tests(CHALLENGE_CODE_8, TEST_CODE3, 'input_and_sum') self.assertEqual(2, result.result_obj.testsRun) self.assertFalse(result.success)