restapi_auth_oauth2_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package otoauth2
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "strconv"
  6. "testing"
  7. "time"
  8. config "github.com/OliveTin/OliveTin/internal/config"
  9. "github.com/stretchr/testify/assert"
  10. "golang.org/x/oauth2"
  11. )
  12. func TestSweepExpiredOAuthStatesLocked(t *testing.T) {
  13. h := &OAuth2Handler{
  14. registeredStates: make(map[string]*oauth2State),
  15. }
  16. h.registeredStates["fresh"] = &oauth2State{
  17. providerName: "test",
  18. createdAt: time.Now(),
  19. }
  20. h.registeredStates["stale"] = &oauth2State{
  21. providerName: "test",
  22. createdAt: time.Now().Add(-2 * oauthStateMaxAge * time.Second),
  23. }
  24. h.sweepExpiredOAuthStatesLocked(time.Now())
  25. _, freshFound := h.registeredStates["fresh"]
  26. _, staleFound := h.registeredStates["stale"]
  27. assert.True(t, freshFound)
  28. assert.False(t, staleFound)
  29. }
  30. func TestHandleOAuthLoginRejectsWhenStateMapFull(t *testing.T) {
  31. cfg := config.DefaultConfig()
  32. cfg.AuthOAuth2Providers = map[string]*config.OAuth2Provider{
  33. "test": {
  34. Name: "test",
  35. ClientID: "id",
  36. ClientSecret: "secret",
  37. AuthUrl: "https://example.com/auth",
  38. TokenUrl: "https://example.com/token",
  39. },
  40. }
  41. h := NewOAuth2Handler(cfg)
  42. h.registeredStates = make(map[string]*oauth2State, oauthStateMaxEntries)
  43. for i := 0; i < oauthStateMaxEntries; i++ {
  44. h.registeredStates[strconv.Itoa(i)] = &oauth2State{
  45. providerConfig: &oauth2.Config{},
  46. providerName: "test",
  47. createdAt: time.Now(),
  48. }
  49. }
  50. req := httptest.NewRequest(http.MethodGet, "/oauth/login?provider=test", nil)
  51. rec := httptest.NewRecorder()
  52. h.HandleOAuthLogin(rec, req)
  53. assert.Equal(t, http.StatusServiceUnavailable, rec.Code)
  54. assert.Equal(t, oauthStateMaxEntries, len(h.registeredStates))
  55. }