Exemplo n.º 1
0
        public async Task <string> Run(string imageName, Dictionary <string, string> environmentVariables = null, string command = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            StringBuilder result = new StringBuilder();
            StringBuilder error  = new StringBuilder();

            StringBuilder s = new StringBuilder();

            foreach (var key in environmentVariables.Keys)
            {
                s.Append($" -e {key}={environmentVariables[key]} ");
            }

            ExecutionInput input = new ExecutionInput($"run --rm {s.ToString()} {imageName} {command}");



            //input.StandardInput = s.ToString();


            var handler = new BufferHandler(stdOutLine => result.Append(stdOutLine), stdErrLine => error.Append(stdErrLine));

            //if (environmentVariables != null)
            //{
            //    input.EnvironmentVariables = environmentVariables;
            //}
            ExecutionOutput output = await _cliDocker.ExecuteAsync(input, cancellationToken, handler);

            if (output.ExitCode != 0)
            {
                throw new CliException("Could not run image", result.ToString(), error.ToString());
            }
            return(result.ToString());
        }
Exemplo n.º 2
0
        public TestVerdict CheckTime(ExecutionOutput executionOutput, ExecutingOptions executingOptions)
        {
            TypeVerdicts verdict = TypeVerdicts.OK;

            if (executionOutput.Time.TotalMilliseconds < executingOptions.TimeLimit.TotalMilliseconds)
            {
                verdict = TypeVerdicts.TimeLimit;
            }

            return(new TestVerdict(executionOutput.Memory, executionOutput.Time, executionOutput.ExitCode, verdict));
        }
Exemplo n.º 3
0
        public TestVerdict CheckMemory(ExecutionOutput executionOutput, ExecutingOptions executingOptions)
        {
            TypeVerdicts verdict = TypeVerdicts.OK;

            if (executionOutput.Memory.TotalKilobytes > executingOptions.MemoryLimit.TotalKilobytes)
            {
                verdict = TypeVerdicts.MemoryLimit;
            }

            return(new TestVerdict(executionOutput.Memory, executionOutput.Time, executionOutput.ExitCode, verdict));
        }
Exemplo n.º 4
0
        public void ApplyOverrides(string[] args)
        {
            this.MinOthersPercent = DefaultMinOthersPercent;

            string formatArgument          = GetArgument(args, nameof(Format)).FirstOrDefault();
            string referenceFormatArgument = GetArgument(args, nameof(ReferenceFormat)).FirstOrDefault();
            string metaArgument            = GetArgument(args, nameof(Meta)).FirstOrDefault();
            string metaWeekArgument        = GetArgument(args, nameof(MetaWeek)).FirstOrDefault();

            string[] filterArgument    = GetArgument(args, nameof(Filter));
            string[] excludeArgument   = GetArgument(args, nameof(Exclude));
            string   archetypeArgument = GetArgument(args, nameof(Archetype)).FirstOrDefault();

            string[] cardArgument           = GetArgument(args, nameof(Card));
            string[] excludeCardArgument    = GetArgument(args, nameof(ExcludeCard));
            string   breakdownArgument      = GetArgument(args, nameof(MetaBreakdown)).FirstOrDefault();
            string   breakdownCountArgument = GetArgument(args, nameof(MetaBreakdownShowCount)).FirstOrDefault();
            string   decklistsArgument      = GetArgument(args, nameof(IncludeDecklists)).FirstOrDefault();

            string[] cacheFoldersArgument     = GetArgument(args, nameof(TournamentFolder));
            string   dataFolderArgument       = GetArgument(args, nameof(FormatDataFolder)).FirstOrDefault();
            string   outputFileArgument       = GetArgument(args, nameof(OutputFile)).FirstOrDefault();
            string   maxDecksPerEventArgument = GetArgument(args, nameof(MaxDecksPerEvent)).FirstOrDefault();
            string   minOthersPercentArgument = GetArgument(args, nameof(MinOthersPercent)).FirstOrDefault();

            if (formatArgument != null)
            {
                this.Format = formatArgument;
            }
            if (referenceFormatArgument != null)
            {
                this.ReferenceFormat = referenceFormatArgument;
            }
            if (metaArgument != null)
            {
                this.Meta = metaArgument;
            }
            if (metaWeekArgument != null)
            {
                this.MetaWeek = metaWeekArgument;
            }
            if (filterArgument.Length > 0)
            {
                this.Filter = filterArgument;
            }
            if (excludeArgument.Length > 0)
            {
                this.Exclude = excludeArgument;
            }
            if (archetypeArgument != null)
            {
                this.Archetype = archetypeArgument;
            }
            if (cardArgument.Length > 0)
            {
                this.Card = cardArgument;
            }
            if (excludeArgument.Length > 0)
            {
                this.ExcludeCard = excludeCardArgument;
            }
            if (breakdownArgument != null)
            {
                this.MetaBreakdown = (breakdownArgument.ToLowerInvariant() == "true");
            }
            if (breakdownCountArgument != null)
            {
                this.MetaBreakdownShowCount = (breakdownCountArgument.ToLowerInvariant() == "true");
            }
            if (decklistsArgument != null)
            {
                this.IncludeDecklists = (decklistsArgument.ToLowerInvariant() == "true");
            }
            if (cacheFoldersArgument.Length > 0)
            {
                this.TournamentFolder = cacheFoldersArgument;
            }
            if (dataFolderArgument != null)
            {
                this.FormatDataFolder = dataFolderArgument;
            }
            if (outputFileArgument != null)
            {
                this.OutputFile = outputFileArgument;
            }
            if (maxDecksPerEventArgument != null && Int32.TryParse(maxDecksPerEventArgument, out int parsedMaxDecks))
            {
                this.MaxDecksPerEvent = parsedMaxDecks;
            }
            if (minOthersPercentArgument != null && float.TryParse(minOthersPercentArgument, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedMinOthers))
            {
                this.MinOthersPercent = parsedMinOthers;
            }

            ExecutionAction actionArgument = ExecutionAction.NotSpecified;

            if (args.Length > 1)
            {
                Enum.TryParse <ExecutionAction>(args[1], true, out actionArgument);
            }
            if (actionArgument != ExecutionAction.NotSpecified)
            {
                this.Action = actionArgument;
            }

            ExecutionOutput outputArgument = ExecutionOutput.NotSpecified;

            if (args.Length > 0)
            {
                Enum.TryParse <ExecutionOutput>(args[0], true, out outputArgument);
            }
            if (outputArgument != ExecutionOutput.NotSpecified)
            {
                this.Output = outputArgument;
            }
        }