mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2026-09-26 18:04:24 +00:00
Create an interface to abstract the upstream IDP from the authorize, IDP discovery, callback, choose IDP, and login endpoints. This commit does not refactor the token endpoint, which will be refactored in a similar way in the next commit.
94 lines
2.7 KiB
Go
94 lines
2.7 KiB
Go
// Copyright 2024 the Pinniped contributors. All Rights Reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package downstreamsubject
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLDAP(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
uid string
|
|
ldapURL string
|
|
idpDisplayName string
|
|
wantSubject string
|
|
}{
|
|
{
|
|
name: "simple display name",
|
|
uid: "some uid",
|
|
ldapURL: "ldaps://server.example.com:1234",
|
|
idpDisplayName: "simpleName",
|
|
wantSubject: "ldaps://server.example.com:1234?idpName=simpleName&sub=some+uid",
|
|
},
|
|
{
|
|
name: "interesting display name",
|
|
uid: "some uid",
|
|
ldapURL: "ldaps://server.example.com:1234",
|
|
idpDisplayName: "this is a 👍 display name that 🦭 can handle",
|
|
wantSubject: "ldaps://server.example.com:1234?idpName=this+is+a+%F0%9F%91%8D+display+name+that+%F0%9F%A6%AD+can+handle&sub=some+uid",
|
|
},
|
|
{
|
|
name: "url already has query",
|
|
uid: "some uid",
|
|
ldapURL: "ldaps://server.example.com:1234?a=1&b=%F0%9F%A6%AD",
|
|
idpDisplayName: "some name",
|
|
wantSubject: "ldaps://server.example.com:1234?a=1&b=%F0%9F%A6%AD&idpName=some+name&sub=some+uid",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
test := test
|
|
t.Run(test.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
u, err := url.Parse(test.ldapURL)
|
|
require.NoError(t, err)
|
|
|
|
actual := LDAP(test.uid, *u, test.idpDisplayName)
|
|
|
|
require.Equal(t, test.wantSubject, actual)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestOIDC(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
upstreamIssuerAsString string
|
|
upstreamSubject string
|
|
idpDisplayName string
|
|
wantSubject string
|
|
}{
|
|
{
|
|
name: "simple display name",
|
|
upstreamIssuerAsString: "https://server.example.com:1234/path",
|
|
upstreamSubject: "some subject",
|
|
idpDisplayName: "simpleName",
|
|
wantSubject: "https://server.example.com:1234/path?idpName=simpleName&sub=some+subject",
|
|
},
|
|
{
|
|
name: "interesting display name",
|
|
upstreamIssuerAsString: "https://server.example.com:1234/path",
|
|
upstreamSubject: "some subject",
|
|
idpDisplayName: "this is a 👍 display name that 🦭 can handle",
|
|
wantSubject: "https://server.example.com:1234/path?idpName=this+is+a+%F0%9F%91%8D+display+name+that+%F0%9F%A6%AD+can+handle&sub=some+subject",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
test := test
|
|
t.Run(test.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
actual := OIDC(test.upstreamIssuerAsString, test.upstreamSubject, test.idpDisplayName)
|
|
|
|
require.Equal(t, test.wantSubject, actual)
|
|
})
|
|
}
|
|
}
|