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()); }
/* (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); } } }