Description:
[grader] extracted test_request info into new stat columns git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@163 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

r41:d4e37450ddbc - - 3 files changed: 37 inserted, 7 deleted

@@ -101,13 +101,13
101
101
102 def report(test_request,test_result_dir)
102 def report(test_request,test_result_dir)
103 save_result(test_request,read_result(test_result_dir))
103 save_result(test_request,read_result(test_result_dir))
104 end
104 end
105
105
106 def report_error(test_request, msg)
106 def report_error(test_request, msg)
107 - save_result(test_request, {:running_stat => "#{msg}"})
107 + save_result(test_request, {:running_stat => {:msg => "#{msg}"}})
108 end
108 end
109
109
110 protected
110 protected
111 def read_result(test_result_dir)
111 def read_result(test_result_dir)
112 # TODO:
112 # TODO:
113 cmp_msg_fname = "#{test_result_dir}/compiler_message"
113 cmp_msg_fname = "#{test_result_dir}/compiler_message"
@@ -126,44 +126,60
126 :output_file_name => output_file_name,
126 :output_file_name => output_file_name,
127 :running_stat => stat,
127 :running_stat => stat,
128 :comment => "",
128 :comment => "",
129 :cmp_msg => cmp_msg}
129 :cmp_msg => cmp_msg}
130 else
130 else
131 return {
131 return {
132 - :running_stat => "",
132 + :running_stat => nil,
133 :comment => "Compilation error",
133 :comment => "Compilation error",
134 :cmp_msg => cmp_msg}
134 :cmp_msg => cmp_msg}
135 end
135 end
136 end
136 end
137
137
138 def format_running_stat(results)
138 def format_running_stat(results)
139 running_time_line = results[-1]
139 running_time_line = results[-1]
140
140
141 + # extract exit status line
141 run_stat = ""
142 run_stat = ""
142 if !(/[Cc]orrect/.match(results[0]))
143 if !(/[Cc]orrect/.match(results[0]))
143 run_stat = results[0].chomp
144 run_stat = results[0].chomp
145 + else
146 + run_stat = 'Program exited normally'
144 end
147 end
145
148
149 + # extract running time
146 if res = /r(.*)u(.*)s/.match(running_time_line)
150 if res = /r(.*)u(.*)s/.match(running_time_line)
147 seconds = (res[1].to_f + res[2].to_f)
151 seconds = (res[1].to_f + res[2].to_f)
148 time_stat = "Time used: #{seconds} sec."
152 time_stat = "Time used: #{seconds} sec."
149 else
153 else
154 + seconds = nil
150 time_stat = "Time used: n/a sec."
155 time_stat = "Time used: n/a sec."
151 end
156 end
152 - return "#{run_stat}\n#{time_stat}"
157 + return {
158 + :msg => "#{run_stat}\n#{time_stat}",
159 + :running_time => seconds,
160 + :exit_status => run_stat
161 + }
153 end
162 end
154
163
155 def save_result(test_request,result)
164 def save_result(test_request,result)
156 if result[:output_file_name]!=nil
165 if result[:output_file_name]!=nil
157 test_request.output_file_name = link_output_file(test_request,
166 test_request.output_file_name = link_output_file(test_request,
158 result[:output_file_name])
167 result[:output_file_name])
159 end
168 end
160 test_request.graded_at = Time.now
169 test_request.graded_at = Time.now
161 test_request.compiler_message = (result[:cmp_msg] or '')
170 test_request.compiler_message = (result[:cmp_msg] or '')
162 test_request.grader_comment = (result[:comment] or '')
171 test_request.grader_comment = (result[:comment] or '')
163 - test_request.running_stat = (result[:running_stat] or '')
172 + if result[:running_stat]!=nil
173 + test_request.running_stat = (result[:running_stat][:msg] or '')
174 + test_request.running_time = (result[:running_stat][:running_time] or nil)
175 + test_request.exit_status = (result[:running_stat][:exit_status])
176 + test_request.memory_usage = nil # should be added later
177 + else
178 + test_request.running_stat = ''
179 + end
164 test_request.save
180 test_request.save
165 end
181 end
166
182
167 protected
183 protected
168 def link_output_file(test_request, fname)
184 def link_output_file(test_request, fname)
169 target_file_name = random_output_file_name(test_request.user,
185 target_file_name = random_output_file_name(test_request.user,
@@ -1,21 +1,23
1 #include <stdio.h>
1 #include <stdio.h>
2 #include <stdlib.h>
2 #include <stdlib.h>
3 + #include <unistd.h>
3
4
4 int main()
5 int main()
5 {
6 {
6 int a,b;
7 int a,b;
7
8
8 int c=0;
9 int c=0;
9
10
10 scanf("%d %d",&a,&b);
11 scanf("%d %d",&a,&b);
11 printf("%d\n",a+b);
12 printf("%d\n",a+b);
12
13
13 - for(a=0; a<2; a++) {
14 + sleep(1);
14 - while(c<1550000000) {
15 +
16 + c = 0;
17 + while(c<1000000000) {
15 c++;
18 c++;
16 b+=c;
19 b+=c;
17 }
20 }
18 - }
19 exit(0);
21 exit(0);
20 }
22 }
21
23
@@ -169,12 +169,15
169 :with => 'in1.txt',
169 :with => 'in1.txt',
170 :and_report => {
170 :and_report => {
171 :graded_at= => nil,
171 :graded_at= => nil,
172 :compiler_message= => '',
172 :compiler_message= => '',
173 :grader_comment= => '',
173 :grader_comment= => '',
174 :running_stat= => /template not found/,
174 :running_stat= => /template not found/,
175 + :running_time= => nil,
176 + :exit_status= => nil,
177 + :memory_usage= => nil,
175 :save => nil})
178 :save => nil})
176 end
179 end
177
180
178 it "should run test request and produce output file" do
181 it "should run test request and produce output file" do
179 problem = stub(Problem,
182 problem = stub(Problem,
180 :id => 1, :name => 'test_normal')
183 :id => 1, :name => 'test_normal')
@@ -186,12 +189,15
186 :compiler_message= => '',
189 :compiler_message= => '',
187 :grader_comment= => '',
190 :grader_comment= => '',
188 :running_stat= => /0.0 sec./,
191 :running_stat= => /0.0 sec./,
189 :output_file_name= => lambda { |fname|
192 :output_file_name= => lambda { |fname|
190 File.exists?(fname).should be_true
193 File.exists?(fname).should be_true
191 },
194 },
195 + :running_time= => nil,
196 + :exit_status= => nil,
197 + :memory_usage= => nil,
192 :save => nil})
198 :save => nil})
193 end
199 end
194
200
195 it "should clean up problem directory after running test request" do
201 it "should clean up problem directory after running test request" do
196 problem = stub(Problem,
202 problem = stub(Problem,
197 :id => 1, :name => 'test_normal')
203 :id => 1, :name => 'test_normal')
@@ -201,12 +207,15
201 :and_report => {
207 :and_report => {
202 :graded_at= => nil,
208 :graded_at= => nil,
203 :compiler_message= => '',
209 :compiler_message= => '',
204 :grader_comment= => '',
210 :grader_comment= => '',
205 :running_stat= => nil,
211 :running_stat= => nil,
206 :output_file_name= => nil,
212 :output_file_name= => nil,
213 + :running_time= => nil,
214 + :exit_status= => nil,
215 + :memory_usage= => nil,
207 :save => nil})
216 :save => nil})
208 File.exists?(@config.user_result_dir + "/test_request/test_normal/test_cases/1/input-1.txt").should be_false
217 File.exists?(@config.user_result_dir + "/test_request/test_normal/test_cases/1/input-1.txt").should be_false
209 end
218 end
210
219
211 it "should compile test request with error and report compilation error" do
220 it "should compile test request with error and report compilation error" do
212 problem = stub(Problem,
221 problem = stub(Problem,
@@ -233,12 +242,15
233 :compiler_message= => '',
242 :compiler_message= => '',
234 :grader_comment= => '',
243 :grader_comment= => '',
235 :running_stat= => /[Ee]xit.*status.*10.*0\.0 sec/m,
244 :running_stat= => /[Ee]xit.*status.*10.*0\.0 sec/m,
236 :output_file_name= => lambda { |fname|
245 :output_file_name= => lambda { |fname|
237 File.exists?(fname).should be_true
246 File.exists?(fname).should be_true
238 },
247 },
248 + :running_time= => nil,
249 + :exit_status= => /10/,
250 + :memory_usage= => nil,
239 :save => nil})
251 :save => nil})
240 end
252 end
241
253
242 protected
254 protected
243 def grader_should(args)
255 def grader_should(args)
244 @user1 = stub(User,
256 @user1 = stub(User,
You need to be logged in to leave comments. Login now