private string CreateTestAppWithSdkImage(string appType) { string appDir = Path.Combine(Directory.GetCurrentDirectory(), $"{appType}App{DateTime.Now.ToFileTime()}"); string containerName = _imageData.GetIdentifier($"create-{appType}"); try { string targetFramework; // TODO: Until https://github.com/dotnet/aspnetcore/pull/19860 is fixed, 5.0 web projects need to // continue to use the old TFM. if (_imageData.Version.Major < 5 || appType == "web") { targetFramework = $"netcoreapp{_imageData.Version}"; } else { targetFramework = $"net{_imageData.Version}"; } _dockerHelper.Run( image: _imageData.GetImage(DotNetImageType.SDK, _dockerHelper), name: containerName, command: $"dotnet new {appType} --framework {targetFramework} --no-restore", workdir: "/app", skipAutoCleanup: true); _dockerHelper.Copy($"{containerName}:/app", appDir); string sourceDockerfileName = $"Dockerfile.{DockerHelper.DockerOS.ToLower()}"; File.Copy( Path.Combine(_testArtifactsDir, sourceDockerfileName), Path.Combine(appDir, "Dockerfile")); string nuGetConfigFileName = "NuGet.config"; if (Config.IsNightlyRepo) { nuGetConfigFileName += ".nightly"; } File.Copy(Path.Combine(_testArtifactsDir, nuGetConfigFileName), Path.Combine(appDir, "NuGet.config")); File.Copy(Path.Combine(_testArtifactsDir, ".dockerignore"), Path.Combine(appDir, ".dockerignore")); } catch (Exception) { if (Directory.Exists(appDir)) { Directory.Delete(appDir, true); } throw; } finally { _dockerHelper.DeleteContainer(containerName); } return(appDir); }
private string CreateTestAppWithSdkImage(string appType) { string appDir = Path.Combine(Directory.GetCurrentDirectory(), $"{appType}App{DateTime.Now.ToFileTime()}"); string containerName = _imageData.GetIdentifier($"create-{appType}"); try { _dockerHelper.Run( image: _imageData.GetImage(DotNetImageType.SDK, _dockerHelper), name: containerName, command: $"dotnet new {appType} --framework netcoreapp{_imageData.Version}", workdir: "/app", skipAutoCleanup: true); _dockerHelper.Copy($"{containerName}:/app", appDir); ApplyProjectCustomizations(_imageData, Path.Combine(appDir, "app.csproj")); string sourceDockerfileName = $"Dockerfile.{DockerHelper.DockerOS.ToLower()}"; // TODO: Remove Windows arm workaround once underlying Windows/Docker issue is resolved // https://github.com/dotnet/dotnet-docker/issues/1054 if (!DockerHelper.IsLinuxContainerModeEnabled && _imageData.Arch == Arch.Arm) { sourceDockerfileName += $".{Enum.GetName(typeof(Arch), _imageData.Arch).ToLowerInvariant()}"; } File.Copy( Path.Combine(_testArtifactsDir, sourceDockerfileName), Path.Combine(appDir, "Dockerfile")); string nuGetConfigFileName = "NuGet.config"; if (Config.IsNightlyRepo) { nuGetConfigFileName += ".nightly"; } File.Copy(Path.Combine(_testArtifactsDir, nuGetConfigFileName), Path.Combine(appDir, "NuGet.config")); File.Copy(Path.Combine(_testArtifactsDir, ".dockerignore"), Path.Combine(appDir, ".dockerignore")); } catch (Exception) { if (Directory.Exists(appDir)) { Directory.Delete(appDir, true); } throw; } finally { _dockerHelper.DeleteContainer(containerName); } return(appDir); }
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 string CreateTestAppWithSdkImage(string appType) { string appDir = Path.Combine(Directory.GetCurrentDirectory(), $"{appType}App{DateTime.Now.ToFileTime()}"); string containerName = _imageData.GetIdentifier($"create-{appType}"); try { _dockerHelper.Run( image: _imageData.GetImage(DotNetImageType.SDK, _dockerHelper), name: containerName, command: $"dotnet new {appType} --framework netcoreapp{_imageData.Version}", workdir: "/app", skipAutoCleanup: true); _dockerHelper.Copy($"{containerName}:/app", appDir); ApplyProjectCustomizations(_imageData, Path.Combine(appDir, "app.csproj")); File.Copy( Path.Combine(_testArtifactsDir, $"Dockerfile.{DockerHelper.DockerOS.ToLower()}"), Path.Combine(appDir, "Dockerfile")); string nuGetConfigFileName = "NuGet.config"; if (Config.IsNightlyRepo) { nuGetConfigFileName += ".nightly"; } File.Copy(Path.Combine(_testArtifactsDir, nuGetConfigFileName), Path.Combine(appDir, "NuGet.config")); File.Copy(Path.Combine(_testArtifactsDir, ".dockerignore"), Path.Combine(appDir, ".dockerignore")); } catch (Exception) { if (Directory.Exists(appDir)) { Directory.Delete(appDir, true); } throw; } finally { _dockerHelper.DeleteContainer(containerName); } return(appDir); }