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