Skip to content

Commit

Permalink
feat(Oracle): Add support for WithDatabase(string) for Oracle 18 and …
Browse files Browse the repository at this point in the history
…onwards. (#1321)

Co-authored-by: Andre Hofmeister <[email protected]>
  • Loading branch information
0xced and HofmeisterAn authored Feb 17, 2025
1 parent cc8610b commit 4c24aab
Show file tree
Hide file tree
Showing 15 changed files with 241 additions and 28 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ jobs:
{ name: "Testcontainers.Nats", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Neo4j", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Oracle", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Oracle11", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Oracle18", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Oracle21", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Oracle23", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.Papercut", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.PostgreSql", runs-on: "ubuntu-22.04" },
{ name: "Testcontainers.PubSub", runs-on: "ubuntu-22.04" },
Expand Down
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
<PackageVersion Include="NATS.Client" Version="1.0.8"/>
<PackageVersion Include="Neo4j.Driver" Version="5.5.0"/>
<PackageVersion Include="Npgsql" Version="6.0.11"/>
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="3.21.160"/>
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="23.7.0"/>
<PackageVersion Include="RabbitMQ.Client" Version="6.4.0"/>
<PackageVersion Include="RavenDB.Client" Version="5.4.100"/>
<PackageVersion Include="Selenium.WebDriver" Version="4.8.1"/>
Expand Down
28 changes: 28 additions & 0 deletions Testcontainers.sln
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Neo4j.Tests"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle.Tests", "tests\Testcontainers.Oracle.Tests\Testcontainers.Oracle.Tests.csproj", "{4AC1088B-9965-4497-AC8E-570F1AD5631F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle11.Tests", "tests\Testcontainers.Oracle11.Tests\Testcontainers.Oracle11.Tests.csproj", "{0A0AC20D-226B-46F9-B267-0D00964A7601}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle18.Tests", "tests\Testcontainers.Oracle18.Tests\Testcontainers.Oracle18.Tests.csproj", "{E4C887A9-A44A-4641-BB9B-0664CC4C362F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle21.Tests", "tests\Testcontainers.Oracle21.Tests\Testcontainers.Oracle21.Tests.csproj", "{1F6415BD-646E-436A-9F57-9AE30A0AA694}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Oracle23.Tests", "tests\Testcontainers.Oracle23.Tests\Testcontainers.Oracle23.Tests.csproj", "{FC417A93-4521-4FDB-943E-23886F3243C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Papercut.Tests", "tests\Testcontainers.Papercut.Tests\Testcontainers.Papercut.Tests.csproj", "{F03FA970-BE2B-4AE2-96FE-7E1F805CEA20}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Platform.Linux.Tests", "tests\Testcontainers.Platform.Linux.Tests\Testcontainers.Platform.Linux.Tests.csproj", "{DA1D7ADE-452C-4369-83CC-56289176EACD}"
Expand Down Expand Up @@ -578,6 +586,22 @@ Global
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4AC1088B-9965-4497-AC8E-570F1AD5631F}.Release|Any CPU.Build.0 = Release|Any CPU
{0A0AC20D-226B-46F9-B267-0D00964A7601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A0AC20D-226B-46F9-B267-0D00964A7601}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A0AC20D-226B-46F9-B267-0D00964A7601}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A0AC20D-226B-46F9-B267-0D00964A7601}.Release|Any CPU.Build.0 = Release|Any CPU
{E4C887A9-A44A-4641-BB9B-0664CC4C362F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4C887A9-A44A-4641-BB9B-0664CC4C362F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4C887A9-A44A-4641-BB9B-0664CC4C362F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4C887A9-A44A-4641-BB9B-0664CC4C362F}.Release|Any CPU.Build.0 = Release|Any CPU
{1F6415BD-646E-436A-9F57-9AE30A0AA694}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F6415BD-646E-436A-9F57-9AE30A0AA694}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F6415BD-646E-436A-9F57-9AE30A0AA694}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F6415BD-646E-436A-9F57-9AE30A0AA694}.Release|Any CPU.Build.0 = Release|Any CPU
{FC417A93-4521-4FDB-943E-23886F3243C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC417A93-4521-4FDB-943E-23886F3243C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC417A93-4521-4FDB-943E-23886F3243C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC417A93-4521-4FDB-943E-23886F3243C8}.Release|Any CPU.Build.0 = Release|Any CPU
{F03FA970-BE2B-4AE2-96FE-7E1F805CEA20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F03FA970-BE2B-4AE2-96FE-7E1F805CEA20}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F03FA970-BE2B-4AE2-96FE-7E1F805CEA20}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -735,6 +759,10 @@ Global
{87A3F137-6DC3-4CE5-91E6-01797D076086} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{D3F63405-C0FA-4F83-8B79-E30BFF5FF5BF} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{4AC1088B-9965-4497-AC8E-570F1AD5631F} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{0A0AC20D-226B-46F9-B267-0D00964A7601} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{E4C887A9-A44A-4641-BB9B-0664CC4C362F} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{1F6415BD-646E-436A-9F57-9AE30A0AA694} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{FC417A93-4521-4FDB-943E-23886F3243C8} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{F03FA970-BE2B-4AE2-96FE-7E1F805CEA20} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{DA1D7ADE-452C-4369-83CC-56289176EACD} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
{3E55CBE8-AFE8-426D-9470-49D63CD1051C} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
Expand Down
61 changes: 50 additions & 11 deletions src/Testcontainers.Oracle/OracleBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public sealed class OracleBuilder : ContainerBuilder<OracleBuilder, OracleContai

