Show More
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading)...
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading) (mercurial grafted from d233105d3965c5368c9b33125f390e39b25f910e)
File last commit:
Show/Diff file:
Action:
test/engine_test.rb | 152 lines | 4.3 KiB | text/x-ruby | RubyLexer |
require 'test/unit'
require 'rubygems'
require 'mocha'
require File.join(File.dirname(__FILE__),'test_helper')
class GraderEngineTest < UnitTest.TestCase
def setup
@@lang_c = stub(:name => 'c', :ext => 'c')
@@lang_cpp = stub(:name => 'cpp', :ext => 'cpp')
@@lang_pas = stub(:name => 'pas', :ext => 'pas')
@config = Grader::Configuration.get_instance
@problem_test1 = stub(:id => 1, :name => 'test1', :full_score => 135)
@user_user1 = stub(:id => 1, :login => 'user1')
@engine = Grader::Engine.new
init_sandbox
end
def teardown
end
def test_grade_oldest_task_with_no_submission
Task.expects(:get_inqueue_and_change_status).returns(nil)
assert_equal nil, @engine.grade_oldest_task, 'should return nil when there is no task'
end
def test_normal_submission
submission = create_test1_submission_mock_from_file("test1_correct.c")
submission.expects(:graded_at=)
submission.expects(:points=).with(135)
submission.expects(:grader_comment=).with do |value|
/^PASSED/.match(value)
end
submission.expects(:compiler_message=).with('')
submission.expects(:save)
@engine.grade(submission)
end
def test_compile_error_submission
submission = create_test1_submission_mock_from_file("test1_compile_error.c")
submission.expects(:graded_at=)
submission.expects(:points=).with(0)
submission.expects(:grader_comment=).with('FAILED: compile error')
submission.expects(:compiler_message=) do |value|
/[Ee]rror/.match value
end
submission.expects(:save)
@engine.grade(submission)
end
def test_timeout_submission
@problem_test2 = stub(:id => 1, :name => 'test2', :full_score => 10)
@user_user1 = stub(:id => 1, :login => 'user1')
submission = create_submission_from_file(1, @user_user1, @problem_test2,
"test2_timeout.c")
submission.expects(:graded_at=)
submission.expects(:points=).with(0)
submission.expects(:grader_comment=).with do |value|
/^FAILED: TT$/.match value
end
submission.expects(:compiler_message=).with('')
submission.expects(:save)
@engine.grade(submission)
end
def test_timeout_submission_running_one_and_a_half_second
@problem_test2 = stub(:id => 1, :name => 'test2', :full_score => 20)
@user_user1 = stub(:id => 1, :login => 'user1')
submission = create_submission_from_file(1, @user_user1, @problem_test2,
"test2_1-5sec.c")
submission.expects(:graded_at=)
submission.expects(:points=).with(10)
submission.expects(:grader_comment=).with do |value|
/^FAILED: TP$/.match value
end
submission.expects(:compiler_message=).with('')
submission.expects(:save)
@engine.grade(submission)
end
def test_grade_oldest_task
# mock submission
submission = create_test1_submission_mock_from_file("test1_correct.c")
submission.expects(:graded_at=)
submission.expects(:points=).with(135)
submission.expects(:grader_comment=).with do |value|
/^PASSED/.match(value)
end
submission.expects(:compiler_message=).with('')
submission.expects(:save)
# mock task
task = stub(:id => 1, :submission_id => submission.id)
Task.expects(:get_inqueue_and_change_status).returns(task)
task.expects(:status_complete!)
# mock Submission
Submission.expects(:find).with(task.submission_id).returns(submission)
@engine.grade_oldest_task
end
def test_grade_oldest_task_with_grader_process
grader_process = stub
grader_process.expects(:report_active)
@engine = Grader::Engine.new(grader_process)
test_grade_oldest_task
end
protected
def clear_sandbox
clear_cmd = "rm -rf #{@config.test_sandbox_dir}/*"
system(clear_cmd)
end
def init_sandbox
clear_sandbox
Dir.mkdir @config.user_result_dir
cp_cmd = "cp -R #{@config.test_data_dir}/ev #{@config.test_sandbox_dir}"
system(cp_cmd)
end
def create_submission_from_file(id, user, problem, source_fname, language = @@lang_c)
source = File.open(@config.test_data_dir + "/" + source_fname).read
stub(:id => id, :user => user, :problem => problem,
:source => source, :language => language)
end
def create_test1_submission_mock_from_file(source_fname)
create_submission_from_file(1, @user_user1, @problem_test1, source_fname)
end
end