private async Task VerifySampleAsync( SampleImageData imageData, SampleImageType sampleImageType, Func <string, string, Task> verifyImageAsync) { string image = imageData.GetImage(sampleImageType, DockerHelper); string imageType = Enum.GetName(typeof(SampleImageType), sampleImageType).ToLowerInvariant(); try { if (!imageData.IsPublished) { string sampleFolder = Path.Combine(s_samplesPath, imageType); string dockerfilePath = $"{sampleFolder}/Dockerfile.{imageData.DockerfileSuffix}"; DockerHelper.Build(image, dockerfilePath, contextDir: sampleFolder, pull: Config.PullImages); } string containerName = imageData.GetIdentifier($"sample-{imageType}"); await verifyImageAsync(image, containerName); } finally { if (!imageData.IsPublished) { DockerHelper.DeleteImage(image); } } }
private string BuildTestAppImage(string stageTarget, string contextDir, params string[] customBuildArgs) { string tag = _imageData.GetIdentifier(stageTarget); List <string> buildArgs = new List <string>(); buildArgs.Add($"sdk_image={_imageData.GetImage(DotNetImageType.SDK, _dockerHelper)}"); DotNetImageType runtimeImageType = _isWeb ? DotNetImageType.Aspnet : DotNetImageType.Runtime; buildArgs.Add($"runtime_image={_imageData.GetImage(runtimeImageType, _dockerHelper)}"); if (DockerHelper.IsLinuxContainerModeEnabled) { buildArgs.Add($"runtime_deps_image={_imageData.GetImage(DotNetImageType.Runtime_Deps, _dockerHelper)}"); } if (customBuildArgs != null) { buildArgs.AddRange(customBuildArgs); } _dockerHelper.Build( tag: tag, target: stageTarget, contextDir: contextDir, buildArgs: buildArgs.ToArray()); return(tag); }
public void VerifyComplexAppSample() { string appTag = SampleImageData.GetImageName("complexapp-local-app"); string testTag = SampleImageData.GetImageName("complexapp-local-test"); string sampleFolder = Path.Combine(s_samplesPath, "complexapp"); string dockerfilePath = $"{sampleFolder}/Dockerfile"; string testContainerName = ImageData.GenerateContainerName("sample-complex-test"); string tempDir = null; try { // Test that the app works DockerHelper.Build(appTag, dockerfilePath, contextDir: sampleFolder, pull: Config.PullImages); string containerName = ImageData.GenerateContainerName("sample-complex"); string output = DockerHelper.Run(appTag, containerName); Assert.StartsWith("string: The quick brown fox jumps over the lazy dog", output); if (!DockerHelper.IsLinuxContainerModeEnabled && DockerHelper.DockerArchitecture.StartsWith("arm", StringComparison.OrdinalIgnoreCase)) { // Skipping run app tests due to a .NET issue: https://github.com/dotnet/runtime/issues/2082 return; } // Run the app's tests DockerHelper.Build(testTag, dockerfilePath, target: "test", contextDir: sampleFolder); DockerHelper.Run(testTag, testContainerName, skipAutoCleanup: true); // Copy the test log from the container to the host tempDir = Directory.CreateDirectory( Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())).FullName; DockerHelper.Copy($"{testContainerName}:/source/tests/TestResults", tempDir); string testLogFile = new DirectoryInfo($"{tempDir}/TestResults").GetFiles("*.trx").First().FullName; // Open the test log file and verify the tests passed XDocument doc = XDocument.Load(testLogFile); XElement summary = doc.Root.Element(XName.Get("ResultSummary", doc.Root.Name.NamespaceName)); Assert.Equal("Completed", summary.Attribute("outcome").Value); XElement counters = summary.Element(XName.Get("Counters", doc.Root.Name.NamespaceName)); Assert.Equal("2", counters.Attribute("total").Value); Assert.Equal("2", counters.Attribute("passed").Value); } finally { if (tempDir != null) { Directory.Delete(tempDir, true); } DockerHelper.DeleteContainer(testContainerName); DockerHelper.DeleteImage(testTag); DockerHelper.DeleteImage(appTag); } }
private void CreateTestAppWithSdkImage(ImageData imageData, string appSdkImage) { // dotnet new, restore, build a new app using the sdk image List <string> buildArgs = new List <string>(); buildArgs.Add($"netcoreapp_version={imageData.DotNetVersion}"); AddOptionalRestoreArgs(buildArgs); if (!imageData.SdkVersion.StartsWith("1.")) { buildArgs.Add($"optional_new_args=--no-restore"); } buildArgs.Add("template_name=" + GetTestTemplateName(imageData.IsWeb)); _dockerHelper.Build( dockerfile: $"Dockerfile.{DockerHelper.DockerOS.ToLower()}.testapp", tag: appSdkImage, fromImage: GetDotNetImage(DotNetImageType.SDK, imageData), buildArgs: buildArgs.ToArray()); }
private void CreateTestAppWithSdkImage(ImageData imageData, string appSdkImage) { // dotnet new, restore, build a new app using the sdk image List <string> buildArgs = new List <string>(); buildArgs.Add($"netcoreapp_version={imageData.VersionString}"); if (s_isNightlyRepo) { string dotnetCoreKey = "dotnet-core"; string dotnetCoreUrl = "https://dotnet.myget.org/F/dotnet-core/api/v3/index.json"; string packageSourceValue; if (DockerHelper.IsLinuxContainerModeEnabled) { packageSourceValue = $"<add key=\\\"{dotnetCoreKey}\\\" value=\\\"{dotnetCoreUrl}\\\" />"; } else { packageSourceValue = $"^<add key=^\\\"{dotnetCoreKey}^\\\" value=^\\\"{dotnetCoreUrl}^\\\" /^>"; } buildArgs.Add($"optional_package_sources=\" {packageSourceValue}\""); } AddOptionalRestoreArgs(imageData, buildArgs); if (imageData.SdkVersion.Major > 1) { buildArgs.Add("optional_new_args=--no-restore"); } buildArgs.Add("template_name=" + GetTestTemplateName(imageData.IsWeb)); _dockerHelper.Build( dockerfile: $"Dockerfile.{DockerHelper.DockerOS.ToLower()}.testapp", tag: appSdkImage, fromImage: GetImage(DotNetImageType.SDK, imageData), buildArgs: buildArgs.ToArray()); }