From 180a9dc2d2883cafa483104d36c86f0ca7c0014b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81dric=20Luthi?= Date: Sat, 23 Mar 2024 13:38:51 +0100 Subject: [PATCH 1/2] fix: Create an empty `/var/lib/mysql-files` directory for the MySql container Fixes #1142 --- src/Testcontainers.MySql/MySqlBuilder.cs | 2 +- src/Testcontainers.MySql/MySqlContainer.cs | 14 ++++++++++++++ .../MySqlContainerTest.cs | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Testcontainers.MySql/MySqlBuilder.cs b/src/Testcontainers.MySql/MySqlBuilder.cs index 4ed177c30..0b5463ebf 100644 --- a/src/Testcontainers.MySql/MySqlBuilder.cs +++ b/src/Testcontainers.MySql/MySqlBuilder.cs @@ -90,7 +90,7 @@ protected override MySqlBuilder Init() .WithDatabase(DefaultDatabase) .WithUsername(DefaultUsername) .WithPassword(DefaultPassword) - .WithStartupCallback((container, ct) => container.WriteConfigurationFileAsync(ct)); + .WithStartupCallback((container, ct) => Task.WhenAll(container.WriteConfigurationFileAsync(ct), container.CreateMySqlFilesDirectory(ct))); } /// diff --git a/src/Testcontainers.MySql/MySqlContainer.cs b/src/Testcontainers.MySql/MySqlContainer.cs index d18ffa3db..45d0dea94 100644 --- a/src/Testcontainers.MySql/MySqlContainer.cs +++ b/src/Testcontainers.MySql/MySqlContainer.cs @@ -48,6 +48,20 @@ await CopyAsync(Encoding.Default.GetBytes(scriptContent), scriptFilePath, Unix.F .ConfigureAwait(false); } + /// + /// Creates an empty /var/lib/mysql-files directory. + /// + /// Cancellation token. + /// + /// This directory does not exist in the mysql 8.0.28 and earlier + /// Docker images and is required for the container to start properly. + /// + /// Task that completes when the directory has been created. + internal Task CreateMySqlFilesDirectory(CancellationToken ct = default) + { + return ExecAsync(new[] { "mkdir", "/var/lib/mysql-files" }, ct); + } + /// /// Write an unobfuscated MySql configuration file that configures the client /// login path. This prevents warnings in the diff --git a/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs b/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs index 11a8e71a9..09eb8ee3b 100644 --- a/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs +++ b/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs @@ -58,6 +58,16 @@ public MySqlUserConfiguration() } } + [UsedImplicitly] + public sealed class MySqlOldConfiguration : MySqlContainerTest + { + // https://github.com/testcontainers/testcontainers-dotnet/issues/1142 + public MySqlOldConfiguration() + : base(new MySqlBuilder().WithImage("mysql:8.0.28").Build()) + { + } + } + [UsedImplicitly] public sealed class MySqlRootConfiguration : MySqlContainerTest { From 33940903c13c3977061d36e66ccd42162251a996 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Mon, 25 Mar 2024 16:29:34 +0100 Subject: [PATCH 2/2] chore: Append Async suffix --- src/Testcontainers.MySql/MySqlBuilder.cs | 2 +- src/Testcontainers.MySql/MySqlContainer.cs | 8 ++++---- .../MySqlContainerTest.cs | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Testcontainers.MySql/MySqlBuilder.cs b/src/Testcontainers.MySql/MySqlBuilder.cs index 0b5463ebf..91bfc5a9c 100644 --- a/src/Testcontainers.MySql/MySqlBuilder.cs +++ b/src/Testcontainers.MySql/MySqlBuilder.cs @@ -90,7 +90,7 @@ protected override MySqlBuilder Init() .WithDatabase(DefaultDatabase) .WithUsername(DefaultUsername) .WithPassword(DefaultPassword) - .WithStartupCallback((container, ct) => Task.WhenAll(container.WriteConfigurationFileAsync(ct), container.CreateMySqlFilesDirectory(ct))); + .WithStartupCallback((container, ct) => Task.WhenAll(container.CreateMySqlFilesDirectoryAsync(ct), container.WriteConfigurationFileAsync(ct))); } /// diff --git a/src/Testcontainers.MySql/MySqlContainer.cs b/src/Testcontainers.MySql/MySqlContainer.cs index 45d0dea94..209625cda 100644 --- a/src/Testcontainers.MySql/MySqlContainer.cs +++ b/src/Testcontainers.MySql/MySqlContainer.cs @@ -51,13 +51,13 @@ await CopyAsync(Encoding.Default.GetBytes(scriptContent), scriptFilePath, Unix.F /// /// Creates an empty /var/lib/mysql-files directory. /// - /// Cancellation token. /// - /// This directory does not exist in the mysql 8.0.28 and earlier - /// Docker images and is required for the container to start properly. + /// The directory does not exist in the MySql 8.0.28 and earlier Docker images, and + /// it is required for the module to start properly. /// + /// Cancellation token. /// Task that completes when the directory has been created. - internal Task CreateMySqlFilesDirectory(CancellationToken ct = default) + internal Task CreateMySqlFilesDirectoryAsync(CancellationToken ct = default) { return ExecAsync(new[] { "mkdir", "/var/lib/mysql-files" }, ct); } diff --git a/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs b/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs index 09eb8ee3b..c5e6d5e3a 100644 --- a/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs +++ b/tests/Testcontainers.MySql.Tests/MySqlContainerTest.cs @@ -59,20 +59,20 @@ public MySqlUserConfiguration() } [UsedImplicitly] - public sealed class MySqlOldConfiguration : MySqlContainerTest + public sealed class MySqlRootConfiguration : MySqlContainerTest { - // https://github.com/testcontainers/testcontainers-dotnet/issues/1142 - public MySqlOldConfiguration() - : base(new MySqlBuilder().WithImage("mysql:8.0.28").Build()) + public MySqlRootConfiguration() + : base(new MySqlBuilder().WithUsername("root").Build()) { } } [UsedImplicitly] - public sealed class MySqlRootConfiguration : MySqlContainerTest + public sealed class GitHubIssue1142 : MySqlContainerTest { - public MySqlRootConfiguration() - : base(new MySqlBuilder().WithUsername("root").Build()) + // https://github.com/testcontainers/testcontainers-dotnet/issues/1142. + public GitHubIssue1142() + : base(new MySqlBuilder().WithImage("mysql:8.0.28").Build()) { } }