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) + }) + } +}