Example #1
0
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')
Example #2
0
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')

    src = '''# Enter your code here.
#!/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, 'oserror')
Example #3
0
def validate_answer(user, user_answer, question):
    """
        Checks whether the answer submitted by the user is right or wrong.
        If right then returns correct = True, success and
        message = Correct answer.
        success is True for MCQ's and multiple correct choices because
        only one attempt are allowed for them.
        For code questions success is True only if the answer is correct.
    """
    success = True
    correct = False
    message = 'Incorrect answer'

    if user_answer is not None:
        if question.type == 'mcq':
            if user_answer.strip() == question.test.strip():
                correct = True
                message = 'Correct answer'
        elif question.type == 'mcc':
            answers = set(question.test.splitlines())
            if set(user_answer) == answers:
                correct = True
                message = 'Correct answer'
        elif question.type == 'code':
            user_dir = get_user_dir(user)
            success, message = code_server.run_code(user_answer, question.test,
                                                user_dir, question.language)
            if success:
                 correct = True
    return correct, success, message
Example #4
0
def check(request, q_id):
    user = request.user
    if not user.is_authenticated():
        return my_redirect('/exam/login/')
    question = get_object_or_404(Question, pk=q_id)
    paper = QuestionPaper.objects.get(user=user, quiz__active=True)
    answer = request.POST.get('answer')
    skip = request.POST.get('skip', None)
    
    if skip is not None:
        next_q = paper.skip()
        return show_question(request, next_q)

    # Add the answer submitted, regardless of it being correct or not.
    new_answer = Answer(question=question, answer=answer, correct=False)
    new_answer.save()
    paper.answers.add(new_answer)

    # If we were not skipped, we were asked to check.  For any non-mcq
    # questions, we obtain the results via XML-RPC with the code executed
    # safely in a separate process (the code_server.py) running as nobody.
    if question.type == 'mcq':
        success = True # Only one attempt allowed for MCQ's.
        if answer.strip() == question.test.strip():
            new_answer.correct = True
            new_answer.marks = question.points
            new_answer.error = 'Correct answer'
        else:
            new_answer.error = 'Incorrect answer'
    else:
        user_dir = get_user_dir(user)
        success, err_msg = code_server.run_code(answer, question.test, 
                                                user_dir, question.type)
        new_answer.error = err_msg
        if success:
            # Note the success and save it along with the marks.
            new_answer.correct = success
            new_answer.marks = question.points

    new_answer.save()

    if not success: # Should only happen for non-mcq questions.
        time_left = paper.time_left()
        if time_left == 0:
            return complete(request, reason='Your time is up!')
        if not paper.quiz.active:
            return complete(request, reason='The quiz has been deactivated!')
            
        context = {'question': question, 'error_message': err_msg,
                   'paper': paper, 'last_attempt': answer,
                   'quiz_name': paper.quiz.description,
                   'time_left': time_left}
        ci = RequestContext(request)

        return my_render_to_response('exam/question.html', context, 
                                     context_instance=ci)
    else:
        next_q = paper.completed_question(question.id)
        return show_question(request, next_q)
Example #5
0
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')
Example #6
0
def test_c():
    """Test if server runs c code as expected."""
    src = """
                #include<stdiol.h>
                int ad(int a, int b)
                {return a+b;}
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C")
    check_result(result, 'error')

    src = """
                int add(int a, int b)
                {return a+b}
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C")
    check_result(result, 'compilation error')

    src = """
                int add(int a, int b)
                {while(1>0){}
                return a+b;}
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C")
    check_result(result, 'more than')

    src = """
                int add(int a, int b)
                {return a+b;}
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C")
    check_result(result, 'correct answer')

    src = """
                #include<stdio.h>
                int add(int a, int b)
                {printf("All Correct");}
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C")
    check_result(result, 'incorrect')
Example #7
0
def test_scilab():
    """Test if server runs scilab code as expected."""
    src = """
                funcprot(0)
function[c]=add(a,b)
    c=a+b;
endfunction
          """
    result = code_server.run_code(src, 'scilab_files/test_add.sce',
                                  '/tmp', language="scilab")
    check_result(result, 'correct answer')

    src = """
                funcprot(0)
function[c]=add(a,b)
    c=a-b;
endfunction
          """
    result = code_server.run_code(src, 'scilab_files/test_add.sce',
                                  '/tmp', language="scilab")
    check_result(result, 'correct answer')

    src = """
                funcprot(0)
function[c]=add(a,b)
    c=a+b;
dis(
endfunction
          """
    result = code_server.run_code(src, 'scilab_files/test_add.sce',
                                  '/tmp', language="scilab")
    check_result(result, 'error')

    src = """
               funcprot(0)
function[c]=add(a,b)
    c=a
    while(1==1)
    end
endfunction
          """
    result = code_server.run_code(src, 'scilab_files/test_add.sce',
                                  '/tmp', language="scilab")
    check_result(result, 'error')
Example #8
0
def test_cpp():
    """Test if server runs c code as expected."""
    src = """
                int add(int a, int b)
                {
                     return a+b
                }
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C++")
    check_result(result, 'error')

    src = """
                int add(int a, int b)
                {
                     return a+b;
                }
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C++")
    check_result(result, 'correct answer')

    src = """
                int dd(int a, int b)
                {
                      return a+b;
                }
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C++")
    check_result(result, 'error')

    src = """
                int add(int a, int b)
                {
                      while(0==0)
                      {}
                      return a+b;
                }
          """
    result = code_server.run_code(src, 'c_cpp_files/main.cpp',
                                  '/tmp', language="C++")
    check_result(result, 'more than')
Example #9
0
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')

    src = '''# Enter your code here.
