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(); } }
// 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); }
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}'"); } }