Skip to content

Commit

Permalink
chore(#626): Update CHANGELOG.md
Browse files Browse the repository at this point in the history
  • Loading branch information
HofmeisterAn committed Oct 24, 2022
1 parent d351697 commit a4e6ad9
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 82 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
- 601 Add `ITestcontainersBuilder<TDockerContainer>.WithImagePullPolicy` (@BenasB)
- 616 Add `ITestcontainersBuilder<TDockerContainer>.WithMacAddress` (@seb1992)
- 618 Match `.dockerignore` entry `*` to all files and directories
- 626 Support MySQL root password configuration (@DanielHabenicht)

### Changed

Expand Down
3 changes: 3 additions & 0 deletions Testcontainers.dic
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
awslocal
azurecr
azurite
capi
creds
dind
dvcm
enumerables
ghcr
Expand All @@ -27,3 +29,4 @@ servercore
sqlplus
testcontainer
testcontainers
tlsverify
3 changes: 3 additions & 0 deletions Testcontainers.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
<s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/QualifiedUsingAtNestedScope/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/InstalledDictionaries/InstalledDictionaries/=Testcontainers_002Edic/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=azurite/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=awslocal/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=azurecr/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=capi/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=creds/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=dind/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=dockerignore/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=dvcm/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=enumerables/@EntryIndexedValue">True</s:Boolean>
Expand All @@ -36,6 +38,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=sqlplus/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=testcontainer/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=testcontainers/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=tlsverify/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CheckNamespace/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToUsingDeclaration/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseAwaitUsing/@EntryIndexedValue">DO_NOT_SHOW</s:String>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
namespace DotNet.Testcontainers.Configurations
{
using System;
using DotNet.Testcontainers.Builders;
using JetBrains.Annotations;

/// <inheritdoc cref="TestcontainerDatabaseConfiguration" />
[PublicAPI]
public class MySqlTestcontainerConfiguration : TestcontainerDatabaseConfiguration
{
private const string MySqlRootUsername = "root";

private const string MySqlImage = "mysql:8.0.28";

private const int MySqlPort = 3306;

private const string RootUsername = "root";

/// <summary>
/// Initializes a new instance of the <see cref="MySqlTestcontainerConfiguration" /> class.
/// </summary>
Expand Down Expand Up @@ -43,23 +44,17 @@ public override string Username
{
get
{
string username;
if (this.Environments.TryGetValue("MYSQL_USER", out username))
{
return username;
}
else
{
return RootUsername;
}
return this.Environments.TryGetValue("MYSQL_USER", out var username) ? username : MySqlRootUsername;
}

set
{
// Only set the username if it is not "root", as mysql does not allow it.
if (value != RootUsername)
if (MySqlRootUsername.Equals(value, StringComparison.OrdinalIgnoreCase))
{
this.Environments["MYSQL_USER"] = value;
return;
}

this.Environments["MYSQL_USER"] = value;
}
}

Expand All @@ -69,8 +64,8 @@ public override string Password
get => this.Environments["MYSQL_PASSWORD"];
set
{
this.Environments["MYSQL_ROOT_PASSWORD"] = value;
this.Environments["MYSQL_PASSWORD"] = value;
this.Environments["MYSQL_ROOT_PASSWORD"] = value;
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/Testcontainers/Images/PullPolicy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ namespace DotNet.Testcontainers.Images
{
using System;
using Docker.DotNet.Models;
using JetBrains.Annotations;

/// <summary>
/// Pre-configured image pull policies.
/// </summary>
[PublicAPI]
public static class PullPolicy
{
/// <summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
namespace DotNet.Testcontainers.Tests.Fixtures
namespace DotNet.Testcontainers.Tests.Fixtures
{
using System;
using System.Data.Common;
using System.Threading.Tasks;
using DotNet.Testcontainers.Builders;
Expand All @@ -8,15 +9,21 @@ namespace DotNet.Testcontainers.Tests.Fixtures
using JetBrains.Annotations;
using MySqlConnector;

public abstract class MySqlBaseFixture : DatabaseFixture<MySqlTestcontainer, DbConnection>
[UsedImplicitly]
public class MySqlFixture : DatabaseFixture<MySqlTestcontainer, DbConnection>
{
private readonly TestcontainerDatabaseConfiguration configuration;

public MySqlBaseFixture(string username, string password)
public MySqlFixture()
: this(new MySqlTestcontainerConfiguration { Database = "db", Username = "mysql", Password = "mysql" })
{
}

protected MySqlFixture(TestcontainerDatabaseConfiguration configuration)
{
this.configuration = new MySqlTestcontainerConfiguration { Database = "db", Username = username, Password = password };
this.configuration = configuration;
this.Container = new TestcontainersBuilder<MySqlTestcontainer>()
.WithDatabase(this.configuration)
.WithDatabase(configuration)
.Build();
}

Expand All @@ -38,23 +45,16 @@ await this.Container.DisposeAsync()

public override void Dispose()
{
this.configuration.Dispose();
this.Dispose(true);
GC.SuppressFinalize(this);
}
}

[UsedImplicitly]
public sealed class MySqlNormalUserFixture : MySqlBaseFixture
{
public MySqlNormalUserFixture() : base("mysql", "mysql")
{
}
}

[UsedImplicitly]
public sealed class MySqlRootUserFixture : MySqlBaseFixture
{
public MySqlRootUserFixture() : base("root", "root")
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.configuration.Dispose();
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace DotNet.Testcontainers.Tests.Fixtures
{
using DotNet.Testcontainers.Configurations;
using JetBrains.Annotations;

[UsedImplicitly]
public sealed class MySqlRootUsernameFixture : MySqlFixture
{
public MySqlRootUsernameFixture()
: base(new MySqlTestcontainerConfiguration { Database = "db", Username = "root", Password = "root" })
{
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ namespace DotNet.Testcontainers.Tests.Unit
using DotNet.Testcontainers.Tests.Fixtures;
using Xunit;

[Collection(nameof(Testcontainers))]
public static class MySqlTestcontainerTest
{
[Collection(nameof(Testcontainers))]
public sealed class MySqlTestcontainerRootUserTest : IClassFixture<MySqlRootUserFixture>
public sealed class MySqlCustomUsernameTest : IClassFixture<MySqlFixture>
{
private readonly MySqlRootUserFixture mySqlFixture;
private readonly MySqlFixture mySqlFixture;

public MySqlTestcontainerRootUserTest(MySqlRootUserFixture mySqlFixture)
public MySqlCustomUsernameTest(MySqlFixture mySqlFixture)
{
this.mySqlFixture = mySqlFixture;
}
Expand Down Expand Up @@ -50,7 +49,6 @@ public async Task ExecScriptInRunningContainer()
.ConfigureAwait(false);

// Then
Assert.DoesNotContain("ERROR", result.Stderr);
Assert.Equal(0, result.ExitCode);
Assert.Contains("MyName", result.Stdout);
}
Expand All @@ -72,65 +70,31 @@ public async Task ThrowErrorInRunningContainerWithInvalidScript()
}

[Collection(nameof(Testcontainers))]
public sealed class MySqlTestcontainerNormalUserTest : IClassFixture<MySqlNormalUserFixture>
public sealed class MySqlRootUsernameTest : IClassFixture<MySqlRootUsernameFixture>
{
private readonly MySqlNormalUserFixture mySqlFixture;
private readonly MySqlFixture mySqlFixture;

public MySqlTestcontainerNormalUserTest(MySqlNormalUserFixture mySqlFixture)
public MySqlRootUsernameTest(MySqlRootUsernameFixture mySqlFixture)
{
this.mySqlFixture = mySqlFixture;
}

[Fact]
public async Task ConnectionEstablished()
public Task ConnectionEstablished()
{
// Given
var connection = this.mySqlFixture.Connection;

// When
await connection.OpenAsync()
.ConfigureAwait(false);

// Then
Assert.Equal(ConnectionState.Open, connection.State);
return new MySqlCustomUsernameTest(this.mySqlFixture).ConnectionEstablished();
}

[Fact]
public async Task ExecScriptInRunningContainer()
public Task ExecScriptInRunningContainer()
{
// Given
const string script = @"
CREATE TABLE MyTable (
id INT(6) UNSIGNED PRIMARY KEY,
name VARCHAR(30) NOT NULL
);
INSERT INTO MyTable (id, name) VALUES (1, 'MyName');
SELECT * FROM MyTable;
";

// When
var result = await this.mySqlFixture.Container.ExecScriptAsync(script)
.ConfigureAwait(false);

// Then
Assert.DoesNotContain("ERROR", result.Stderr);
Assert.Equal(0, result.ExitCode);
Assert.Contains("MyName", result.Stdout);
return new MySqlCustomUsernameTest(this.mySqlFixture).ExecScriptInRunningContainer();
}

[Fact]
public async Task ThrowErrorInRunningContainerWithInvalidScript()
public Task ThrowErrorInRunningContainerWithInvalidScript()
{
// Given
const string script = "invalid SQL command";

// When
var result = await this.mySqlFixture.Container.ExecScriptAsync(script)
.ConfigureAwait(false);

// Then
Assert.NotEqual(0, result.ExitCode);
Assert.Contains("ERROR 1064 (42000)", result.Stderr);
return new MySqlCustomUsernameTest(this.mySqlFixture).ThrowErrorInRunningContainerWithInvalidScript();
}
}
}
Expand Down

0 comments on commit a4e6ad9

Please sign in to comment.