1 package utils
2
3 import (
4 "crypto"
5 "crypto/rsa"
6 "errors"
7 "io"
8 "regexp"
9 "testing"
10
11 "github.com/stretchr/testify/assert"
12 )
13
14 func TestGetUUID(t *testing.T) {
15 uuid := newUUID()
16 assert.Equal(t, 16, len(uuid))
17 assert.Equal(t, 36, len(uuid.String()))
18 uuidString := GetUUID()
19 assert.Equal(t, 32, len(uuidString))
20 }
21
22 func TestGetMD5Base64(t *testing.T) {
23 assert.Equal(t, "ERIHLmRX2uZmssDdxQnnxQ==",
24 GetMD5Base64([]byte("That's all folks!!")))
25 assert.Equal(t, "GsJRdI3kAbAnHo/0+3wWJw==",
26 GetMD5Base64([]byte("中文也没啥问题")))
27 }
28
29 func TestGetTimeInFormatISO8601(t *testing.T) {
30 s := GetTimeInFormatISO8601()
31 assert.Equal(t, 20, len(s))
32
33 re := regexp.MustCompile(`^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$`)
34 assert.True(t, re.MatchString(s))
35 }
36
37 func TestGetURLFormedMap(t *testing.T) {
38 m := make(map[string]string)
39 m["key"] = "value"
40 s := GetURLFormedMap(m)
41 assert.Equal(t, "key=value", s)
42 m["key2"] = "http://domain/?key=value&key2=value2"
43 s2 := GetURLFormedMap(m)
44 assert.Equal(t, "key=value&key2=http%3A%2F%2Fdomain%2F%3Fkey%3Dvalue%26key2%3Dvalue2", s2)
45 }
46
47 func TestShaHmac1(t *testing.T) {
48 result := ShaHmac1("source", "secret")
49 assert.Equal(t, "Jv4yi8SobFhg5t1C7nWLbhBSFZQ=", result)
50
51 assert.Equal(t, "CqCYIa39h9SSWuXnTz8F5hh9UPA=", ShaHmac1("中文", "secret"))
52 }
53
54 func TestSha256WithRsa(t *testing.T) {
55 secret := `
56 MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOJC+2WXtkXZ+6sa
57 3+qJp4mDOsiZb3BghHT9nVbjTeaw4hsZWHYxQ6l6XDmTg4twPB59LOGAlAjYrT31
58 3pdwEawnmdf6zyF93Zvxxpy7lO2HoxYKSjbtXO4I0pcq3WTnw2xlbhqHvrcuWwt+
59 FqH9akzcnwHjc03siZBzt/dwDL3vAgMBAAECgYEAzwgZPqFuUEYgaTVDFDl2ynYA
60 kNMMzBgUu3Pgx0Nf4amSitdLQYLcdbQXtTtMT4eYCxHgwkpDqkCRbLOQRKNwFo0I
61 oaCuhjZlxWcKil4z4Zb/zB7gkeuXPOVUjFSS3FogsRWMtnNAMgR/yJRlbcg/Puqk
62 Magt/yDk+7cJCe6H96ECQQDxMT4S+tVP9nOw//QT39Dk+kWe/YVEhnWnCMZmGlEq
63 1gnN6qpUi68ts6b3BVgrDPrPN6wm/Z9vpcKNeWpIvxXRAkEA8CcT2UEUwDGRKAUu
64 WVPJqdAJjpjc072eRF5g792NyO+TAF6thBlDKNslRvFQDB6ymLsjfy8JYCnGbbSb
65 WqbHvwJBAIs7KeI6+jiWxGJA3t06LpSABQCqyOut0u0Bm8YFGyXnOPGtrXXwzMdN
66 Fe0zIJp5e69zK+W2Mvt4bL7OgBROeoECQQDsE+4uLw0gFln0tosmovhmp60NcfX7
67 bLbtzL2MbwbXlbOztF7ssgzUWAHgKI6hK3g0LhsqBuo3jzmSVO43giZvAkEA08Nm
68 2TI9EvX6DfCVfPOiKZM+Pijh0xLN4Dn8qUgt3Tcew/vfj4WA2ZV6qiJqL01vMsHc
69 vftlY0Hs1vNXcaBgEA==`
70 result := Sha256WithRsa("source", secret)
71 assert.Equal(t, "UNyJPD27jjSNl70b02E/DUtgtNESdtAuxbNBZTlksk1t/GYjiQNRlFIubp/EGKcWsqs7p5SFKnNiSRqWG3A51VmJFBXXtyW1nwLC9xY/MbUj6JVWNYCuLkPWM942O+GAk7N+G8ZQZt7ib2MhruDAUmv1lLN26lDaCPBX2MJQJCo=", result)
72
73 assert.Equal(t, "CKE0osxUnFFH+oYP3Q427saucBuignE+Mrni63G9w46yZFtVoXFOu5lNiNCnUtaPNpGmBf9X5oGCY+otqPf7bP93nB59rfdteQs0sS65PWH9yjH8RwYCWGCbuyRul/0qIv/nYYGzkLON1C1Vx9Z4Yep6llYuJang5RIXrAkQLmQ=", Sha256WithRsa("中文", secret))
74 }
75
76 func TestSha256WithRsa_DecodeString_Error(t *testing.T) {
77 defer func() {
78 err := recover()
79 assert.NotNil(t, err)
80 assert.Equal(t, "illegal base64 data at input byte 0", err.(error).Error())
81 }()
82 secret := `==`
83 Sha256WithRsa("source", secret)
84 }
85
86 func TestSha256WithRsa_ParsePKCS8PrivateKey_Error(t *testing.T) {
87 defer func() {
88 err := recover()
89 assert.NotNil(t, err)
90 assert.Equal(t, "asn1: structure error: length too large", err.(error).Error())
91 }()
92 secret := `Jv4yi8SobFhg5t1C7nWLbhBSFZQ=`
93 Sha256WithRsa("source", secret)
94 }
95
96 func TestHookRead(t *testing.T) {
97 fn := func(p []byte) (n int, err error) {
98 return 0, errors.New("hookRead")
99 }
100 result := hookRead(fn)
101 n, err := result(nil)
102 assert.Equal(t, 0, n)
103 assert.Equal(t, "hookRead", err.Error())
104
105 originHookRead := hookRead
106 hookRead = func(old func(p []byte) (n int, err error)) func(p []byte) (n int, err error) {
107 return fn
108 }
109 defer func() {
110 err := recover()
111 assert.Equal(t, "hookRead", err.(error).Error())
112 hookRead = originHookRead
113 }()
114 safeRandom([]byte("credentialtest"))
115 }
116
117 func TestHookRSA(t *testing.T) {
118 fn := func(rand io.Reader, priv *rsa.PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error) {
119 return nil, errors.New("hookRSA")
120 }
121 result := hookRSA(fn)
122 hash := crypto.Hash(10)
123 byt, err := result(nil, nil, hash, nil)
124 assert.Nil(t, byt)
125 assert.Equal(t, "hookRSA", err.Error())
126
127 originHookRSA := hookRSA
128 hookRSA = func(old func(rand io.Reader, priv *rsa.PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)) func(rand io.Reader, priv *rsa.PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error) {
129 return fn
130 }
131 defer func() {
132 err := recover()
133 assert.Equal(t, "hookRSA", err.(error).Error())
134 hookRSA = originHookRSA
135 }()
136 secret := `
137 MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOJC+2WXtkXZ+6sa
138 3+qJp4mDOsiZb3BghHT9nVbjTeaw4hsZWHYxQ6l6XDmTg4twPB59LOGAlAjYrT31
139 3pdwEawnmdf6zyF93Zvxxpy7lO2HoxYKSjbtXO4I0pcq3WTnw2xlbhqHvrcuWwt+
140 FqH9akzcnwHjc03siZBzt/dwDL3vAgMBAAECgYEAzwgZPqFuUEYgaTVDFDl2ynYA
141 kNMMzBgUu3Pgx0Nf4amSitdLQYLcdbQXtTtMT4eYCxHgwkpDqkCRbLOQRKNwFo0I
142 oaCuhjZlxWcKil4z4Zb/zB7gkeuXPOVUjFSS3FogsRWMtnNAMgR/yJRlbcg/Puqk
143 Magt/yDk+7cJCe6H96ECQQDxMT4S+tVP9nOw//QT39Dk+kWe/YVEhnWnCMZmGlEq
144 1gnN6qpUi68ts6b3BVgrDPrPN6wm/Z9vpcKNeWpIvxXRAkEA8CcT2UEUwDGRKAUu
145 WVPJqdAJjpjc072eRF5g792NyO+TAF6thBlDKNslRvFQDB6ymLsjfy8JYCnGbbSb
146 WqbHvwJBAIs7KeI6+jiWxGJA3t06LpSABQCqyOut0u0Bm8YFGyXnOPGtrXXwzMdN
147 Fe0zIJp5e69zK+W2Mvt4bL7OgBROeoECQQDsE+4uLw0gFln0tosmovhmp60NcfX7
148 bLbtzL2MbwbXlbOztF7ssgzUWAHgKI6hK3g0LhsqBuo3jzmSVO43giZvAkEA08Nm
149 2TI9EvX6DfCVfPOiKZM+Pijh0xLN4Dn8qUgt3Tcew/vfj4WA2ZV6qiJqL01vMsHc
150 vftlY0Hs1vNXcaBgEA==`
151 Sha256WithRsa("source", secret)
152 }
153
View as plain text