代码拉取完成,页面将自动刷新
/*
* Copyright 2019 Dgraph Labs, Inc. and Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package badger
import (
"math/rand"
"os"
"testing"
"github.com/stretchr/testify/require"
)
func getRegistryTestOptions(dir string, key []byte) KeyRegistryOptions {
return KeyRegistryOptions{
Dir: dir,
EncryptionKey: key,
ReadOnly: false,
}
}
func TestBuildRegistry(t *testing.T) {
encryptionKey := make([]byte, 32)
dir, err := os.MkdirTemp("", "badger-test")
require.NoError(t, err)
defer removeDir(dir)
_, err = rand.Read(encryptionKey)
require.NoError(t, err)
opt := getRegistryTestOptions(dir, encryptionKey)
kr, err := OpenKeyRegistry(opt)
require.NoError(t, err)
dk, err := kr.LatestDataKey()
require.NoError(t, err)
// We're resetting the last created timestamp. So, it creates
// new datakey.
kr.lastCreated = 0
dk1, err := kr.LatestDataKey()
// We generated two key. So, checking the length.
require.Equal(t, 2, len(kr.dataKeys))
require.NoError(t, err)
require.NoError(t, kr.Close())
kr2, err := OpenKeyRegistry(opt)
require.NoError(t, err)
require.Equal(t, 2, len(kr2.dataKeys))
// Asserting the correctness of the datakey after opening the registry.
require.Equal(t, dk.Data, kr.dataKeys[dk.KeyId].Data)
require.Equal(t, dk1.Data, kr.dataKeys[dk1.KeyId].Data)
require.NoError(t, kr2.Close())
}
func TestRewriteRegistry(t *testing.T) {
encryptionKey := make([]byte, 32)
dir, err := os.MkdirTemp("", "badger-test")
require.NoError(t, err)
defer removeDir(dir)
_, err = rand.Read(encryptionKey)
require.NoError(t, err)
opt := getRegistryTestOptions(dir, encryptionKey)
kr, err := OpenKeyRegistry(opt)
require.NoError(t, err)
_, err = kr.LatestDataKey()
require.NoError(t, err)
// We're resetting the last created timestamp. So, it creates
// new datakey.
kr.lastCreated = 0
_, err = kr.LatestDataKey()
require.NoError(t, err)
require.NoError(t, kr.Close())
delete(kr.dataKeys, 1)
require.NoError(t, WriteKeyRegistry(kr, opt))
kr2, err := OpenKeyRegistry(opt)
require.NoError(t, err)
require.Equal(t, 1, len(kr2.dataKeys))
require.NoError(t, kr2.Close())
}
func TestMismatch(t *testing.T) {
encryptionKey := make([]byte, 32)
dir, err := os.MkdirTemp("", "badger-test")
require.NoError(t, err)
defer removeDir(dir)
_, err = rand.Read(encryptionKey)
require.NoError(t, err)
opt := getRegistryTestOptions(dir, encryptionKey)
kr, err := OpenKeyRegistry(opt)
require.NoError(t, err)
require.NoError(t, kr.Close())
// Opening with the same key and asserting.
kr, err = OpenKeyRegistry(opt)
require.NoError(t, err)
require.NoError(t, kr.Close())
// Opening with the invalid key and asserting.
encryptionKey = make([]byte, 32)
_, err = rand.Read(encryptionKey)
require.NoError(t, err)
opt.EncryptionKey = encryptionKey
_, err = OpenKeyRegistry(opt)
require.Error(t, err)
require.EqualError(t, err, ErrEncryptionKeyMismatch.Error())
}
func TestEncryptionAndDecryption(t *testing.T) {
encryptionKey := make([]byte, 32)
dir, err := os.MkdirTemp("", "badger-test")
require.NoError(t, err)
defer removeDir(dir)
_, err = rand.Read(encryptionKey)
require.NoError(t, err)
opt := getRegistryTestOptions(dir, encryptionKey)
kr, err := OpenKeyRegistry(opt)
require.NoError(t, err)
dk, err := kr.LatestDataKey()
require.NoError(t, err)
require.NoError(t, kr.Close())
// Checking the correctness of the datakey after closing and
// opening the key registry.
kr, err = OpenKeyRegistry(opt)
require.NoError(t, err)
dk1, err := kr.DataKey(dk.GetKeyId())
require.NoError(t, err)
require.Equal(t, dk.Data, dk1.Data)
require.NoError(t, kr.Close())
}
func TestKeyRegistryInMemory(t *testing.T) {
encryptionKey := make([]byte, 32)
_, err := rand.Read(encryptionKey)
require.NoError(t, err)
opt := getRegistryTestOptions("", encryptionKey)
opt.InMemory = true
kr, err := OpenKeyRegistry(opt)
require.NoError(t, err)
_, err = kr.LatestDataKey()
require.NoError(t, err)
// We're resetting the last created timestamp. So, it creates
// new datakey.
kr.lastCreated = 0
_, err = kr.LatestDataKey()
// We generated two key. So, checking the length.
require.Equal(t, 2, len(kr.dataKeys))
require.NoError(t, err)
require.NoError(t, kr.Close())
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。