pomerium/pkg/zero/cluster/client_test.go
Denis Mishin ce12e51cf5
zero/api: reset token and url cache if 401 is received (#5256)
zero/api: reset token cache if 401 is received
2024-09-03 15:40:28 -04:00

59 lines
1.4 KiB
Go

package cluster_test
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"github.com/pomerium/pomerium/internal/zero/token"
api "github.com/pomerium/pomerium/pkg/zero/cluster"
)
func TestAPIClient(t *testing.T) {
t.Parallel()
respond := func(w http.ResponseWriter, status int, body any) {
t.Helper()
data, err := json.Marshal(body)
require.NoError(t, err)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
_, err = w.Write(data)
require.NoError(t, err)
}
idToken := "id-token"
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/exchangeToken":
respond(w, http.StatusOK, api.ExchangeTokenResponse{
IdToken: idToken,
ExpiresInSeconds: "3600",
})
default:
t.Error("unexpected request", r.URL.Path)
}
}))
t.Cleanup(srv.Close)
fetcher, err := api.NewTokenFetcher(srv.URL)
require.NoError(t, err)
tokenCache := token.NewCache(fetcher, "refresh-token")
client, err := api.NewAuthorizedClient(srv.URL, tokenCache, http.DefaultClient)
require.NoError(t, err)
resp, err := client.ExchangeClusterIdentityTokenWithResponse(context.Background(),
api.ExchangeTokenRequest{
RefreshToken: "refresh-token",
},
)
require.NoError(t, err)
require.Equal(t, idToken, resp.JSON200.IdToken)
}