Skip to content

Commit

Permalink
writecache: add test for migration from BoltBD
Browse files Browse the repository at this point in the history
Refs #3076.

Signed-off-by: Andrey Butusov <[email protected]>
  • Loading branch information
End-rey committed Jan 31, 2025
1 parent de89b7a commit 02848c9
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions pkg/local_object_storage/writecache/migrate_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package writecache

import (
"fmt"
"os"
"path/filepath"
"testing"
"time"

apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
objecttest "github.com/nspcc-dev/neofs-sdk-go/object/test"
"github.com/stretchr/testify/require"
"go.etcd.io/bbolt"
)

func TestMigrateFromBolt(t *testing.T) {
c, b, _ := newCache(t)

wc := c.(*cache)
path := filepath.Join(wc.path, dbName)

require.NoError(t, wc.Close())

t.Run("ok, no database", func(t *testing.T) {
require.NoError(t, wc.migrate())
})

db, err := bbolt.Open(path, os.ModePerm, &bbolt.Options{
NoFreelistSync: true,
ReadOnly: false,
Timeout: time.Second,
})
require.NoError(t, err)

t.Run("couldn't open database", func(t *testing.T) {
err := wc.migrate()
require.Error(t, err)
fmt.Println(err)
})

require.NoError(t, db.Close())
t.Run("no default bucket", func(t *testing.T) {
err := wc.migrate()
require.Error(t, err)
fmt.Println(err)
})

db, err = bbolt.Open(path, os.ModePerm, &bbolt.Options{
NoFreelistSync: true,
ReadOnly: false,
Timeout: time.Second,
})
require.NoError(t, err)

obj := objecttest.Object()

var addr oid.Address
addr.SetObject(obj.GetID())
addr.SetContainer(obj.GetContainerID())

require.NoError(t, db.Batch(func(tx *bbolt.Tx) error {
b, err := tx.CreateBucketIfNotExists(defaultBucket)
require.NoError(t, err)

require.NoError(t, b.Put([]byte(addr.String()), obj.Marshal()))

return nil
}))

t.Run("migrate object", func(t *testing.T) {
require.NoError(t, db.Close())
require.NoError(t, wc.migrate())

_, err := wc.Get(addr)
require.Error(t, err, apistatus.ObjectNotFound{})

bObject, err := b.Get(addr, []byte{})
require.NoError(t, err)
require.Equal(t, obj.GetID(), bObject.GetID())
require.Equal(t, obj.GetContainerID(), bObject.GetContainerID())
require.Equal(t, obj.Marshal(), bObject.Marshal())

_, err = os.Stat(path)
require.Error(t, err, os.ErrNotExist)
})
}

0 comments on commit 02848c9

Please sign in to comment.