예제 #1
0
        public void Evaluate_ContainerAction_Args()
        {
            try
            {
                //Arrange
                Setup();

                var actionManifest = new ActionManifestManager();
                actionManifest.Initialize(_hc);

                var arguments = new SequenceToken(null, null, null);
                arguments.Add(new BasicExpressionToken(null, null, null, "inputs.greeting"));
                arguments.Add(new StringToken(null, null, null, "test"));

                var inputsContext = new DictionaryContextData();
                inputsContext.Add("greeting", new StringContextData("hello"));

                var evaluateContext = new Dictionary <string, PipelineContextData>(StringComparer.OrdinalIgnoreCase);
                evaluateContext["inputs"] = inputsContext;
                //Act

                var result = actionManifest.EvaluateContainerArguments(_ec.Object, arguments, evaluateContext);

                //Assert
                Assert.Equal("hello", result[0]);
                Assert.Equal("test", result[1]);
                Assert.Equal(2, result.Count);
            }
            finally
            {
                Teardown();
            }
        }
예제 #2
0
        // todo: remove after feature-flag DistributedTask.EvaluateContainerOnRunner is enabled everywhere
        internal static TemplateToken ConvertToTemplateToken(ContainerResource resource)
        {
            var result = new MappingToken(null, null, null);

            var image = resource.Image;

            if (!string.IsNullOrEmpty(image))
            {
                result.Add(new StringToken(null, null, null, "image"), new StringToken(null, null, null, image));
            }

            var options = resource.Options;

            if (!string.IsNullOrEmpty(options))
            {
                result.Add(new StringToken(null, null, null, "options"), new StringToken(null, null, null, options));
            }

            var environment = resource.Environment;

            if (environment?.Count > 0)
            {
                var mapping = new MappingToken(null, null, null);
                foreach (var pair in environment)
                {
                    mapping.Add(new StringToken(null, null, null, pair.Key), new StringToken(null, null, null, pair.Value));
                }
                result.Add(new StringToken(null, null, null, "env"), mapping);
            }

            var ports = resource.Ports;

            if (ports?.Count > 0)
            {
                var sequence = new SequenceToken(null, null, null);
                foreach (var item in ports)
                {
                    sequence.Add(new StringToken(null, null, null, item));
                }
                result.Add(new StringToken(null, null, null, "ports"), sequence);
            }

            var volumes = resource.Volumes;

            if (volumes?.Count > 0)
            {
                var sequence = new SequenceToken(null, null, null);
                foreach (var item in volumes)
                {
                    sequence.Add(new StringToken(null, null, null, item));
                }
                result.Add(new StringToken(null, null, null, "volumes"), sequence);
            }

            return(result);
        }
예제 #3
0
        internal static TemplateToken ToTemplateToken(this PipelineContextData data)
        {
            if (data is null)
            {
                return(new NullToken(null, null, null));
            }

            switch (data.Type)
            {
            case PipelineContextDataType.Dictionary:
                var dictionary = data.AssertDictionary("dictionary");
                var mapping    = new MappingToken(null, null, null);
                if (dictionary.Count > 0)
                {
                    foreach (var pair in dictionary)
                    {
                        var key   = new StringToken(null, null, null, pair.Key);
                        var value = pair.Value.ToTemplateToken();
                        mapping.Add(key, value);
                    }
                }
                return(mapping);

            case PipelineContextDataType.Array:
                var array    = data.AssertArray("array");
                var sequence = new SequenceToken(null, null, null);
                if (array.Count > 0)
                {
                    foreach (var item in array)
                    {
                        sequence.Add(item.ToTemplateToken());
                    }
                }
                return(sequence);

            case PipelineContextDataType.String:
                var stringData = data as StringContextData;
                return(new StringToken(null, null, null, stringData.Value));

            case PipelineContextDataType.Boolean:
                var booleanData = data as BooleanContextData;
                return(new BooleanToken(null, null, null, booleanData.Value));

            case PipelineContextDataType.Number:
                var numberData = data as NumberContextData;
                return(new NumberToken(null, null, null, numberData.Value));

            default:
                throw new NotSupportedException($"Unexpected {nameof(PipelineContextDataType)} type '{data.Type}'");
            }
        }