diff --git a/src/Microsoft.Tye.Core/ConfigModel/ConfigApplication.cs b/src/Microsoft.Tye.Core/ConfigModel/ConfigApplication.cs index fa6a448b..aa06fec6 100644 --- a/src/Microsoft.Tye.Core/ConfigModel/ConfigApplication.cs +++ b/src/Microsoft.Tye.Core/ConfigModel/ConfigApplication.cs @@ -106,7 +106,7 @@ namespace Microsoft.Tye.ConfigModel throw new TyeYamlException(CoreStrings.FormatMultipleBindingWithSameName("service")); } - if (service.Bindings.Count(o => o.Port == binding.Port) > 1) + if (service.Bindings.Count(o => o.Port != null && o.Port == binding.Port) > 1) { throw new TyeYamlException(CoreStrings.FormatMultipleBindingWithSamePort("service")); } diff --git a/test/UnitTests/TyeDeserializationValidationTests.cs b/test/UnitTests/TyeDeserializationValidationTests.cs index fab197b5..8b39714e 100644 --- a/test/UnitTests/TyeDeserializationValidationTests.cs +++ b/test/UnitTests/TyeDeserializationValidationTests.cs @@ -171,6 +171,23 @@ services: Assert.Contains(CoreStrings.FormatMultipleBindingWithSamePort("service"), exception.Message); } + [Fact] + public void ServicesMustHaveUniqueNonNullPorts() + { + var input = @" +services: + - name: app + bindings: + - protocol: http + name: a + - protocol: https + name: b"; + + using var parser = new YamlParser(input); + var app = parser.ParseConfigApplication(); + app.Validate(); + } + [Theory] [InlineData("image", "executable")]