diff options
author | Prabhu Ramachandran | 2011-11-25 23:57:56 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2011-11-25 23:57:56 +0530 |
commit | 9000f58786bc21b05e59ddbe96f8be607f13a00d (patch) | |
tree | 853b014635f47d523ae5f7327d1b2bae9aac8aa3 /test_server.py | |
parent | bc06851c9b7017b169dbd67ff24dd6d54deaaabf (diff) | |
download | online_test-9000f58786bc21b05e59ddbe96f8be607f13a00d.tar.gz online_test-9000f58786bc21b05e59ddbe96f8be607f13a00d.tar.bz2 online_test-9000f58786bc21b05e59ddbe96f8be607f13a00d.zip |
ENH: Fixing bash support, tests for code server.
This checkin fixes bash support. In actuality the bash support lets one
test any runnable script/program that outputs results to stdout. I've
also added a decent test suite for the code server that checks if it
functions correctly or not. I've also updated the sample_questions to
work with the new bash support and added a reference bash script and the
testcode to go with it.
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() + |