function triger_test($language, $files, $input, $output, $cpulimit, $memlimit, $expect) { global $DB; $judgeclass = 'judge_' . onlinejudge_judge_name($language); if (!$judgeclass::is_available()) { // skip unavailable judge return; } $options->input = $input; $options->output = $output; $options->cpulimit = $cpulimit; $options->memlimit = $memlimit; $options->var1 = ideoneuser; $options->var2 = ideonepass; $taskid = onlinejudge_submit_task(1, 1, $language, $files, 'simpletest', $options); $task = onlinejudge_judge($taskid); $this->assertEqual($task->status, $expect); }
/** * Send judge task request to judgelib */ function request_judge($submission) { global $DB; $oj = $DB->get_record('assignment_oj', array('assignment' => $submission->assignment), '*', MUST_EXIST); $source = array(); $fs = get_file_storage(); $files = $fs->get_area_files($this->context->id, 'mod_assignment', 'submission', $submission->id, 'sortorder, timemodified', false); // Mark all old tasks as old $DB->set_field('assignment_oj_submissions', 'latest', 0, array('submission' => $submission->id)); $tests = $this->get_testcases(); foreach ($tests as $test) { $oj->input = $test->input; $oj->output = $test->output; $oj->var1 = $oj->ideoneuser; $oj->var2 = $oj->ideonepass; // Submit task. Use transaction to avoid task is been judged before inserting into assignment_oj_submissions try { $transaction = $DB->start_delegated_transaction(); $taskid = onlinejudge_submit_task($this->cm->id, $submission->userid, $oj->language, $files, 'assignment_onlinejudge', $oj); $DB->insert_record('assignment_oj_submissions', array('submission' => $submission->id, 'testcase' => $test->id, 'task' => $taskid, 'latest' => 1)); $transaction->allow_commit(); } catch (Exception $e) { //TODO: reconnect db ? $transaction->rollback($e); // rethrows exception } } }