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)
References:
File last commit:
Show/Diff file:
Action:
test/engine_test.rb
| 152 lines
| 4.3 KiB
| text/x-ruby
| RubyLexer
|
|
r22 | 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 | ||||
|
r23 | @problem_test2 = stub(:id => 1, :name => 'test2', :full_score => 20) | ||
|
r22 | @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=) | ||||
|
r23 | submission.expects(:points=).with(10) | ||
|
r22 | 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 | ||||