// Copyright 2020 PingCAP, Inc. Licensed under Apache-2.0. package task import ( "encoding/hex" "fmt" "testing" backup "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/encryptionpb" "github.com/pingcap/tidb/config" "github.com/spf13/pflag" "github.com/stretchr/testify/require" ) type fakeValue string func (f fakeValue) String() string { return string(f) } func (f fakeValue) Set(string) error { panic("implement me") } func (f fakeValue) Type() string { panic("implement me") } func TestUrlNoQuery(t *testing.T) { flag := &pflag.Flag{ Name: flagStorage, Value: fakeValue("s3://some/what?secret=a123456789&key=987654321"), } field := flagToZapField(flag) require.Equal(t, flagStorage, field.Key) require.Equal(t, "s3://some/what", field.Interface.(fmt.Stringer).String()) } func TestTiDBConfigUnchanged(t *testing.T) { cfg := config.GetGlobalConfig() restoreConfig := enableTiDBConfig() require.NotEqual(t, config.GetGlobalConfig(), cfg) restoreConfig() require.Equal(t, config.GetGlobalConfig(), cfg) } func TestStripingPDURL(t *testing.T) { nor1, err := normalizePDURL("https://pd:5432", true) require.NoError(t, err) require.Equal(t, "pd:5432", nor1) _, err = normalizePDURL("https://pd.pingcap.com", false) require.Error(t, err) require.Regexp(t, ".*pd url starts with https while TLS disabled.*", err.Error()) _, err = normalizePDURL("http://127.0.0.1:2379", true) require.Error(t, err) require.Regexp(t, ".*pd url starts with http while TLS enabled.*", err.Error()) nor, err := normalizePDURL("http://127.0.0.1", false) require.NoError(t, err) require.Equal(t, "127.0.0.1", nor) noChange, err := normalizePDURL("127.0.0.1:2379", false) require.NoError(t, err) require.Equal(t, "127.0.0.1:2379", noChange) } func TestCheckCipherKeyMatch(t *testing.T) { cases := []struct { CipherType encryptionpb.EncryptionMethod CipherKey string ok bool }{ { CipherType: encryptionpb.EncryptionMethod_PLAINTEXT, ok: true, }, { CipherType: encryptionpb.EncryptionMethod_UNKNOWN, ok: false, }, { CipherType: encryptionpb.EncryptionMethod_AES128_CTR, CipherKey: "0123456789abcdef0123456789abcdef", ok: true, }, { CipherType: encryptionpb.EncryptionMethod_AES128_CTR, CipherKey: "0123456789abcdef0123456789abcd", ok: false, }, { CipherType: encryptionpb.EncryptionMethod_AES192_CTR, CipherKey: "0123456789abcdef0123456789abcdef0123456789abcdef", ok: true, }, { CipherType: encryptionpb.EncryptionMethod_AES192_CTR, CipherKey: "0123456789abcdef0123456789abcdef0123456789abcdefff", ok: false, }, { CipherType: encryptionpb.EncryptionMethod_AES256_CTR, CipherKey: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", ok: true, }, { CipherType: encryptionpb.EncryptionMethod_AES256_CTR, CipherKey: "", ok: false, }, } for _, c := range cases { cipherKey, err := hex.DecodeString(c.CipherKey) require.NoError(t, err) require.Equal(t, c.ok, checkCipherKeyMatch(&backup.CipherInfo{ CipherType: c.CipherType, CipherKey: cipherKey, })) } } func TestCheckCipherKey(t *testing.T) { cases := []struct { cipherKey string keyFile string ok bool }{ { cipherKey: "0123456789abcdef0123456789abcdef", keyFile: "", ok: true, }, { cipherKey: "0123456789abcdef0123456789abcdef", keyFile: "/tmp/abc", ok: false, }, { cipherKey: "", keyFile: "/tmp/abc", ok: true, }, { cipherKey: "", keyFile: "", ok: false, }, } for _, c := range cases { err := checkCipherKey(c.cipherKey, c.keyFile) if c.ok { require.NoError(t, err) } else { require.Error(t, err) } } }