diff --git a/docs/modules/pulsar.md b/docs/modules/pulsar.md
index 3f91b83fa..39b582a23 100644
--- a/docs/modules/pulsar.md
+++ b/docs/modules/pulsar.md
@@ -92,13 +92,20 @@ If you need to use token authentication, use the following builder configuration
PulsarContainer _pulsarContainer = PulsarBuilder().WithTokenAuthentication().Build();
```
-Start the container and get the token from the running instance by using:
+Start the container and obtain an authentication token with a specified expiration time
```csharp
var authToken = await container.CreateAuthenticationTokenAsync(TimeSpan.FromHours(1))
.ConfigureAwait(false);
```
+Alternatively, set the token to never expire
+
+```csharp
+var authToken = await container.CreateAuthenticationTokenAsync(Timeout.InfiniteTimeSpan)
+ .ConfigureAwait(false);
+```
+
## Enable Pulsar Functions
If you need to use Pulsar Functions, use the following builder configuration to enable it:
diff --git a/src/Testcontainers.Pulsar/PulsarContainer.cs b/src/Testcontainers.Pulsar/PulsarContainer.cs
index 7d42e7cac..a802e02b0 100644
--- a/src/Testcontainers.Pulsar/PulsarContainer.cs
+++ b/src/Testcontainers.Pulsar/PulsarContainer.cs
@@ -37,30 +37,18 @@ public string GetServiceAddress()
///
/// Creates an authentication token.
///
- /// The time after the authentication token expires.
+ /// The time after the authentication token expires.
/// Cancellation token.
/// A task that completes when the authentication token has been created.
///
- public async Task CreateAuthenticationTokenAsync(TimeSpan expire = default, CancellationToken ct = default)
+ public async Task CreateAuthenticationTokenAsync(TimeSpan expiryTime, CancellationToken ct = default)
{
- int secondsToMilliseconds;
-
if (_configuration.AuthenticationEnabled.HasValue && !_configuration.AuthenticationEnabled.Value)
{
throw new ArgumentException("Failed to create token. Authentication is not enabled.");
}
-
- if (_configuration.Image.Tag.StartsWith("3.2") || _configuration.Image.Tag.StartsWith("latest"))
- {
- Logger.LogWarning("The 'apachepulsar/pulsar:3.2.?' image contains a regression. The expiry time is converted to the wrong unit of time: https://github.com/apache/pulsar/issues/22811.");
- secondsToMilliseconds = 1000;
- }
- else
- {
- secondsToMilliseconds = 1;
- }
-
- var command = new[]
+
+ var command = new List(9)
{
"bin/pulsar",
"tokens",
@@ -68,11 +56,25 @@ public async Task CreateAuthenticationTokenAsync(TimeSpan expire = defau
"--secret-key",
PulsarBuilder.SecretKeyFilePath,
"--subject",
- PulsarBuilder.Username,
- "--expiry-time",
- $"{secondsToMilliseconds * expire.TotalSeconds}s",
+ PulsarBuilder.Username
};
+ if (expiryTime != Timeout.InfiniteTimeSpan)
+ {
+ int secondsToMilliseconds;
+ if (_configuration.Image.Tag.StartsWith("3.2") || _configuration.Image.Tag.StartsWith("latest"))
+ {
+ Logger.LogWarning("The 'apachepulsar/pulsar:3.2.?' image contains a regression. The expiry time is converted to the wrong unit of time: https://github.com/apache/pulsar/issues/22811.");
+ secondsToMilliseconds = 1000;
+ }
+ else
+ {
+ secondsToMilliseconds = 1;
+ }
+ command.Add("--expiry-time");
+ command.Add($"{secondsToMilliseconds * expiryTime.TotalSeconds}s");
+ }
+
var tokensResult = await ExecAsync(command, ct)
.ConfigureAwait(false);
diff --git a/tests/Testcontainers.Pulsar.Tests/PulsarContainerTest.cs b/tests/Testcontainers.Pulsar.Tests/PulsarContainerTest.cs
index 27ae620e4..997ccfd59 100644
--- a/tests/Testcontainers.Pulsar.Tests/PulsarContainerTest.cs
+++ b/tests/Testcontainers.Pulsar.Tests/PulsarContainerTest.cs
@@ -79,7 +79,7 @@ public PulsarAuthConfiguration()
protected override async Task CreateClientAsync(CancellationToken ct = default)
{
- var authToken = await _pulsarContainer.CreateAuthenticationTokenAsync(TimeSpan.FromHours(1), ct)
+ var authToken = await _pulsarContainer.CreateAuthenticationTokenAsync(Timeout.InfiniteTimeSpan, ct)
.ConfigureAwait(false);
return PulsarClient.Builder().ServiceUrl(new Uri(_pulsarContainer.GetBrokerAddress())).Authentication(new TokenAuthentication(authToken)).Build();