Bug: kafka - doesn't work when using different DOCKER_HOST unless ADV_HOST is overloaded
karelbilek opened this issue · 3 comments
Describe the bug
If you are using different DOCKER_HOST than localhost, kafka gnomock doesn't work.
To Reproduce
- have docker on a different host than localhost (for example, with DIND in gitlab CI)
- set DOCKER_HOST correctly
- run the default kafka test https://github.com/orlangure/gnomock/blob/master/preset/kafka/preset_test.go
- it fails on failure to connect to 127.0.0.1
Expected behavior
Everything works
System (please complete the following information):
- Gitlab CI, in my case
Additional context
The whole issue is caused by ADV_HOST being hard-coded to 127.0.0.1 in the preset.
The solution was, for me, write this at the start of the test:
dockerIP := ""
if dh := os.Getenv("DOCKER_HOST"); dh != "" {
u, err := url.Parse(dh)
if err == nil {
if host := u.Hostname(); host != "" {
ips, err := net.LookupIP(host)
if err != nil {
t.Fatalf("Could not get IPs: %v\n", err)
}
dockerIP = ips[0].String()
}
}
}
And later:
opts := []gnomock.Option{
gnomock.WithDebugMode(), gnomock.WithLogWriter(os.Stdout),
gnomock.WithContainerName("kafka"),
}
if dockerIP != "" {
opts = append(opts, gnomock.WithEnv("ADV_HOST="+dockerIP))
}
container, err := gnomock.Start(
p,
opts...,
)
This should be either set automatically (I am not sure why is the localhost IP hardcoded, as gnomock does know that I am using DOCKER_HOST) or, at least, documented
The hardcoded localhost is here
gnomock/preset/kafka/preset.go
Line 102 in 6bb416a
Note, you cannot use the DOCKER_HOST
directly, you need to first resolve it if it's not an IP address, otherwise I get error replication-factor is invalid
(not sure what that means)
Thanks for reporting this @karelbilek.
Do you think the code you suggested can be merged into the Kafka preset, instead of being used externally in the test?