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