58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
|
package meta
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
"go.etcd.io/bbolt"
|
||
|
)
|
||
|
|
||
|
type epochState struct{ e uint64 }
|
||
|
|
||
|
func (s epochState) CurrentEpoch() uint64 {
|
||
|
return s.e
|
||
|
}
|
||
|
|
||
|
func TestResetDropsContainerBuckets(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
db := New(
|
||
|
[]Option{
|
||
|
WithPath(filepath.Join(t.TempDir(), "metabase")),
|
||
|
WithPermissions(0o600),
|
||
|
WithEpochState(epochState{}),
|
||
|
}...,
|
||
|
)
|
||
|
|
||
|
require.NoError(t, db.Open(context.Background(), mode.ReadWrite))
|
||
|
require.NoError(t, db.Init())
|
||
|
|
||
|
defer func() { require.NoError(t, db.Close()) }()
|
||
|
|
||
|
for idx := 0; idx < 100; idx++ {
|
||
|
var putPrm PutPrm
|
||
|
putPrm.SetObject(testutil.GenerateObject())
|
||
|
putPrm.SetStorageID([]byte(fmt.Sprintf("0/%d", idx)))
|
||
|
_, err := db.Put(context.Background(), putPrm)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
require.NoError(t, db.Reset())
|
||
|
|
||
|
var bucketCount int
|
||
|
require.NoError(t, db.boltDB.Update(func(tx *bbolt.Tx) error {
|
||
|
return tx.ForEach(func(name []byte, b *bbolt.Bucket) error {
|
||
|
_, exists := mStaticBuckets[string(name)]
|
||
|
require.True(t, exists, "unexpected bucket:"+string(name))
|
||
|
bucketCount++
|
||
|
return nil
|
||
|
})
|
||
|
}))
|
||
|
require.Equal(t, len(mStaticBuckets), bucketCount)
|
||
|
}
|