Files
Spike Curtis 61ae5b81ab fix: fix scaletest sdkclient duplication (#21475)
Fixes an issue introduce in #21288 

The default sdkclient created by the CLI root includes several additional http.RoundTripper wrappers to check versions and attach telemetry, so `DupClientCopyingHeaders` would break and scale tests would fail.

Instead of explicitly adding support for these additional wrappers to `DupClientCopyingHeaders` I think we should just stop unwrapping and move on. Scale tests don't need these wrapped functions.

This is a bit fragile, since it depends on the fact that the headers wrapper needs to be outermost, but that needs to be true for other uses, since things like dialing DERP do a similar thing where they unwrap and extract the auth headers. More long term this needs a refactor to make HTTP headers in the SDK a more first-class resource instead of this hacky RoundTripper wrapping, but that's for a different day.
2026-01-13 11:14:06 +04:00

53 lines
1.6 KiB
Go

package loadtestutil_test
import (
"net/http"
"net/url"
"testing"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/scaletest/loadtestutil"
)
func TestDupClientCopyingHeaders(t *testing.T) {
t.Parallel()
httpClient := &http.Client{
Transport: &codersdk.HeaderTransport{
Transport: &codersdk.HeaderTransport{
Transport: http.DefaultTransport,
Header: map[string][]string{
"X-Coder-Test": {"foo"},
"X-Coder-Test3": {"socks"},
"X-Coder-Test5": {"ninjas"},
},
},
Header: map[string][]string{
"X-Coder-Test": {"bar"},
"X-Coder-Test2": {"baz"},
},
},
}
serverURL, err := url.Parse("http://coder.example.com")
require.NoError(t, err)
sdkClient := codersdk.New(serverURL,
codersdk.WithSessionToken("test-token"), codersdk.WithHTTPClient(httpClient))
dup, err := loadtestutil.DupClientCopyingHeaders(sdkClient, map[string][]string{
"X-Coder-Test3": {"clocks"},
"X-Coder-Test4": {"bears"},
})
require.NoError(t, err)
require.Equal(t, "http://coder.example.com", dup.URL.String())
require.Equal(t, "test-token", dup.SessionToken())
ht, ok := dup.HTTPClient.Transport.(*codersdk.HeaderTransport)
require.True(t, ok)
require.Equal(t, "bar", ht.Header.Get("X-Coder-Test"))
require.Equal(t, "baz", ht.Header.Get("X-Coder-Test2"))
require.Equal(t, "clocks", ht.Header.Get("X-Coder-Test3"))
require.Equal(t, "bears", ht.Header.Get("X-Coder-Test4"))
require.Equal(t, "ninjas", ht.Header.Get("X-Coder-Test5"))
require.NotEqual(t, http.DefaultTransport, ht.Transport)
}