The wildcard then listens on the machine's other addresses only, in the built-in proxy and in Traefik, and follows the machine when it gains or loses an address. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
package blacktip
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.veillax.com/Veillax/reef/model"
|
|
)
|
|
|
|
func TestWildcardWebsitesStepAsideForNamedAddresses(t *testing.T) {
|
|
all := []model.Mapping{
|
|
{ID: "a", Proto: model.ProtoHTTPS, BindIP: "0.0.0.0", Port: 443, Hostname: "a.test"},
|
|
{ID: "b", Proto: model.ProtoHTTPS, BindIP: "127.0.0.1", Port: 443, Hostname: "b.test"},
|
|
{ID: "c", Proto: model.ProtoHTTPS, BindIP: "0.0.0.0", Port: 8443, Hostname: "c.test"},
|
|
{ID: "d", Proto: model.ProtoTCP, BindIP: "0.0.0.0", Port: 443},
|
|
}
|
|
// the wildcard on 443 gives up the address that "b" names
|
|
for _, ip := range bindIPs(all[0], all) {
|
|
if ip == "127.0.0.1" {
|
|
t.Fatalf("wildcard still listens on 127.0.0.1: %v", bindIPs(all[0], all))
|
|
}
|
|
}
|
|
// the named address keeps its own listener
|
|
if got := bindIPs(all[1], all); len(got) != 1 || got[0] != "127.0.0.1" {
|
|
t.Fatalf("named mapping: %v", got)
|
|
}
|
|
// a different port, or a raw TCP port, is not affected
|
|
if got := bindIPs(all[2], all); len(got) != 1 || got[0] != "0.0.0.0" {
|
|
t.Fatalf("other port: %v", got)
|
|
}
|
|
if got := bindIPs(all[3], all); len(got) != 1 || got[0] != "0.0.0.0" {
|
|
t.Fatalf("raw tcp: %v", got)
|
|
}
|
|
// with nothing named on that port the wildcard stays a single wildcard listener
|
|
if got := bindIPs(all[0], all[:1]); len(got) != 1 || got[0] != "0.0.0.0" {
|
|
t.Fatalf("alone: %v", got)
|
|
}
|
|
}
|