| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package otoauth2
- import (
- "net/http"
- "net/http/httptest"
- "strconv"
- "testing"
- "time"
- config "github.com/OliveTin/OliveTin/internal/config"
- "github.com/stretchr/testify/assert"
- "golang.org/x/oauth2"
- )
- func TestSweepExpiredOAuthStatesLocked(t *testing.T) {
- h := &OAuth2Handler{
- registeredStates: make(map[string]*oauth2State),
- }
- h.registeredStates["fresh"] = &oauth2State{
- providerName: "test",
- createdAt: time.Now(),
- }
- h.registeredStates["stale"] = &oauth2State{
- providerName: "test",
- createdAt: time.Now().Add(-2 * oauthStateMaxAge * time.Second),
- }
- h.sweepExpiredOAuthStatesLocked(time.Now())
- _, freshFound := h.registeredStates["fresh"]
- _, staleFound := h.registeredStates["stale"]
- assert.True(t, freshFound)
- assert.False(t, staleFound)
- }
- func TestHandleOAuthLoginRejectsWhenStateMapFull(t *testing.T) {
- cfg := config.DefaultConfig()
- cfg.AuthOAuth2Providers = map[string]*config.OAuth2Provider{
- "test": {
- Name: "test",
- ClientID: "id",
- ClientSecret: "secret",
- AuthUrl: "https://example.com/auth",
- TokenUrl: "https://example.com/token",
- },
- }
- h := NewOAuth2Handler(cfg)
- h.registeredStates = make(map[string]*oauth2State, oauthStateMaxEntries)
- for i := 0; i < oauthStateMaxEntries; i++ {
- h.registeredStates[strconv.Itoa(i)] = &oauth2State{
- providerConfig: &oauth2.Config{},
- providerName: "test",
- createdAt: time.Now(),
- }
- }
- req := httptest.NewRequest(http.MethodGet, "/oauth/login?provider=test", nil)
- rec := httptest.NewRecorder()
- h.HandleOAuthLogin(rec, req)
- assert.Equal(t, http.StatusServiceUnavailable, rec.Code)
- assert.Equal(t, oauthStateMaxEntries, len(h.registeredStates))
- }
|