package httpclient_test import ( "crypto/tls" "encoding/base64" "fmt" "io" "net/http" "net/http/httptest" "os" "testing" "github.com/stretchr/testify/assert" "github.com/dexidp/dex/pkg/httpclient" ) func TestRootCAs(t *testing.T) { ts, err := NewLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, client") })) assert.Nil(t, err) defer ts.Close() runTest := func(name string, certs []string) { t.Run(name, func(t *testing.T) { rootCAs := certs testClient, err := httpclient.NewHTTPClient(rootCAs, false) assert.Nil(t, err) res, err := testClient.Get(ts.URL) assert.Nil(t, err) greeting, err := io.ReadAll(res.Body) res.Body.Close() assert.Nil(t, err) assert.Equal(t, "Hello, client", string(greeting)) }) } runTest("From file", []string{"testdata/rootCA.pem"}) content, err := os.ReadFile("testdata/rootCA.pem") assert.NoError(t, err) runTest("From string", []string{string(content)}) contentStr := base64.StdEncoding.EncodeToString(content) runTest("From bytes", []string{contentStr}) } func TestInsecureSkipVerify(t *testing.T) { ts, err := NewLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, client") })) assert.Nil(t, err) defer ts.Close() insecureSkipVerify := true testClient, err := httpclient.NewHTTPClient(nil, insecureSkipVerify) assert.Nil(t, err) res, err := testClient.Get(ts.URL) assert.Nil(t, err) greeting, err := io.ReadAll(res.Body) res.Body.Close() assert.Nil(t, err) assert.Equal(t, "Hello, client", string(greeting)) } func NewLocalHTTPSTestServer(handler http.Handler) (*httptest.Server, error) { ts := httptest.NewUnstartedServer(handler) cert, err := tls.LoadX509KeyPair("testdata/server.crt", "testdata/server.key") if err != nil { return nil, err } ts.TLS = &tls.Config{Certificates: []tls.Certificate{cert}} ts.StartTLS() return ts, nil }