package service import ( "net/http" "testing" "time" "github.com/QuantumNous/new-api/common" "github.com/stretchr/testify/require" ) func preserveHTTPClientState(t *testing.T) { t.Helper() oldDefaultClient := httpClient oldTimeout := common.RelayTimeout proxyClientLock.Lock() oldProxyClients := proxyClients proxyClients = make(map[string]*http.Client) proxyClientLock.Unlock() t.Cleanup(func() { httpClient = oldDefaultClient common.RelayTimeout = oldTimeout proxyClientLock.Lock() proxyClients = oldProxyClients proxyClientLock.Unlock() }) } func TestNewProxyHttpClientCachesHTTPProxyAndRejectsUnsupportedScheme(t *testing.T) { preserveHTTPClientState(t) common.RelayTimeout = 7 first, err := NewProxyHttpClient("http://proxy.example:8080") require.NoError(t, err) second, err := NewProxyHttpClient("http://proxy.example:8080") require.NoError(t, err) require.Same(t, first, second) require.Equal(t, 7*time.Second, first.Timeout) _, err = NewProxyHttpClient("ftp://proxy.example:21") require.ErrorContains(t, err, "unsupported proxy scheme") } func TestNewProxyHttpClientReturnsInitializedDefaultClientForEmptyProxy(t *testing.T) { preserveHTTPClientState(t) defaultClient := &http.Client{} httpClient = defaultClient client, err := NewProxyHttpClient("") require.NoError(t, err) require.Same(t, defaultClient, client) } func TestInitHttpClientAppliesConfiguredTimeout(t *testing.T) { preserveHTTPClientState(t) common.RelayTimeout = 3 InitHttpClient() require.NotNil(t, GetHttpClient()) require.Equal(t, 3*time.Second, GetHttpClient().Timeout) require.NotNil(t, GetHttpClient().CheckRedirect) }