private async Task <ExecutionResult> SolveCaseBaseAsync(CourseProblemCase @case) { var caseId = @case.Id; var subcase = Item.Results.First(i => i.Case == caseId); // skip global timeouts if (TimeBank.IsBusted()) { subcase.SetStatus(ProcessStatus.Skipped); subcase.TimeLimit = 0; subcase.Messages = new[] { "No time left" }; return(new ExecutionResult { Code = ExecutionStatus.GlobalTimeout, Status = ExecutionStatus.GlobalTimeout.ToString(), Duration = 0, ReturnCode = -1, }); } // copy test assets CopyInDocker($"assets/{caseId}/*"); subcase.Status = ProcessStatus.Running.Value; subcase.TimeLimit = @case.Timeout.ScaleTo(Context.Language); var language = Context.Language; var isUnitTest = Context.CourseProblem.Type == ProblemType.Unittest; var pipeline = isUnitTest && language.Unittest.Any() ? language.Unittest : language.Run; SetPermissions(); var executionResult = ExecuteCommand(new ExecutionCommand { Command = $"{string.Join(" ", pipeline)}".ReplaceCommon(Context.MainFileName), Workdir = Context.DockerTmpWorkdir, Timeout = @case.Timeout.ScaleTo(language), Deadline = TimeBank.TimeLeft, IPath = isUnitTest ? null : $"input/{@case.Id}", OPath = $"output/{@case.Id}", EPath = $"error/{@case.Id}" }); CopyOutputFromDocker(@case); CopyErrorFromDocker(@case); CopyFromDocker(".report.json"); CopyFromDocker(".report.simple.json"); foreach (var f in Context.CourseProblem.Export) { CopyFromDocker(f); } // determine messages and statuses _evaluationService.EvaluateTypeSolve(executionResult, this, @case); return(executionResult); }
private async Task GenerateInputAction(CourseProblemCase @case) { var subcase = Item.Results.First(i => i.Case == @case.Id); if ([email protected]()) { subcase.Status = ProcessStatus.Skipped.Value; subcase.Message = "Skipping static input file"; subcase.TimeLimit = 0; return; } // skip global timeouts if (TimeBank.IsBusted()) { subcase.SetStatus(ProcessStatus.Skipped); subcase.Messages = new[] { "No time left" }; subcase.TimeLimit = 0; return; } subcase.Status = ProcessStatus.Running.Value; subcase.TimeLimit = @case.Timeout.ScaleTo(Context.Language); var baseCommand = $"{string.Join(" ", Context.Language.Run)}".ReplaceCommon(Context.MainFileName); var fullCommand = $"{baseCommand} {@case.GetArguments()}"; var generateResult = ExecuteCommand(new ExecutionCommand { Command = fullCommand, Workdir = Context.DockerTmpWorkdir, Timeout = @case.Timeout.ScaleTo(Context.Language), Deadline = TimeBank.TimeLeft, OPath = $"output/{@case.Id}", EPath = $"error/{@case.Id}", }); CopyOutputFromDocker(@case); CopyErrorFromDocker(@case); CopyToResultDir(Context.TmpDir.OutputDir, Context.ProblemDir.InputDir, false); _evaluationService.EvaluateTypeGenerate(generateResult, this, @case); }