ceremonyclient/pebble/objstorage/objstorageprovider/remote_obj_name_test.go
Cassandra Heart 2e2a1e4789
v1.2.0 (#31)
2024-01-03 01:31:42 -06:00

65 lines
2.2 KiB
Go

// Copyright 2023 The LevelDB-Go and Pebble Authors. All rights reserved. Use
// of this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
package objstorageprovider
import (
"fmt"
"math/rand"
"testing"
"github.com/cockroachdb/pebble/internal/base"
"github.com/cockroachdb/pebble/objstorage"
"github.com/stretchr/testify/require"
)
func TestSharedObjectNames(t *testing.T) {
t.Run("crosscheck", func(t *testing.T) {
supportedFileTypes := []base.FileType{
base.FileTypeTable,
}
for it := 0; it < 100; it++ {
var meta objstorage.ObjectMetadata
meta.DiskFileNum = base.FileNum(rand.Intn(100000)).DiskFileNum()
meta.FileType = supportedFileTypes[rand.Int()%len(supportedFileTypes)]
meta.Remote.CreatorID = objstorage.CreatorID(rand.Int63())
meta.Remote.CreatorFileNum = base.FileNum(rand.Intn(100000)).DiskFileNum()
if rand.Intn(4) == 0 {
meta.Remote.CustomObjectName = fmt.Sprintf("foo-%d.sst", rand.Intn(10000))
}
obj := remoteObjectName(meta)
// Cross-check against cleaner implementations.
expObj := meta.Remote.CustomObjectName
if expObj == "" {
expObj = fmt.Sprintf("%04x-%s-%s", objHash(meta), meta.Remote.CreatorID, base.MakeFilename(meta.FileType, meta.Remote.CreatorFileNum))
}
require.Equal(t, expObj, obj)
require.Equal(t, expObj+".ref.", sharedObjectRefPrefix(meta))
refCreatorID := objstorage.CreatorID(rand.Int63())
refObj := sharedObjectRefName(meta, refCreatorID, meta.DiskFileNum)
expRefObj := fmt.Sprintf("%s.ref.%s.%s", expObj, refCreatorID, meta.DiskFileNum)
require.Equal(t, refObj, expRefObj)
}
})
t.Run("example", func(t *testing.T) {
var meta objstorage.ObjectMetadata
meta.DiskFileNum = base.FileNum(123).DiskFileNum()
meta.FileType = base.FileTypeTable
meta.Remote.CreatorID = objstorage.CreatorID(456)
meta.Remote.CreatorFileNum = base.FileNum(789).DiskFileNum()
require.Equal(t, remoteObjectName(meta), "0e17-456-000789.sst")
require.Equal(t, sharedObjectRefPrefix(meta), "0e17-456-000789.sst.ref.")
refCreatorID := objstorage.CreatorID(101112)
require.Equal(
t, sharedObjectRefName(meta, refCreatorID, meta.DiskFileNum),
"0e17-456-000789.sst.ref.101112.000123",
)
})
}