From 971ca17b5fe31d1cd9c8c424d3409c40a57e2f32 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 3 Jun 2025 12:53:37 +0200 Subject: [PATCH] Add unit test verifying dockerfile aligns with current target framework (#19445) * Add unit test verifying dockerfile aligns with current target framework. * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../Umbraco.Templates/DockerFileTests.cs | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/Umbraco.Tests.UnitTests/Umbraco.Templates/DockerFileTests.cs diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Templates/DockerFileTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Templates/DockerFileTests.cs new file mode 100644 index 0000000000..ab73e9a4b2 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Templates/DockerFileTests.cs @@ -0,0 +1,54 @@ +// Copyright (c) Umbraco. +// See LICENSE for more details. + +using System.Reflection; +using System.Runtime.Versioning; +using NUnit.Framework; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Website; + +[TestFixture] +public class DockerFileTests +{ + [Test] + public void DockerFile_AspNet_Version_Matches_Target_Framework() + { + var targetFrameworkVersion = GetNetVersionFromCurrentTargetFramework(); + (string dockerFileAspNetVersion, string dockerFileSdkVersion) = GetNetVersionsFromDockerFile(); + Assert.AreEqual(dockerFileAspNetVersion, dockerFileSdkVersion); + Assert.AreEqual(targetFrameworkVersion, dockerFileAspNetVersion); + } + + private static string GetNetVersionFromCurrentTargetFramework() + { + var targetFrameworkAttribute = Assembly.GetExecutingAssembly() + .GetCustomAttributes(typeof(TargetFrameworkAttribute), false) + .SingleOrDefault() as TargetFrameworkAttribute; + Assert.IsNotNull(targetFrameworkAttribute); + + return targetFrameworkAttribute.FrameworkName.Replace(".NETCoreApp,Version=v", string.Empty); + } + + private static (string DockerFileAspNetVersion, string DockerFileSdkVersion) GetNetVersionsFromDockerFile() + { + const int SegmentsToRepoRoot = 5; // Number of directory segments from the test directory to the repository root. + var testContextDirectoryParts = TestContext.CurrentContext.TestDirectory.Split(Path.DirectorySeparatorChar); + var solutionRootDirectory = string.Join(Path.DirectorySeparatorChar, testContextDirectoryParts.Take(testContextDirectoryParts.Length - SegmentsToRepoRoot)); + var dockerFilePath = Path.Combine(solutionRootDirectory, "templates", "UmbracoProject", "Dockerfile"); + + var dockerFileContent = File.ReadAllText(dockerFilePath); + var dockerFileFromLines = dockerFileContent + .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) + .Where(x => x.StartsWith("FROM mcr.")) + .ToList(); + + Assert.AreEqual(2, dockerFileFromLines.Count); + + var dockerFileAspNetVersion = GetVersionFromDockerFromLine(dockerFileFromLines[0]); + var dockerFileSdkVersion = GetVersionFromDockerFromLine(dockerFileFromLines[1]); + + return (dockerFileAspNetVersion, dockerFileSdkVersion); + } + + private static string GetVersionFromDockerFromLine(string line) => line.Split(' ')[1].Split(':')[1]; +}