Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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());
        }
Ejemplo n.º 5
0
        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());
        }