code.gitea.io/gitea@v1.22.3/modules/base/tool_test.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package base 5 6 import ( 7 "crypto/sha1" 8 "fmt" 9 "os" 10 "testing" 11 "time" 12 13 "code.gitea.io/gitea/modules/setting" 14 "code.gitea.io/gitea/modules/test" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestEncodeSha256(t *testing.T) { 20 assert.Equal(t, 21 "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2", 22 EncodeSha256("foobar"), 23 ) 24 } 25 26 func TestShortSha(t *testing.T) { 27 assert.Equal(t, "veryverylo", ShortSha("veryverylong")) 28 } 29 30 func TestBasicAuthDecode(t *testing.T) { 31 _, _, err := BasicAuthDecode("?") 32 assert.Equal(t, "illegal base64 data at input byte 0", err.Error()) 33 34 user, pass, err := BasicAuthDecode("Zm9vOmJhcg==") 35 assert.NoError(t, err) 36 assert.Equal(t, "foo", user) 37 assert.Equal(t, "bar", pass) 38 39 _, _, err = BasicAuthDecode("aW52YWxpZA==") 40 assert.Error(t, err) 41 42 _, _, err = BasicAuthDecode("invalid") 43 assert.Error(t, err) 44 } 45 46 func TestVerifyTimeLimitCode(t *testing.T) { 47 defer test.MockVariableValue(&setting.InstallLock, true)() 48 initGeneralSecret := func(secret string) { 49 setting.InstallLock = true 50 setting.CfgProvider, _ = setting.NewConfigProviderFromData(fmt.Sprintf(` 51 [oauth2] 52 JWT_SECRET = %s 53 `, secret)) 54 setting.LoadCommonSettings() 55 } 56 57 initGeneralSecret("KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko") 58 now := time.Now() 59 60 t.Run("TestGenericParameter", func(t *testing.T) { 61 time2000 := time.Date(2000, 1, 2, 3, 4, 5, 0, time.Local) 62 assert.Equal(t, "2000010203040000026fa5221b2731b7cf80b1b506f5e39e38c115fee5", CreateTimeLimitCode("test-sha1", 2, time2000, sha1.New())) 63 assert.Equal(t, "2000010203040000026fa5221b2731b7cf80b1b506f5e39e38c115fee5", CreateTimeLimitCode("test-sha1", 2, "200001020304", sha1.New())) 64 assert.Equal(t, "2000010203040000024842227a2f87041ff82025199c0187410a9297bf", CreateTimeLimitCode("test-hmac", 2, time2000, nil)) 65 assert.Equal(t, "2000010203040000024842227a2f87041ff82025199c0187410a9297bf", CreateTimeLimitCode("test-hmac", 2, "200001020304", nil)) 66 }) 67 68 t.Run("TestInvalidCode", func(t *testing.T) { 69 assert.False(t, VerifyTimeLimitCode(now, "data", 2, "")) 70 assert.False(t, VerifyTimeLimitCode(now, "data", 2, "invalid code")) 71 }) 72 73 t.Run("TestCreateAndVerify", func(t *testing.T) { 74 code := CreateTimeLimitCode("data", 2, now, nil) 75 assert.False(t, VerifyTimeLimitCode(now.Add(-time.Minute), "data", 2, code)) // not started yet 76 assert.True(t, VerifyTimeLimitCode(now, "data", 2, code)) 77 assert.True(t, VerifyTimeLimitCode(now.Add(time.Minute), "data", 2, code)) 78 assert.False(t, VerifyTimeLimitCode(now.Add(time.Minute), "DATA", 2, code)) // invalid data 79 assert.False(t, VerifyTimeLimitCode(now.Add(2*time.Minute), "data", 2, code)) // expired 80 }) 81 82 t.Run("TestDifferentSecret", func(t *testing.T) { 83 // use another secret to ensure the code is invalid for different secret 84 verifyDataCode := func(c string) bool { 85 return VerifyTimeLimitCode(now, "data", 2, c) 86 } 87 code1 := CreateTimeLimitCode("data", 2, now, sha1.New()) 88 code2 := CreateTimeLimitCode("data", 2, now, nil) 89 assert.True(t, verifyDataCode(code1)) 90 assert.True(t, verifyDataCode(code2)) 91 initGeneralSecret("000_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko") 92 assert.False(t, verifyDataCode(code1)) 93 assert.False(t, verifyDataCode(code2)) 94 }) 95 } 96 97 func TestFileSize(t *testing.T) { 98 var size int64 = 512 99 assert.Equal(t, "512 B", FileSize(size)) 100 size *= 1024 101 assert.Equal(t, "512 KiB", FileSize(size)) 102 size *= 1024 103 assert.Equal(t, "512 MiB", FileSize(size)) 104 size *= 1024 105 assert.Equal(t, "512 GiB", FileSize(size)) 106 size *= 1024 107 assert.Equal(t, "512 TiB", FileSize(size)) 108 size *= 1024 109 assert.Equal(t, "512 PiB", FileSize(size)) 110 size *= 4 111 assert.Equal(t, "2.0 EiB", FileSize(size)) 112 } 113 114 func TestEllipsisString(t *testing.T) { 115 assert.Equal(t, "...", EllipsisString("foobar", 0)) 116 assert.Equal(t, "...", EllipsisString("foobar", 1)) 117 assert.Equal(t, "...", EllipsisString("foobar", 2)) 118 assert.Equal(t, "...", EllipsisString("foobar", 3)) 119 assert.Equal(t, "f...", EllipsisString("foobar", 4)) 120 assert.Equal(t, "fo...", EllipsisString("foobar", 5)) 121 assert.Equal(t, "foobar", EllipsisString("foobar", 6)) 122 assert.Equal(t, "foobar", EllipsisString("foobar", 10)) 123 assert.Equal(t, "测...", EllipsisString("测试文本一二三四", 4)) 124 assert.Equal(t, "测试...", EllipsisString("测试文本一二三四", 5)) 125 assert.Equal(t, "测试文...", EllipsisString("测试文本一二三四", 6)) 126 assert.Equal(t, "测试文本一二三四", EllipsisString("测试文本一二三四", 10)) 127 } 128 129 func TestTruncateString(t *testing.T) { 130 assert.Equal(t, "", TruncateString("foobar", 0)) 131 assert.Equal(t, "f", TruncateString("foobar", 1)) 132 assert.Equal(t, "fo", TruncateString("foobar", 2)) 133 assert.Equal(t, "foo", TruncateString("foobar", 3)) 134 assert.Equal(t, "foob", TruncateString("foobar", 4)) 135 assert.Equal(t, "fooba", TruncateString("foobar", 5)) 136 assert.Equal(t, "foobar", TruncateString("foobar", 6)) 137 assert.Equal(t, "foobar", TruncateString("foobar", 7)) 138 assert.Equal(t, "测试文本", TruncateString("测试文本一二三四", 4)) 139 assert.Equal(t, "测试文本一", TruncateString("测试文本一二三四", 5)) 140 assert.Equal(t, "测试文本一二", TruncateString("测试文本一二三四", 6)) 141 assert.Equal(t, "测试文本一二三", TruncateString("测试文本一二三四", 7)) 142 } 143 144 func TestStringsToInt64s(t *testing.T) { 145 testSuccess := func(input []string, expected []int64) { 146 result, err := StringsToInt64s(input) 147 assert.NoError(t, err) 148 assert.Equal(t, expected, result) 149 } 150 testSuccess(nil, nil) 151 testSuccess([]string{}, []int64{}) 152 testSuccess([]string{"-1234"}, []int64{-1234}) 153 testSuccess([]string{"1", "4", "16", "64", "256"}, []int64{1, 4, 16, 64, 256}) 154 155 ints, err := StringsToInt64s([]string{"-1", "a"}) 156 assert.Len(t, ints, 0) 157 assert.Error(t, err) 158 } 159 160 func TestInt64sToStrings(t *testing.T) { 161 assert.Equal(t, []string{}, Int64sToStrings([]int64{})) 162 assert.Equal(t, 163 []string{"1", "4", "16", "64", "256"}, 164 Int64sToStrings([]int64{1, 4, 16, 64, 256}), 165 ) 166 } 167 168 // TODO: Test EntryIcon 169 170 func TestSetupGiteaRoot(t *testing.T) { 171 _ = os.Setenv("GITEA_ROOT", "test") 172 assert.Equal(t, "test", SetupGiteaRoot()) 173 _ = os.Setenv("GITEA_ROOT", "") 174 assert.NotEqual(t, "test", SetupGiteaRoot()) 175 } 176 177 func TestFormatNumberSI(t *testing.T) { 178 assert.Equal(t, "125", FormatNumberSI(int(125))) 179 assert.Equal(t, "1.3k", FormatNumberSI(int64(1317))) 180 assert.Equal(t, "21.3M", FormatNumberSI(21317675)) 181 assert.Equal(t, "45.7G", FormatNumberSI(45721317675)) 182 assert.Equal(t, "", FormatNumberSI("test")) 183 }