| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package netproxy
- import (
- "net/http"
- "testing"
- "time"
- )
- func TestNewHTTPClient(t *testing.T) {
- tests := []struct {
- name string
- proxyURL string
- wantErr bool
- wantProxy bool
- wantDial bool
- }{
- {name: "empty returns direct client", proxyURL: ""},
- {name: "socks5 sets custom dialer", proxyURL: "socks5://127.0.0.1:1080", wantDial: true},
- {name: "socks5 with auth", proxyURL: "socks5://user:[email protected]:1080", wantDial: true},
- {name: "http sets transport proxy", proxyURL: "http://127.0.0.1:8080", wantProxy: true},
- {name: "https sets transport proxy", proxyURL: "https://127.0.0.1:8080", wantProxy: true},
- {name: "unsupported scheme errors", proxyURL: "ftp://127.0.0.1:21", wantErr: true},
- }
- for _, tc := range tests {
- t.Run(tc.name, func(t *testing.T) {
- client, err := NewHTTPClient(tc.proxyURL, 5*time.Second)
- if tc.wantErr {
- if err == nil {
- t.Fatalf("expected error for %q, got nil", tc.proxyURL)
- }
- return
- }
- if err != nil {
- t.Fatalf("unexpected error for %q: %v", tc.proxyURL, err)
- }
- if client.Timeout != 5*time.Second {
- t.Errorf("timeout = %v, want 5s", client.Timeout)
- }
- if tc.wantProxy {
- transport, ok := client.Transport.(*http.Transport)
- if !ok || transport.Proxy == nil {
- t.Errorf("expected transport with Proxy set for %q", tc.proxyURL)
- }
- }
- if tc.wantDial {
- transport, ok := client.Transport.(*http.Transport)
- if !ok || transport.DialContext == nil {
- t.Errorf("expected transport with DialContext set for %q", tc.proxyURL)
- }
- }
- })
- }
- }
|