summaryrefslogtreecommitdiff
path: root/pkg/test
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-04-17 13:12:05 -0600
committermo khan <mo@mokhan.ca>2025-04-17 13:12:05 -0600
commit7a1f5be3e1884679425d9182179182a1765a6a6f (patch)
tree32fbe7fe30f470cd08ec65b585631698f40f2cb0 /pkg/test
parentc2446fee22eb42eada473288cd329d4b09baa687 (diff)
test: extract oidc server test helper
Diffstat (limited to 'pkg/test')
-rw-r--r--pkg/test/oidc_server.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/pkg/test/oidc_server.go b/pkg/test/oidc_server.go
index 142d143..a3ae9e3 100644
--- a/pkg/test/oidc_server.go
+++ b/pkg/test/oidc_server.go
@@ -3,9 +3,15 @@ package test
import (
"net/http"
"net/http/httptest"
+ "strconv"
+ "testing"
"time"
+ "github.com/coreos/go-oidc/v3/oidc"
+ "github.com/oauth2-proxy/mockoidc"
+ "github.com/stretchr/testify/require"
"github.com/xlgmokha/x/pkg/serde"
+ "golang.org/x/oauth2"
)
func OIDCServer() *httptest.Server {
@@ -59,3 +65,66 @@ func OIDCServer() *httptest.Server {
}
return srv
}
+
+type TestServer struct {
+ *mockoidc.MockOIDC
+ *oauth2.Config
+ *oidc.Provider
+ *testing.T
+}
+
+func NewOIDCServer(t *testing.T) *TestServer {
+ srv, err := mockoidc.Run()
+ require.NoError(t, err)
+
+ srv.AddMiddleware(func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ t.Logf("%v %v %v\n", r.Method, r.URL.Path, r.URL.Query())
+ next.ServeHTTP(w, r)
+ })
+ })
+
+ provider, err := oidc.NewProvider(t.Context(), srv.Issuer())
+ require.NoError(t, err)
+
+ config := &oauth2.Config{
+ ClientID: srv.Config().ClientID,
+ ClientSecret: srv.Config().ClientSecret,
+ RedirectURL: "https://example.com/oauth/callback",
+ Endpoint: provider.Endpoint(),
+ Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
+ }
+
+ return &TestServer{
+ srv,
+ config,
+ provider,
+ t,
+ }
+}
+
+func (srv *TestServer) CreateTokenFor(user mockoidc.User) *oauth2.Token {
+ code := strconv.FormatInt(time.Now().Unix(), 10)
+ srv.QueueUser(user)
+ srv.QueueCode(code)
+
+ url := srv.AuthCodeURL("state")
+ response, err := http.Get(url)
+ require.NoError(srv, err)
+ srv.Logf("%v\n", response)
+
+ token, err := srv.Exchange(srv.Context(), code)
+ require.NoError(srv, err)
+ return token
+}
+
+func (srv *TestServer) CreateTokensFor(user mockoidc.User) (*oauth2.Token, string) {
+ token := srv.CreateTokenFor(user)
+ rawIDToken, ok := token.Extra("id_token").(string)
+ require.True(srv, ok)
+ return token, rawIDToken
+}
+
+func (s *TestServer) Close() {
+ s.Shutdown()
+}