Description:
[grader] test_request: fixed error when input file is not found, or input file remains in problem home git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@171 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r45:dafc790ec9b7 - - 1 file changed: 17 inserted, 2 deleted

@@ -54,78 +54,93
54 end
54 end
55
55
56 protected
56 protected
57 def grading_room_dir(test_request)
57 def grading_room_dir(test_request)
58 problem_name = test_request.problem_name
58 problem_name = test_request.problem_name
59 user = test_request.user
59 user = test_request.user
60 "#{@config.user_result_dir}" +
60 "#{@config.user_result_dir}" +
61 "/#{user.login}/test_request" +
61 "/#{user.login}/test_request" +
62 "/#{problem_name}/#{test_request.id}"
62 "/#{problem_name}/#{test_request.id}"
63 end
63 end
64
64
65 def problem_home_dir(test_request)
65 def problem_home_dir(test_request)
66 problem_name = test_request.problem_name
66 problem_name = test_request.problem_name
67 user = test_request.user
67 user = test_request.user
68 "#{@config.user_result_dir}" +
68 "#{@config.user_result_dir}" +
69 "/#{user.login}/test_request/#{problem_name}"
69 "/#{user.login}/test_request/#{problem_name}"
70 end
70 end
71
71
72 def copy_problem_template(template_dir,problem_home)
72 def copy_problem_template(template_dir,problem_home)
73 cmd = "cp -R #{template_dir}/* #{problem_home}"
73 cmd = "cp -R #{template_dir}/* #{problem_home}"
74 system_and_raise_when_fail(cmd,"Test Request: cannot copy problem template")
74 system_and_raise_when_fail(cmd,"Test Request: cannot copy problem template")
75 end
75 end
76
76
77 def link_input_file(test_request,problem_home)
77 def link_input_file(test_request,problem_home)
78 - cmd = "ln -s #{test_request.input_file_name} #{problem_home}/test_cases/1/input-1.txt"
78 + input_fname = "#{test_request.input_file_name}"
79 + if !File.exists?(input_fname)
80 + raise "Test Request: input file not found."
81 + end
82 +
83 + input_fname_problem_home = "#{problem_home}/test_cases/1/input-1.txt"
84 + if File.exists?(input_fname_problem_home)
85 + FileUtils.rm([input_fname_problem_home], :force => true)
86 + end
87 +
88 + cmd = "ln -s #{input_fname} #{input_fname_problem_home}"
79 system_and_raise_when_fail(cmd,"Test Request: cannot link input file")
89 system_and_raise_when_fail(cmd,"Test Request: cannot link input file")
80 end
90 end
81
91
82 def remove_data_files(problem_home)
92 def remove_data_files(problem_home)
83 if File.exists?("#{problem_home}/test_cases/1/input-1.txt")
93 if File.exists?("#{problem_home}/test_cases/1/input-1.txt")
84 cmd = "rm #{problem_home}/test_cases/1/*"
94 cmd = "rm #{problem_home}/test_cases/1/*"
85 system_and_raise_when_fail(cmd,"Test Request: cannot remove data files")
95 system_and_raise_when_fail(cmd,"Test Request: cannot remove data files")
86 end
96 end
87 end
97 end
88
98
89 def system_and_raise_when_fail(cmd,msg)
99 def system_and_raise_when_fail(cmd,msg)
90 if !system(cmd)
100 if !system(cmd)
91 raise msg
101 raise msg
92 end
102 end
93 end
103 end
94
104
95 end
105 end
96
106
97 class TestRequestReporter
107 class TestRequestReporter
98 def initialize
108 def initialize
99 @config = Grader::Configuration.get_instance
109 @config = Grader::Configuration.get_instance
100 end
110 end
101
111
102 def report(test_request,test_result_dir)
112 def report(test_request,test_result_dir)
103 save_result(test_request,read_result(test_result_dir))
113 save_result(test_request,read_result(test_result_dir))
104 end
114 end
105
115
106 def report_error(test_request, msg)
116 def report_error(test_request, msg)
107 - save_result(test_request, {:running_stat => {:msg => "#{msg}"}})
117 + save_result(test_request, {:running_stat => {
118 + :msg => "#{msg}",
119 + :running_time => nil,
120 + :exit_status => "Some error occured. Program did not run",
121 + :memory_usage => nil
122 + }})
108 end
123 end
109
124
110 protected
125 protected
111 def read_result(test_result_dir)
126 def read_result(test_result_dir)
112 # TODO:
127 # TODO:
113 cmp_msg_fname = "#{test_result_dir}/compiler_message"
128 cmp_msg_fname = "#{test_result_dir}/compiler_message"
114 cmp_file = File.open(cmp_msg_fname)
129 cmp_file = File.open(cmp_msg_fname)
115 cmp_msg = cmp_file.read
130 cmp_msg = cmp_file.read
116 cmp_file.close
131 cmp_file.close
117
132
118 result_file_name = "#{test_result_dir}/1/result"
133 result_file_name = "#{test_result_dir}/1/result"
119
134
120 if File.exists?(result_file_name)
135 if File.exists?(result_file_name)
121 output_file_name = "#{test_result_dir}/1/output.txt"
136 output_file_name = "#{test_result_dir}/1/output.txt"
122 results = File.open("#{test_result_dir}/1/result").readlines
137 results = File.open("#{test_result_dir}/1/result").readlines
123 stat = extract_running_stat(results)
138 stat = extract_running_stat(results)
124
139
125 return {
140 return {
126 :output_file_name => output_file_name,
141 :output_file_name => output_file_name,
127 :running_stat => stat,
142 :running_stat => stat,
128 :comment => "",
143 :comment => "",
129 :cmp_msg => cmp_msg}
144 :cmp_msg => cmp_msg}
130 else
145 else
131 return {
146 return {
You need to be logged in to leave comments. Login now