Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/Testcontainers.Kafka/ApacheConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,15 @@ public void Validate(KafkaConfiguration resourceConfiguration)
/// <inheritdoc />
public string CreateStartupScript(KafkaConfiguration resourceConfiguration, KafkaContainer container)
{
var additionalAdvertisedListeners = string.Join(",", container.AdvertisedListeners ?? Array.Empty<string>());
var advertisedListeners = new List<string>();
advertisedListeners.Add("PLAINTEXT://" + container.Hostname + ":" + container.GetMappedPublicPort(KafkaBuilder.KafkaPort));
advertisedListeners.Add("BROKER://" + container.IpAddress + ":" + KafkaBuilder.BrokerPort);
advertisedListeners.AddRange(container.AdvertisedListeners ?? Array.Empty<string>());

var startupScript = new StringWriter();
startupScript.NewLine = "\n";
startupScript.WriteLine("#!/bin/bash");
startupScript.WriteLine("export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://" + container.Hostname + ":" + container.GetMappedPublicPort(KafkaBuilder.KafkaPort) + ",BROKER://" + container.IpAddress + ":" + KafkaBuilder.BrokerPort + "," + additionalAdvertisedListeners);
startupScript.WriteLine("export KAFKA_ADVERTISED_LISTENERS=" + string.Join(",", advertisedListeners));
startupScript.WriteLine("exec /etc/kafka/docker/run");
return startupScript.ToString();
}
Expand Down
7 changes: 5 additions & 2 deletions src/Testcontainers.Kafka/ConfluentConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ public void Validate(KafkaConfiguration resourceConfiguration)
/// <inheritdoc />
public string CreateStartupScript(KafkaConfiguration resourceConfiguration, KafkaContainer container)
{
var additionalAdvertisedListeners = string.Join(",", container.AdvertisedListeners ?? Array.Empty<string>());
var advertisedListeners = new List<string>();
advertisedListeners.Add("PLAINTEXT://" + container.Hostname + ":" + container.GetMappedPublicPort(KafkaBuilder.KafkaPort));
advertisedListeners.Add("BROKER://" + container.IpAddress + ":" + KafkaBuilder.BrokerPort);
advertisedListeners.AddRange(container.AdvertisedListeners ?? Array.Empty<string>());

var isZooKeeperConsensus = resourceConfiguration.ConsensusProtocol == ConsensusProtocol.ZooKeeper;

Expand All @@ -68,7 +71,7 @@ public string CreateStartupScript(KafkaConfiguration resourceConfiguration, Kafk
startupScript.WriteLine("zookeeper-server-start zookeeper.properties &");
}

startupScript.WriteLine("export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://" + container.Hostname + ":" + container.GetMappedPublicPort(KafkaBuilder.KafkaPort) + ",BROKER://" + container.IpAddress + ":" + KafkaBuilder.BrokerPort + "," + additionalAdvertisedListeners);
startupScript.WriteLine("export KAFKA_ADVERTISED_LISTENERS=" + string.Join(",", advertisedListeners));
startupScript.WriteLine("exec /etc/confluent/docker/run");
return startupScript.ToString();
}
Expand Down
1 change: 1 addition & 0 deletions tests/Testcontainers.Kafka.Tests/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
FROM confluentinc/cp-kafka:7.5.12@sha256:997883c60e6f1207fb5f779c7a8fdae57312a17f446fd5ea3eb8b73f52d4a1cf
FROM confluentinc/cp-kafka:8.2.4@sha256:58e544adba6a825389ab56dad5f8a1c72d9bbcdcf077e275473f1aff22e2cd76 AS confluent-v8_2_4
FROM apache/kafka:4.1.1@sha256:0bc1bb2478f45b6cea78864df86acdc11e8df2c5172477819a4d12942cbe5d40 AS apache-v4_1_1
FROM apache/kafka-native:4.1.1@sha256:b8faca36f5385f90e46861ea0b2f532ebed86e9b2868b717c75a67f6fda0c7ce AS apache-native-v4_1_1
14 changes: 14 additions & 0 deletions tests/Testcontainers.Kafka.Tests/KafkaContainerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,20 @@ public KafkaZooKeeperConfiguration()
}
}

// Confluent Platform 8.x runs on Kafka 4.x, which rejects empty elements in
// `advertised.listeners`. A trailing comma made the container exit on startup:
// https://github.com/testcontainers/testcontainers-dotnet/issues/1771.
[UsedImplicitly]
public sealed class ConfluentKafkaV8Configuration : KafkaContainerTest
{
public ConfluentKafkaV8Configuration()
: base(new KafkaBuilder(TestSession.GetImageFromDockerfile(stage: "confluent-v8_2_4"))
.WithKRaft()
.Build())
{
}
}

[UsedImplicitly]
public sealed class ApacheKafkaConfiguration : KafkaContainerTest
{
Expand Down
Loading