private SubmissionReceipt createSubmissionReceipt( IContainsEvent mostRecentChange, SubmissionResult result, User user, Problem problem) { SubmissionStatus status = result.determineSubmissionStatus(); SubmissionReceipt receipt = SubmissionReceipt.create( user, problem, status, mostRecentChange.getEventId(), result.getNumTestsAttempted(), result.getNumTestsPassed()); return receipt; }
public void testCompileFailed() throws Exception { createProblem("compileTest", ProblemType.C_FUNCTION); tester = new CTester(); setProgramText("int sq(int x) {\n" + " reutrn x*x;\n" + "}"); addTestCase("test1", "1", "1"); SubmissionResult result = tester.testSubmission(submission); CompilationResult compres = result.getCompilationResult(); for (CompilerDiagnostic d : compres.getCompilerDiagnosticList()) { System.out.println(d); } // System.out.println("OUT: "+compres.getStdout()); // System.out.println("ERR: "+res.getStderr()); }
@Override public SubmissionResult checkSubmission() throws CloudCoderAuthenticationException, SubmissionException { // Make sure user is authenticated User user = ServletUtil.checkClientIsAuthenticated(getThreadLocalRequest(), RunServiceImpl.class); HttpSession session = getThreadLocalRequest().getSession(); // Retrieve session objects for submission IFutureSubmissionResult future = (IFutureSubmissionResult) session.getAttribute(SessionAttributeKeys.FUTURE_SUBMISSION_RESULT_KEY); if (future == null) { throw new SubmissionException("No pending submission in session"); } // See if the SubmissionResult is ready SubmissionResult result; try { result = future.waitFor(IFutureSubmissionResult.STANDARD_POLL_WAIT_MS); } catch (SubmissionException e) { // If poll() throws an exception, the submission completed // with an error, but it did complete, so clear the session objects. session.removeAttribute(SessionAttributeKeys.FUTURE_SUBMISSION_RESULT_KEY); throw e; } catch (InterruptedException e) { logger.error("checkSubmission interrupted unexpectedly", e); return null; } if (result == null) { // submission result not ready yet return null; } // Re-number the test results // The Builder thinks it is returning database keys // which it doesn't know so it sets everything to -1 int i = 1; for (TestResult r : result.getTestResults()) { r.setId(i); i++; } // We are just trusting that the submission result is for the // correct problem... // TODO Put results into DB once we have a meta-file system set up // SubmissionReceipt receipt = createSubmissionReceipt(fullTextChange, result, user, // problem); // Database.getInstance().insertSubmissionReceipt(receipt, result.getTestResults()); // // int numResult=0; // if (result!=null && result.getTestResults()!=null) { // numResult=result.getTestResults().length; // } // logger.info("Compilation "+result.getCompilationResult()+", received " +numResult+" // TestResults"); // // // Clear session objects for submission // session.removeAttribute(SessionAttributeKeys.FUTURE_SUBMISSION_RESULT_KEY); return result; }
/* (non-Javadoc) * @see org.cloudcoder.app.client.rpc.SubmitService#checkSubmission() */ @Override public SubmissionResult checkSubmission() throws CloudCoderAuthenticationException, SubmissionException { // Make sure user is authenticated User user = ServletUtil.checkClientIsAuthenticated(getThreadLocalRequest()); HttpSession session = getThreadLocalRequest().getSession(); // The Problem should be stored in the user's session Problem problem = (Problem) session.getAttribute(SessionAttributeKeys.PROBLEM_KEY); if (problem == null) { throw new CloudCoderAuthenticationException(); } // Retrieve session objects for submission IFutureSubmissionResult future = (IFutureSubmissionResult) session.getAttribute(SessionAttributeKeys.FUTURE_SUBMISSION_RESULT_KEY); Change fullTextChange = (Change) session.getAttribute(SessionAttributeKeys.FULL_TEXT_CHANGE_KEY); if (future == null) { throw new SubmissionException("No pending submission in session"); } if (fullTextChange == null) { throw new SubmissionException("No full-text change for pending submission in session"); } // See if the SubmissionResult is ready SubmissionResult result; try { result = future.poll(); } catch (SubmissionException e) { // If poll() throws an exception, the submission completed // with an error, but it did complete, so clear the session objects. clearSessionObjects(session); throw e; } if (result == null) { // submission result not ready yet return null; } // We are just trusting that the submission result is for the // correct problem... // Add a SubmissionReceipt to the database SubmissionReceipt receipt = createSubmissionReceipt(fullTextChange, result, user, problem); Database.getInstance().insertSubmissionReceipt(receipt, result.getTestResults()); int numResult = 0; if (result != null && result.getTestResults() != null) { numResult = result.getTestResults().length; } logger.info( "Compilation " + result.getCompilationResult() + ", received " + numResult + " TestResults"); // Clear session objects for submission clearSessionObjects(session); return result; }
private void testOne(ProblemAndTestCaseList problemWithTestCases, String fileName) throws IOException, SubmissionException, InterruptedException { String programText = readProgram(fileName); OOPBuildServiceSubmission future = new OOPBuildServiceSubmission( new Submission( problemWithTestCases.getProblem(), Arrays.asList(problemWithTestCases.getTestCaseList()), programText)); serverTask.submit(future); SubmissionResult result; while (true) { result = future.poll(); if (result != null) { break; } Thread.sleep(200L); } if (fileName.startsWith("./")) { fileName = fileName.substring(2); } System.out.println("program: " + fileName); if (result.getCompilationResult().getOutcome() != CompilationOutcome.SUCCESS) { System.out.println("compiled: false"); return; } System.out.println("compiled: true"); for (int i = 0; i < problemWithTestCases.getTestCaseList().length; i++) { TestCase testCase = problemWithTestCases.getTestCaseList()[i]; TestResult testResult = result.getTestResults()[i]; String outcome; switch (testResult.getOutcome()) { case PASSED: outcome = "passed"; break; case FAILED_WITH_EXCEPTION: outcome = "crashed"; break; case FAILED_FROM_TIMEOUT: outcome = "timeout"; break; default: outcome = "failed"; break; } System.out.println("test " + testCase.getTestCaseName() + ":" + outcome); if (testResult.getOutcome() != TestOutcome.PASSED) { String output = testResult.getStdout(); if (!output.endsWith("\n")) { output = output + "\n"; } System.out.print(output); } } }