71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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")
 | |
| 	}
 | |
| }
 |