gitea源码

auth_token_test.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package auth
  4. import (
  5. "testing"
  6. "time"
  7. auth_model "code.gitea.io/gitea/models/auth"
  8. "code.gitea.io/gitea/models/unittest"
  9. "code.gitea.io/gitea/modules/timeutil"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestCheckAuthToken(t *testing.T) {
  13. assert.NoError(t, unittest.PrepareTestDatabase())
  14. t.Run("Empty", func(t *testing.T) {
  15. token, err := CheckAuthToken(t.Context(), "")
  16. assert.NoError(t, err)
  17. assert.Nil(t, token)
  18. })
  19. t.Run("InvalidFormat", func(t *testing.T) {
  20. token, err := CheckAuthToken(t.Context(), "dummy")
  21. assert.ErrorIs(t, err, ErrAuthTokenInvalidFormat)
  22. assert.Nil(t, token)
  23. })
  24. t.Run("NotFound", func(t *testing.T) {
  25. token, err := CheckAuthToken(t.Context(), "notexists:dummy")
  26. assert.ErrorIs(t, err, ErrAuthTokenExpired)
  27. assert.Nil(t, token)
  28. })
  29. t.Run("Expired", func(t *testing.T) {
  30. timeutil.MockSet(time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC))
  31. at, token, err := CreateAuthTokenForUserID(t.Context(), 2)
  32. assert.NoError(t, err)
  33. assert.NotNil(t, at)
  34. assert.NotEmpty(t, token)
  35. timeutil.MockUnset()
  36. at2, err := CheckAuthToken(t.Context(), at.ID+":"+token)
  37. assert.ErrorIs(t, err, ErrAuthTokenExpired)
  38. assert.Nil(t, at2)
  39. assert.NoError(t, auth_model.DeleteAuthTokenByID(t.Context(), at.ID))
  40. })
  41. t.Run("InvalidHash", func(t *testing.T) {
  42. at, token, err := CreateAuthTokenForUserID(t.Context(), 2)
  43. assert.NoError(t, err)
  44. assert.NotNil(t, at)
  45. assert.NotEmpty(t, token)
  46. at2, err := CheckAuthToken(t.Context(), at.ID+":"+token+"dummy")
  47. assert.ErrorIs(t, err, ErrAuthTokenInvalidHash)
  48. assert.Nil(t, at2)
  49. assert.NoError(t, auth_model.DeleteAuthTokenByID(t.Context(), at.ID))
  50. })
  51. t.Run("Valid", func(t *testing.T) {
  52. at, token, err := CreateAuthTokenForUserID(t.Context(), 2)
  53. assert.NoError(t, err)
  54. assert.NotNil(t, at)
  55. assert.NotEmpty(t, token)
  56. at2, err := CheckAuthToken(t.Context(), at.ID+":"+token)
  57. assert.NoError(t, err)
  58. assert.NotNil(t, at2)
  59. assert.NoError(t, auth_model.DeleteAuthTokenByID(t.Context(), at.ID))
  60. })
  61. }
  62. func TestRegenerateAuthToken(t *testing.T) {
  63. assert.NoError(t, unittest.PrepareTestDatabase())
  64. timeutil.MockSet(time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC))
  65. defer timeutil.MockUnset()
  66. at, token, err := CreateAuthTokenForUserID(t.Context(), 2)
  67. assert.NoError(t, err)
  68. assert.NotNil(t, at)
  69. assert.NotEmpty(t, token)
  70. timeutil.MockSet(time.Date(2023, 1, 1, 0, 0, 1, 0, time.UTC))
  71. at2, token2, err := RegenerateAuthToken(t.Context(), at)
  72. assert.NoError(t, err)
  73. assert.NotNil(t, at2)
  74. assert.NotEmpty(t, token2)
  75. assert.Equal(t, at.ID, at2.ID)
  76. assert.Equal(t, at.UserID, at2.UserID)
  77. assert.NotEqual(t, token, token2)
  78. assert.NotEqual(t, at.ExpiresUnix, at2.ExpiresUnix)
  79. assert.NoError(t, auth_model.DeleteAuthTokenByID(t.Context(), at.ID))
  80. }