mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-04-25 12:24:41 +02:00
Use a generic http.HandlerFunc in Keycloak tests
This commit is contained in:
parent
f07a5630f1
commit
816d9a4566
@ -17,13 +17,6 @@ import (
|
|||||||
const (
|
const (
|
||||||
keycloakAccessToken = "eyJKeycloak.eyJAccess.Token"
|
keycloakAccessToken = "eyJKeycloak.eyJAccess.Token"
|
||||||
keycloakUserinfoPath = "/api/v3/user"
|
keycloakUserinfoPath = "/api/v3/user"
|
||||||
|
|
||||||
// Userinfo Test Cases querystring toggles
|
|
||||||
tcUIStandard = "userinfo-standard"
|
|
||||||
tcUIFail = "userinfo-fail"
|
|
||||||
tcUISingleGroup = "userinfo-single-group"
|
|
||||||
tcUIMissingEmail = "userinfo-missing-email"
|
|
||||||
tcUIMissingGroups = "userinfo-missing-groups"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func testKeycloakProvider(backend *httptest.Server) (*KeycloakProvider, error) {
|
func testKeycloakProvider(backend *httptest.Server) (*KeycloakProvider, error) {
|
||||||
@ -52,62 +45,6 @@ func testKeycloakProvider(backend *httptest.Server) (*KeycloakProvider, error) {
|
|||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func testKeycloakBackend() *httptest.Server {
|
|
||||||
return httptest.NewServer(http.HandlerFunc(
|
|
||||||
func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
if r.URL.Path != keycloakUserinfoPath {
|
|
||||||
w.WriteHeader(404)
|
|
||||||
}
|
|
||||||
|
|
||||||
var err error
|
|
||||||
switch r.URL.Query().Get("testcase") {
|
|
||||||
case tcUIStandard:
|
|
||||||
w.WriteHeader(200)
|
|
||||||
_, err = w.Write([]byte(`
|
|
||||||
{
|
|
||||||
"email": "michael.bland@gsa.gov",
|
|
||||||
"groups": [
|
|
||||||
"test-grp1",
|
|
||||||
"test-grp2"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
`))
|
|
||||||
case tcUIFail:
|
|
||||||
w.WriteHeader(500)
|
|
||||||
case tcUISingleGroup:
|
|
||||||
w.WriteHeader(200)
|
|
||||||
_, err = w.Write([]byte(`
|
|
||||||
{
|
|
||||||
"email": "michael.bland@gsa.gov",
|
|
||||||
"groups": ["test-grp1"]
|
|
||||||
}
|
|
||||||
`))
|
|
||||||
case tcUIMissingEmail:
|
|
||||||
w.WriteHeader(200)
|
|
||||||
_, err = w.Write([]byte(`
|
|
||||||
{
|
|
||||||
"groups": [
|
|
||||||
"test-grp1",
|
|
||||||
"test-grp2"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
`))
|
|
||||||
case tcUIMissingGroups:
|
|
||||||
w.WriteHeader(200)
|
|
||||||
_, err = w.Write([]byte(`
|
|
||||||
{
|
|
||||||
"email": "michael.bland@gsa.gov"
|
|
||||||
}
|
|
||||||
`))
|
|
||||||
default:
|
|
||||||
w.WriteHeader(404)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = Describe("Keycloak Provider Tests", func() {
|
var _ = Describe("Keycloak Provider Tests", func() {
|
||||||
Context("New Provider Init", func() {
|
Context("New Provider Init", func() {
|
||||||
It("uses defaults", func() {
|
It("uses defaults", func() {
|
||||||
@ -151,25 +88,9 @@ var _ = Describe("Keycloak Provider Tests", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("With a test HTTP Server & Provider", func() {
|
|
||||||
var p *KeycloakProvider
|
|
||||||
var b *httptest.Server
|
|
||||||
|
|
||||||
BeforeEach(func() {
|
|
||||||
b = testKeycloakBackend()
|
|
||||||
|
|
||||||
var err error
|
|
||||||
p, err = testKeycloakProvider(b)
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
})
|
|
||||||
|
|
||||||
AfterEach(func() {
|
|
||||||
b.Close()
|
|
||||||
})
|
|
||||||
|
|
||||||
Context("EnrichSession", func() {
|
Context("EnrichSession", func() {
|
||||||
type enrichSessionTableInput struct {
|
type enrichSessionTableInput struct {
|
||||||
testcase string
|
backendHandler http.HandlerFunc
|
||||||
expectedError error
|
expectedError error
|
||||||
expectedEmail string
|
expectedEmail string
|
||||||
expectedGroups []string
|
expectedGroups []string
|
||||||
@ -177,9 +98,12 @@ var _ = Describe("Keycloak Provider Tests", func() {
|
|||||||
|
|
||||||
DescribeTable("should return expected results",
|
DescribeTable("should return expected results",
|
||||||
func(in enrichSessionTableInput) {
|
func(in enrichSessionTableInput) {
|
||||||
var err error
|
backend := httptest.NewServer(in.backendHandler)
|
||||||
|
p, err := testKeycloakProvider(backend)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
p.ProfileURL, err = url.Parse(
|
p.ProfileURL, err = url.Parse(
|
||||||
fmt.Sprintf("%s%s?testcase=%s", b.URL, keycloakUserinfoPath, in.testcase),
|
fmt.Sprintf("%s%s", backend.URL, keycloakUserinfoPath),
|
||||||
)
|
)
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
@ -201,37 +125,86 @@ var _ = Describe("Keycloak Provider Tests", func() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
Entry("email and multiple groups", enrichSessionTableInput{
|
Entry("email and multiple groups", enrichSessionTableInput{
|
||||||
testcase: tcUIStandard,
|
backendHandler: func(w http.ResponseWriter, _ *http.Request) {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte(`
|
||||||
|
{
|
||||||
|
"email": "michael.bland@gsa.gov",
|
||||||
|
"groups": [
|
||||||
|
"test-grp1",
|
||||||
|
"test-grp2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
expectedError: nil,
|
expectedError: nil,
|
||||||
expectedEmail: "michael.bland@gsa.gov",
|
expectedEmail: "michael.bland@gsa.gov",
|
||||||
expectedGroups: []string{"test-grp1", "test-grp2"},
|
expectedGroups: []string{"test-grp1", "test-grp2"},
|
||||||
}),
|
}),
|
||||||
Entry("email and single group", enrichSessionTableInput{
|
Entry("email and single group", enrichSessionTableInput{
|
||||||
testcase: tcUISingleGroup,
|
backendHandler: func(w http.ResponseWriter, _ *http.Request) {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte(`
|
||||||
|
{
|
||||||
|
"email": "michael.bland@gsa.gov",
|
||||||
|
"groups": ["test-grp1"]
|
||||||
|
}
|
||||||
|
`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
expectedError: nil,
|
expectedError: nil,
|
||||||
expectedEmail: "michael.bland@gsa.gov",
|
expectedEmail: "michael.bland@gsa.gov",
|
||||||
expectedGroups: []string{"test-grp1"},
|
expectedGroups: []string{"test-grp1"},
|
||||||
}),
|
}),
|
||||||
Entry("email and no groups", enrichSessionTableInput{
|
Entry("email and no groups", enrichSessionTableInput{
|
||||||
testcase: tcUIMissingGroups,
|
backendHandler: func(w http.ResponseWriter, _ *http.Request) {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte(`
|
||||||
|
{
|
||||||
|
"email": "michael.bland@gsa.gov"
|
||||||
|
}
|
||||||
|
`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
expectedError: nil,
|
expectedError: nil,
|
||||||
expectedEmail: "michael.bland@gsa.gov",
|
expectedEmail: "michael.bland@gsa.gov",
|
||||||
expectedGroups: nil,
|
expectedGroups: nil,
|
||||||
}),
|
}),
|
||||||
Entry("missing email", enrichSessionTableInput{
|
Entry("missing email", enrichSessionTableInput{
|
||||||
testcase: tcUIMissingEmail,
|
backendHandler: func(w http.ResponseWriter, _ *http.Request) {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte(`
|
||||||
|
{
|
||||||
|
"groups": [
|
||||||
|
"test-grp1",
|
||||||
|
"test-grp2"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
`))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
expectedError: errors.New(
|
expectedError: errors.New(
|
||||||
"unable to extract email from userinfo endpoint: type assertion to string failed"),
|
"unable to extract email from userinfo endpoint: type assertion to string failed"),
|
||||||
expectedEmail: "",
|
expectedEmail: "",
|
||||||
expectedGroups: []string{"test-grp1", "test-grp2"},
|
expectedGroups: []string{"test-grp1", "test-grp2"},
|
||||||
}),
|
}),
|
||||||
Entry("request failure", enrichSessionTableInput{
|
Entry("request failure", enrichSessionTableInput{
|
||||||
testcase: tcUIFail,
|
backendHandler: func(w http.ResponseWriter, _ *http.Request) {
|
||||||
|
w.WriteHeader(500)
|
||||||
|
},
|
||||||
expectedError: errors.New(`unexpected status "500": `),
|
expectedError: errors.New(`unexpected status "500": `),
|
||||||
expectedEmail: "",
|
expectedEmail: "",
|
||||||
expectedGroups: nil,
|
expectedGroups: nil,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user