From 14056cc58424660b6b9b83ca81756c06bad46b83 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 16 Feb 2026 21:19:52 +0100 Subject: [PATCH] fix: format IPv6 addr correclty for HTTP URL (#254) * fix: format IPv6 addr correclty for HTTP URL * test: cover changes * test: refactor --------- Co-authored-by: gm0stache --- pkg/client/dns.go | 10 ++++++++-- pkg/client/dns_internal_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 pkg/client/dns_internal_test.go diff --git a/pkg/client/dns.go b/pkg/client/dns.go index 7efd10bc..dc5d133d 100644 --- a/pkg/client/dns.go +++ b/pkg/client/dns.go @@ -5,7 +5,9 @@ import ( "errors" "fmt" "io" + "net" "net/http" + "net/netip" "sync" "time" @@ -108,8 +110,7 @@ func verifyCaddyReachable(ctx context.Context, m *pb.MachineInfo) error { eventID := fmt.Sprintf("Machine %s (%s)", m.Name, publicIP) pw.Event(progress.NewEvent(eventID, progress.Working, "Querying")) - verifyURL := fmt.Sprintf("http://%s%s", publicIP, caddyconfig.VerifyPath) - + verifyURL := getVerifyURL(publicIP) req, err := http.NewRequestWithContext(ctx, http.MethodGet, verifyURL, nil) if err != nil { pw.Event(progress.NewEvent(eventID, progress.Error, err.Error())) @@ -170,6 +171,11 @@ func verifyCaddyReachable(ctx context.Context, m *pb.MachineInfo) error { } } +func getVerifyURL(publicIP netip.Addr) string { + httpFormattedIP := net.JoinHostPort(publicIP.String(), "") + return fmt.Sprintf("http://%s%s", httpFormattedIP, caddyconfig.VerifyPath) +} + // unreachable creates a new Unreachable error event. func unreachable(id string) progress.Event { return progress.NewEvent( diff --git a/pkg/client/dns_internal_test.go b/pkg/client/dns_internal_test.go new file mode 100644 index 00000000..c5466b4c --- /dev/null +++ b/pkg/client/dns_internal_test.go @@ -0,0 +1,30 @@ +package client + +import ( + "net/netip" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetVerifyURL(t *testing.T) { + tests := map[string]struct { + given netip.Addr + want string + }{ + "IPv4": { + given: netip.MustParseAddr("93.184.216.34"), + want: "http://93.184.216.34:/.uncloud-verify", + }, + "IPv6": { + given: netip.MustParseAddr("2001:db8::1"), + want: "http://[2001:db8::1]:/.uncloud-verify", + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + got := getVerifyURL(tt.given) + assert.Equal(t, tt.want, got) + }) + } +}