package fleethttp import ( "crypto/tls" "net/http" "testing" "time" "github.com/stretchr/testify/assert" ) func TestClient(t *testing.T) { cases := []struct { name string opts []ClientOpt nilTransport bool nilRedirect bool timeout time.Duration }{ {"default", nil, true, true, 0}, {"timeout", []ClientOpt{WithTimeout(time.Second)}, true, true, time.Second}, {"nofollow", []ClientOpt{WithFollowRedir(false)}, true, false, 0}, {"tlsconfig", []ClientOpt{WithTLSClientConfig(&tls.Config{})}, false, true, 0}, {"combined", []ClientOpt{ WithTLSClientConfig(&tls.Config{}), WithTimeout(time.Second), WithFollowRedir(false), }, false, false, time.Second}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { cli := NewClient(c.opts...) if c.nilTransport { assert.Nil(t, cli.Transport) } else { assert.NotNil(t, cli.Transport) } if c.nilRedirect { assert.Nil(t, cli.CheckRedirect) } else { assert.NotNil(t, cli.CheckRedirect) } assert.Equal(t, c.timeout, cli.Timeout) }) } } func TestTransport(t *testing.T) { defaultTLSConf := http.DefaultTransport.(*http.Transport).TLSClientConfig cases := []struct { name string opts []TransportOpt defaultTLS bool }{ {"default", nil, true}, {"tlsconf", []TransportOpt{WithTLSConfig(&tls.Config{})}, false}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { tr := NewTransport(c.opts...) if c.defaultTLS { assert.Equal(t, defaultTLSConf, tr.TLSClientConfig) } else { assert.NotEqual(t, defaultTLSConf, tr.TLSClientConfig) } assert.NotNil(t, tr.Proxy) assert.NotNil(t, tr.DialContext) }) } }