Esempio n. 1
0
        private async Task <TestRunResult> RunAsync(ExecutionData executionData, string environmentPath,
                                                    string binariesFolder, ExecutableCode testingCode)
        {
            var testRunEnvironment = Path.Combine(environmentPath, Guid.NewGuid().ToString());

            binariesFolder.CopyFolderTo(testRunEnvironment);

            string inputFilePath = Path.Combine(testRunEnvironment, _configuration.InputFileName);

            File.WriteAllText(inputFilePath, executionData.InputData);

            var executionCommand = testingCode.GetExecutionCommand(testRunEnvironment);

            executionCommand.StdinFilename = _configuration.InputFileName;

            var containerExecutionResult =
                await _executor.ExecuteAsync(executionCommand);

            var outputFile = Path.Combine(testRunEnvironment, _configuration.OutputFileName);

            return(new TestRunResult
            {
                ExecutionResult = containerExecutionResult.Result,
                ExpectedOutput = executionData.OutputData,
                UserOutput = await GetUserOutput(outputFile, containerExecutionResult)
            });
        }
Esempio n. 2
0
        public async Task <CompilationResult> CompileCodeAsync(CompilableCode code)
        {
            var codeFilename = _configuration.CodeName + code.Language.GetExtension();

            var pathToCode = Path.Combine(code.WorkingDirectory, codeFilename);

            var compilationCommand = code.GetCompilationCommand(code.WorkingDirectory);

            var execute = await _executor.ExecuteAsync(compilationCommand);

            if (execute.WasSuccessful)
            {
                return(new CompilationResult
                {
                    OutputPath = pathToCode,
                    ExecutablePath = code.GetExecutable()
                });
            }

            return(new CompilationResult
            {
                Errors = execute.ErrorOutput.Split(Environment.NewLine)
                         .Union(execute.StandardOutput.Split(Environment.NewLine))
                         .ToArray()
            });
        }
Esempio n. 3
0
        public async Task <CodeAnalysisResult> Analyse(TestingCode code)
        {
            var tempFolder = Path.Combine(Configuration.TempFolderPath, Guid.NewGuid().ToString());

            await CreateDirectoryForAnalysis(code, tempFolder);

            ExecutableCode executableCode = _codeFactory.GetExecutableCode(code);

            Command executionCommand = GetCompilationCommand(executableCode, tempFolder);

            Command analysisCommand = ModifyCommandForAnalysis(executionCommand);

            ContainerExecutionResult containerExecutionResult = await _executor.ExecuteAsync(analysisCommand);

            CodeAnalysisResult codeAnalysis = new CodeAnalysisResult();

            if (containerExecutionResult.Result == ExecutionResult.Success)
            {
                codeAnalysis = AnalyseOutput(containerExecutionResult);
            }

            Directory.Delete(tempFolder, true);

            return(codeAnalysis);
        }