From 37e5351ac206808601f6883ba7dd3999e5abcb46 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:31:32 +0100 Subject: [PATCH] fix: Do not pre-pull scratch image (#1304) --- .../Clients/TestcontainersClient.cs | 6 +++++ .../Testcontainers.Tests/Assets/.dockerignore | 1 + .../Assets/scratch/Dockerfile | 2 ++ .../Unit/Images/ImageFromDockerfileTest.cs | 22 ++++++++++++++++++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/Testcontainers.Tests/Assets/scratch/Dockerfile diff --git a/src/Testcontainers/Clients/TestcontainersClient.cs b/src/Testcontainers/Clients/TestcontainersClient.cs index 576c51372..63494b35a 100644 --- a/src/Testcontainers/Clients/TestcontainersClient.cs +++ b/src/Testcontainers/Clients/TestcontainersClient.cs @@ -383,6 +383,12 @@ private async Task PullImageAsync(IImage image, CancellationToken ct = default) if (dockerRegistryServerAddress == null) { + // https://hub.docker.com/_/scratch. + if ("scratch".Equals(image.Repository, StringComparison.OrdinalIgnoreCase)) + { + return; + } + var info = await System.GetInfoAsync(ct) .ConfigureAwait(false); diff --git a/tests/Testcontainers.Tests/Assets/.dockerignore b/tests/Testcontainers.Tests/Assets/.dockerignore index 2f2a653df..d2e8921ac 100644 --- a/tests/Testcontainers.Tests/Assets/.dockerignore +++ b/tests/Testcontainers.Tests/Assets/.dockerignore @@ -3,4 +3,5 @@ credHelpers credsStore healthWaitStrategy pullBaseImages +scratch **/*.md diff --git a/tests/Testcontainers.Tests/Assets/scratch/Dockerfile b/tests/Testcontainers.Tests/Assets/scratch/Dockerfile new file mode 100644 index 000000000..c3fcc0738 --- /dev/null +++ b/tests/Testcontainers.Tests/Assets/scratch/Dockerfile @@ -0,0 +1,2 @@ +FROM scratch +LABEL "maintainer"="9199345+HofmeisterAn@users.noreply.github.com" diff --git a/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs b/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs index 9ca5a1c4a..25e925ecc 100644 --- a/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs +++ b/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs @@ -100,11 +100,31 @@ public async Task ThrowsDockerfileDirectoryDoesNotExist() Assert.Equal($"Directory '{Path.GetFullPath(dockerfileDirectory)}' does not exist.", exception.Message); } + [Fact] + public async Task BuildsDockerScratchImage() + { + // Given + var imageFromDockerfileBuilder = new ImageFromDockerfileBuilder() + .WithDockerfileDirectory("Assets/scratch") + .Build(); + + // When + var exception = await Record.ExceptionAsync(() => imageFromDockerfileBuilder.CreateAsync()) + .ConfigureAwait(true); + + // Then + Assert.Null(exception); + Assert.NotNull(imageFromDockerfileBuilder.Repository); + Assert.NotNull(imageFromDockerfileBuilder.Tag); + Assert.NotNull(imageFromDockerfileBuilder.FullName); + Assert.Null(imageFromDockerfileBuilder.GetHostname()); + } + [Theory] [InlineData("Dockerfile")] [InlineData("./Dockerfile")] [InlineData(".\\Dockerfile")] - public async Task BuildsDockerImage(string dockerfile) + public async Task BuildsDockerAlpineImage(string dockerfile) { // Given IImage tag1 = new DockerImage(new DockerImage(string.Join("/", "localhost", "testcontainers", Guid.NewGuid().ToString("D"))));