github.com/aliyun/credentials-go@v1.4.7/credentials/utils/utils_test.go (about) 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 // 2006-01-02T15:04:05Z 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 }