forked from testcontainers/testcontainers-dotnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTemporalBuilder.cs
More file actions
94 lines (83 loc) · 3.5 KB
/
TemporalBuilder.cs
File metadata and controls
94 lines (83 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
namespace Testcontainers.Temporal;
/// <inheritdoc cref="ContainerBuilder{TBuilderEntity, TContainerEntity, TConfigurationEntity}" />
[PublicAPI]
public sealed class TemporalBuilder : ContainerBuilder<TemporalBuilder, TemporalContainer, TemporalConfiguration>
{
public const ushort TemporalGrpcPort = 7233;
public const ushort TemporalHttpPort = 8233;
/// <summary>
/// Initializes a new instance of the <see cref="TemporalBuilder" /> class.
/// </summary>
/// <param name="image">
/// The full Docker image name, including the image repository and tag
/// (e.g., <c>temporalio/temporal:1.5.1</c>).
/// </param>
/// <remarks>
/// Docker image tags available at <see href="https://hub.docker.com/r/temporalio/temporal/tags" />.
/// </remarks>
public TemporalBuilder(string image)
: this(new DockerImage(image))
{
}
/// <summary>
/// Initializes a new instance of the <see cref="TemporalBuilder" /> class.
/// </summary>
/// <param name="image">
/// An <see cref="IImage" /> instance that specifies the Docker image to be used
/// for the container builder configuration.
/// </param>
/// <remarks>
/// Docker image tags available at <see href="https://hub.docker.com/r/temporalio/temporal/tags" />.
/// </remarks>
public TemporalBuilder(IImage image)
: this(new TemporalConfiguration())
{
DockerResourceConfiguration = Init().WithImage(image).DockerResourceConfiguration;
}
/// <summary>
/// Initializes a new instance of the <see cref="TemporalBuilder" /> class.
/// </summary>
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
private TemporalBuilder(TemporalConfiguration resourceConfiguration)
: base(resourceConfiguration)
{
DockerResourceConfiguration = resourceConfiguration;
}
/// <inheritdoc />
protected override TemporalConfiguration DockerResourceConfiguration { get; }
/// <inheritdoc />
public override TemporalContainer Build()
{
Validate();
return new TemporalContainer(DockerResourceConfiguration);
}
/// <inheritdoc />
protected override TemporalBuilder Init()
{
return base.Init()
.WithPortBinding(TemporalGrpcPort, true)
.WithPortBinding(TemporalHttpPort, true)
.WithCommand("server", "start-dev", "--ip", "0.0.0.0")
.WithConnectionStringProvider(new TemporalConnectionStringProvider())
.WithWaitStrategy(Wait.ForUnixContainer()
.UntilExternalTcpPortIsAvailable(TemporalGrpcPort)
.UntilExternalTcpPortIsAvailable(TemporalHttpPort)
.UntilHttpRequestIsSucceeded(request =>
request.ForPath("/api/v1/system-info").ForPort(TemporalHttpPort)));
}
/// <inheritdoc />
protected override TemporalBuilder Clone(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
{
return Merge(DockerResourceConfiguration, new TemporalConfiguration(resourceConfiguration));
}
/// <inheritdoc />
protected override TemporalBuilder Clone(IContainerConfiguration resourceConfiguration)
{
return Merge(DockerResourceConfiguration, new TemporalConfiguration(resourceConfiguration));
}
/// <inheritdoc />
protected override TemporalBuilder Merge(TemporalConfiguration oldValue, TemporalConfiguration newValue)
{
return new TemporalBuilder(new TemporalConfiguration(oldValue, newValue));
}
}