Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[*.cs]

# Default severity for analyzer diagnostics with category 'StyleCop.CSharp.OrderingRules'
dotnet_analyzer_diagnostic.category-StyleCop.CSharp.OrderingRules.severity = none
16 changes: 15 additions & 1 deletion TestEnvironment.sln
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEnvironment.Docker.Cont
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEnvironment.Docker.Containers.Postgres", "src\TestEnvironment.Docker.Containers.Postgres\TestEnvironment.Docker.Containers.Postgres.csproj", "{8542AE96-7EC5-4965-98B1-95B63F7DFE6E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestEnvironmenbt.Docker.Containers.Kafka", "src\TestEnvironmenbt.Docker.Containers.Kafka\TestEnvironmenbt.Docker.Containers.Kafka.csproj", "{273B2E1E-C2A1-4A74-9BA3-0042314B133D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEnvironment.Docker.Containers.Oracle", "src\TestEnvironment.Docker.Containers.Oracle\TestEnvironment.Docker.Containers.Oracle.csproj", "{22205A7A-5669-44F5-AF9C-D48E325BDF74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEnvironment.Docker.Containers.Firebird", "src\TestEnvironment.Docker.Containers.Firebird\TestEnvironment.Docker.Containers.Firebird.csproj", "{FAD25D60-C50D-4559-B4B2-D0E09A14471C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestEnvironmenbt.Docker.Containers.Kafka", "src\TestEnvironmenbt.Docker.Containers.Kafka\TestEnvironmenbt.Docker.Containers.Kafka.csproj", "{273B2E1E-C2A1-4A74-9BA3-0042314B133D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -69,6 +73,14 @@ Global
{8542AE96-7EC5-4965-98B1-95B63F7DFE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8542AE96-7EC5-4965-98B1-95B63F7DFE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8542AE96-7EC5-4965-98B1-95B63F7DFE6E}.Release|Any CPU.Build.0 = Release|Any CPU
{22205A7A-5669-44F5-AF9C-D48E325BDF74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{22205A7A-5669-44F5-AF9C-D48E325BDF74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22205A7A-5669-44F5-AF9C-D48E325BDF74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{22205A7A-5669-44F5-AF9C-D48E325BDF74}.Release|Any CPU.Build.0 = Release|Any CPU
{FAD25D60-C50D-4559-B4B2-D0E09A14471C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAD25D60-C50D-4559-B4B2-D0E09A14471C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAD25D60-C50D-4559-B4B2-D0E09A14471C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAD25D60-C50D-4559-B4B2-D0E09A14471C}.Release|Any CPU.Build.0 = Release|Any CPU
{273B2E1E-C2A1-4A74-9BA3-0042314B133D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{273B2E1E-C2A1-4A74-9BA3-0042314B133D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{273B2E1E-C2A1-4A74-9BA3-0042314B133D}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -87,6 +99,8 @@ Global
{CAB21076-1316-44EE-9718-8F487E1E7B73} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
{5F1E7192-A8D9-49B9-8F24-A29CB06B43DC} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
{8542AE96-7EC5-4965-98B1-95B63F7DFE6E} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
{22205A7A-5669-44F5-AF9C-D48E325BDF74} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
{FAD25D60-C50D-4559-B4B2-D0E09A14471C} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
{273B2E1E-C2A1-4A74-9BA3-0042314B133D} = {9E3390D1-D6AB-48E9-8FBA-C622BCF2C54D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Kafka</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Kafka</RootNamespace>
<Version>1.0.2</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Elasticsearch</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Elasticsearch</RootNamespace>
<Version>1.1.10</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System.Collections.Generic;

namespace TestEnvironment.Docker.Containers.Firebird
{
public static class DockerEnvironmentBuilderExtensions
{
public static IDockerEnvironmentBuilder AddFirebirdContainer(
this IDockerEnvironmentBuilder builder,
string name,
string userName = "user1",
string password = "p4ssw0rd",
string imageName = "jacobalberty/firebird",
string tag = "latest",
IDictionary<string, string> environmentVariables = null,
IDictionary<ushort, ushort> ports = null,
bool reuseContainer = false)
{
return builder.AddDependency(
new FirebirdContainer(
builder.DockerClient,
name.GetContainerName(builder.EnvironmentName),
userName,
password,
imageName,
tag,
new Dictionary<string, string>
{
["FIREBIRD_USER"] = userName,
["FIREBIRD_PASSWORD"] = password,
["FIREBIRD_DATABASE"] = "SampleDatabase"

// ,
// ["EnableWireCrypt"] = "true",
// ["ISC_PASSWORD"] = password,
}.MergeDictionaries(environmentVariables),
ports,
builder.IsDockerInDocker,
reuseContainer,
new FirebirdContainerWaiter(builder.Logger),
new FirebirdContainerCleaner(builder.Logger, userName),
builder.Logger));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System.Collections.Generic;
using Docker.DotNet;
using Microsoft.Extensions.Logging;
using IP = System.Net.IPAddress;

namespace TestEnvironment.Docker.Containers.Firebird
{
public class FirebirdContainer : Container
{
private readonly string _userName;
private readonly string _password;

public FirebirdContainer(
DockerClient dockerClient,
string name,
string userName,
string password,
string imageName = "jacobalberty/firebird",
string tag = "latest",
IDictionary<string, string> environmentVariables = null,
IDictionary<ushort, ushort> ports = null,
bool isDockerInDocker = false,
bool reuseContainer = false,
IContainerWaiter containerWaiter = null,
IContainerCleaner containerCleaner = null,
ILogger logger = null)
: base(
dockerClient,
name,
imageName,
tag,
environmentVariables,
ports,
isDockerInDocker,
reuseContainer,
containerWaiter,
containerCleaner,
logger)
{
_userName = userName;
_password = password;
}

public string GetConnectionString()
{
var host = IsDockerInDocker ? IPAddress : IP.Loopback.ToString();
var port = IsDockerInDocker ? 3050 : Ports[3050];
return $"DataSource={host};Port={port};User={_userName};Password={_password};Pooling=false";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using FirebirdSql.Data.FirebirdClient;
using Microsoft.Extensions.Logging;

namespace TestEnvironment.Docker.Containers.Firebird
{
public class FirebirdContainerCleaner : IContainerCleaner<FirebirdContainer>
{
private readonly ILogger _logger;
private readonly string _userName;

public FirebirdContainerCleaner(ILogger logger, string userName)
{
_logger = logger;
_userName = userName;
}

public async Task Cleanup(FirebirdContainer container, CancellationToken token = default)
{
if (container == null)
{
throw new ArgumentNullException(nameof(container));
}

var cleanUpQuery = $"DROP OWNED BY {_userName}";

using (var connection = new FbConnection(container.GetConnectionString()))
using (var cleanUpCommand = new FbCommand(cleanUpQuery, connection))
{
try
{
await connection.OpenAsync(token);
await cleanUpCommand.ExecuteNonQueryAsync(token);
}
catch (Exception ex)
{
_logger?.LogError($"Firebird cleanup issue: {ex.Message}");
}
}
}

public Task Cleanup(Container container, CancellationToken token = default) => Cleanup((FirebirdContainer)container, token);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Threading;
using System.Threading.Tasks;
using FirebirdSql.Data.FirebirdClient;
using Microsoft.Extensions.Logging;

namespace TestEnvironment.Docker.Containers.Firebird
{
public class FirebirdContainerWaiter : BaseContainerWaiter<FirebirdContainer>
{
public FirebirdContainerWaiter(ILogger logger)
: base(logger)
{
}

protected override async Task<bool> PerformCheck(FirebirdContainer container, CancellationToken cancellationToken)
{
using var connection = new FbConnection(container.GetConnectionString());
using var command = new FbCommand("SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') from rdb$database;", connection);

await connection.OpenAsync(cancellationToken);
await command.ExecuteNonQueryAsync(cancellationToken);

return true;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Firebird</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Firebird</RootNamespace>
<Version>1.0.7</Version>
<PackageId>TestEnvironment.Docker.Containers.Firebird</PackageId>
<Authors>Fabien Ménager</Authors>
<Description>Add Firebird container specific functionality.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageTags>docker tests firebird container</PackageTags>
<PackageReleaseNotes>Update to the latest nugets.</PackageReleaseNotes>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\TestEnvironment.Docker\TestEnvironment.Docker.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="7.5.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Ftp</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Ftp</RootNamespace>
<Version>1.0.8</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Mail</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Mail</RootNamespace>
<Version>1.0.8</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.MariaDB</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.MariaDB</RootNamespace>
<Version>1.0.10</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Mongo</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Mongo</RootNamespace>
<Version>1.2.2</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>TestEnvironment.Docker.Containers.Mssql</AssemblyName>
<RootNamespace>TestEnvironment.Docker.Containers.Mssql</RootNamespace>
<Version>1.0.10</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System.Collections.Generic;

namespace TestEnvironment.Docker.Containers.Oracle
{
public static class DockerEnvironmentBuilderExtensions
{
public static IDockerEnvironmentBuilder AddOracleContainer(
this IDockerEnvironmentBuilder builder,
string name,
string userName = "system",
string password = "oracle",
string imageName = "wnameless/oracle-xe-11g-r2",
string tag = "latest",
IDictionary<string, string> environmentVariables = null,
IDictionary<ushort, ushort> ports = null,
bool reuseContainer = false)
{
return builder.AddDependency(
new OracleContainer(
builder.DockerClient,
name.GetContainerName(builder.EnvironmentName),
userName,
password,
imageName,
tag,
environmentVariables,
ports,
builder.IsDockerInDocker,
reuseContainer,
builder.Logger));
}
}
}
Binary file not shown.
50 changes: 50 additions & 0 deletions src/TestEnvironment.Docker.Containers.Oracle/OracleContainer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using System.Collections.Generic;
using Docker.DotNet;
using Microsoft.Extensions.Logging;
using IP = System.Net.IPAddress;

namespace TestEnvironment.Docker.Containers.Oracle
{
public class OracleContainer : Container
{
private readonly string _userName;
private readonly string _password;

public OracleContainer(
DockerClient dockerClient,
string name,
string userName,
string password,
string imageName = "wnameless/oracle-xe-11g-r2",
string tag = "latest",
IDictionary<string, string> environmentVariables = null,
IDictionary<ushort, ushort> ports = null,
bool isDockerInDocker = false,
bool reuseContainer = false,
ILogger logger = null,
IList<string> entrypoint = null)
: base(
dockerClient,
name,
imageName,
tag,
environmentVariables,
ports,
isDockerInDocker,
reuseContainer,
new OracleContainerWaiter(logger),
new OracleContainerCleaner(logger, userName),
logger)
{
_userName = userName;
_password = password;
}

public string GetConnectionString()
{
var host = IsDockerInDocker ? IPAddress : IP.Loopback.ToString();
var port = IsDockerInDocker ? 1521 : Ports[1521];
return $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={host})(PORT={port})))(CONNECT_DATA=(SERVICE_NAME=XE)));User ID={_userName};Password={_password}";
}
}
}
Loading