gitea源码

tool_test.go 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package base
  4. import (
  5. "crypto/sha1"
  6. "fmt"
  7. "testing"
  8. "time"
  9. "code.gitea.io/gitea/modules/setting"
  10. "code.gitea.io/gitea/modules/test"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestEncodeSha256(t *testing.T) {
  14. assert.Equal(t,
  15. "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2",
  16. EncodeSha256("foobar"),
  17. )
  18. }
  19. func TestShortSha(t *testing.T) {
  20. assert.Equal(t, "veryverylo", ShortSha("veryverylong"))
  21. }
  22. func TestVerifyTimeLimitCode(t *testing.T) {
  23. defer test.MockVariableValue(&setting.InstallLock, true)()
  24. initGeneralSecret := func(secret string) {
  25. setting.InstallLock = true
  26. setting.CfgProvider, _ = setting.NewConfigProviderFromData(fmt.Sprintf(`
  27. [oauth2]
  28. JWT_SECRET = %s
  29. `, secret))
  30. setting.LoadCommonSettings()
  31. }
  32. initGeneralSecret("KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko")
  33. now := time.Now()
  34. t.Run("TestGenericParameter", func(t *testing.T) {
  35. time2000 := time.Date(2000, 1, 2, 3, 4, 5, 0, time.Local)
  36. assert.Equal(t, "2000010203040000026fa5221b2731b7cf80b1b506f5e39e38c115fee5", CreateTimeLimitCode("test-sha1", 2, time2000, sha1.New()))
  37. assert.Equal(t, "2000010203040000026fa5221b2731b7cf80b1b506f5e39e38c115fee5", CreateTimeLimitCode("test-sha1", 2, "200001020304", sha1.New()))
  38. assert.Equal(t, "2000010203040000024842227a2f87041ff82025199c0187410a9297bf", CreateTimeLimitCode("test-hmac", 2, time2000, nil))
  39. assert.Equal(t, "2000010203040000024842227a2f87041ff82025199c0187410a9297bf", CreateTimeLimitCode("test-hmac", 2, "200001020304", nil))
  40. })
  41. t.Run("TestInvalidCode", func(t *testing.T) {
  42. assert.False(t, VerifyTimeLimitCode(now, "data", 2, ""))
  43. assert.False(t, VerifyTimeLimitCode(now, "data", 2, "invalid code"))
  44. })
  45. t.Run("TestCreateAndVerify", func(t *testing.T) {
  46. code := CreateTimeLimitCode("data", 2, now, nil)
  47. assert.False(t, VerifyTimeLimitCode(now.Add(-time.Minute), "data", 2, code)) // not started yet
  48. assert.True(t, VerifyTimeLimitCode(now, "data", 2, code))
  49. assert.True(t, VerifyTimeLimitCode(now.Add(time.Minute), "data", 2, code))
  50. assert.False(t, VerifyTimeLimitCode(now.Add(time.Minute), "DATA", 2, code)) // invalid data
  51. assert.False(t, VerifyTimeLimitCode(now.Add(2*time.Minute), "data", 2, code)) // expired
  52. })
  53. t.Run("TestDifferentSecret", func(t *testing.T) {
  54. // use another secret to ensure the code is invalid for different secret
  55. verifyDataCode := func(c string) bool {
  56. return VerifyTimeLimitCode(now, "data", 2, c)
  57. }
  58. code := CreateTimeLimitCode("data", 2, now, nil)
  59. assert.True(t, verifyDataCode(code))
  60. initGeneralSecret("000_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko")
  61. assert.False(t, verifyDataCode(code))
  62. })
  63. }
  64. func TestFileSize(t *testing.T) {
  65. var size int64 = 512
  66. assert.Equal(t, "512 B", FileSize(size))
  67. size *= 1024
  68. assert.Equal(t, "512 KiB", FileSize(size))
  69. size *= 1024
  70. assert.Equal(t, "512 MiB", FileSize(size))
  71. size *= 1024
  72. assert.Equal(t, "512 GiB", FileSize(size))
  73. size *= 1024
  74. assert.Equal(t, "512 TiB", FileSize(size))
  75. size *= 1024
  76. assert.Equal(t, "512 PiB", FileSize(size))
  77. size *= 4
  78. assert.Equal(t, "2.0 EiB", FileSize(size))
  79. }
  80. func TestStringsToInt64s(t *testing.T) {
  81. testSuccess := func(input []string, expected []int64) {
  82. result, err := StringsToInt64s(input)
  83. assert.NoError(t, err)
  84. assert.Equal(t, expected, result)
  85. }
  86. testSuccess(nil, nil)
  87. testSuccess([]string{}, []int64{})
  88. testSuccess([]string{""}, []int64{})
  89. testSuccess([]string{"-1234"}, []int64{-1234})
  90. testSuccess([]string{"1", "4", "16", "64", "256"}, []int64{1, 4, 16, 64, 256})
  91. ints, err := StringsToInt64s([]string{"-1", "a"})
  92. assert.Empty(t, ints)
  93. assert.Error(t, err)
  94. }
  95. func TestInt64sToStrings(t *testing.T) {
  96. assert.Equal(t, []string{}, Int64sToStrings([]int64{}))
  97. assert.Equal(t,
  98. []string{"1", "4", "16", "64", "256"},
  99. Int64sToStrings([]int64{1, 4, 16, 64, 256}),
  100. )
  101. }