public const ushort OraclePort = 1521;

[Obsolete("This constant is obsolete and should not be used. It is only applicable for Oracle images between versions 11 and 22.")]
public const string DefaultDatabase = "XEPDB1";

public const string DefaultUsername = "oracle";
Expand Down Expand Up @@ -36,6 +37,19 @@ private OracleBuilder(OracleConfiguration resourceConfiguration)
/// <inheritdoc />
protected override OracleConfiguration DockerResourceConfiguration { get; }

/// <summary>
/// Sets the Oracle database.
/// </summary>
/// <remarks>
/// The database can only be set for Oracle 18 and onwards.
/// </remarks>
/// <param name="database">The Oracle database.</param>
/// <returns>A configured instance of <see cref="OracleBuilder" />.</returns>
public OracleBuilder WithDatabase(string database)
{
return Merge(DockerResourceConfiguration, new OracleConfiguration(database: database));
}

/// <summary>
/// Sets the Oracle username.
/// </summary>
Expand Down Expand Up @@ -63,6 +77,18 @@ public OracleBuilder WithPassword(string password)
public override OracleContainer Build()
{
Validate();

var defaultServiceName = GetDefaultServiceName();
if (DockerResourceConfiguration.Database == null)
{
return new OracleContainer(WithDatabase(defaultServiceName).DockerResourceConfiguration);
}

if (DockerResourceConfiguration.Database != defaultServiceName)
{
return new OracleContainer(WithEnvironment("ORACLE_DATABASE", DockerResourceConfiguration.Database).DockerResourceConfiguration);
}

return new OracleContainer(DockerResourceConfiguration);
}

Expand All @@ -72,7 +98,6 @@ protected override OracleBuilder Init()
return base.Init()
.WithImage(OracleImage)
.WithPortBinding(OraclePort, true)
.WithDatabase(DefaultDatabase)
.WithUsername(DefaultUsername)
.WithPassword(DefaultPassword)
.WithWaitStrategy(Wait.ForUnixContainer().UntilMessageIsLogged("DATABASE IS READY TO USE!"));
Expand All @@ -83,6 +108,18 @@ protected override void Validate()
{
base.Validate();

const string message = "The image '{0}' does not support configuring the database. It is only supported on Oracle 18 and onwards.";

Predicate<OracleConfiguration> databaseConfigurationNotSupported = value =>
value.Database != null && value.Image.MatchVersion(v => v.Major < 18);

_ = Guard.Argument(DockerResourceConfiguration, nameof(DockerResourceConfiguration.Database))
.ThrowIf(argument => databaseConfigurationNotSupported(argument.Value), _ => throw new NotSupportedException(string.Format(message, DockerResourceConfiguration.Image.FullName)));

_ = Guard.Argument(DockerResourceConfiguration.Username, nameof(DockerResourceConfiguration.Username))
.NotNull()
.NotEmpty();

_ = Guard.Argument(DockerResourceConfiguration.Password, nameof(DockerResourceConfiguration.Password))
.NotNull()
.NotEmpty();
Expand All @@ -106,16 +143,18 @@ protected override OracleBuilder Merge(OracleConfiguration oldValue, OracleConfi
return new OracleBuilder(new OracleConfiguration(oldValue, newValue));
}

/// <summary>
/// Sets the Oracle database.
/// </summary>
/// <remarks>
/// The Docker image does not allow to configure the database.
/// </remarks>
/// <param name="database">The Oracle database.</param>
/// <returns>A configured instance of <see cref="OracleBuilder" />.</returns>
private OracleBuilder WithDatabase(string database)
private string GetDefaultServiceName()
{
return Merge(DockerResourceConfiguration, new OracleConfiguration(database: database));
if (DockerResourceConfiguration.Image.MatchVersion(v => v.Major >= 23))
{
return "FREEPDB1";
}

if (DockerResourceConfiguration.Image.MatchVersion(v => v.Major > 11))
{
return "XEPDB1";
}

return "XE";
}
}
71 changes: 56 additions & 15 deletions tests/Testcontainers.Oracle.Tests/OracleContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
namespace Testcontainers.Oracle;

