Add tests for OIDC
This commit is contained in:
70
security/oidc_test.go
Normal file
70
security/oidc_test.go
Normal file
@ -0,0 +1,70 @@
|
||||
package security
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/coreos/go-oidc/v3/oidc"
|
||||
)
|
||||
|
||||
func TestOIDCConfig_isValid(t *testing.T) {
|
||||
c := &OIDCConfig{
|
||||
IssuerURL: "https://sso.gatus.io/",
|
||||
RedirectURL: "http://localhost:80/authorization-code/callback",
|
||||
ClientID: "client-id",
|
||||
ClientSecret: "client-secret",
|
||||
Scopes: []string{"openid"},
|
||||
AllowedSubjects: []string{"user1@example.com"},
|
||||
}
|
||||
if !c.isValid() {
|
||||
t.Error("OIDCConfig should be valid")
|
||||
}
|
||||
}
|
||||
|
||||
func TestOIDCConfig_callbackHandler(t *testing.T) {
|
||||
c := &OIDCConfig{
|
||||
IssuerURL: "https://sso.gatus.io/",
|
||||
RedirectURL: "http://localhost:80/authorization-code/callback",
|
||||
ClientID: "client-id",
|
||||
ClientSecret: "client-secret",
|
||||
Scopes: []string{"openid"},
|
||||
AllowedSubjects: []string{"user1@example.com"},
|
||||
}
|
||||
if err := c.initialize(); err != nil {
|
||||
t.Fatal("expected no error, but got", err)
|
||||
}
|
||||
// Try with no state cookie
|
||||
request, _ := http.NewRequest("GET", "/authorization-code/callback", nil)
|
||||
responseRecorder := httptest.NewRecorder()
|
||||
c.callbackHandler(responseRecorder, request)
|
||||
if responseRecorder.Code != http.StatusBadRequest {
|
||||
t.Error("expected code to be 400, but was", responseRecorder.Code)
|
||||
}
|
||||
// Try with state cookie
|
||||
request, _ = http.NewRequest("GET", "/authorization-code/callback", nil)
|
||||
request.AddCookie(&http.Cookie{Name: cookieNameState, Value: "fake-state"})
|
||||
responseRecorder = httptest.NewRecorder()
|
||||
c.callbackHandler(responseRecorder, request)
|
||||
if responseRecorder.Code != http.StatusBadRequest {
|
||||
t.Error("expected code to be 400, but was", responseRecorder.Code)
|
||||
}
|
||||
// Try with state cookie and state query parameter
|
||||
request, _ = http.NewRequest("GET", "/authorization-code/callback?state=fake-state", nil)
|
||||
request.AddCookie(&http.Cookie{Name: cookieNameState, Value: "fake-state"})
|
||||
responseRecorder = httptest.NewRecorder()
|
||||
c.callbackHandler(responseRecorder, request)
|
||||
// Exchange should fail, so 500.
|
||||
if responseRecorder.Code != http.StatusInternalServerError {
|
||||
t.Error("expected code to be 500, but was", responseRecorder.Code)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOIDCConfig_setSessionCookie(t *testing.T) {
|
||||
c := &OIDCConfig{}
|
||||
responseRecorder := httptest.NewRecorder()
|
||||
c.setSessionCookie(responseRecorder, &oidc.IDToken{Subject: "test@example.com"})
|
||||
if len(responseRecorder.Result().Cookies()) == 0 {
|
||||
t.Error("expected cookie to be set")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user