Skip to content

Commit a6769a7

Browse files
committed
fix: DefaultTransportを継承するようにする
1 parent ad8f3ca commit a6769a7

2 files changed

Lines changed: 55 additions & 14 deletions

File tree

internal/client/controlserver.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,8 @@ func NewControlServerClient(serverURL string, systemAdminKey string, insecureSki
4646
return nil, fmt.Errorf("failed to parse server URL: %w", err)
4747
}
4848

49-
var transport http.RoundTripper
50-
if strings.ToLower(parsedURL.Scheme) == "https" {
51-
// Use TLS transport for HTTPS
52-
transport = &http.Transport{
53-
TLSClientConfig: &tls.Config{
54-
InsecureSkipVerify: insecureSkipVerify,
55-
},
56-
}
57-
} else {
58-
// Use plain HTTP transport without TLS
59-
transport = &http.Transport{}
60-
}
61-
6249
httpClient := &http.Client{
63-
Transport: transport,
50+
Transport: newControlServerTransport(parsedURL.Scheme, insecureSkipVerify),
6451
Timeout: 30 * time.Second,
6552
}
6653

@@ -78,6 +65,26 @@ func NewControlServerClient(serverURL string, systemAdminKey string, insecureSki
7865
}, nil
7966
}
8067

68+
func newControlServerTransport(scheme string, insecureSkipVerify bool) http.RoundTripper {
69+
transport, ok := http.DefaultTransport.(*http.Transport)
70+
if !ok {
71+
return http.DefaultTransport
72+
}
73+
74+
clone := transport.Clone()
75+
if strings.ToLower(scheme) == "https" {
76+
tlsConfig := &tls.Config{
77+
InsecureSkipVerify: insecureSkipVerify,
78+
}
79+
if clone.TLSClientConfig != nil {
80+
tlsConfig = clone.TLSClientConfig.Clone()
81+
tlsConfig.InsecureSkipVerify = insecureSkipVerify
82+
}
83+
clone.TLSClientConfig = tlsConfig
84+
}
85+
return clone
86+
}
87+
8188
// authInterceptor adds authentication to requests
8289
type authInterceptor struct {
8390
auth ionscaleclient.ClientAuth
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package client
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
)
7+
8+
func TestNewControlServerTransportUsesDefaultIdleTimeout(t *testing.T) {
9+
transport, ok := newControlServerTransport("http", false).(*http.Transport)
10+
if !ok {
11+
t.Fatalf("expected *http.Transport, got %T", transport)
12+
}
13+
14+
if transport.IdleConnTimeout <= 0 {
15+
t.Fatalf("expected IdleConnTimeout to be configured, got %s", transport.IdleConnTimeout)
16+
}
17+
if transport.MaxIdleConns <= 0 {
18+
t.Fatalf("expected MaxIdleConns to be configured, got %d", transport.MaxIdleConns)
19+
}
20+
}
21+
22+
func TestNewControlServerTransportConfiguresTLSSkipVerify(t *testing.T) {
23+
transport, ok := newControlServerTransport("https", true).(*http.Transport)
24+
if !ok {
25+
t.Fatalf("expected *http.Transport, got %T", transport)
26+
}
27+
28+
if transport.TLSClientConfig == nil {
29+
t.Fatal("expected TLSClientConfig to be configured")
30+
}
31+
if !transport.TLSClientConfig.InsecureSkipVerify {
32+
t.Fatal("expected InsecureSkipVerify to be true")
33+
}
34+
}

0 commit comments

Comments
 (0)