From 1d281544e007cc8ed1b5e014a9f24e90c4075a7b Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Thu, 21 Dec 2023 01:57:50 -0300 Subject: [PATCH 1/7] feat: add cockroachdb --- Testcontainers.sln | 16 +- docs/modules/index.md | 1 + src/Testcontainers.CockroachDb/.editorconfig | 1 + .../CockroachDbBuilder.cs | 138 ++++++++++++++++++ .../CockroachDbConfiguration.cs | 80 ++++++++++ .../CockroachDbContainer.cs | 51 +++++++ .../Testcontainers.CockroachDb.csproj | 12 ++ src/Testcontainers.CockroachDb/Usings.cs | 14 ++ .../.editorconfig | 1 + .../CockroachDbContainerTest.cs | 45 ++++++ .../Testcontainers.CockroachDb.Tests.csproj | 18 +++ .../Usings.cs | 6 + 12 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 src/Testcontainers.CockroachDb/.editorconfig create mode 100644 src/Testcontainers.CockroachDb/CockroachDbBuilder.cs create mode 100644 src/Testcontainers.CockroachDb/CockroachDbConfiguration.cs create mode 100644 src/Testcontainers.CockroachDb/CockroachDbContainer.cs create mode 100644 src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj create mode 100644 src/Testcontainers.CockroachDb/Usings.cs create mode 100644 tests/Testcontainers.CockroachDb.Tests/.editorconfig create mode 100644 tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs create mode 100644 tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj create mode 100644 tests/Testcontainers.CockroachDb.Tests/Usings.cs diff --git a/Testcontainers.sln b/Testcontainers.sln index 7507b0faa..80da2c05c 100644 --- a/Testcontainers.sln +++ b/Testcontainers.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 @@ -183,6 +183,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Tests", "tes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.WebDriver.Tests", "tests\Testcontainers.WebDriver.Tests\Testcontainers.WebDriver.Tests.csproj", "{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb", "src\Testcontainers.CockroachDb\Testcontainers.CockroachDb.csproj", "{8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb.Tests", "tests\Testcontainers.CockroachDb.Tests\Testcontainers.CockroachDb.Tests.csproj", "{685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -532,6 +536,14 @@ Global {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.Build.0 = Release|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.Build.0 = Release|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {5365F780-0E6C-41F0-B1B9-7DC34368F80C} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} @@ -619,5 +631,7 @@ Global {1A1983E6-5297-435F-B467-E8E1F11277D6} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {27CDB869-A150-4593-958F-6F26E5391E7C} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} EndGlobalSection EndGlobal diff --git a/docs/modules/index.md b/docs/modules/index.md index 76b764126..ca12c3f57 100644 --- a/docs/modules/index.md +++ b/docs/modules/index.md @@ -29,6 +29,7 @@ await moduleNameContainer.StartAsync(); | Consul | `consul:1.15` | [NuGet](https://www.nuget.org/packages/Testcontainers.Consul) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Consul) | | Couchbase | `couchbase:community-7.0.2` | [NuGet](https://www.nuget.org/packages/Testcontainers.Couchbase) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Couchbase) | | CouchDB | `couchdb:3.3` | [NuGet](https://www.nuget.org/packages/Testcontainers.CouchDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CouchDb) | +| CockroachDB | `cockroachdb:23.1` | [NuGet](https://www.nuget.org/packages/Testcontainers.CockroachDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CockroachDb) | | DynamoDB | `amazon/dynamodb-local:1.21.0` | [NuGet](https://www.nuget.org/packages/Testcontainers.DynamoDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.DynamoDb) | | Elasticsearch | `elasticsearch:8.6.1` | [NuGet](https://www.nuget.org/packages/Testcontainers.Elasticsearch) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Elasticsearch) | | EventStoreDB | `eventstore/eventstore:22.10.1-buster-slim` | [NuGet](https://www.nuget.org/packages/Testcontainers.EventStoreDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.EventStoreDb) | diff --git a/src/Testcontainers.CockroachDb/.editorconfig b/src/Testcontainers.CockroachDb/.editorconfig new file mode 100644 index 000000000..6f066619d --- /dev/null +++ b/src/Testcontainers.CockroachDb/.editorconfig @@ -0,0 +1 @@ +root = true \ No newline at end of file diff --git a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs new file mode 100644 index 000000000..c628fe0a7 --- /dev/null +++ b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs @@ -0,0 +1,138 @@ +namespace Testcontainers.CockroachDb; + +/// +[PublicAPI] +public sealed class CockroachDbBuilder : ContainerBuilder +{ + public const string CockroachDbImage = "cockroachdb:23.1"; + + public const ushort CockroachDbPort = 26257; + + public const string DefaultDatabase = "defaultdb"; + + public const string DefaultUsername = "root"; + + public const string DefaultPassword = "cockroachdb"; + + /// + /// Initializes a new instance of the class. + /// + public CockroachDbBuilder() + : this(new CockroachDbConfiguration()) + { + DockerResourceConfiguration = Init().DockerResourceConfiguration; + } + + /// + /// Initializes a new instance of the class. + /// + /// The Docker resource configuration. + private CockroachDbBuilder(CockroachDbConfiguration resourceConfiguration) + : base(resourceConfiguration) + { + DockerResourceConfiguration = resourceConfiguration; + } + + /// + protected override CockroachDbConfiguration DockerResourceConfiguration { get; } + + /// + /// Sets the CockroachDb database. + /// + /// The CockroachDb database. + /// A configured instance of . + public CockroachDbBuilder WithDatabase(string database) + { + return Merge(DockerResourceConfiguration, new CockroachDbConfiguration(database: database)) + .WithEnvironment("COCKROACH_DATABASE", database); + } + + /// + /// Sets the CockroachDb username. + /// + /// The CockroachDb username. + /// A configured instance of . + public CockroachDbBuilder WithUsername(string username) + { + return Merge(DockerResourceConfiguration, new CockroachDbConfiguration(username: username)) + .WithEnvironment("COCKROACH_USER", username); + } + + /// + /// Sets the CockroachDb password. + /// + /// The CockroachDb password. + /// A configured instance of . + public CockroachDbBuilder WithPassword(string password) + { + return Merge(DockerResourceConfiguration, new CockroachDbConfiguration(password: password)) + .WithEnvironment("COCKROACH_PASSWORD", password); + } + + /// + public override CockroachDbContainer Build() + { + Validate(); + return new CockroachDbContainer(DockerResourceConfiguration, TestcontainersSettings.Logger); + } + + /// + protected override CockroachDbBuilder Init() + { + return base.Init() + .WithImage(CockroachDbImage) + .WithPortBinding(CockroachDbPort, true) + .WithDatabase(DefaultDatabase) + .WithUsername(DefaultUsername) + .WithPassword(DefaultPassword) + .WithCommand("start-single-node") + .WithCommand("--insecure") + .WithWaitStrategy(Wait.ForUnixContainer().AddCustomWaitStrategy(new WaitUntil())); + } + + /// + protected override void Validate() + { + base.Validate(); + + _ = Guard.Argument(DockerResourceConfiguration.Password, nameof(DockerResourceConfiguration.Password)) + .NotNull() + .NotEmpty(); + } + + /// + protected override CockroachDbBuilder Clone(IResourceConfiguration resourceConfiguration) + { + return Merge(DockerResourceConfiguration, new CockroachDbConfiguration(resourceConfiguration)); + } + + /// + protected override CockroachDbBuilder Clone(IContainerConfiguration resourceConfiguration) + { + return Merge(DockerResourceConfiguration, new CockroachDbConfiguration(resourceConfiguration)); + } + + /// + protected override CockroachDbBuilder Merge(CockroachDbConfiguration oldValue, CockroachDbConfiguration newValue) + { + return new CockroachDbBuilder(new CockroachDbConfiguration(oldValue, newValue)); + } + + /// + private sealed class WaitUntil : IWaitUntil + { + private static readonly string[] LineEndings = { "\r\n", "\n" }; + + /// + public async Task UntilAsync(IContainer container) + { + var (stdout, stderr) = await container.GetLogsAsync(timestampsEnabled: false) + .ConfigureAwait(false); + + return 2.Equals(Array.Empty() + .Concat(stdout.Split(LineEndings, StringSplitOptions.RemoveEmptyEntries)) + .Concat(stderr.Split(LineEndings, StringSplitOptions.RemoveEmptyEntries)) + .Count(line => line.Contains("database system is ready to accept connections"))); + } + } +} \ No newline at end of file diff --git a/src/Testcontainers.CockroachDb/CockroachDbConfiguration.cs b/src/Testcontainers.CockroachDb/CockroachDbConfiguration.cs new file mode 100644 index 000000000..4ef034b9d --- /dev/null +++ b/src/Testcontainers.CockroachDb/CockroachDbConfiguration.cs @@ -0,0 +1,80 @@ +namespace Testcontainers.CockroachDb; + +/// +[PublicAPI] +public sealed class CockroachDbConfiguration : ContainerConfiguration +{ + /// + /// Initializes a new instance of the class. + /// + /// The CockroachDb database. + /// The CockroachDb username. + /// The CockroachDb password. + public CockroachDbConfiguration( + string database = null, + string username = null, + string password = null) + { + Database = database; + Username = username; + Password = password; + } + + /// + /// Initializes a new instance of the class. + /// + /// The Docker resource configuration. + public CockroachDbConfiguration(IResourceConfiguration resourceConfiguration) + : base(resourceConfiguration) + { + // Passes the configuration upwards to the base implementations to create an updated immutable copy. + } + + /// + /// Initializes a new instance of the class. + /// + /// The Docker resource configuration. + public CockroachDbConfiguration(IContainerConfiguration resourceConfiguration) + : base(resourceConfiguration) + { + // Passes the configuration upwards to the base implementations to create an updated immutable copy. + } + + /// + /// Initializes a new instance of the class. + /// + /// The Docker resource configuration. + public CockroachDbConfiguration(CockroachDbConfiguration resourceConfiguration) + : this(new CockroachDbConfiguration(), resourceConfiguration) + { + // Passes the configuration upwards to the base implementations to create an updated immutable copy. + } + + /// + /// Initializes a new instance of the class. + /// + /// The old Docker resource configuration. + /// The new Docker resource configuration. + public CockroachDbConfiguration(CockroachDbConfiguration oldValue, CockroachDbConfiguration newValue) + : base(oldValue, newValue) + { + Database = BuildConfiguration.Combine(oldValue.Database, newValue.Database); + Username = BuildConfiguration.Combine(oldValue.Username, newValue.Username); + Password = BuildConfiguration.Combine(oldValue.Password, newValue.Password); + } + + /// + /// Gets the CockroachDb database. + /// + public string Database { get; } + + /// + /// Gets the CockroachDb username. + /// + public string Username { get; } + + /// + /// Gets the CockroachDb password. + /// + public string Password { get; } +} \ No newline at end of file diff --git a/src/Testcontainers.CockroachDb/CockroachDbContainer.cs b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs new file mode 100644 index 000000000..d9d4e8f8e --- /dev/null +++ b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs @@ -0,0 +1,51 @@ +namespace Testcontainers.CockroachDb; + +/// +[PublicAPI] +public sealed class CockroachDbContainer : DockerContainer, IDatabaseContainer +{ + private readonly CockroachDbConfiguration _configuration; + + /// + /// Initializes a new instance of the class. + /// + /// The container configuration. + /// The logger. + public CockroachDbContainer(CockroachDbConfiguration configuration, ILogger logger) + : base(configuration, logger) + { + _configuration = configuration; + } + + /// + /// Gets the CockroachDb connection string. + /// + /// The CockroachDb connection string. + public string GetConnectionString() + { + var properties = new Dictionary(); + properties.Add("Host", Hostname); + properties.Add("Port", GetMappedPublicPort(CockroachDbBuilder.CockroachDbPort).ToString()); + properties.Add("Database", _configuration.Database); + properties.Add("Username", _configuration.Username); + properties.Add("Password", _configuration.Password); + return string.Join(";", properties.Select(property => string.Join("=", property.Key, property.Value))); + } + + /// + /// Executes the SQL script in the CockroachDb container. + /// + /// The content of the SQL script to execute. + /// Cancellation token. + /// Task that completes when the SQL script has been executed. + public async Task ExecScriptAsync(string scriptContent, CancellationToken ct = default) + { + var scriptFilePath = string.Join("/", string.Empty, "tmp", Guid.NewGuid().ToString("D"), Path.GetRandomFileName()); + + await CopyAsync(Encoding.Default.GetBytes(scriptContent), scriptFilePath, Unix.FileMode644, ct) + .ConfigureAwait(false); + + return await ExecAsync(new[] { "cockroach sql", "--insecure", "--execute=", scriptFilePath }, ct) + .ConfigureAwait(false); + } +} \ No newline at end of file diff --git a/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj b/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj new file mode 100644 index 000000000..7048179d1 --- /dev/null +++ b/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj @@ -0,0 +1,12 @@ + + + netstandard2.0;netstandard2.1 + latest + + + + + + + + \ No newline at end of file diff --git a/src/Testcontainers.CockroachDb/Usings.cs b/src/Testcontainers.CockroachDb/Usings.cs new file mode 100644 index 000000000..a01abde62 --- /dev/null +++ b/src/Testcontainers.CockroachDb/Usings.cs @@ -0,0 +1,14 @@ +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Text; +global using System.Threading; +global using System.Threading.Tasks; +global using Docker.DotNet.Models; +global using DotNet.Testcontainers; +global using DotNet.Testcontainers.Builders; +global using DotNet.Testcontainers.Configurations; +global using DotNet.Testcontainers.Containers; +global using JetBrains.Annotations; +global using Microsoft.Extensions.Logging; \ No newline at end of file diff --git a/tests/Testcontainers.CockroachDb.Tests/.editorconfig b/tests/Testcontainers.CockroachDb.Tests/.editorconfig new file mode 100644 index 000000000..6f066619d --- /dev/null +++ b/tests/Testcontainers.CockroachDb.Tests/.editorconfig @@ -0,0 +1 @@ +root = true \ No newline at end of file diff --git a/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs b/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs new file mode 100644 index 000000000..52e348976 --- /dev/null +++ b/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs @@ -0,0 +1,45 @@ +namespace Testcontainers.CockroachDb; + +public sealed class CockroachDbContainerTest : IAsyncLifetime +{ + private readonly CockroachDbContainer _CockroachDbContainer = new CockroachDbBuilder().Build(); + + public Task InitializeAsync() + { + return _CockroachDbContainer.StartAsync(); + } + + public Task DisposeAsync() + { + return _CockroachDbContainer.DisposeAsync().AsTask(); + } + + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public void ConnectionStateReturnsOpen() + { + // Given + using DbConnection connection = new NpgsqlConnection(_CockroachDbContainer.GetConnectionString()); + + // When + connection.Open(); + + // Then + Assert.Equal(ConnectionState.Open, connection.State); + } + + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task ExecScriptReturnsSuccessful() + { + // Given + const string scriptContent = "SELECT 1;"; + + // When + var execResult = await _CockroachDbContainer.ExecScriptAsync(scriptContent) + .ConfigureAwait(false); + + // When + Assert.True(0L.Equals(execResult.ExitCode), execResult.Stderr); + } +} \ No newline at end of file diff --git a/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj b/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj new file mode 100644 index 000000000..ad7751f3e --- /dev/null +++ b/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj @@ -0,0 +1,18 @@ + + + net8.0 + false + false + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/Testcontainers.CockroachDb.Tests/Usings.cs b/tests/Testcontainers.CockroachDb.Tests/Usings.cs new file mode 100644 index 000000000..576c631bf --- /dev/null +++ b/tests/Testcontainers.CockroachDb.Tests/Usings.cs @@ -0,0 +1,6 @@ +global using System.Data; +global using System.Data.Common; +global using System.Threading.Tasks; +global using DotNet.Testcontainers.Commons; +global using Npgsql; +global using Xunit; \ No newline at end of file From 3313614b5dfb0fda38aaf11511cab84b70a47a98 Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Thu, 21 Dec 2023 03:31:06 -0300 Subject: [PATCH 2/7] fix: image --- src/Testcontainers.CockroachDb/CockroachDbBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs index c628fe0a7..4ece2fab1 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs @@ -4,7 +4,7 @@ namespace Testcontainers.CockroachDb; [PublicAPI] public sealed class CockroachDbBuilder : ContainerBuilder { - public const string CockroachDbImage = "cockroachdb:23.1"; + public const string CockroachDbImage = "cockroachdb/cockroach:v23.1.13"; public const ushort CockroachDbPort = 26257; From 45bedd1b49ec5757acd8659b3757dbfd344565ca Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Fri, 22 Dec 2023 11:06:38 -0300 Subject: [PATCH 3/7] fix: wait strategy and use file to execute query --- src/Testcontainers.CockroachDb/CockroachDbBuilder.cs | 5 ++++- src/Testcontainers.CockroachDb/CockroachDbContainer.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs index 4ece2fab1..987acd5ab 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs @@ -7,6 +7,7 @@ public sealed class CockroachDbBuilder : ContainerBuilder + request.ForPath("/health").ForPort(CockroachDbRestPort))); } /// diff --git a/src/Testcontainers.CockroachDb/CockroachDbContainer.cs b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs index d9d4e8f8e..26d06bf4a 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbContainer.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs @@ -45,7 +45,7 @@ public async Task ExecScriptAsync(string scriptContent, Cancellation await CopyAsync(Encoding.Default.GetBytes(scriptContent), scriptFilePath, Unix.FileMode644, ct) .ConfigureAwait(false); - return await ExecAsync(new[] { "cockroach sql", "--insecure", "--execute=", scriptFilePath }, ct) + return await ExecAsync(new[] { "cockroach", "sql", "--file", scriptFilePath }, ct) .ConfigureAwait(false); } } \ No newline at end of file From 7d9b25edecffa1adefb2d7d2fb5427433c086d6f Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Fri, 22 Dec 2023 11:41:01 -0300 Subject: [PATCH 4/7] fix: add missing insecure --- src/Testcontainers.CockroachDb/CockroachDbContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Testcontainers.CockroachDb/CockroachDbContainer.cs b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs index 26d06bf4a..84deffa1e 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbContainer.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbContainer.cs @@ -45,7 +45,7 @@ public async Task ExecScriptAsync(string scriptContent, Cancellation await CopyAsync(Encoding.Default.GetBytes(scriptContent), scriptFilePath, Unix.FileMode644, ct) .ConfigureAwait(false); - return await ExecAsync(new[] { "cockroach", "sql", "--file", scriptFilePath }, ct) + return await ExecAsync(new[] { "cockroach", "sql", "--insecure", "--file", scriptFilePath }, ct) .ConfigureAwait(false); } } \ No newline at end of file From 703cf8a4acffa6e46de63e4e494e654c76f26883 Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Fri, 22 Dec 2023 11:54:38 -0300 Subject: [PATCH 5/7] fix: crdb version at docs --- docs/modules/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/index.md b/docs/modules/index.md index ca12c3f57..292fc2ea7 100644 --- a/docs/modules/index.md +++ b/docs/modules/index.md @@ -29,7 +29,7 @@ await moduleNameContainer.StartAsync(); | Consul | `consul:1.15` | [NuGet](https://www.nuget.org/packages/Testcontainers.Consul) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Consul) | | Couchbase | `couchbase:community-7.0.2` | [NuGet](https://www.nuget.org/packages/Testcontainers.Couchbase) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Couchbase) | | CouchDB | `couchdb:3.3` | [NuGet](https://www.nuget.org/packages/Testcontainers.CouchDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CouchDb) | -| CockroachDB | `cockroachdb:23.1` | [NuGet](https://www.nuget.org/packages/Testcontainers.CockroachDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CockroachDb) | +| CockroachDB | `cockroachdb:23.1.13` | [NuGet](https://www.nuget.org/packages/Testcontainers.CockroachDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CockroachDb) | | DynamoDB | `amazon/dynamodb-local:1.21.0` | [NuGet](https://www.nuget.org/packages/Testcontainers.DynamoDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.DynamoDb) | | Elasticsearch | `elasticsearch:8.6.1` | [NuGet](https://www.nuget.org/packages/Testcontainers.Elasticsearch) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Elasticsearch) | | EventStoreDB | `eventstore/eventstore:22.10.1-buster-slim` | [NuGet](https://www.nuget.org/packages/Testcontainers.EventStoreDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.EventStoreDb) | From 1138d3cf5df8d7c88510c473aed126f52d0d598e Mon Sep 17 00:00:00 2001 From: rafaumlemos Date: Wed, 24 Jan 2024 11:56:51 -0300 Subject: [PATCH 6/7] fix: use empty string --- src/Testcontainers.CockroachDb/CockroachDbBuilder.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs index 987acd5ab..d6691b42d 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs @@ -13,7 +13,7 @@ public sealed class CockroachDbBuilder : ContainerBuilder /// Initializes a new instance of the class. @@ -99,8 +99,7 @@ protected override void Validate() base.Validate(); _ = Guard.Argument(DockerResourceConfiguration.Password, nameof(DockerResourceConfiguration.Password)) - .NotNull() - .NotEmpty(); + .NotNull(); } /// From 2d362d3a9bc8cef7615b7d8e6948de81e0b01e76 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Fri, 26 Jan 2024 17:36:47 +0100 Subject: [PATCH 7/7] chore: Apply minor changes to keep modules consistent --- Testcontainers.sln | 30 +++++++++---------- docs/modules/index.md | 2 +- .../CockroachDbBuilder.cs | 7 +++-- .../Testcontainers.CockroachDb.csproj | 2 +- .../PostgreSqlBuilder.cs | 2 +- .../CockroachDbContainerTest.cs | 12 ++++---- .../Testcontainers.CockroachDb.Tests.csproj | 8 ++--- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Testcontainers.sln b/Testcontainers.sln index 11956c08f..94af5e2c3 100644 --- a/Testcontainers.sln +++ b/Testcontainers.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 @@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Bigtable", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.ClickHouse", "src\Testcontainers.ClickHouse\Testcontainers.ClickHouse.csproj", "{B061A78E-536E-4CA1-8401-234D5FBFBAB7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb", "src\Testcontainers.CockroachDb\Testcontainers.CockroachDb.csproj", "{8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Consul", "src\Testcontainers.Consul\Testcontainers.Consul.csproj", "{51ED33B9-B688-401E-85F2-329D3C935BD1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CosmosDb", "src\Testcontainers.CosmosDb\Testcontainers.CosmosDb.csproj", "{A724806F-8C94-4438-8011-04A9A1575318}" @@ -107,6 +109,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Bigtable.Tes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.ClickHouse.Tests", "tests\Testcontainers.ClickHouse.Tests\Testcontainers.ClickHouse.Tests.csproj", "{9D0A0B32-4921-400C-99CB-8650677E3E44}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb.Tests", "tests\Testcontainers.CockroachDb.Tests\Testcontainers.CockroachDb.Tests.csproj", "{685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Commons", "tests\Testcontainers.Commons\Testcontainers.Commons.csproj", "{2478673C-B063-469D-ABD1-0C3E0A25541B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Consul.Tests", "tests\Testcontainers.Consul.Tests\Testcontainers.Consul.Tests.csproj", "{91B23679-A2A5-4132-8AFA-740CE40A88B6}" @@ -187,10 +191,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Tests", "tes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.WebDriver.Tests", "tests\Testcontainers.WebDriver.Tests\Testcontainers.WebDriver.Tests.csproj", "{EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb", "src\Testcontainers.CockroachDb\Testcontainers.CockroachDb.csproj", "{8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.CockroachDb.Tests", "tests\Testcontainers.CockroachDb.Tests\Testcontainers.CockroachDb.Tests.csproj", "{685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -224,6 +224,10 @@ Global {B061A78E-536E-4CA1-8401-234D5FBFBAB7}.Debug|Any CPU.Build.0 = Debug|Any CPU {B061A78E-536E-4CA1-8401-234D5FBFBAB7}.Release|Any CPU.ActiveCfg = Release|Any CPU {B061A78E-536E-4CA1-8401-234D5FBFBAB7}.Release|Any CPU.Build.0 = Release|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.Build.0 = Release|Any CPU {51ED33B9-B688-401E-85F2-329D3C935BD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {51ED33B9-B688-401E-85F2-329D3C935BD1}.Debug|Any CPU.Build.0 = Debug|Any CPU {51ED33B9-B688-401E-85F2-329D3C935BD1}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -388,6 +392,10 @@ Global {9D0A0B32-4921-400C-99CB-8650677E3E44}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D0A0B32-4921-400C-99CB-8650677E3E44}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D0A0B32-4921-400C-99CB-8650677E3E44}.Release|Any CPU.Build.0 = Release|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.Build.0 = Release|Any CPU {2478673C-B063-469D-ABD1-0C3E0A25541B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2478673C-B063-469D-ABD1-0C3E0A25541B}.Debug|Any CPU.Build.0 = Debug|Any CPU {2478673C-B063-469D-ABD1-0C3E0A25541B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -548,14 +556,6 @@ Global {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2}.Release|Any CPU.Build.0 = Release|Any CPU - {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73}.Release|Any CPU.Build.0 = Release|Any CPU - {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {5365F780-0E6C-41F0-B1B9-7DC34368F80C} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} @@ -564,6 +564,7 @@ Global {A9FF9C7F-BBA0-4B44-90B7-48A60F9E00F3} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} {302EC1E0-AE75-4E99-A6BF-524F35338BC8} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} {B061A78E-536E-4CA1-8401-234D5FBFBAB7} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} + {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} {51ED33B9-B688-401E-85F2-329D3C935BD1} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} {A724806F-8C94-4438-8011-04A9A1575318} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} {58E94721-2681-4D82-8D94-0B2F9DB0D575} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} @@ -605,6 +606,7 @@ Global {03E60673-078A-4508-99AD-8537CE6F78F1} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {2E7B92E3-8526-4706-90F3-00F0F5C47C37} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {9D0A0B32-4921-400C-99CB-8650677E3E44} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} + {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {2478673C-B063-469D-ABD1-0C3E0A25541B} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {91B23679-A2A5-4132-8AFA-740CE40A88B6} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {BD445A54-F411-4758-955E-397A1E98680C} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} @@ -645,7 +647,5 @@ Global {1A1983E6-5297-435F-B467-E8E1F11277D6} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {27CDB869-A150-4593-958F-6F26E5391E7C} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} {EBA72C3B-57D5-43FF-A5B4-3D55B3B6D4C2} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} - {8D9871C6-5A39-4F0B-A15A-E87D34F3EA73} = {673F23AE-7694-4BB9-ABD4-136D6C13634E} - {685E6D9A-B05E-41D9-A08E-5F3CA7733F7D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF} EndGlobalSection EndGlobal diff --git a/docs/modules/index.md b/docs/modules/index.md index 2840998c0..e533faecf 100644 --- a/docs/modules/index.md +++ b/docs/modules/index.md @@ -29,7 +29,7 @@ await moduleNameContainer.StartAsync(); | BigQuery | `ghcr.io/goccy/bigquery-emulator:0.4` | [NuGet](https://www.nuget.org/packages/Testcontainers.BigQuery) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.BigQuery) | | Bigtable | `gcr.io/google.com/cloudsdktool/google-cloud-cli:446.0.1-emulators` | [NuGet](https://www.nuget.org/packages/Testcontainers.Bigtable) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Bigtable) | | ClickHouse | `clickhouse/clickhouse-server:23.6-alpine` | [NuGet](https://www.nuget.org/packages/Testcontainers.ClickHouse) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.ClickHouse) | -| CockroachDB | `cockroachdb:23.1.13` | [NuGet](https://www.nuget.org/packages/Testcontainers.CockroachDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CockroachDb) | +| CockroachDB | `cockroachdb:23.1.13` | [NuGet](https://www.nuget.org/packages/Testcontainers.CockroachDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CockroachDb) | | Consul | `consul:1.15` | [NuGet](https://www.nuget.org/packages/Testcontainers.Consul) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Consul) | | Couchbase | `couchbase:community-7.0.2` | [NuGet](https://www.nuget.org/packages/Testcontainers.Couchbase) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Couchbase) | | CouchDB | `couchdb:3.3` | [NuGet](https://www.nuget.org/packages/Testcontainers.CouchDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.CouchDb) | diff --git a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs index d6691b42d..0b3283ff7 100644 --- a/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs +++ b/src/Testcontainers.CockroachDb/CockroachDbBuilder.cs @@ -4,9 +4,10 @@ namespace Testcontainers.CockroachDb; [PublicAPI] public sealed class CockroachDbBuilder : ContainerBuilder { - public const string CockroachDbImage = "cockroachdb/cockroach:v23.1.13"; + public const string CockroachDbImage = "cockroachdb/cockroach:latest-v23.1"; public const ushort CockroachDbPort = 26257; + public const ushort CockroachDbRestPort = 8080; public const string DefaultDatabase = "defaultdb"; @@ -90,7 +91,7 @@ protected override CockroachDbBuilder Init() .WithCommand("start-single-node") .WithCommand("--insecure") .WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(request => - request.ForPath("/health").ForPort(CockroachDbRestPort))); + request.ForPort(CockroachDbRestPort).ForPath("/health"))); } /// @@ -123,7 +124,7 @@ protected override CockroachDbBuilder Merge(CockroachDbConfiguration oldValue, C /// private sealed class WaitUntil : IWaitUntil { - private static readonly string[] LineEndings = { "\r\n", "\n" }; + private static readonly string[] LineEndings = ["\r\n", "\n"]; /// public async Task UntilAsync(IContainer container) diff --git a/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj b/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj index 7048179d1..87905ccf0 100644 --- a/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj +++ b/src/Testcontainers.CockroachDb/Testcontainers.CockroachDb.csproj @@ -7,6 +7,6 @@ - + \ No newline at end of file diff --git a/src/Testcontainers.PostgreSql/PostgreSqlBuilder.cs b/src/Testcontainers.PostgreSql/PostgreSqlBuilder.cs index fc7e5be11..53a3844b6 100644 --- a/src/Testcontainers.PostgreSql/PostgreSqlBuilder.cs +++ b/src/Testcontainers.PostgreSql/PostgreSqlBuilder.cs @@ -123,7 +123,7 @@ protected override PostgreSqlBuilder Merge(PostgreSqlConfiguration oldValue, Pos /// private sealed class WaitUntil : IWaitUntil { - private static readonly string[] LineEndings = { "\r\n", "\n" }; + private static readonly string[] LineEndings = ["\r\n", "\n"]; /// public async Task UntilAsync(IContainer container) diff --git a/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs b/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs index 52e348976..14ce462a4 100644 --- a/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs +++ b/tests/Testcontainers.CockroachDb.Tests/CockroachDbContainerTest.cs @@ -2,16 +2,16 @@ namespace Testcontainers.CockroachDb; public sealed class CockroachDbContainerTest : IAsyncLifetime { - private readonly CockroachDbContainer _CockroachDbContainer = new CockroachDbBuilder().Build(); + private readonly CockroachDbContainer _cockroachDbContainer = new CockroachDbBuilder().Build(); public Task InitializeAsync() { - return _CockroachDbContainer.StartAsync(); + return _cockroachDbContainer.StartAsync(); } public Task DisposeAsync() { - return _CockroachDbContainer.DisposeAsync().AsTask(); + return _cockroachDbContainer.DisposeAsync().AsTask(); } [Fact] @@ -19,7 +19,7 @@ public Task DisposeAsync() public void ConnectionStateReturnsOpen() { // Given - using DbConnection connection = new NpgsqlConnection(_CockroachDbContainer.GetConnectionString()); + using DbConnection connection = new NpgsqlConnection(_cockroachDbContainer.GetConnectionString()); // When connection.Open(); @@ -36,8 +36,8 @@ public async Task ExecScriptReturnsSuccessful() const string scriptContent = "SELECT 1;"; // When - var execResult = await _CockroachDbContainer.ExecScriptAsync(scriptContent) - .ConfigureAwait(false); + var execResult = await _cockroachDbContainer.ExecScriptAsync(scriptContent) + .ConfigureAwait(true); // When Assert.True(0L.Equals(execResult.ExitCode), execResult.Stderr); diff --git a/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj b/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj index ad7751f3e..ed5cac687 100644 --- a/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj +++ b/tests/Testcontainers.CockroachDb.Tests/Testcontainers.CockroachDb.Tests.csproj @@ -7,12 +7,12 @@ - - + + - - + + \ No newline at end of file