From 67a65b8ab19da2e7211c8148294d01886458e7f3 Mon Sep 17 00:00:00 2001 From: Derek Ray Date: Sat, 15 Nov 2025 16:22:29 +0800 Subject: [PATCH 1/2] fix(ping): fix auto detect service scheme issue --- pkg/v1/remote/transport/ping.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/v1/remote/transport/ping.go b/pkg/v1/remote/transport/ping.go index 799c7ea08..d73496fd3 100644 --- a/pkg/v1/remote/transport/ping.go +++ b/pkg/v1/remote/transport/ping.go @@ -75,6 +75,12 @@ func pingSingle(ctx context.Context, reg name.Registry, t http.RoundTripper, sch resp.Body.Close() }() + // Check actual registry scheme detected, in case of redirecting to different scheme, + // update the scheme so subsequent logic (and the returned Challenge) reflects it. + if resp.Request != nil && resp.Request.URL != nil && resp.Request.URL.Scheme != "" { + scheme = resp.Request.URL.Scheme + } + insecure := scheme == "http" switch resp.StatusCode { From d3646cee5fa9392d3dcfcde36162ecf5cf72b7c7 Mon Sep 17 00:00:00 2001 From: Derek Ray Date: Mon, 24 Nov 2025 10:46:48 +0800 Subject: [PATCH 2/2] feat(ping): add ping fixture testcase --- pkg/v1/remote/transport/ping_test.go | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pkg/v1/remote/transport/ping_test.go b/pkg/v1/remote/transport/ping_test.go index 3c0c5b981..0cdbcb90a 100644 --- a/pkg/v1/remote/transport/ping_test.go +++ b/pkg/v1/remote/transport/ping_test.go @@ -231,6 +231,36 @@ func TestPingHttpFallback(t *testing.T) { } } +func TestPingHttpFixture(t *testing.T) { + var httpsPassed bool + server := httptest.NewServer( + http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + httpsPassed = true + time.Sleep(time.Second * 3) + w.WriteHeader(http.StatusOK) + })) + defer server.Close() + + tprt := &http.Transport{ + Proxy: func(req *http.Request) (*url.URL, error) { + if httpsPassed { + return http.ProxyFromEnvironment(req) + } + + return url.Parse(server.URL) + }, + } + + challenge, err := Ping(context.Background(), mustInsecureRegistry("us.gcr.io"), tprt) + if err != nil { + t.Fatalf("Ping(): %v", err) + } + + if challenge.Insecure { + t.Fatalf("Insecure fixture is not working") + } +} + func mustRegistry(r string) name.Registry { reg, err := name.NewRegistry(r) if err != nil {