You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tool_test.go 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package base
  4. import (
  5. "os"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestEncodeMD5(t *testing.T) {
  11. assert.Equal(t,
  12. "3858f62230ac3c915f300c664312c63f",
  13. EncodeMD5("foobar"),
  14. )
  15. }
  16. func TestEncodeSha1(t *testing.T) {
  17. assert.Equal(t,
  18. "8843d7f92416211de9ebb963ff4ce28125932878",
  19. EncodeSha1("foobar"),
  20. )
  21. }
  22. func TestEncodeSha256(t *testing.T) {
  23. assert.Equal(t,
  24. "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2",
  25. EncodeSha256("foobar"),
  26. )
  27. }
  28. func TestShortSha(t *testing.T) {
  29. assert.Equal(t, "veryverylo", ShortSha("veryverylong"))
  30. }
  31. func TestBasicAuthDecode(t *testing.T) {
  32. _, _, err := BasicAuthDecode("?")
  33. assert.Equal(t, "illegal base64 data at input byte 0", err.Error())
  34. user, pass, err := BasicAuthDecode("Zm9vOmJhcg==")
  35. assert.NoError(t, err)
  36. assert.Equal(t, "foo", user)
  37. assert.Equal(t, "bar", pass)
  38. _, _, err = BasicAuthDecode("aW52YWxpZA==")
  39. assert.Error(t, err)
  40. _, _, err = BasicAuthDecode("invalid")
  41. assert.Error(t, err)
  42. }
  43. func TestBasicAuthEncode(t *testing.T) {
  44. assert.Equal(t, "Zm9vOmJhcg==", BasicAuthEncode("foo", "bar"))
  45. assert.Equal(t, "MjM6IjotLS0t", BasicAuthEncode("23:\"", "----"))
  46. }
  47. func TestVerifyTimeLimitCode(t *testing.T) {
  48. tc := []struct {
  49. data string
  50. minutes int
  51. code string
  52. valid bool
  53. }{{
  54. data: "data",
  55. minutes: 2,
  56. code: testCreateTimeLimitCode(t, "data", 2),
  57. valid: true,
  58. }, {
  59. data: "abc123-ß",
  60. minutes: 1,
  61. code: testCreateTimeLimitCode(t, "abc123-ß", 1),
  62. valid: true,
  63. }, {
  64. data: "data",
  65. minutes: 2,
  66. code: "2021012723240000005928251dac409d2c33a6eb82c63410aaad569bed",
  67. valid: false,
  68. }}
  69. for _, test := range tc {
  70. actualValid := VerifyTimeLimitCode(test.data, test.minutes, test.code)
  71. assert.Equal(t, test.valid, actualValid, "data: '%s' code: '%s' should be valid: %t", test.data, test.code, test.valid)
  72. }
  73. }
  74. func testCreateTimeLimitCode(t *testing.T, data string, m int) string {
  75. result0 := CreateTimeLimitCode(data, m, nil)
  76. result1 := CreateTimeLimitCode(data, m, time.Now().Format("200601021504"))
  77. result2 := CreateTimeLimitCode(data, m, time.Unix(time.Now().Unix()+int64(time.Minute)*int64(m), 0).Format("200601021504"))
  78. assert.Equal(t, result0, result1)
  79. assert.NotEqual(t, result0, result2)
  80. assert.True(t, len(result0) != 0)
  81. return result0
  82. }
  83. func TestFileSize(t *testing.T) {
  84. var size int64 = 512
  85. assert.Equal(t, "512 B", FileSize(size))
  86. size *= 1024
  87. assert.Equal(t, "512 KiB", FileSize(size))
  88. size *= 1024
  89. assert.Equal(t, "512 MiB", FileSize(size))
  90. size *= 1024
  91. assert.Equal(t, "512 GiB", FileSize(size))
  92. size *= 1024
  93. assert.Equal(t, "512 TiB", FileSize(size))
  94. size *= 1024
  95. assert.Equal(t, "512 PiB", FileSize(size))
  96. size *= 4
  97. assert.Equal(t, "2.0 EiB", FileSize(size))
  98. }
  99. func TestEllipsisString(t *testing.T) {
  100. assert.Equal(t, "...", EllipsisString("foobar", 0))
  101. assert.Equal(t, "...", EllipsisString("foobar", 1))
  102. assert.Equal(t, "...", EllipsisString("foobar", 2))
  103. assert.Equal(t, "...", EllipsisString("foobar", 3))
  104. assert.Equal(t, "f...", EllipsisString("foobar", 4))
  105. assert.Equal(t, "fo...", EllipsisString("foobar", 5))
  106. assert.Equal(t, "foobar", EllipsisString("foobar", 6))
  107. assert.Equal(t, "foobar", EllipsisString("foobar", 10))
  108. assert.Equal(t, "测...", EllipsisString("测试文本一二三四", 4))
  109. assert.Equal(t, "测试...", EllipsisString("测试文本一二三四", 5))
  110. assert.Equal(t, "测试文...", EllipsisString("测试文本一二三四", 6))
  111. assert.Equal(t, "测试文本一二三四", EllipsisString("测试文本一二三四", 10))
  112. }
  113. func TestTruncateString(t *testing.T) {
  114. assert.Equal(t, "", TruncateString("foobar", 0))
  115. assert.Equal(t, "f", TruncateString("foobar", 1))
  116. assert.Equal(t, "fo", TruncateString("foobar", 2))
  117. assert.Equal(t, "foo", TruncateString("foobar", 3))
  118. assert.Equal(t, "foob", TruncateString("foobar", 4))
  119. assert.Equal(t, "fooba", TruncateString("foobar", 5))
  120. assert.Equal(t, "foobar", TruncateString("foobar", 6))
  121. assert.Equal(t, "foobar", TruncateString("foobar", 7))
  122. assert.Equal(t, "测试文本", TruncateString("测试文本一二三四", 4))
  123. assert.Equal(t, "测试文本一", TruncateString("测试文本一二三四", 5))
  124. assert.Equal(t, "测试文本一二", TruncateString("测试文本一二三四", 6))
  125. assert.Equal(t, "测试文本一二三", TruncateString("测试文本一二三四", 7))
  126. }
  127. func TestStringsToInt64s(t *testing.T) {
  128. testSuccess := func(input []string, expected []int64) {
  129. result, err := StringsToInt64s(input)
  130. assert.NoError(t, err)
  131. assert.Equal(t, expected, result)
  132. }
  133. testSuccess([]string{}, []int64{})
  134. testSuccess([]string{"-1234"}, []int64{-1234})
  135. testSuccess([]string{"1", "4", "16", "64", "256"},
  136. []int64{1, 4, 16, 64, 256})
  137. _, err := StringsToInt64s([]string{"-1", "a", "$"})
  138. assert.Error(t, err)
  139. }
  140. func TestInt64sToStrings(t *testing.T) {
  141. assert.Equal(t, []string{}, Int64sToStrings([]int64{}))
  142. assert.Equal(t,
  143. []string{"1", "4", "16", "64", "256"},
  144. Int64sToStrings([]int64{1, 4, 16, 64, 256}),
  145. )
  146. }
  147. func TestInt64sContains(t *testing.T) {
  148. assert.True(t, Int64sContains([]int64{6, 44324, 4324, 32, 1, 2323}, 1))
  149. assert.True(t, Int64sContains([]int64{2323}, 2323))
  150. assert.False(t, Int64sContains([]int64{6, 44324, 4324, 32, 1, 2323}, 232))
  151. }
  152. func TestIsLetter(t *testing.T) {
  153. assert.True(t, IsLetter('a'))
  154. assert.True(t, IsLetter('e'))
  155. assert.True(t, IsLetter('q'))
  156. assert.True(t, IsLetter('z'))
  157. assert.True(t, IsLetter('A'))
  158. assert.True(t, IsLetter('E'))
  159. assert.True(t, IsLetter('Q'))
  160. assert.True(t, IsLetter('Z'))
  161. assert.True(t, IsLetter('_'))
  162. assert.False(t, IsLetter('-'))
  163. assert.False(t, IsLetter('1'))
  164. assert.False(t, IsLetter('$'))
  165. assert.False(t, IsLetter(0x00))
  166. assert.False(t, IsLetter(0x93))
  167. }
  168. // TODO: Test EntryIcon
  169. func TestSetupGiteaRoot(t *testing.T) {
  170. _ = os.Setenv("GITEA_ROOT", "test")
  171. assert.Equal(t, "test", SetupGiteaRoot())
  172. _ = os.Setenv("GITEA_ROOT", "")
  173. assert.NotEqual(t, "test", SetupGiteaRoot())
  174. }
  175. func TestFormatNumberSI(t *testing.T) {
  176. assert.Equal(t, "125", FormatNumberSI(int(125)))
  177. assert.Equal(t, "1.3k", FormatNumberSI(int64(1317)))
  178. assert.Equal(t, "21.3M", FormatNumberSI(21317675))
  179. assert.Equal(t, "45.7G", FormatNumberSI(45721317675))
  180. assert.Equal(t, "", FormatNumberSI("test"))
  181. }