diff options
Diffstat (limited to 'test_server.py')
-rw-r--r-- | test_server.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/test_server.py b/test_server.py new file mode 100644 index 0000000..45401fd --- /dev/null +++ b/test_server.py @@ -0,0 +1,75 @@ +"""Simple test suite for the code server. Running this requires that one start +up the code server as:: + + $ sudo ./code_server.py + +""" +from exam.xmlrpc_clients import code_server + +def check_result(result, check='correct answer'): + if check != 'correct answer': + assert result[0] == False + else: + assert result[0] == True + if "unable to connect" in result[1].lower(): + assert result[0], result[1] + assert check in result[1].lower(), result[1] + +def test_python(): + """Test if server runs Python code as expected.""" + src = 'while True: pass' + result = code_server.run_code(src, '', '/tmp', language="python") + check_result(result, 'more than ') + + src = 'x = 1' + result = code_server.run_code(src, 'assert x == 1', '/tmp', + language="python") + check_result(result, 'correct answer') + + result = code_server.run_code(src, 'assert x == 0', '/tmp', + language="python") + check_result(result, 'assertionerror') + + src = 'abracadabra' + result = code_server.run_code(src, 'assert x == 0', '/tmp', + language="python") + check_result(result, 'nameerror') + +def test_bash(): + """Test if server runs Bash code as expected.""" + src = """ +#!/bin/bash + [[ $# -eq 2 ]] && echo $(( $1 + $2 )) && exit $(( $1 + $2 )) + """ + result = code_server.run_code(src, + 'docs/sample.sh\ndocs/sample.args', '/tmp', language="bash") + check_result(result) + + src = """ +#!/bin/bash + [[ $# -eq 2 ]] && echo $(( $1 - $2 )) && exit $(( $1 - $2 )) + """ + result = code_server.run_code(src, + 'docs/sample.sh\ndocs/sample.args', '/tmp', language="bash") + check_result(result, 'error') + + src = """\ +#!/bin/bash + while [ 1 ] ; do echo "" > /dev/null ; done + """ + result = code_server.run_code(src, + 'docs/sample.sh\ndocs/sample.args', '/tmp', language="bash") + check_result(result, 'more than ') + + src = ''' +#!/bin/bash + while [ 1 ] ; do echo "" > /dev/null + ''' + result = code_server.run_code(src, + 'docs/sample.sh\ndocs/sample.args', '/tmp', language="bash") + check_result(result, 'error') + +if __name__ == '__main__': + test_python() + test_bash() + |