From 0f73ab11ce498f72cb25bfa128c4ec21503dc4eb Mon Sep 17 00:00:00 2001 From: Maaraki Zakaria Date: Sun, 7 Jan 2024 14:32:44 +0100 Subject: [PATCH] Fix swagger generated response, use a specific class --- .../BaseRemoteCodeCompilerResponse.java | 15 +++ .../RemoteCodeCompilerExecutionResponse.java | 104 ++++++++++++++++++ .../contract/RemoteCodeCompilerResponse.java | 97 +--------------- .../controllers/CompilerController.java | 15 +-- .../controllers/ContainersInfoController.java | 10 +- .../ProblemExecutionController.java | 3 +- .../com/cp/compiler/mappers/JsonMapper.java | 9 +- .../compiler/services/api/CompilerFacade.java | 3 +- .../services/api/CompilerFacadeDefault.java | 8 +- .../compiler/services/api/CompilerProxy.java | 43 +++----- .../businesslogic/CompilerService.java | 3 +- .../businesslogic/CompilerServiceDefault.java | 11 +- .../LongRunningCompilerService.java | 10 +- .../services/ux/ExecutionService.java | 3 +- .../services/ux/ExecutionServiceDefault.java | 11 +- src/main/resources/templates/problem.html | 2 +- .../compiler/amqp/RabbitmqConsumerTests.java | 11 +- .../java/com/cp/compiler/e2e/CE2ETests.java | 45 +++++--- .../java/com/cp/compiler/e2e/CSE2ETests.java | 45 +++++--- .../java/com/cp/compiler/e2e/CppE2ETests.java | 45 +++++--- .../java/com/cp/compiler/e2e/GoE2ETests.java | 45 +++++--- .../com/cp/compiler/e2e/HaskellE2ETests.java | 53 ++++++--- .../com/cp/compiler/e2e/JavaE2ETests.java | 93 +++++++++++----- .../com/cp/compiler/e2e/KotlinE2ETests.java | 63 +++++++---- .../com/cp/compiler/e2e/PythonE2ETests.java | 39 +++++-- .../com/cp/compiler/e2e/RubyE2ETests.java | 39 +++++-- .../com/cp/compiler/e2e/RustE2ETests.java | 53 ++++++--- .../com/cp/compiler/e2e/ScalaE2ETests.java | 63 +++++++---- .../e2e/problems/AmShZWinsABetTests.java | 24 ++-- .../compiler/e2e/problems/MakeEvenTests.java | 10 +- .../e2e/problems/PhysEdOnlineTests.java | 17 ++- .../e2e/problems/WatermelonTests.java | 24 ++-- .../com/cp/compiler/kafka/TopologyTests.java | 5 +- .../cp/compiler/mappers/JsonMapperTests.java | 31 ++---- .../services/CompilerFacadeTests.java | 18 +-- .../services/CompilerProxyServiceTests.java | 2 +- .../CompilerServiceDecoratorTests.java | 20 +++- .../services/CompilerServiceTests.java | 69 ++++++++---- 38 files changed, 749 insertions(+), 412 deletions(-) create mode 100644 src/main/java/com/cp/compiler/contract/BaseRemoteCodeCompilerResponse.java create mode 100644 src/main/java/com/cp/compiler/contract/RemoteCodeCompilerExecutionResponse.java diff --git a/src/main/java/com/cp/compiler/contract/BaseRemoteCodeCompilerResponse.java b/src/main/java/com/cp/compiler/contract/BaseRemoteCodeCompilerResponse.java new file mode 100644 index 00000000..e3cd349d --- /dev/null +++ b/src/main/java/com/cp/compiler/contract/BaseRemoteCodeCompilerResponse.java @@ -0,0 +1,15 @@ +package com.cp.compiler.contract; + +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@EqualsAndHashCode +public class BaseRemoteCodeCompilerResponse { + + @ApiModelProperty(notes = "The error message") + private String error; +} diff --git a/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerExecutionResponse.java b/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerExecutionResponse.java new file mode 100644 index 00000000..f63ebb65 --- /dev/null +++ b/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerExecutionResponse.java @@ -0,0 +1,104 @@ +package com.cp.compiler.contract; + +import com.cp.compiler.contract.testcases.TestCaseResult; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.LinkedHashMap; +import java.util.Map; + +// Note: Before changing this class make sure it will not introduce a breaking change for users!! + +/** + * The type Response. + * This represents the response returned to the user. + * + * @author Zakaria Maaraki + */ +@Getter +@NoArgsConstructor +@EqualsAndHashCode +@ApiModel(description = "The returned response") +public class RemoteCodeCompilerExecutionResponse +{ + + /** + * Instantiates a new Response. + * + * @param verdict the statusResponse + * @param statusCode the status code + * @param error the error + * @param testCasesResult the test cases result + * @param compilationDuration the compilation duration + * @param timeLimit the time limit + * @param memoryLimit the memory limit + * @param language the language + * @param localDateTime the local date time + */ + public RemoteCodeCompilerExecutionResponse(String verdict, + int statusCode, + String error, + LinkedHashMap testCasesResult, + int compilationDuration, + int timeLimit, + int memoryLimit, + Language language, + LocalDateTime localDateTime) { + this.verdict = verdict; + this.statusCode = statusCode; + this.error = error; + this.testCasesResult = testCasesResult; + this.compilationDuration = compilationDuration; + this.timeLimit = timeLimit * 1000; // convert timeLimit to milliSec + this.memoryLimit = memoryLimit; + this.language = language; + this.dateTime = localDateTime; + this.averageExecutionDuration = computeTheAverageExecutionDuration(testCasesResult); + } + + @ApiModelProperty(notes = "The statusResponse") + private String verdict; + + @ApiModelProperty(notes = "The corresponding status code of the statusResponse") + private int statusCode; + + @ApiModelProperty(notes = "An error if it occurs") + private String error; + + @ApiModelProperty(notes = "The result of each test case") + private LinkedHashMap testCasesResult; // Should be returned in order + + @ApiModelProperty(notes = "The compilation duration") + private int compilationDuration; + + @ApiModelProperty(notes = "The average execution duration") + private float averageExecutionDuration; + + @ApiModelProperty(notes = "The execution time limit") + private int timeLimit; + + @ApiModelProperty(notes = "The execution memory limit") + private int memoryLimit; + + @ApiModelProperty(notes = "The programming language") + private Language language; + + @EqualsAndHashCode.Exclude + @ApiModelProperty(notes = "The dateTime of the execution") + private LocalDateTime dateTime; + + private float computeTheAverageExecutionDuration(Map testCasesResult) { + float sum = 0; + for (TestCaseResult testCaseResult : testCasesResult.values()) { + if (testCaseResult.getExecutionDuration() == 0) { + continue; + } + sum += testCaseResult.getExecutionDuration(); + } + return sum / testCasesResult.size(); + } +} diff --git a/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerResponse.java b/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerResponse.java index 044c8870..2dc1ab7b 100644 --- a/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerResponse.java +++ b/src/main/java/com/cp/compiler/contract/RemoteCodeCompilerResponse.java @@ -1,104 +1,17 @@ package com.cp.compiler.contract; -import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.testcases.TestCaseResult; -import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; -import java.util.LinkedHashMap; -import java.util.Map; - -// Note: Before changing this class make sure it will not introduce a breaking change for users!! - -/** - * The type Response. - * This represents the response returned to the user. - * - * @author Zakaria Maaraki - */ @Getter @NoArgsConstructor @EqualsAndHashCode -@ApiModel(description = "The returned response") -public class RemoteCodeCompilerResponse { - - /** - * Instantiates a new Response. - * - * @param verdict the statusResponse - * @param statusCode the status code - * @param error the error - * @param testCasesResult the test cases result - * @param compilationDuration the compilation duration - * @param timeLimit the time limit - * @param memoryLimit the memory limit - * @param language the language - * @param localDateTime the local date time - */ - public RemoteCodeCompilerResponse(String verdict, - int statusCode, - String error, - LinkedHashMap testCasesResult, - int compilationDuration, - int timeLimit, - int memoryLimit, - Language language, - LocalDateTime localDateTime) { - this.verdict = verdict; - this.statusCode = statusCode; - this.error = error; - this.testCasesResult = testCasesResult; - this.compilationDuration = compilationDuration; - this.timeLimit = timeLimit * 1000; // convert timeLimit to milliSec - this.memoryLimit = memoryLimit; - this.language = language; - this.dateTime = localDateTime; - this.averageExecutionDuration = computeTheAverageExecutionDuration(testCasesResult); - } - - @ApiModelProperty(notes = "The statusResponse") - private String verdict; - - @ApiModelProperty(notes = "The corresponding status code of the statusResponse") - private int statusCode; - - @ApiModelProperty(notes = "An error if it occurs") - private String error; - - @ApiModelProperty(notes = "The result of each test case") - private LinkedHashMap testCasesResult; // Should be returned in order - - @ApiModelProperty(notes = "The compilation duration") - private int compilationDuration; - - @ApiModelProperty(notes = "The average execution duration") - private float averageExecutionDuration; - - @ApiModelProperty(notes = "The execution time limit") - private int timeLimit; - - @ApiModelProperty(notes = "The execution memory limit") - private int memoryLimit; - - @ApiModelProperty(notes = "The programming language") - private Language language; - - @EqualsAndHashCode.Exclude - @ApiModelProperty(notes = "The dateTime of the execution") - private LocalDateTime dateTime; +@AllArgsConstructor +public class RemoteCodeCompilerResponse extends BaseRemoteCodeCompilerResponse { - private float computeTheAverageExecutionDuration(Map testCasesResult) { - float sum = 0; - for (TestCaseResult testCaseResult : testCasesResult.values()) { - if (testCaseResult.getExecutionDuration() == 0) { - continue; - } - sum += testCaseResult.getExecutionDuration(); - } - return sum / testCasesResult.size(); - } + @ApiModelProperty(notes = "The execution response") + private RemoteCodeCompilerExecutionResponse execution; } diff --git a/src/main/java/com/cp/compiler/controllers/CompilerController.java b/src/main/java/com/cp/compiler/controllers/CompilerController.java index 79c111fd..086fb07e 100644 --- a/src/main/java/com/cp/compiler/controllers/CompilerController.java +++ b/src/main/java/com/cp/compiler/controllers/CompilerController.java @@ -2,6 +2,7 @@ import com.cp.compiler.contract.Language; import com.cp.compiler.contract.RemoteCodeCompilerRequest; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerServerInternalException; import com.cp.compiler.executions.Execution; @@ -58,12 +59,12 @@ public CompilerController(CompilerFacade compiler) { @ApiOperation( value = "Json", notes = "You should provide outputFile, inputFile (not required), source code, time limit and memory limit", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) - public ResponseEntity compile(@ApiParam(value = "request") @RequestBody RemoteCodeCompilerRequest request, - @RequestHeader(value = WellKnownParams.USER_ID, required = false) String userId, - @RequestHeader(value = WellKnownParams.PREFER, required = false) String prefer, - @RequestHeader(value = WellKnownParams.URL, required = false) String url) + public ResponseEntity compile(@ApiParam(value = "request") @RequestBody RemoteCodeCompilerRequest request, + @RequestHeader(value = WellKnownParams.USER_ID, required = false) String userId, + @RequestHeader(value = WellKnownParams.PREFER, required = false) String prefer, + @RequestHeader(value = WellKnownParams.URL, required = false) String url) throws IOException { Execution execution = ExecutionFactory.createExecution( @@ -101,9 +102,9 @@ public ResponseEntity compile(@ApiParam(value = "request") @RequestBody value = "Multipart request", notes = "You should provide outputFile, inputFile (not required), source code, time limit and memory limit " + "and the language", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) - public ResponseEntity compile( + public ResponseEntity compile( @ApiParam(value = "The language") @RequestParam(value = WellKnownParams.LANGUAGE) Language language, diff --git a/src/main/java/com/cp/compiler/controllers/ContainersInfoController.java b/src/main/java/com/cp/compiler/controllers/ContainersInfoController.java index a175924e..8e1ddf69 100644 --- a/src/main/java/com/cp/compiler/controllers/ContainersInfoController.java +++ b/src/main/java/com/cp/compiler/controllers/ContainersInfoController.java @@ -1,6 +1,6 @@ package com.cp.compiler.controllers; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.services.platform.containers.ContainerService; import io.swagger.annotations.ApiOperation; import org.springframework.http.ResponseEntity; @@ -37,7 +37,7 @@ public ContainersInfoController(ContainerService containerService) { @ApiOperation( value = "Containers Info", notes = "Display list of running containers", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) public ResponseEntity getRunningContainers() { return ResponseEntity.ok().body(containerService.getRunningContainers()); @@ -52,7 +52,7 @@ public ResponseEntity getRunningContainers() { @ApiOperation( value = "Images Info", notes = "Display list of images", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) public ResponseEntity getImages() { return ResponseEntity.ok().body(containerService.getImages()); @@ -67,7 +67,7 @@ public ResponseEntity getImages() { @ApiOperation( value = "Container Stats Memory and CPU Usage", notes = "Display Stats about running containers (Memory and CPU usage)", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) public ResponseEntity getRunningContainersStats() { return ResponseEntity.ok().body(containerService.getContainersStats()); @@ -82,7 +82,7 @@ public ResponseEntity getRunningContainersStats() { @ApiOperation( value = "Stats of Memory and CPU Usage for all containers", notes = "Display Stats about all containers (Memory and CPU usage)", - response = RemoteCodeCompilerResponse.class + response = RemoteCodeCompilerExecutionResponse.class ) public ResponseEntity getAllContainersStats() { return ResponseEntity.ok().body(containerService.getAllContainersStats()); diff --git a/src/main/java/com/cp/compiler/controllers/ProblemExecutionController.java b/src/main/java/com/cp/compiler/controllers/ProblemExecutionController.java index 2ed9ae6c..c3316813 100644 --- a/src/main/java/com/cp/compiler/controllers/ProblemExecutionController.java +++ b/src/main/java/com/cp/compiler/controllers/ProblemExecutionController.java @@ -1,5 +1,6 @@ package com.cp.compiler.controllers; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.contract.problems.ProblemExecution; import com.cp.compiler.services.ux.ExecutionService; import lombok.extern.slf4j.Slf4j; @@ -24,7 +25,7 @@ public ProblemExecutionController(ExecutionService executionService) { } @PostMapping("/execute") - public ResponseEntity execute(@RequestBody ProblemExecution problemExecution) throws IOException { + public ResponseEntity execute(@RequestBody ProblemExecution problemExecution) throws IOException { log.info("new request, problemId = {}, language = {}, sourceCode = {}", problemExecution.getProblemId(), problemExecution.getLanguage(), diff --git a/src/main/java/com/cp/compiler/mappers/JsonMapper.java b/src/main/java/com/cp/compiler/mappers/JsonMapper.java index 6b2f82fb..699f7fd2 100644 --- a/src/main/java/com/cp/compiler/mappers/JsonMapper.java +++ b/src/main/java/com/cp/compiler/mappers/JsonMapper.java @@ -1,10 +1,10 @@ package com.cp.compiler.mappers; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerThrottlingException; import com.cp.compiler.executions.Execution; import com.cp.compiler.executions.ExecutionFactory; import com.cp.compiler.contract.RemoteCodeCompilerRequest; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.services.businesslogic.CompilerService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -70,15 +70,14 @@ public static String transform(String jsonRequest, CompilerService compilerServi try(MDC.MDCCloseable mdc = MDC.putCloseable("compiler.language", execution.getLanguage().toString())) { - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Throw an exception if the request has been throttled, to keep the request for retries if (responseEntity.getStatusCode().equals(HttpStatus.TOO_MANY_REQUESTS)) { throw new CompilerThrottlingException("The request has been throttled, maximum number of requests has been reached"); } - - Object body = responseEntity.getBody(); - return body instanceof RemoteCodeCompilerResponse ? JsonMapper.toJson((RemoteCodeCompilerResponse) body) : null; + // TODO: add error handling + return JsonMapper.toJson(responseEntity.getBody()); } } } diff --git a/src/main/java/com/cp/compiler/services/api/CompilerFacade.java b/src/main/java/com/cp/compiler/services/api/CompilerFacade.java index ca2985ca..6b81b7f0 100644 --- a/src/main/java/com/cp/compiler/services/api/CompilerFacade.java +++ b/src/main/java/com/cp/compiler/services/api/CompilerFacade.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.api; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.executions.Execution; import org.springframework.http.ResponseEntity; @@ -22,5 +23,5 @@ public interface CompilerFacade { * @return the response entity * @throws IOException the io exception */ - ResponseEntity compile(Execution execution, boolean isLongRunning, String url, String userId) throws IOException; + ResponseEntity compile(Execution execution, boolean isLongRunning, String url, String userId) throws IOException; } diff --git a/src/main/java/com/cp/compiler/services/api/CompilerFacadeDefault.java b/src/main/java/com/cp/compiler/services/api/CompilerFacadeDefault.java index 517059ee..0a16d2a8 100644 --- a/src/main/java/com/cp/compiler/services/api/CompilerFacadeDefault.java +++ b/src/main/java/com/cp/compiler/services/api/CompilerFacadeDefault.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.api; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerBadRequestException; import com.cp.compiler.executions.Execution; import com.cp.compiler.services.businesslogic.CompilerService; @@ -70,8 +71,11 @@ public CompilerFacadeDefault(@Qualifier("proxy") CompilerService compilerService } @Override - public ResponseEntity compile(Execution execution, boolean isLongRunning, String url, String userId) - throws IOException { + public ResponseEntity compile( + Execution execution, + boolean isLongRunning, + String url, + String userId) throws IOException { if (userId == null) { userId = "null"; diff --git a/src/main/java/com/cp/compiler/services/api/CompilerProxy.java b/src/main/java/com/cp/compiler/services/api/CompilerProxy.java index 2f8147e9..1c6e92a5 100644 --- a/src/main/java/com/cp/compiler/services/api/CompilerProxy.java +++ b/src/main/java/com/cp/compiler/services/api/CompilerProxy.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.api; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerBadRequestException; import com.cp.compiler.exceptions.CompilerThrottlingException; import com.cp.compiler.executions.Execution; @@ -21,7 +22,6 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; -import java.util.Optional; /** * The Compiler proxy Service. @@ -88,18 +88,15 @@ public void init() { } @Override - public ResponseEntity execute(Execution execution) { - Optional> requestValidationError = validateRequest(execution); - if (requestValidationError.isPresent()) { - // The request is not valid - log.info("Invalid input data: '{}'", requestValidationError.get().getBody()); - return requestValidationError.get(); - } + public ResponseEntity execute(Execution execution) { + + validateRequest(execution); + if (resources.allowNewExecution()) { int counter = resources.reserveResources(); log.info("New request, total: {}, maxRequests: {}", counter, resources.getMaxRequests()); - ResponseEntity response; + ResponseEntity response; try { response = compileAndExecute(execution); @@ -115,36 +112,34 @@ public ResponseEntity execute(Execution execution) { throw new CompilerThrottlingException(errorMessage); } - private ResponseEntity compileAndExecute(Execution execution) { + private ResponseEntity compileAndExecute(Execution execution) { // If the storage contains the id, it means we registered the url before and the client wants a push notification. if (hooksRepository.contains(execution.getId())) { - log.info("Start long running execution, the result will be pushed to : {}", hooksRepository.get(execution.getId())); + log.info("Start long running execution, the result will be pushed to : {}", + hooksRepository.get(execution.getId())); return longRunningCompilerService.execute(execution); } log.info("Start short running execution"); return compilerService.execute(execution); } - private Optional> validateRequest(Execution execution) { + private void validateRequest(Execution execution) { int numberOfTestCases = execution.getTestCases().size(); if (numberOfTestCases == 0 || numberOfTestCases > maxNumberOfTestCases) { - return Optional.of(buildOutputError( - "Number of test cases should be between 1 and " + maxNumberOfTestCases)); + buildOutputError("Number of test cases should be between 1 and " + maxNumberOfTestCases); } if (!checkFileName(execution.getSourceCodeFile().getOriginalFilename())) { - return Optional.of(buildOutputError( - "Bad request, sourcecode file must match the following regex " - + WellKnownFiles.FILE_NAME_REGEX)); + buildOutputError("Bad request, sourcecode file must match the following regex " + + WellKnownFiles.FILE_NAME_REGEX); } // Lets check the extension if (!checkFileExtension(execution.getSourceCodeFile().getOriginalFilename(), execution.getLanguage())) { - return Optional.of(buildOutputError( - "Bad request, sourcecode file extension is not correct, it should be: " - + execution.getLanguage().getSourcecodeExtension())); + buildOutputError("Bad request, sourcecode file extension is not correct, it should be: " + + execution.getLanguage().getSourcecodeExtension()); } if (execution.getTimeLimit() < minExecutionTime || execution.getTimeLimit() > maxExecutionTime) { @@ -152,7 +147,7 @@ private Optional> validateRequest(Execution execution) { + minExecutionTime + " Sec and " + maxExecutionTime + " Sec, provided : " + execution.getTimeLimit(); - return Optional.of(buildOutputError(errorMessage)); + buildOutputError(errorMessage); } if (execution.getMemoryLimit() < minExecutionMemory || execution.getMemoryLimit() > maxExecutionMemory) { @@ -160,17 +155,15 @@ private Optional> validateRequest(Execution execution) { + minExecutionMemory + " MB and " + maxExecutionMemory + " MB, provided : " + execution.getMemoryLimit(); - return Optional.of(buildOutputError(errorMessage)); + buildOutputError(errorMessage); } - - return Optional.ofNullable(null); } private boolean checkFileExtension(String originalFilename, Language language) { return originalFilename.endsWith(language.getSourcecodeExtension()); } - private ResponseEntity buildOutputError(String errorMessage) { + private void buildOutputError(String errorMessage) { log.warn(errorMessage); throw new CompilerBadRequestException(errorMessage); } diff --git a/src/main/java/com/cp/compiler/services/businesslogic/CompilerService.java b/src/main/java/com/cp/compiler/services/businesslogic/CompilerService.java index 5b7ffe58..fa516e9b 100644 --- a/src/main/java/com/cp/compiler/services/businesslogic/CompilerService.java +++ b/src/main/java/com/cp/compiler/services/businesslogic/CompilerService.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.businesslogic; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.executions.Execution; import org.springframework.http.ResponseEntity; @@ -16,5 +17,5 @@ public interface CompilerService { * @param execution the execution * @return a ResponseEntity containing the result of the execution */ - ResponseEntity execute(Execution execution); + ResponseEntity execute(Execution execution); } diff --git a/src/main/java/com/cp/compiler/services/businesslogic/CompilerServiceDefault.java b/src/main/java/com/cp/compiler/services/businesslogic/CompilerServiceDefault.java index 8fa4c47f..6477c807 100644 --- a/src/main/java/com/cp/compiler/services/businesslogic/CompilerServiceDefault.java +++ b/src/main/java/com/cp/compiler/services/businesslogic/CompilerServiceDefault.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.businesslogic; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.*; import com.cp.compiler.executions.Execution; @@ -53,7 +54,7 @@ public CompilerServiceDefault(@Qualifier("compiled") ExecutionStrategy compiledL * {@inheritDoc} */ @Override - public ResponseEntity execute(Execution execution) { + public ResponseEntity execute(Execution execution) { LocalDateTime dateTime = LocalDateTime.now(); @@ -76,7 +77,7 @@ public ResponseEntity execute(Execution execution) { execution.getId(), compilationResponse.getError()); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( compilationResponse.getVerdict().getStatusResponse(), compilationResponse.getVerdict().getStatusCode(), compilationResponse.getError(), @@ -86,14 +87,14 @@ public ResponseEntity execute(Execution execution) { execution.getMemoryLimit(), execution.getLanguage(), dateTime); - return ResponseEntity.ok(response); + return ResponseEntity.ok(new RemoteCodeCompilerResponse(response)); } ExecutionResponse executionResponse = executionStrategy.run(execution, deleteDockerImage); log.info("Execution finished, the verdict is {}", executionResponse.getVerdict().getStatusResponse()); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( executionResponse.getVerdict().getStatusResponse(), executionResponse.getVerdict().getStatusCode(), executionResponse.getError(), @@ -106,7 +107,7 @@ public ResponseEntity execute(Execution execution) { return ResponseEntity .status(HttpStatus.OK) - .body(response); + .body(new RemoteCodeCompilerResponse(response)); } finally { // Clean up asynchronously threadPool.execute(() -> deleteExecutionEnvironment(execution)); diff --git a/src/main/java/com/cp/compiler/services/businesslogic/LongRunningCompilerService.java b/src/main/java/com/cp/compiler/services/businesslogic/LongRunningCompilerService.java index e42caa1e..0e5e0bd0 100644 --- a/src/main/java/com/cp/compiler/services/businesslogic/LongRunningCompilerService.java +++ b/src/main/java/com/cp/compiler/services/businesslogic/LongRunningCompilerService.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.businesslogic; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.executions.Execution; import com.cp.compiler.repositories.HooksRepository; import lombok.extern.slf4j.Slf4j; @@ -42,7 +43,7 @@ public LongRunningCompilerService(@Qualifier("client") CompilerService compilerS } @Override - public ResponseEntity execute(Execution execution) { + public ResponseEntity execute(Execution execution) { String url = hooksRepository.get(execution.getId()); new Thread(() -> { try { @@ -55,16 +56,17 @@ public ResponseEntity execute(Execution execution) { }).start(); return ResponseEntity .status(HttpStatus.ACCEPTED) - .body("Executing the request, you'll get the response in the following url : " + url); + .header("url", url) + .body(new RemoteCodeCompilerResponse()); } // The check of URI syntax is done before the compilation. - private void sendResponse(String url, ResponseEntity responseEntity) throws URISyntaxException { + private void sendResponse(String url, ResponseEntity responseEntity) throws URISyntaxException { restTemplate.postForEntity(new URI(url), responseEntity, Object.class); } private void run(Execution execution, String url) throws URISyntaxException { - ResponseEntity response = getCompilerService().execute(execution); + ResponseEntity response = getCompilerService().execute(execution); log.info("Sending response to {}", url); sendResponse(url, response); } diff --git a/src/main/java/com/cp/compiler/services/ux/ExecutionService.java b/src/main/java/com/cp/compiler/services/ux/ExecutionService.java index 177c0ff4..0ba81caf 100644 --- a/src/main/java/com/cp/compiler/services/ux/ExecutionService.java +++ b/src/main/java/com/cp/compiler/services/ux/ExecutionService.java @@ -1,5 +1,6 @@ package com.cp.compiler.services.ux; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.contract.problems.ProblemExecution; import org.springframework.http.ResponseEntity; @@ -7,5 +8,5 @@ public interface ExecutionService { - ResponseEntity execute(ProblemExecution problemExecution) throws IOException; + ResponseEntity execute(ProblemExecution problemExecution) throws IOException; } diff --git a/src/main/java/com/cp/compiler/services/ux/ExecutionServiceDefault.java b/src/main/java/com/cp/compiler/services/ux/ExecutionServiceDefault.java index 67d14dcf..ce7c3be5 100644 --- a/src/main/java/com/cp/compiler/services/ux/ExecutionServiceDefault.java +++ b/src/main/java/com/cp/compiler/services/ux/ExecutionServiceDefault.java @@ -11,6 +11,7 @@ import com.cp.compiler.models.Verdict; import com.cp.compiler.repositories.problems.ProblemsRepository; import com.cp.compiler.services.api.CompilerFacade; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -29,7 +30,7 @@ public ExecutionServiceDefault(CompilerFacade compiler, ProblemsRepository probl } @Override - public ResponseEntity execute(ProblemExecution problemExecution) throws IOException { + public ResponseEntity execute(ProblemExecution problemExecution) throws IOException { Problem problem = problemsRepository.getProblemById(problemExecution.getProblemId()); @@ -42,16 +43,16 @@ public ResponseEntity execute(ProblemExecution problemExecution) throws IOExcept request.getMemoryLimit(), request.getLanguage()); - ResponseEntity responseEntity = compiler.compile(execution, false, null, null); + ResponseEntity responseEntity = compiler.compile(execution, false, null, null); makeExpectedOutputHiddenIfTheResponseWasNotAccepted(responseEntity); return responseEntity; } - private void makeExpectedOutputHiddenIfTheResponseWasNotAccepted(ResponseEntity responseEntity) { - if (responseEntity.getBody() instanceof RemoteCodeCompilerResponse) { - var response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + private void makeExpectedOutputHiddenIfTheResponseWasNotAccepted(ResponseEntity responseEntity) { + if (responseEntity.getStatusCode() == HttpStatus.OK) { + var response = responseEntity.getBody().getExecution(); if (response.getVerdict().equals(Verdict.ACCEPTED.getStatusResponse())) { return; diff --git a/src/main/resources/templates/problem.html b/src/main/resources/templates/problem.html index a1aa3326..509b0b16 100644 --- a/src/main/resources/templates/problem.html +++ b/src/main/resources/templates/problem.html @@ -956,7 +956,7 @@ return response.json(); }) .then((json) => { - executionResult = json + executionResult = json.execution console.log(json) // Update the status diff --git a/src/test/java/com/cp/compiler/amqp/RabbitmqConsumerTests.java b/src/test/java/com/cp/compiler/amqp/RabbitmqConsumerTests.java index 8c0bb0aa..0ba79f4a 100644 --- a/src/test/java/com/cp/compiler/amqp/RabbitmqConsumerTests.java +++ b/src/test/java/com/cp/compiler/amqp/RabbitmqConsumerTests.java @@ -6,11 +6,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerThrottlingException; import com.cp.compiler.executions.ExecutionFactory; import com.cp.compiler.executions.languages.JavaExecution; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import com.cp.compiler.models.testcases.TransformedTestCase; import com.cp.compiler.contract.testcases.TestCaseResult; @@ -87,7 +88,7 @@ public void listen_validJsonRequest_transformAndSendCalled() { LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -98,7 +99,7 @@ public void listen_validJsonRequest_transformAndSendCalled() { Language.JAVA, LocalDateTime.now()); - when(compilerService.execute(any())).thenReturn(ResponseEntity.ok(response)); + when(compilerService.execute(any())).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse(response))); // Act rabbitConsumer.listen(jsonRequest); @@ -128,7 +129,7 @@ public void listen_throttlingException_retryAfterCalled() { LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -141,7 +142,7 @@ public void listen_throttlingException_retryAfterCalled() { when(compilerService.execute(any())) .thenThrow(new CompilerThrottlingException("throttling")) - .thenReturn(ResponseEntity.ok(response)); + .thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse(response))); // Act rabbitConsumer.listen(jsonRequest); diff --git a/src/test/java/com/cp/compiler/e2e/CE2ETests.java b/src/test/java/com/cp/compiler/e2e/CE2ETests.java index 5f031144..ae98d99e 100644 --- a/src/test/java/com/cp/compiler/e2e/CE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/CE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -50,7 +51,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -64,7 +65,10 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -91,7 +95,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -105,7 +109,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -132,7 +139,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -146,7 +153,10 @@ void shouldReturnCompilationErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -173,7 +183,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -187,7 +197,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -214,7 +227,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -228,7 +241,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -253,7 +269,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, null, @@ -267,7 +283,10 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/CSE2ETests.java b/src/test/java/com/cp/compiler/e2e/CSE2ETests.java index b19b8817..7936e1e7 100644 --- a/src/test/java/com/cp/compiler/e2e/CSE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/CSE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -50,7 +51,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -64,7 +65,10 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -91,7 +95,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -105,7 +109,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -132,7 +139,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -146,7 +153,10 @@ void shouldReturnCompilationErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -173,7 +183,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -187,7 +197,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -214,7 +227,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -228,7 +241,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -253,7 +269,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CS, sourceCode, null, @@ -267,7 +283,10 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/CppE2ETests.java b/src/test/java/com/cp/compiler/e2e/CppE2ETests.java index 16d92943..2b82f3bb 100644 --- a/src/test/java/com/cp/compiler/e2e/CppE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/CppE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -62,7 +63,10 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -87,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -101,7 +105,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @@ -127,7 +134,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -141,7 +148,10 @@ void shouldReturnCompilationErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -166,7 +176,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -180,7 +190,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -205,7 +218,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -219,7 +232,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -244,7 +260,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, null, @@ -258,6 +274,9 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/GoE2ETests.java b/src/test/java/com/cp/compiler/e2e/GoE2ETests.java index 98e3b89d..bde43d22 100644 --- a/src/test/java/com/cp/compiler/e2e/GoE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/GoE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -50,7 +51,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -64,7 +65,10 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -91,7 +95,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -105,7 +109,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -132,7 +139,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -146,7 +153,10 @@ void shouldReturnCompilationErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -173,7 +183,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -187,7 +197,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -214,7 +227,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -228,7 +241,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -253,7 +269,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.GO, sourceCode, null, @@ -267,7 +283,10 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/HaskellE2ETests.java b/src/test/java/com/cp/compiler/e2e/HaskellE2ETests.java index bae1c955..05f07f63 100644 --- a/src/test/java/com/cp/compiler/e2e/HaskellE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/HaskellE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.HASKELL, sourceCode, null, @@ -60,8 +61,12 @@ void shouldReturnAcceptedVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -86,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.HASKELL, sourceCode, null, @@ -98,8 +103,12 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -124,7 +133,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.HASKELL, sourceCode, null, @@ -136,8 +145,12 @@ void shouldReturnCompilationErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.COMPILATION_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -162,7 +175,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.HASKELL, sourceCode, null, @@ -174,8 +187,12 @@ void shouldReturnWrongAnswerVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.WRONG_ANSWER.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -200,7 +217,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.HASKELL, sourceCode, null, @@ -212,7 +229,11 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.OUT_OF_MEMORY.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/JavaE2ETests.java b/src/test/java/com/cp/compiler/e2e/JavaE2ETests.java index f7b8f373..e6a77361 100644 --- a/src/test/java/com/cp/compiler/e2e/JavaE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/JavaE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -51,7 +52,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -63,8 +64,12 @@ void shouldReturnAcceptedVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -89,7 +94,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -101,8 +106,12 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -127,7 +136,7 @@ void shouldAlsoReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -139,8 +148,12 @@ void shouldAlsoReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -165,7 +178,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -177,8 +190,12 @@ void shouldReturnCompilationErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.COMPILATION_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -203,7 +220,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -215,8 +232,12 @@ void shouldReturnWrongAnswerVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.WRONG_ANSWER.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -241,7 +262,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -253,8 +274,12 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.OUT_OF_MEMORY.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -279,7 +304,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -291,8 +316,12 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.RUNTIME_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @@ -318,7 +347,7 @@ void shouldReturnRuntimeErrorVerdictForRiskyFiles() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -330,8 +359,12 @@ void shouldReturnRuntimeErrorVerdictForRiskyFiles() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.RUNTIME_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @@ -357,7 +390,7 @@ void shouldReturnRuntimeErrorVerdictForProcessExecution() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, null, @@ -369,7 +402,11 @@ void shouldReturnRuntimeErrorVerdictForProcessExecution() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.RUNTIME_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/KotlinE2ETests.java b/src/test/java/com/cp/compiler/e2e/KotlinE2ETests.java index ee306fa7..52f126dc 100644 --- a/src/test/java/com/cp/compiler/e2e/KotlinE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/KotlinE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -51,7 +52,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -63,8 +64,12 @@ void shouldReturnAcceptedVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -89,7 +94,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -101,8 +106,12 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -127,7 +136,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -139,8 +148,12 @@ void shouldReturnCompilationErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.COMPILATION_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -165,7 +178,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -177,8 +190,12 @@ void shouldReturnWrongAnswerVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.WRONG_ANSWER.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -203,7 +220,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -215,8 +232,12 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.OUT_OF_MEMORY.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -241,7 +262,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.KOTLIN, sourceCode, null, @@ -253,8 +274,12 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.RUNTIME_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } diff --git a/src/test/java/com/cp/compiler/e2e/PythonE2ETests.java b/src/test/java/com/cp/compiler/e2e/PythonE2ETests.java index 879bef97..271eee1b 100644 --- a/src/test/java/com/cp/compiler/e2e/PythonE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/PythonE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, null, @@ -61,7 +62,11 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( - Verdict.ACCEPTED.getStatusResponse(), ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -86,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, null, @@ -100,7 +105,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -125,7 +133,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, null, @@ -139,7 +147,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -164,7 +175,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, null, @@ -178,7 +189,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -203,7 +217,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, null, @@ -217,7 +231,10 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/RubyE2ETests.java b/src/test/java/com/cp/compiler/e2e/RubyE2ETests.java index 57b93a80..bfbc91a8 100644 --- a/src/test/java/com/cp/compiler/e2e/RubyE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/RubyE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUBY, sourceCode, null, @@ -61,7 +62,11 @@ void shouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( - Verdict.ACCEPTED.getStatusResponse(), ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -86,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUBY, sourceCode, null, @@ -100,7 +105,10 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -125,7 +133,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUBY, sourceCode, null, @@ -139,7 +147,10 @@ void shouldReturnWrongAnswerVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -164,7 +175,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUBY, sourceCode, null, @@ -178,7 +189,10 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -203,7 +217,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUBY, sourceCode, null, @@ -217,7 +231,10 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/RustE2ETests.java b/src/test/java/com/cp/compiler/e2e/RustE2ETests.java index 605ad257..31003b2e 100644 --- a/src/test/java/com/cp/compiler/e2e/RustE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/RustE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUST, sourceCode, null, @@ -60,8 +61,12 @@ void shouldReturnAcceptedVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -86,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUST, sourceCode, null, @@ -98,8 +103,12 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -124,7 +133,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUST, sourceCode, null, @@ -136,8 +145,12 @@ void shouldReturnCompilationErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.COMPILATION_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -162,7 +175,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUST, sourceCode, null, @@ -174,8 +187,12 @@ void shouldReturnWrongAnswerVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.WRONG_ANSWER.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -200,7 +217,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.RUST, sourceCode, null, @@ -212,7 +229,11 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.OUT_OF_MEMORY.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/ScalaE2ETests.java b/src/test/java/com/cp/compiler/e2e/ScalaE2ETests.java index d405ff3e..aa521858 100644 --- a/src/test/java/com/cp/compiler/e2e/ScalaE2ETests.java +++ b/src/test/java/com/cp/compiler/e2e/ScalaE2ETests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -48,7 +49,7 @@ void shouldReturnAcceptedVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -60,8 +61,12 @@ void shouldReturnAcceptedVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.ACCEPTED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -86,7 +91,7 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -98,8 +103,12 @@ void shouldReturnTimeLimitExceededVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -124,7 +133,7 @@ void shouldReturnCompilationErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -136,8 +145,12 @@ void shouldReturnCompilationErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.COMPILATION_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -162,7 +175,7 @@ void shouldReturnWrongAnswerVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -174,8 +187,12 @@ void shouldReturnWrongAnswerVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.WRONG_ANSWER.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -200,7 +217,7 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -212,8 +229,12 @@ void shouldReturnOutOfMemoryVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.OUT_OF_MEMORY.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } /** @@ -238,7 +259,7 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { new FileInputStream(expectedOutputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.SCALA, sourceCode, null, @@ -250,7 +271,11 @@ void shouldReturnRuntimeErrorVerdict() throws Exception { ""); // Then - Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + Assertions.assertEquals( + Verdict.RUNTIME_ERROR.getStatusResponse(), + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/problems/AmShZWinsABetTests.java b/src/test/java/com/cp/compiler/e2e/problems/AmShZWinsABetTests.java index 11cd7328..f08be8d0 100644 --- a/src/test/java/com/cp/compiler/e2e/problems/AmShZWinsABetTests.java +++ b/src/test/java/com/cp/compiler/e2e/problems/AmShZWinsABetTests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e.problems; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -49,7 +50,7 @@ void amShZWinsABetTest1ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, inputs, @@ -63,7 +64,10 @@ void amShZWinsABetTest1ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @DisplayName("AmShZ Wins a Bet Problem test case 2") @@ -89,7 +93,7 @@ void amShZWinsABetTest2ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, inputs, @@ -103,7 +107,10 @@ void amShZWinsABetTest2ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @DisplayName("AmShZ Wins a Bet Problem test case 3") @@ -128,7 +135,7 @@ void amShZWinsABetTestsTest3ShouldReturnAcceptedVerdict() throws Exception { null, new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.C, sourceCode, inputs, @@ -142,6 +149,9 @@ void amShZWinsABetTestsTest3ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/problems/MakeEvenTests.java b/src/test/java/com/cp/compiler/e2e/problems/MakeEvenTests.java index 4ef98fb8..3d751dec 100644 --- a/src/test/java/com/cp/compiler/e2e/problems/MakeEvenTests.java +++ b/src/test/java/com/cp/compiler/e2e/problems/MakeEvenTests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e.problems; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -49,7 +50,7 @@ void makeEvenTest1ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.PYTHON, sourceCode, inputs, @@ -63,6 +64,9 @@ void makeEvenTest1ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/problems/PhysEdOnlineTests.java b/src/test/java/com/cp/compiler/e2e/problems/PhysEdOnlineTests.java index d0bec6dc..43b45e69 100644 --- a/src/test/java/com/cp/compiler/e2e/problems/PhysEdOnlineTests.java +++ b/src/test/java/com/cp/compiler/e2e/problems/PhysEdOnlineTests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e.problems; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -50,7 +51,7 @@ void physEdOnlineTest1ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, inputs, @@ -64,7 +65,10 @@ void physEdOnlineTest1ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @DisplayName("Phys Ed Online Problem test case 2") @@ -90,7 +94,7 @@ void physEdOnlineTest2ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.CPP, sourceCode, inputs, @@ -104,6 +108,9 @@ void physEdOnlineTest2ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/e2e/problems/WatermelonTests.java b/src/test/java/com/cp/compiler/e2e/problems/WatermelonTests.java index f84a3efb..3a86fd51 100644 --- a/src/test/java/com/cp/compiler/e2e/problems/WatermelonTests.java +++ b/src/test/java/com/cp/compiler/e2e/problems/WatermelonTests.java @@ -1,8 +1,9 @@ package com.cp.compiler.e2e.problems; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.controllers.CompilerController; import com.cp.compiler.contract.Language; -import com.cp.compiler.contract.RemoteCodeCompilerResponse; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.models.Verdict; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Assertions; @@ -50,7 +51,7 @@ void watermelonTest1ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, inputs, @@ -64,7 +65,10 @@ void watermelonTest1ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @DisplayName("Watermelon Problem test case 2") @@ -90,7 +94,7 @@ void watermelonTest2ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, inputs, @@ -104,7 +108,10 @@ void watermelonTest2ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } @DisplayName("Watermelon Problem test case 3") @@ -130,7 +137,7 @@ void watermelonTest3ShouldReturnAcceptedVerdict() throws Exception { new FileInputStream(inputFile)); // When - ResponseEntity responseEntity = compilerController.compile( + ResponseEntity responseEntity = compilerController.compile( Language.JAVA, sourceCode, inputs, @@ -144,6 +151,9 @@ void watermelonTest3ShouldReturnAcceptedVerdict() throws Exception { // Then Assertions.assertEquals( Verdict.ACCEPTED.getStatusResponse(), - ((RemoteCodeCompilerResponse)responseEntity.getBody()).getVerdict()); + responseEntity + .getBody() + .getExecution() + .getVerdict()); } } diff --git a/src/test/java/com/cp/compiler/kafka/TopologyTests.java b/src/test/java/com/cp/compiler/kafka/TopologyTests.java index 3ca42753..61e8075a 100644 --- a/src/test/java/com/cp/compiler/kafka/TopologyTests.java +++ b/src/test/java/com/cp/compiler/kafka/TopologyTests.java @@ -1,6 +1,7 @@ package com.cp.compiler.kafka; import com.cp.compiler.contract.Language; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.contract.testcases.TestCaseResult; import com.cp.compiler.models.Verdict; @@ -83,7 +84,7 @@ void shouldConsumeMessageFromInputTopicAndProduceMessageToOutputTopic() { "test expected output", 0); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( Verdict.ACCEPTED.getStatusResponse(), Verdict.ACCEPTED.getStatusCode(), "", @@ -99,7 +100,7 @@ void shouldConsumeMessageFromInputTopicAndProduceMessageToOutputTopic() { Mockito.when(compilerService.execute(Mockito.any())) .thenReturn(ResponseEntity .status(HttpStatus.OK) - .body(response)); + .body(new RemoteCodeCompilerResponse(response))); // When inputTopic.pipeInput(jsonRequest); diff --git a/src/test/java/com/cp/compiler/mappers/JsonMapperTests.java b/src/test/java/com/cp/compiler/mappers/JsonMapperTests.java index 16de75dd..3101bdfb 100644 --- a/src/test/java/com/cp/compiler/mappers/JsonMapperTests.java +++ b/src/test/java/com/cp/compiler/mappers/JsonMapperTests.java @@ -2,6 +2,7 @@ import com.cp.compiler.contract.Language; import com.cp.compiler.contract.RemoteCodeCompilerRequest; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerThrottlingException; import com.cp.compiler.models.*; @@ -76,7 +77,7 @@ void shouldTransformResponseObjectToJsonResponse() throws JsonProcessingExceptio LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getVerdict().getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -88,7 +89,7 @@ void shouldTransformResponseObjectToJsonResponse() throws JsonProcessingExceptio LocalDateTime.now()); // When - String responseOutput = JsonMapper.toJson(response); + String responseOutput = JsonMapper.toJson(new RemoteCodeCompilerResponse(response)); // Then Assertions.assertNotNull(responseOutput); @@ -102,7 +103,7 @@ void givenJsonRequestShouldCompileTheRequestAndReturnJsonResponse() throws Excep LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getVerdict().getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -113,7 +114,8 @@ void givenJsonRequestShouldCompileTheRequestAndReturnJsonResponse() throws Excep Language.JAVA, LocalDateTime.now()); - Mockito.when(compilerService.execute(ArgumentMatchers.any())).thenReturn(ResponseEntity.ok(response)); + Mockito.when(compilerService.execute(ArgumentMatchers.any())) + .thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse(response))); // When String jsonResponse = JsonMapper.transform(jsonRequest, compilerService); @@ -130,7 +132,7 @@ void givenJsonRequestShouldCompileTheRequestAndReturnACorrectJsonResponse() thro LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getVerdict().getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -142,13 +144,13 @@ void givenJsonRequestShouldCompileTheRequestAndReturnACorrectJsonResponse() thro LocalDateTime.now()); Mockito.when(compilerService.execute(ArgumentMatchers.any())) - .thenReturn(ResponseEntity.ok(response)); + .thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse(response))); // When String jsonResponse = JsonMapper.transform(jsonRequest, compilerService); // Then - Assertions.assertEquals(response, toResponse(jsonResponse)); + Assertions.assertEquals(response, toResponse(jsonResponse).getExecution()); } @Test @@ -161,22 +163,7 @@ void ifTheRequestIsThrottledShouldThrowAThrottlingException() { Assertions.assertThrows(CompilerThrottlingException.class, () -> JsonMapper.transform(jsonRequest, compilerService)); } - @Test - void shouldReturnNullValueIfTheReturnedObjectIsNotAnInstanceOfResponseClass() throws Exception { - - // Given - Mockito.when(compilerService.execute(ArgumentMatchers.any())) - .thenReturn(ResponseEntity.ok("test")); - - // When - var jsonResponse = JsonMapper.transform(jsonRequest, compilerService); - - // Then - Assertions.assertEquals(null, jsonResponse); - } - private RemoteCodeCompilerResponse toResponse(String jsonResponse) throws JsonProcessingException { return objectMapper.readValue(jsonResponse, RemoteCodeCompilerResponse.class); } - } diff --git a/src/test/java/com/cp/compiler/services/CompilerFacadeTests.java b/src/test/java/com/cp/compiler/services/CompilerFacadeTests.java index 85e65819..54fa27c3 100644 --- a/src/test/java/com/cp/compiler/services/CompilerFacadeTests.java +++ b/src/test/java/com/cp/compiler/services/CompilerFacadeTests.java @@ -1,5 +1,7 @@ package com.cp.compiler.services; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; +import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.CompilerBadRequestException; import com.cp.compiler.executions.Execution; import com.cp.compiler.executions.ExecutionFactory; @@ -51,10 +53,10 @@ void whenItsShortRunningOperationShouldReturnOKStatusCode() throws IOException { Execution execution = ExecutionFactory.createExecution( file, List.of(testCase), 10, 500, Language.JAVA); - Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok("ok test")); + Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse())); // When - ResponseEntity responseEntity = + ResponseEntity responseEntity = compilerFacade.compile(execution, false, null, ""); // Then @@ -70,10 +72,10 @@ void shouldAddUrlToTheRepository() throws IOException { String url = "http://localhost"; - Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok("ok test")); + Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse())); // When - ResponseEntity responseEntity = compilerFacade.compile(execution, true, url, ""); + compilerFacade.compile(execution, true, url, ""); // Then Assertions.assertEquals(url, hooksRepository.get(execution.getId())); @@ -88,10 +90,10 @@ void shouldNotAddUrlToTheRepository() throws IOException { String url = "http://localhost"; - Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok("ok test")); + Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse())); // When - ResponseEntity responseEntity = compilerFacade.compile(execution, false, url, ""); + compilerFacade.compile(execution, false, url, ""); // Then Assertions.assertNull(hooksRepository.get(execution.getId())); @@ -106,7 +108,7 @@ void ifUrlIsNotValidShouldThrowCompilerBadRequestException() { String url = "bad-url"; - Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok("ok test")); + Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse())); // When / Then Assertions.assertThrows(CompilerBadRequestException.class, () -> { @@ -121,7 +123,7 @@ void ifUrlIsNullShouldThrowCompilerBadRequest() { Execution execution = ExecutionFactory.createExecution( file, List.of(testCase), 10, 500, Language.JAVA); - Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok("ok test")); + Mockito.when(compilerService.execute(execution)).thenReturn(ResponseEntity.ok(new RemoteCodeCompilerResponse())); // When / Then Assertions.assertThrows(CompilerBadRequestException.class, () -> { diff --git a/src/test/java/com/cp/compiler/services/CompilerProxyServiceTests.java b/src/test/java/com/cp/compiler/services/CompilerProxyServiceTests.java index e1fe5912..46c92265 100644 --- a/src/test/java/com/cp/compiler/services/CompilerProxyServiceTests.java +++ b/src/test/java/com/cp/compiler/services/CompilerProxyServiceTests.java @@ -123,7 +123,7 @@ void shouldCallLongRunningOperation() { hooksRepository.addUrl(execution.getId(), "http://localhost"); // When - ResponseEntity responseEntity = compilerProxy.execute(execution); + compilerProxy.execute(execution); // Then Mockito.verify(longRunningCompilerService, Mockito.times(1)).execute(execution); diff --git a/src/test/java/com/cp/compiler/services/CompilerServiceDecoratorTests.java b/src/test/java/com/cp/compiler/services/CompilerServiceDecoratorTests.java index c4e58baf..5b0c5868 100644 --- a/src/test/java/com/cp/compiler/services/CompilerServiceDecoratorTests.java +++ b/src/test/java/com/cp/compiler/services/CompilerServiceDecoratorTests.java @@ -1,6 +1,7 @@ package com.cp.compiler.services; import com.cp.compiler.contract.Language; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.ContainerOperationTimeoutException; import com.cp.compiler.executions.Execution; @@ -42,7 +43,7 @@ void registrationTest() { // When var compilerServiceDecorator = new CompilerServiceDecorator(compilerService) { @Override - public ResponseEntity execute(Execution execution) { + public ResponseEntity execute(Execution execution) { return compilerService.execute(execution); } }; @@ -52,7 +53,7 @@ public ResponseEntity execute(Execution execution) { } @Test - void shouldHaveTheSameBehaviorAsTheCompilerClient() throws Exception { + void shouldHaveTheSameBehaviorAsTheCompilerClient() { // Given MultipartFile file = new MockMultipartFile( "test.java", @@ -62,7 +63,7 @@ void shouldHaveTheSameBehaviorAsTheCompilerClient() throws Exception { var compilerServiceDecorator = new CompilerServiceDecorator(compilerService) { @Override - public ResponseEntity execute(Execution execution) { + public ResponseEntity execute(Execution execution) { return compilerService.execute(execution); } }; @@ -106,8 +107,15 @@ public ResponseEntity execute(Execution execution) { // Then Assertions.assertNotNull(compilationResult); Assertions.assertEquals( - ((RemoteCodeCompilerResponse)compilerService.execute(execution2).getBody()).getTestCasesResult(), - ((RemoteCodeCompilerResponse)compilationResult.getBody()).getTestCasesResult() + compilerService + .execute(execution2) + .getBody() + .getExecution() + .getTestCasesResult(), + compilationResult + .getBody() + .getExecution() + .getTestCasesResult() ); } @@ -122,7 +130,7 @@ void compilerDecoratorShouldThrowContainerOperationTimeoutException() { var compilerServiceDecorator = new CompilerServiceDecorator(compilerService) { @Override - public ResponseEntity execute(Execution execution) { + public ResponseEntity execute(Execution execution) { return compilerService.execute(execution); } }; diff --git a/src/test/java/com/cp/compiler/services/CompilerServiceTests.java b/src/test/java/com/cp/compiler/services/CompilerServiceTests.java index 31cb7a4b..c65a5161 100644 --- a/src/test/java/com/cp/compiler/services/CompilerServiceTests.java +++ b/src/test/java/com/cp/compiler/services/CompilerServiceTests.java @@ -1,6 +1,7 @@ package com.cp.compiler.services; import com.cp.compiler.contract.Language; +import com.cp.compiler.contract.RemoteCodeCompilerExecutionResponse; import com.cp.compiler.contract.RemoteCodeCompilerResponse; import com.cp.compiler.exceptions.*; import com.cp.compiler.executions.Execution; @@ -227,13 +228,13 @@ void WhenImageBuildSucceedShouldReturnAResult() throws Exception { ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then LinkedHashMap testCasesResult = new LinkedHashMap<>(); testCasesResult.put("id", result); - var response = new RemoteCodeCompilerResponse( + var response = new RemoteCodeCompilerExecutionResponse( result.getVerdict().getStatusResponse(), result.getVerdict().getStatusCode(), "", @@ -301,10 +302,14 @@ void WhenItsACorrectAnswerCompileMethodShouldReturnAcceptedVerdict() { ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.ACCEPTED.getStatusResponse(), response.getVerdict()); } @@ -359,10 +364,14 @@ void WhenItsAWrongAnswerCompileMethodShouldReturnWrongAnswerVerdict() { ExecutionFactory.createExecution(sourceCode, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.WRONG_ANSWER.getStatusResponse(), response.getVerdict()); } @@ -425,10 +434,14 @@ void WhenTheExecutionTimeExceedTheLimitCompileMethodShouldReturnTimeLimitExceede ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.TIME_LIMIT_EXCEEDED.getStatusResponse(), response.getVerdict()); } @@ -491,10 +504,14 @@ void WhenThereIsARuntimeErrorCompileMethodShouldReturnRunTimeErrorVerdict() thro ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.RUNTIME_ERROR.getStatusResponse(), response.getVerdict()); } @@ -512,8 +529,6 @@ void WhenMemoryLimitExceededCompileMethodShouldReturnOutOfMemoryErrorVerdict() { String output = "test"; String expectedOutput = "not a test"; - TestCaseResult result = new TestCaseResult(Verdict.ACCEPTED, output, "", expectedOutput, 0); - MockMultipartFile file = new MockMultipartFile( "file", "hello.java", @@ -557,10 +572,14 @@ void WhenMemoryLimitExceededCompileMethodShouldReturnOutOfMemoryErrorVerdict() { ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.OUT_OF_MEMORY.getStatusResponse(), response.getVerdict()); } @@ -614,10 +633,14 @@ void WhenItIsACompilationErrorCompileMethodShouldReturnCompilationErrorVerdict() ExecutionFactory.createExecution(file, List.of(testCase), 10, 100, Language.JAVA); // When - ResponseEntity responseEntity = compilerService.execute(execution); + ResponseEntity responseEntity = compilerService.execute(execution); // Then - RemoteCodeCompilerResponse response = (RemoteCodeCompilerResponse) responseEntity.getBody(); + RemoteCodeCompilerExecutionResponse response = + responseEntity + .getBody() + .getExecution(); + Assertions.assertEquals(Verdict.COMPILATION_ERROR.getStatusResponse(), response.getVerdict()); } @@ -805,15 +828,23 @@ void defaultCompilerShouldCleanStderrOutput() { .thenReturn(ProcessOutput.builder().status(StatusUtils.ACCEPTED_OR_WRONG_ANSWER_STATUS).build()); // When - ResponseEntity response = compilerService.execute(execution); + ResponseEntity response = compilerService.execute(execution); // Then Assertions.assertEquals( "/mockFile", - ((RemoteCodeCompilerResponse)response.getBody()).getTestCasesResult().get("id").getError()); + response + .getBody() + .getExecution() + .getTestCasesResult() + .get("id") + .getError()); Assertions.assertEquals( "/mockFile", - ((RemoteCodeCompilerResponse)response.getBody()).getError()); + response + .getBody() + .getExecution() + .getError()); } }