#!/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, 'oserror')
Example #10
0
def test_java():
    """Test if server runs java code as expected."""
    src = """
                class Test
                {
                int square_num(int a)
                {
                     return a*a;
                }
                }
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'correct answer')

    src = """
                class Test
                {
                int square_num(int a)
                {
                     return b*b;
                }
                }
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'error')

    src = """
                class Test
                {
                int square_nu(int a)
                {
                      return a*a;
                }
                }
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'error')

    src = """
                class Test
                {
                int square_num(int a)
                {
                      while(0==0)
                      {}
                }
                }
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'more than')

    src = """
                class Test
                {
                int square_num(int a)
                {
                      return a+b
                }
                }
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'error')

    src = """
                class Test
                {
                int square_num(int a)
                {
                      return a+b
          """
    result = code_server.run_code(src, 'java_files/main_square.java',
                                  '/tmp', language="java")
    check_result(result, 'error')
Example #11
0
def check(request, q_id):
    user = request.user
    if not user.is_authenticated():
        return my_redirect("/exam/login/")
    question = get_object_or_404(Question, pk=q_id)
    paper = QuestionPaper.objects.get(user=user, quiz__active=True)
    answer = request.POST.get("answer")
    skip = request.POST.get("skip", None)

    if skip is not None:
        next_q = paper.skip()
        return show_question(request, next_q)

    # Add the answer submitted, regardless of it being correct or not.
    new_answer = Answer(question=question, answer=answer, correct=False)
    new_answer.save()
    paper.answers.add(new_answer)

    # If we were not skipped, we were asked to check.  For any non-mcq
    # questions, we obtain the results via XML-RPC with the code executed
    # safely in a separate process (the code_server.py) running as nobody.
    if question.type == "mcq":
        success = True  # Only one attempt allowed for MCQ's.
        if answer.strip() == question.test.strip():
            new_answer.correct = True
            new_answer.marks = question.points
            new_answer.error = "Correct answer"
        else:
            new_answer.error = "Incorrect answer"
    else:
        user_dir = get_user_dir(user)
        success, err_msg = code_server.run_code(answer, question.test, user_dir, question.type)
        new_answer.error = err_msg
        if success:
            # Note the success and save it along with the marks.
            new_answer.correct = success
            new_answer.marks = question.points

    new_answer.save()

    if not success:  # Should only happen for non-mcq questions.
        time_left = paper.time_left()
        if time_left == 0:
            return complete(request, reason="Your time is up!")
        if not paper.quiz.active:
            return complete(request, reason="The quiz has been deactivated!")

        context = {
            "question": question,
            "error_message": err_msg,
            "paper": paper,
            "last_attempt": answer,
            "quiz_name": paper.quiz.description,
            "time_left": time_left,
        }
        ci = RequestContext(request)

        return my_render_to_response("exam/question.html", context, context_instance=ci)
    else:
        next_q = paper.completed_question(question.id)
        return show_question(request, next_q)