public sealed class OracleContainerTest : IAsyncLifetime
public abstract class OracleContainerTest(OracleContainerTest.OracleFixture oracleFixture)
{
private readonly OracleContainer _oracleContainer = new OracleBuilder().Build();

public Task InitializeAsync()
{
return _oracleContainer.StartAsync();
}

public Task DisposeAsync()
{
return _oracleContainer.DisposeAsync().AsTask();
}

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public void ConnectionStateReturnsOpen()
{
// Given
using DbConnection connection = new OracleConnection(_oracleContainer.GetConnectionString());
using DbConnection connection = oracleFixture.CreateConnection();

// When
connection.Open();
Expand All @@ -36,11 +24,64 @@ public async Task ExecScriptReturnsSuccessful()
const string scriptContent = "SELECT 1 FROM DUAL;";

// When
var execResult = await _oracleContainer.ExecScriptAsync(scriptContent)
var execResult = await oracleFixture.Container.ExecScriptAsync(scriptContent)
.ConfigureAwait(true);

// Then
Assert.True(0L.Equals(execResult.ExitCode), execResult.Stderr);
Assert.Empty(execResult.Stderr);
}

public abstract class OracleFixture(IMessageSink messageSink, string edition, int? version, string database = null) : DbContainerFixture<OracleBuilder, OracleContainer>(messageSink)
{
public override DbProviderFactory DbProviderFactory => OracleClientFactory.Instance;

protected override OracleBuilder Configure(OracleBuilder builder)
{
if (edition == null && version == null)
{
return builder;
}

var image = $"gvenzl/oracle-{edition}:{version}-slim-faststart";
return database == null ? builder.WithImage(image) : builder.WithImage(image).WithDatabase(database);
}
}

#if ORACLE_DEFAULT
[UsedImplicitly] public sealed class OracleDefault(OracleDefaultFixture fixture) : OracleContainerTest(fixture), IClassFixture<OracleDefaultFixture>;
[UsedImplicitly] public sealed class OracleDefaultFixture(IMessageSink messageSink) : OracleFixture(messageSink, null, null);
#endif

#if ORACLE_11
[UsedImplicitly] public sealed class Oracle11(Oracle11Fixture fixture) : OracleContainerTest(fixture), IClassFixture<Oracle11Fixture>;
[UsedImplicitly] public sealed class Oracle11Fixture(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 11);
#endif

#if ORACLE_18
[UsedImplicitly] public sealed class Oracle18(Oracle18Fixture fixture) : OracleContainerTest(fixture), IClassFixture<Oracle18Fixture>;
[UsedImplicitly] public sealed class Oracle18Default(Oracle18FixtureDefault fixture) : OracleContainerTest(fixture), IClassFixture<Oracle18FixtureDefault>;
[UsedImplicitly] public sealed class Oracle18Scott(Oracle18FixtureScott fixture) : OracleContainerTest(fixture), IClassFixture<Oracle18FixtureScott>;
[UsedImplicitly] public sealed class Oracle18Fixture(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 18);
[UsedImplicitly] public sealed class Oracle18FixtureDefault(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 18, "XEPDB1");
[UsedImplicitly] public sealed class Oracle18FixtureScott(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 18, "SCOTT");
#endif

#if ORACLE_21
[UsedImplicitly] public sealed class Oracle21(Oracle21Fixture fixture) : OracleContainerTest(fixture), IClassFixture<Oracle21Fixture>;
[UsedImplicitly] public sealed class Oracle21Default(Oracle21FixtureDefault fixture) : OracleContainerTest(fixture), IClassFixture<Oracle21FixtureDefault>;
[UsedImplicitly] public sealed class Oracle21Scott(Oracle21FixtureScott fixture) : OracleContainerTest(fixture), IClassFixture<Oracle21FixtureScott>;
[UsedImplicitly] public sealed class Oracle21Fixture(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 21);
[UsedImplicitly] public sealed class Oracle21FixtureDefault(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 21, "XEPDB1");
[UsedImplicitly] public sealed class Oracle21FixtureScott(IMessageSink messageSink) : OracleFixture(messageSink, "xe", 21, "SCOTT");
#endif

#if ORACLE_23
[UsedImplicitly] public sealed class Oracle23(Oracle23Fixture fixture) : OracleContainerTest(fixture), IClassFixture<Oracle23Fixture>;
[UsedImplicitly] public sealed class Oracle23Default(Oracle23FixtureDefault fixture) : OracleContainerTest(fixture), IClassFixture<Oracle23FixtureDefault>;
[UsedImplicitly] public sealed class Oracle23Scott(Oracle23FixtureScott fixture) : OracleContainerTest(fixture), IClassFixture<Oracle23FixtureScott>;
[UsedImplicitly] public sealed class Oracle23Fixture(IMessageSink messageSink) : OracleFixture(messageSink, "free", 23);
[UsedImplicitly] public sealed class Oracle23FixtureDefault(IMessageSink messageSink) : OracleFixture(messageSink, "free", 23, "FREEPDB1");
[UsedImplicitly] public sealed class Oracle23FixtureScott(IMessageSink messageSink) : OracleFixture(messageSink, "free", 23, "SCOTT");
#endif
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<TargetFrameworks>net9.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<IsPublishable>false</IsPublishable>
<DefineConstants>$(DefineConstants);ORACLE_DEFAULT</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
Expand All @@ -13,6 +14,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/Testcontainers.Oracle/Testcontainers.Oracle.csproj"/>
<ProjectReference Include="../../src/Testcontainers.Xunit/Testcontainers.Xunit.csproj"/>
<ProjectReference Include="../Testcontainers.Commons/Testcontainers.Commons.csproj"/>
</ItemGroup>
</Project>
5 changes: 4 additions & 1 deletion tests/Testcontainers.Oracle.Tests/Usings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
global using System.Data.Common;
global using System.Threading.Tasks;
global using DotNet.Testcontainers.Commons;
global using JetBrains.Annotations;
global using Oracle.ManagedDataAccess.Client;
global using Xunit;
global using Testcontainers.Xunit;
global using Xunit;
global using Xunit.Abstractions;
1 change: 1 addition & 0 deletions tests/Testcontainers.Oracle11.Tests/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
root = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net9.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<IsPublishable>false</IsPublishable>
<DefineConstants>$(DefineConstants);ORACLE_11</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="coverlet.collector"/>
<PackageReference Include="xunit.runner.visualstudio"/>
<PackageReference Include="xunit"/>
<PackageReference Include="Oracle.ManagedDataAccess.Core"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/Testcontainers.Oracle/Testcontainers.Oracle.csproj"/>
<ProjectReference Include="../../src/Testcontainers.Xunit/Testcontainers.Xunit.csproj"/>
<ProjectReference Include="../Testcontainers.Commons/Testcontainers.Commons.csproj"/>
</ItemGroup>
<ItemGroup>
<Compile Include="../Testcontainers.Oracle.Tests/*.cs"/>
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions tests/Testcontainers.Oracle18.Tests/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
root = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net9.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<IsPublishable>false</IsPublishable>
<DefineConstants>$(DefineConstants);ORACLE_18</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="coverlet.collector"/>
<PackageReference Include="xunit.runner.visualstudio"/>
<PackageReference Include="xunit"/>
<PackageReference Include="Oracle.ManagedDataAccess.Core"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/Testcontainers.Oracle/Testcontainers.Oracle.csproj"/>
<ProjectReference Include="../../src/Testcontainers.Xunit/Testcontainers.Xunit.csproj"/>
<ProjectReference Include="../Testcontainers.Commons/Testcontainers.Commons.csproj"/>
</ItemGroup>
<ItemGroup>
<Compile Include="../Testcontainers.Oracle.Tests/*.cs"/>
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions tests/Testcontainers.Oracle21.Tests/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
root = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net9.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<IsPublishable>false</IsPublishable>
<DefineConstants>$(DefineConstants);ORACLE_21</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="coverlet.collector"/>
<PackageReference Include="xunit.runner.visualstudio"/>
<PackageReference Include="xunit"/>
<PackageReference Include="Oracle.ManagedDataAccess.Core"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/Testcontainers.Oracle/Testcontainers.Oracle.csproj"/>
<ProjectReference Include="../../src/Testcontainers.Xunit/Testcontainers.Xunit.csproj"/>
<ProjectReference Include="../Testcontainers.Commons/Testcontainers.Commons.csproj"/>
</ItemGroup>
<ItemGroup>
<Compile Include="../Testcontainers.Oracle.Tests/*.cs"/>
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions tests/Testcontainers.Oracle23.Tests/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
root = true
Loading

0 comments on commit 4c24aab

Please sign in to comment.