Skip to content

Commit 7808ac4

Browse files
feat: Add InfluxDb module (#975)
Co-authored-by: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com>
1 parent 49c1fa4 commit 7808ac4

15 files changed

+438
-3
lines changed

Testcontainers.sln

+14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Elasticsearc
2929
EndProject
3030
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.EventStoreDb", "src\Testcontainers.EventStoreDb\Testcontainers.EventStoreDb.csproj", "{84D707E0-C9FA-4327-85DC-0AFEBEA73572}"
3131
EndProject
32+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.InfluxDb", "src\Testcontainers.InfluxDb\Testcontainers.InfluxDb.csproj", "{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678}"
33+
EndProject
3234
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.K3s", "src\Testcontainers.K3s\Testcontainers.K3s.csproj", "{111B840F-9DB0-4166-83E6-0580FD418F07}"
3335
EndProject
3436
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Kafka", "src\Testcontainers.Kafka\Testcontainers.Kafka.csproj", "{E93E40CE-59AA-4561-9B4C-E7B0A686326E}"
@@ -87,6 +89,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Elasticsearc
8789
EndProject
8890
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.EventStoreDb.Tests", "tests\Testcontainers.EventStoreDb.Tests\Testcontainers.EventStoreDb.Tests.csproj", "{64F8E9B9-78FD-4E13-BDDF-0340E2D4E1D0}"
8991
EndProject
92+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.InfluxDb.Tests", "tests\Testcontainers.InfluxDb.Tests\Testcontainers.InfluxDb.Tests.csproj", "{B45B0EF2-5852-4ED3-904A-8FC62A3253D7}"
93+
EndProject
9094
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.K3s.Tests", "tests\Testcontainers.K3s.Tests\Testcontainers.K3s.Tests.csproj", "{F0F40AE2-70FF-4191-ADDA-26A19E0D1A0F}"
9195
EndProject
9296
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testcontainers.Kafka.Tests", "tests\Testcontainers.Kafka.Tests\Testcontainers.Kafka.Tests.csproj", "{6F2AEE03-629A-4B49-BD5B-25CA3C61FFB7}"
@@ -174,6 +178,10 @@ Global
174178
{84D707E0-C9FA-4327-85DC-0AFEBEA73572}.Debug|Any CPU.Build.0 = Debug|Any CPU
175179
{84D707E0-C9FA-4327-85DC-0AFEBEA73572}.Release|Any CPU.ActiveCfg = Release|Any CPU
176180
{84D707E0-C9FA-4327-85DC-0AFEBEA73572}.Release|Any CPU.Build.0 = Release|Any CPU
181+
{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
182+
{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678}.Debug|Any CPU.Build.0 = Debug|Any CPU
183+
{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678}.Release|Any CPU.ActiveCfg = Release|Any CPU
184+
{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678}.Release|Any CPU.Build.0 = Release|Any CPU
177185
{111B840F-9DB0-4166-83E6-0580FD418F07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
178186
{111B840F-9DB0-4166-83E6-0580FD418F07}.Debug|Any CPU.Build.0 = Debug|Any CPU
179187
{111B840F-9DB0-4166-83E6-0580FD418F07}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -290,6 +298,10 @@ Global
290298
{64F8E9B9-78FD-4E13-BDDF-0340E2D4E1D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
291299
{64F8E9B9-78FD-4E13-BDDF-0340E2D4E1D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
292300
{64F8E9B9-78FD-4E13-BDDF-0340E2D4E1D0}.Release|Any CPU.Build.0 = Release|Any CPU
301+
{B45B0EF2-5852-4ED3-904A-8FC62A3253D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
302+
{B45B0EF2-5852-4ED3-904A-8FC62A3253D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
303+
{B45B0EF2-5852-4ED3-904A-8FC62A3253D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
304+
{B45B0EF2-5852-4ED3-904A-8FC62A3253D7}.Release|Any CPU.Build.0 = Release|Any CPU
293305
{F0F40AE2-70FF-4191-ADDA-26A19E0D1A0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
294306
{F0F40AE2-70FF-4191-ADDA-26A19E0D1A0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
295307
{F0F40AE2-70FF-4191-ADDA-26A19E0D1A0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -392,6 +404,7 @@ Global
392404
{2EAFA567-9F68-4C52-9DBC-8F3EC11BB2CE} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
393405
{641DDEA5-B6E0-41E6-BA11-7A28C0913127} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
394406
{84D707E0-C9FA-4327-85DC-0AFEBEA73572} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
407+
{8F483B83-7BD4-4BD5-9F03-DFC26E1CE678} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
395408
{111B840F-9DB0-4166-83E6-0580FD418F07} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
396409
{E93E40CE-59AA-4561-9B4C-E7B0A686326E} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
397410
{AA8834A3-82A7-4E83-8E4C-88D37F74056A} = {673F23AE-7694-4BB9-ABD4-136D6C13634E}
@@ -421,6 +434,7 @@ Global
421434
{101515E6-74C1-40F9-85C8-871F742A378D} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
422435
{DD5B3678-468F-4D73-AECE-705E3D66CD43} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
423436
{64F8E9B9-78FD-4E13-BDDF-0340E2D4E1D0} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
437+
{B45B0EF2-5852-4ED3-904A-8FC62A3253D7} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
424438
{F0F40AE2-70FF-4191-ADDA-26A19E0D1A0F} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
425439
{6F2AEE03-629A-4B49-BD5B-25CA3C61FFB7} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}
426440
{4827D606-89D5-4E00-8341-47A6E95817BA} = {7164F1FB-7F24-444A-ACD2-2C329C2B3CCF}

docs/modules/index.md

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ await moduleNameContainer.StartAsync();
3030
| 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) |
3131
| 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) |
3232
| 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) |
33+
| InfluxDB | `influxdb:2.7` | [NuGet](https://www.nuget.org/packages/Testcontainers.InfluxDb) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.InfluxDb) |
3334
| K3s | `rancher/k3s:v1.26.2-k3s1` | [NuGet](https://www.nuget.org/packages/Testcontainers.K3s) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.K3s) |
3435
| Kafka | `confluentinc/cp-kafka:6.1.9` | [NuGet](https://www.nuget.org/packages/Testcontainers.Kafka) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Kafka) |
3536
| Keycloak | `quay.io/keycloak/keycloak:21.1` | [NuGet](https://www.nuget.org/packages/Testcontainers.Keycloak) | [Source](https://github.com/testcontainers/testcontainers-dotnet/tree/develop/src/Testcontainers.Keycloak) |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
root = true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
namespace Testcontainers.InfluxDb;
2+
3+
/// <inheritdoc cref="ContainerBuilder{TBuilderEntity, TContainerEntity, TConfigurationEntity}" />
4+
[PublicAPI]
5+
public sealed class InfluxDbBuilder : ContainerBuilder<InfluxDbBuilder, InfluxDbContainer, InfluxDbConfiguration>
6+
{
7+
public const string InfluxDbImage = "influxdb:2.7";
8+
9+
public const ushort InfluxDbPort = 8086;
10+
11+
public const string DefaultUsername = "username";
12+
13+
public const string DefaultPassword = "password";
14+
15+
public const string DefaultOrganization = "organization";
16+
17+
public const string DefaultBucket = "bucket";
18+
19+
/// <summary>
20+
/// Initializes a new instance of the <see cref="InfluxDbBuilder" /> class.
21+
/// </summary>
22+
public InfluxDbBuilder()
23+
: this(new InfluxDbConfiguration())
24+
{
25+
DockerResourceConfiguration = Init().DockerResourceConfiguration;
26+
}
27+
28+
/// <summary>
29+
/// Initializes a new instance of the <see cref="InfluxDbBuilder" /> class.
30+
/// </summary>
31+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
32+
private InfluxDbBuilder(InfluxDbConfiguration resourceConfiguration)
33+
: base(resourceConfiguration)
34+
{
35+
DockerResourceConfiguration = resourceConfiguration;
36+
}
37+
38+
/// <inheritdoc />
39+
protected override InfluxDbConfiguration DockerResourceConfiguration { get; }
40+
41+
/// <summary>
42+
/// Sets the InfluxDb username.
43+
/// </summary>
44+
/// <param name="username">The InfluxDb username.</param>
45+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
46+
public InfluxDbBuilder WithUsername(string username)
47+
{
48+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(username: username))
49+
.WithEnvironment("DOCKER_INFLUXDB_INIT_USERNAME", username);
50+
}
51+
52+
/// <summary>
53+
/// Sets the InfluxDb password.
54+
/// </summary>
55+
/// <param name="password">The InfluxDb password.</param>
56+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
57+
public InfluxDbBuilder WithPassword(string password)
58+
{
59+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(password: password))
60+
.WithEnvironment("DOCKER_INFLUXDB_INIT_PASSWORD", password);
61+
}
62+
63+
/// <summary>
64+
/// Sets the InfluxDb organization.
65+
/// </summary>
66+
/// <param name="organization">The InfluxDb organization.</param>
67+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
68+
public InfluxDbBuilder WithOrganization(string organization)
69+
{
70+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(organization: organization))
71+
.WithEnvironment("DOCKER_INFLUXDB_INIT_ORG", organization);
72+
}
73+
74+
/// <summary>
75+
/// Sets the InfluxDb bucket.
76+
/// </summary>
77+
/// <param name="bucket">The InfluxDb bucket.</param>
78+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
79+
public InfluxDbBuilder WithBucket(string bucket)
80+
{
81+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(bucket: bucket))
82+
.WithEnvironment("DOCKER_INFLUXDB_INIT_BUCKET", bucket);
83+
}
84+
85+
/// <summary>
86+
/// Sets the InfluxDb admin token.
87+
/// </summary>
88+
/// <param name="adminToken">The InfluxDb admin token.</param>
89+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
90+
public InfluxDbBuilder WithAdminToken(string adminToken)
91+
{
92+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(adminToken: adminToken))
93+
.WithEnvironment("DOCKER_INFLUXDB_INIT_ADMIN_TOKEN", adminToken);
94+
}
95+
96+
/// <summary>
97+
/// Sets the InfluxDb retention.
98+
/// </summary>
99+
/// <param name="retention">The InfluxDb retention.</param>
100+
/// <returns>A configured instance of <see cref="InfluxDbBuilder" />.</returns>
101+
public InfluxDbBuilder WithRetention(string retention)
102+
{
103+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(retention: retention))
104+
.WithEnvironment("DOCKER_INFLUXDB_INIT_RETENTION", retention);
105+
}
106+
107+
/// <inheritdoc />
108+
public override InfluxDbContainer Build()
109+
{
110+
Validate();
111+
return new InfluxDbContainer(DockerResourceConfiguration, TestcontainersSettings.Logger);
112+
}
113+
114+
/// <inheritdoc />
115+
protected override InfluxDbBuilder Init()
116+
{
117+
return base.Init()
118+
.WithImage(InfluxDbImage)
119+
.WithPortBinding(InfluxDbPort, true)
120+
.WithEnvironment("DOCKER_INFLUXDB_INIT_MODE", "setup")
121+
.WithUsername(DefaultUsername)
122+
.WithPassword(DefaultPassword)
123+
.WithOrganization(DefaultOrganization)
124+
.WithBucket(DefaultBucket)
125+
.WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(request =>
126+
request.ForPort(InfluxDbPort).ForPath("/ping").ForStatusCode(HttpStatusCode.NoContent)));
127+
}
128+
129+
/// <inheritdoc />
130+
protected override void Validate()
131+
{
132+
base.Validate();
133+
134+
_ = Guard.Argument(DockerResourceConfiguration.Username, nameof(DockerResourceConfiguration.Username))
135+
.NotNull()
136+
.NotEmpty();
137+
138+
_ = Guard.Argument(DockerResourceConfiguration.Password, nameof(DockerResourceConfiguration.Password))
139+
.NotNull()
140+
.NotEmpty();
141+
142+
_ = Guard.Argument(DockerResourceConfiguration.Organization, nameof(DockerResourceConfiguration.Organization))
143+
.NotNull()
144+
.NotEmpty();
145+
146+
_ = Guard.Argument(DockerResourceConfiguration.Bucket, nameof(DockerResourceConfiguration.Bucket))
147+
.NotNull()
148+
.NotEmpty();
149+
}
150+
151+
/// <inheritdoc />
152+
protected override InfluxDbBuilder Clone(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
153+
{
154+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(resourceConfiguration));
155+
}
156+
157+
/// <inheritdoc />
158+
protected override InfluxDbBuilder Clone(IContainerConfiguration resourceConfiguration)
159+
{
160+
return Merge(DockerResourceConfiguration, new InfluxDbConfiguration(resourceConfiguration));
161+
}
162+
163+
/// <inheritdoc />
164+
protected override InfluxDbBuilder Merge(InfluxDbConfiguration oldValue, InfluxDbConfiguration newValue)
165+
{
166+
return new InfluxDbBuilder(new InfluxDbConfiguration(oldValue, newValue));
167+
}
168+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
namespace Testcontainers.InfluxDb;
2+
3+
/// <inheritdoc cref="ContainerConfiguration" />
4+
[PublicAPI]
5+
public sealed class InfluxDbConfiguration : ContainerConfiguration
6+
{
7+
/// <summary>
8+
/// Initializes a new instance of the <see cref="InfluxDbConfiguration" /> class.
9+
/// </summary>
10+
/// <param name="username">The InfluxDb username.</param>
11+
/// <param name="password">The InfluxDb password.</param>
12+
/// <param name="organization">The InfluxDb organization.</param>
13+
/// <param name="bucket">The InfluxDb bucket.</param>
14+
/// <param name="adminToken">The InfluxDb admin token.</param>
15+
/// <param name="retention">The InfluxDb retention.</param>
16+
public InfluxDbConfiguration(
17+
string username = null,
18+
string password = null,
19+
string organization = null,
20+
string bucket = null,
21+
string adminToken = null,
22+
string retention = null)
23+
{
24+
Username = username;
25+
Password = password;
26+
Organization = organization;
27+
Bucket = bucket;
28+
AdminToken = adminToken;
29+
Retention = retention;
30+
}
31+
32+
/// <summary>
33+
/// Initializes a new instance of the <see cref="InfluxDbConfiguration" /> class.
34+
/// </summary>
35+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
36+
public InfluxDbConfiguration(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
37+
: base(resourceConfiguration)
38+
{
39+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
40+
}
41+
42+
/// <summary>
43+
/// Initializes a new instance of the <see cref="InfluxDbConfiguration" /> class.
44+
/// </summary>
45+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
46+
public InfluxDbConfiguration(IContainerConfiguration resourceConfiguration)
47+
: base(resourceConfiguration)
48+
{
49+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
50+
}
51+
52+
/// <summary>
53+
/// Initializes a new instance of the <see cref="InfluxDbConfiguration" /> class.
54+
/// </summary>
55+
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
56+
public InfluxDbConfiguration(InfluxDbConfiguration resourceConfiguration)
57+
: this(new InfluxDbConfiguration(), resourceConfiguration)
58+
{
59+
// Passes the configuration upwards to the base implementations to create an updated immutable copy.
60+
}
61+
62+
/// <summary>
63+
/// Initializes a new instance of the <see cref="InfluxDbConfiguration" /> class.
64+
/// </summary>
65+
/// <param name="oldValue">The old Docker resource configuration.</param>
66+
/// <param name="newValue">The new Docker resource configuration.</param>
67+
public InfluxDbConfiguration(InfluxDbConfiguration oldValue, InfluxDbConfiguration newValue)
68+
: base(oldValue, newValue)
69+
{
70+
Username = BuildConfiguration.Combine(oldValue.Username, newValue.Username);
71+
Password = BuildConfiguration.Combine(oldValue.Password, newValue.Password);
72+
Organization = BuildConfiguration.Combine(oldValue.Organization, newValue.Organization);
73+
Bucket = BuildConfiguration.Combine(oldValue.Bucket, newValue.Bucket);
74+
AdminToken = BuildConfiguration.Combine(oldValue.AdminToken, newValue.AdminToken);
75+
Retention = BuildConfiguration.Combine(oldValue.Retention, newValue.Retention);
76+
}
77+
78+
/// <summary>
79+
/// Gets the InfluxDb username.
80+
/// </summary>
81+
public string Username { get; }
82+
83+
/// <summary>
84+
/// Gets the InfluxDb password.
85+
/// </summary>
86+
public string Password { get; }
87+
88+
/// <summary>
89+
/// Gets the InfluxDb organization.
90+
/// </summary>
91+
public string Organization { get; }
92+
93+
/// <summary>
94+
/// Gets the InfluxDb bucket.
95+
/// </summary>
96+
public string Bucket { get; }
97+
98+
/// <summary>
99+
/// Gets the InfluxDb admin token.
100+
/// </summary>
101+
public string AdminToken { get; }
102+
103+
/// <summary>
104+
/// Gets the InfluxDb retention.
105+
/// </summary>
106+
public string Retention { get; }
107+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace Testcontainers.InfluxDb;
2+
3+
/// <inheritdoc cref="DockerContainer" />
4+
[PublicAPI]
5+
public sealed class InfluxDbContainer : DockerContainer
6+
{
7+
/// <summary>
8+
/// Initializes a new instance of the <see cref="InfluxDbContainer" /> class.
9+
/// </summary>
10+
/// <param name="configuration">The container configuration.</param>
11+
/// <param name="logger">The logger.</param>
12+
public InfluxDbContainer(InfluxDbConfiguration configuration, ILogger logger)
13+
: base(configuration, logger)
14+
{
15+
}
16+
17+
/// <summary>
18+
/// Gets the InfluxDb address.
19+
/// </summary>
20+
/// <returns>The InfluxDb address.</returns>
21+
public string GetAddress()
22+
{
23+
return new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(InfluxDbBuilder.InfluxDbPort)).ToString();
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
4+
<LangVersion>latest</LangVersion>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
8+
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1" PrivateAssets="All"/>
9+
</ItemGroup>
10+
<ItemGroup>
11+
<ProjectReference Include="$(SolutionDir)src/Testcontainers/Testcontainers.csproj"/>
12+
</ItemGroup>
13+
</Project>

src/Testcontainers.InfluxDb/Usings.cs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
global using System;
2+
global using System.Net;
3+
global using Docker.DotNet.Models;
4+
global using DotNet.Testcontainers;
5+
global using DotNet.Testcontainers.Builders;
6+
global using DotNet.Testcontainers.Configurations;
7+
global using DotNet.Testcontainers.Containers;
8+
global using JetBrains.Annotations;
9+
global using Microsoft.Extensions.Logging;

0 commit comments

Comments
 (0)