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  }