You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by bl...@apache.org on 2024/06/17 12:32:19 UTC

(pulsar-dotpulsar) branch master updated: Upgrade Testcontainers version and streamline Pulsar configuration (#226)

This is an automated email from the ASF dual-hosted git repository.

blankensteiner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-dotpulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new d0d8e45  Upgrade Testcontainers version and streamline Pulsar configuration (#226)
d0d8e45 is described below

commit d0d8e45a7d2aa85fb67862ccf95ac7e8a22201b4
Author: entvex <15...@users.noreply.github.com>
AuthorDate: Mon Jun 17 14:32:14 2024 +0200

    Upgrade Testcontainers version and streamline Pulsar configuration (#226)
    
    This commit enhances the Testcontainers version used in tests and incorporates the 'Testcontainers.Pulsar' package for improved integration. It significantly streamlines the establishment process for Pulsar during integration tests. The environment configuration and token creation procedures are now managed using specific methods from the 'Testcontainers.Pulsar' package. Additionally, the Testcontainers image version has also been updated.
    
    Co-authored-by: David Jensen <dj...@danskecommodities.com>
---
 tests/DotPulsar.Tests/DotPulsar.Tests.csproj |  3 +-
 tests/DotPulsar.Tests/IntegrationFixture.cs  | 45 +++++-----------------------
 2 files changed, 9 insertions(+), 39 deletions(-)

diff --git a/tests/DotPulsar.Tests/DotPulsar.Tests.csproj b/tests/DotPulsar.Tests/DotPulsar.Tests.csproj
index 7633898..777784b 100644
--- a/tests/DotPulsar.Tests/DotPulsar.Tests.csproj
+++ b/tests/DotPulsar.Tests/DotPulsar.Tests.csproj
@@ -24,7 +24,8 @@
     <PackageReference Include="K4os.Compression.LZ4" Version="1.3.8" />
     <PackageReference Include="NSubstitute" Version="5.1.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
-    <PackageReference Include="Testcontainers" Version="3.8.0" />
+    <PackageReference Include="Testcontainers" Version="3.9.0" />
+    <PackageReference Include="Testcontainers.Pulsar" Version="3.9.0" />
     <PackageReference Include="ToxiproxyNetCore" Version="1.0.35" />
     <PackageReference Include="xunit" Version="2.8.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.8.1">
diff --git a/tests/DotPulsar.Tests/IntegrationFixture.cs b/tests/DotPulsar.Tests/IntegrationFixture.cs
index cf882d9..09f0010 100644
--- a/tests/DotPulsar.Tests/IntegrationFixture.cs
+++ b/tests/DotPulsar.Tests/IntegrationFixture.cs
@@ -18,6 +18,7 @@ using DotNet.Testcontainers.Builders;
 using DotNet.Testcontainers.Containers;
 using DotNet.Testcontainers.Networks;
 using DotPulsar.Abstractions;
+using Testcontainers.Pulsar;
 using Toxiproxy.Net;
 using Xunit.Abstractions;
 using Xunit.Sdk;
@@ -33,7 +34,7 @@ public class IntegrationFixture : IAsyncLifetime
     private readonly CancellationTokenSource _cts;
     private readonly IMessageSink _messageSink;
     private readonly INetwork _network;
-    private readonly IContainer _pulsarCluster;
+    private readonly PulsarContainer _pulsarCluster;
     private readonly IContainer _toxiProxy;
     private Client _toxiProxyClient;
     private Connection _toxiProxyConnection;
@@ -45,31 +46,12 @@ public class IntegrationFixture : IAsyncLifetime
         _messageSink = messageSink;
         _cts = new CancellationTokenSource(TimeSpan.FromMinutes(10));
 
-        var environmentVariables = new Dictionary<string, string>
-        {
-            { "PULSAR_PREFIX_tokenSecretKey", $"file://{SecretKeyPath}" },
-            { "PULSAR_PREFIX_authenticationRefreshCheckSeconds", "5" },
-            { "superUserRoles", UserName },
-            { "authenticationEnabled", "true" },
-            { "authorizationEnabled", "true" },
-            { "authenticationProviders", "org.apache.pulsar.broker.authentication.AuthenticationProviderToken" },
-            { "authenticateOriginalAuthData", "false" },
-            { "brokerClientAuthenticationPlugin", AuthenticationPlugin },
-            { "CLIENT_PREFIX_authPlugin", AuthenticationPlugin }
-        };
-
-        var arguments =
-            $"bin/pulsar tokens create-secret-key --output {SecretKeyPath} && " +
-            $"export brokerClientAuthenticationParameters=token:$(bin/pulsar tokens create --secret-key {SecretKeyPath} --subject {UserName}) && " +
-            $"export CLIENT_PREFIX_authParams=$brokerClientAuthenticationParameters && bin/apply-config-from-env.py conf/standalone.conf && " +
-            $"bin/apply-config-from-env-with-prefix.py CLIENT_PREFIX_ conf/client.conf && bin/pulsar standalone --no-functions-worker";
-
         _network = new NetworkBuilder()
             .WithName(Guid.NewGuid().ToString("D"))
             .Build();
 
         _toxiProxy = new ContainerBuilder()
-            .WithImage("ghcr.io/shopify/toxiproxy:2.7.0")
+            .WithImage("ghcr.io/shopify/toxiproxy:2.9.0")
             .WithPortBinding(ToxiProxyControlPort, true)
             .WithPortBinding(ToxiProxyPort, true)
             .WithHostname("toxiproxy")
@@ -77,13 +59,10 @@ public class IntegrationFixture : IAsyncLifetime
             .WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(strategy => strategy.ForPath("/version").ForPort(ToxiProxyControlPort)))
             .Build();
 
-        _pulsarCluster = new ContainerBuilder()
-            .WithImage("apachepulsar/pulsar:3.1.3")
-            .WithEnvironment(environmentVariables)
-            .WithHostname("pulsar")
+        _pulsarCluster = new PulsarBuilder()
+            .WithAuthentication()
             .WithNetwork(_network)
-            .WithWaitStrategy(Wait.ForUnixContainer().UntilCommandIsCompleted(["/bin/bash", "-c", "bin/pulsar-admin clusters list"]))
-            .WithCommand("/bin/bash", "-c", arguments)
+            .WithHostname("pulsar")
             .Build();
 
         ServiceUrl = new Uri($"pulsar://{_pulsarCluster.Hostname}:{PulsarPort}");
@@ -148,17 +127,7 @@ public class IntegrationFixture : IAsyncLifetime
 
     public async Task<string> CreateToken(TimeSpan expiryTime, CancellationToken cancellationToken)
     {
-        var arguments = $"bin/pulsar tokens create --secret-key {SecretKeyPath} --subject {UserName}";
-
-        if (expiryTime != Timeout.InfiniteTimeSpan)
-            arguments += $" --expiry-time {expiryTime.TotalSeconds}s";
-
-        var result = await _pulsarCluster.ExecAsync(["/bin/bash", "-c", arguments], cancellationToken);
-
-        if (result.ExitCode != 0)
-            throw new InvalidOperationException($"Could not create the token: {result.Stderr}");
-
-        return result.Stdout.Trim();
+        return await _pulsarCluster.CreateAuthenticationTokenAsync(expiryTime, cancellationToken);
     }
 
     private static string CreateTopicName() => $"persistent://public/default/{Guid.NewGuid():N}";