Skip to content

Commit 0c657ba

Browse files
authored
test(utils): enhance TokenReviewHandler with discovery capabilities (#484)
Signed-off-by: Marc Nuri <[email protected]>
1 parent d92a927 commit 0c657ba

File tree

4 files changed

+39
-9
lines changed

4 files changed

+39
-9
lines changed

internal/test/mock_server.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package test
33
import (
44
"encoding/json"
55
"errors"
6+
"fmt"
67
"io"
78
"net/http"
89
"net/http/httptest"
910
"path/filepath"
11+
"strings"
1012
"testing"
1113

1214
"github.com/stretchr/testify/require"
@@ -186,7 +188,10 @@ WaitForStreams:
186188
return ctx, nil
187189
}
188190

189-
type DiscoveryClientHandler struct{}
191+
type DiscoveryClientHandler struct {
192+
V1Resources []string
193+
Groups []string
194+
}
190195

191196
var _ http.Handler = (*DiscoveryClientHandler)(nil)
192197

@@ -200,14 +205,24 @@ func (h *DiscoveryClientHandler) ServeHTTP(w http.ResponseWriter, req *http.Requ
200205
// Request Performed by DiscoveryClient to Kube API (Get API Groups)
201206
if req.URL.Path == "/apis" {
202207
w.Header().Set("Content-Type", "application/json")
203-
_, _ = w.Write([]byte(`{"kind":"APIGroupList","apiVersion":"v1","groups":[]}`))
208+
_, _ = fmt.Fprintf(w, `{"kind":"APIGroupList","apiVersion":"v1","groups":[%s]}`, strings.Join(append(h.Groups,
209+
`{"name":"apps","versions":[{"groupVersion":"apps/v1","version":"v1"}],"preferredVersion":{"groupVersion":"apps/v1","version":"v1"}}`,
210+
), ","))
204211
return
205212
}
206213
// Request Performed by DiscoveryClient to Kube API (Get API Resources)
207214
if req.URL.Path == "/api/v1" {
208215
w.Header().Set("Content-Type", "application/json")
209-
_, _ = w.Write([]byte(`{"kind":"APIResourceList","apiVersion":"v1","resources":[
210-
{"name":"pods","singularName":"","namespaced":true,"kind":"Pod","verbs":["get","list","watch","create","update","patch","delete"]}
216+
_, _ = fmt.Fprintf(w, `{"kind":"APIResourceList","apiVersion":"v1","resources":[%s]}`, strings.Join(append(h.V1Resources,
217+
`{"name":"nodes","singularName":"","namespaced":false,"kind":"Node","verbs":["get","list","watch"]}`,
218+
`{"name":"pods","singularName":"","namespaced":true,"kind":"Pod","verbs":["get","list","watch","create","update","patch","delete"]}`,
219+
), ","))
220+
return
221+
}
222+
if req.URL.Path == "/apis/apps/v1" {
223+
w.Header().Set("Content-Type", "application/json")
224+
_, _ = w.Write([]byte(`{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"apps/v1","resources":[
225+
{"name":"deployments","singularName":"","namespaced":true,"kind":"Deployment","verbs":["get","list","watch","create","update","patch","delete"]}
211226
]}`))
212227
return
213228
}
@@ -264,12 +279,27 @@ const tokenReviewSuccessful = `
264279
}`
265280

266281
type TokenReviewHandler struct {
282+
DiscoveryClientHandler
267283
TokenReviewed bool
268284
}
269285

270286
var _ http.Handler = (*TokenReviewHandler)(nil)
271287

288+
func NewTokenReviewHandler() *TokenReviewHandler {
289+
trh := &TokenReviewHandler{}
290+
trh.Groups = []string{
291+
`{"name":"authentication.k8s.io","versions":[{"groupVersion":"authentication.k8s.io/v1","version":"v1"}],"preferredVersion":{"groupVersion":"authentication.k8s.io/v1","version":"v1"}}`,
292+
}
293+
return trh
294+
}
295+
272296
func (h *TokenReviewHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
297+
h.DiscoveryClientHandler.ServeHTTP(w, req)
298+
if req.URL.EscapedPath() == "/apis/authentication.k8s.io/v1" {
299+
w.Header().Set("Content-Type", "application/json")
300+
_, _ = w.Write([]byte(`{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"authentication.k8s.io/v1","resources":[{"name":"tokenreviews","singularName":"","namespaced":false,"kind":"TokenReview","verbs":["create"]}]}`))
301+
return
302+
}
273303
if req.URL.EscapedPath() == "/apis/authentication.k8s.io/v1/tokenreviews" {
274304
w.Header().Set("Content-Type", "application/json")
275305
_, _ = w.Write([]byte(tokenReviewSuccessful))

pkg/http/http_authorization_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ func (s *AuthorizationSuite) TestAuthorizationRequireOAuthFalse() {
324324
}
325325

326326
func (s *AuthorizationSuite) TestAuthorizationRawToken() {
327-
tokenReviewHandler := &test.TokenReviewHandler{}
327+
tokenReviewHandler := test.NewTokenReviewHandler()
328328
s.MockServer.Handle(tokenReviewHandler)
329329

330330
cases := []struct {
@@ -367,7 +367,7 @@ func (s *AuthorizationSuite) TestAuthorizationRawToken() {
367367
}
368368

369369
func (s *AuthorizationSuite) TestAuthorizationOidcToken() {
370-
tokenReviewHandler := &test.TokenReviewHandler{}
370+
tokenReviewHandler := test.NewTokenReviewHandler()
371371
s.MockServer.Handle(tokenReviewHandler)
372372

373373
oidcTestServer := NewOidcTestServer(s.T())
@@ -412,7 +412,7 @@ func (s *AuthorizationSuite) TestAuthorizationOidcToken() {
412412
}
413413

414414
func (s *AuthorizationSuite) TestAuthorizationOidcTokenExchange() {
415-
tokenReviewHandler := &test.TokenReviewHandler{}
415+
tokenReviewHandler := test.NewTokenReviewHandler()
416416
s.MockServer.Handle(tokenReviewHandler)
417417

418418
oidcTestServer := NewOidcTestServer(s.T())

pkg/kubernetes/provider_kubeconfig_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (s *ProviderKubeconfigTestSuite) TestWithOpenShiftCluster() {
5656
}
5757

5858
func (s *ProviderKubeconfigTestSuite) TestVerifyToken() {
59-
s.mockServer.Handle(&test.TokenReviewHandler{})
59+
s.mockServer.Handle(test.NewTokenReviewHandler())
6060

6161
s.Run("VerifyToken returns UserInfo for non-empty context", func() {
6262
userInfo, audiences, err := s.provider.VerifyToken(s.T().Context(), "fake-context", "some-token", "the-audience")

pkg/kubernetes/provider_single_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (s *ProviderSingleTestSuite) TestWithOpenShiftCluster() {
5757
}
5858

5959
func (s *ProviderSingleTestSuite) TestVerifyToken() {
60-
s.mockServer.Handle(&test.TokenReviewHandler{})
60+
s.mockServer.Handle(test.NewTokenReviewHandler())
6161

6262
s.Run("VerifyToken returns UserInfo for empty target (default target)", func() {
6363
userInfo, audiences, err := s.provider.VerifyToken(s.T().Context(), "", "the-token", "the-audience")

0 commit comments

Comments
 (0)