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
         }
     }
 }