123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- using Microsoft.NET.Build.Containers.IntegrationTests;
- using Microsoft.NET.Build.Containers.UnitTests;
- using static Microsoft.NET.Build.Containers.KnownStrings;
- using static Microsoft.NET.Build.Containers.KnownStrings.Properties;
- namespace Microsoft.NET.Build.Containers.Tasks.IntegrationTests;
- [Collection(nameof(MSBuildCollection))]
- public class ParseContainerPropertiesTests
- {
- [Fact]
- public void Baseline()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerRepository] = "dotnet/testimage",
- [ContainerImageTags] = "7.0;latest"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.True(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.Equal("mcr.microsoft.com", instance.GetPropertyValue(ContainerBaseRegistry));
- Assert.Equal("dotnet/runtime", instance.GetPropertyValue(ContainerBaseName));
- Assert.Equal("7.0", instance.GetPropertyValue(ContainerBaseTag));
- Assert.Equal("dotnet/testimage", instance.GetPropertyValue(ContainerRepository));
- instance.GetItems(ContainerImageTags).Select(i => i.EvaluatedInclude).ToArray().Should().BeEquivalentTo(new[] { "7.0", "latest" });
- instance.GetItems("ProjectCapability").Select(i => i.EvaluatedInclude).ToArray().Should().BeEquivalentTo(new[] { "NetSdkOCIImageBuild" });
- }
- [Fact]
- public void SpacesGetReplacedWithDashes()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet runtime:7.0",
- [ContainerRegistry] = "localhost:5010"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.True(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.Equal("mcr.microsoft.com", instance.GetPropertyValue(ContainerBaseRegistry));
- Assert.Equal("dotnet-runtime", instance.GetPropertyValue(ContainerBaseName));
- Assert.Equal("7.0", instance.GetPropertyValue(ContainerBaseTag));
- }
- [Fact]
- public void RegexCatchesInvalidContainerNames()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerRepository] = "dotnet testimage",
- [ContainerImageTag] = "5.0"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.True(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.Contains(logs.Messages, m => m.Message?.Contains("'dotnet testimage' was not a valid container image name, it was normalized to 'dotnet-testimage'") == true);
- }
- [Fact]
- public void RegexCatchesInvalidContainerTags()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerRepository] = "dotnet/testimage",
- [ContainerImageTag] = "5 0"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.False(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.True(logs.Errors.Count > 0);
- Assert.Equal(logs.Errors[0].Code, ErrorCodes.CONTAINER2007);
- }
- [Fact]
- public void CanOnlySupplyOneOfTagAndTags()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerRepository] = "dotnet/testimage",
- [ContainerImageTag] = "5.0",
- [ContainerImageTags] = "latest;oldest"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.False(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.True(logs.Errors.Count > 0);
- Assert.Equal(logs.Errors[0].Code, ErrorCodes.CONTAINER2008);
- }
- [Fact]
- public void InvalidTagsThrowError()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/aspnet:8.0",
- [ContainerRepository] = "dotnet/testimage",
- [ContainerImageTags] = "'latest;oldest'"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.False(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.True(logs.Errors.Count > 0);
- Assert.Equal(logs.Errors[0].Code, ErrorCodes.CONTAINER2010);
- }
- [Fact]
- public void FailsOnCompletelyInvalidRepositoryNames()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerImageName] = "㓳㓴㓵㓶㓷㓹㓺㓻",
- [ContainerImageTag] = "5.0"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.False(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.True(logs.Errors.Count > 0);
- Assert.Equal(logs.Errors[0].Code, ErrorCodes.CONTAINER2005);
- }
- [Fact]
- public void FailsWhenFirstCharIsAUnicodeLetterButNonLatin()
- {
- var (project, logs, d) = ProjectInitializer.InitProject(new()
- {
- [ContainerBaseImage] = "mcr.microsoft.com/dotnet/runtime:7.0",
- [ContainerRegistry] = "localhost:5010",
- [ContainerImageName] = "㓳but-otherwise-valid",
- [ContainerImageTag] = "5.0"
- });
- using var _ = d;
- var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None);
- Assert.False(instance.Build(new[] { ComputeContainerConfig }, new[] { logs }, null, out var outputs));
- Assert.True(logs.Errors.Count > 0);
- Assert.Equal(logs.Errors[0].Code, ErrorCodes.CONTAINER2005);
- }
- }
|