Show More
Commit Description:
[grader] import script now support raw with testruns...
Commit Description:
[grader] import script now support raw with testruns
git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@267 6386c4cd-e34a-4fa8-8920-d93eb39b512e
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 | ||||