Skip to content

Commit 02848c9

Browse files
committed
writecache: add test for migration from BoltBD
Refs #3076. Signed-off-by: Andrey Butusov <[email protected]>
1 parent de89b7a commit 02848c9

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package writecache
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
"time"
9+
10+
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
11+
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
12+
objecttest "github.com/nspcc-dev/neofs-sdk-go/object/test"
13+
"github.com/stretchr/testify/require"
14+
"go.etcd.io/bbolt"
15+
)
16+
17+
func TestMigrateFromBolt(t *testing.T) {
18+
c, b, _ := newCache(t)
19+
20+
wc := c.(*cache)
21+
path := filepath.Join(wc.path, dbName)
22+
23+
require.NoError(t, wc.Close())
24+
25+
t.Run("ok, no database", func(t *testing.T) {
26+
require.NoError(t, wc.migrate())
27+
})
28+
29+
db, err := bbolt.Open(path, os.ModePerm, &bbolt.Options{
30+
NoFreelistSync: true,
31+
ReadOnly: false,
32+
Timeout: time.Second,
33+
})
34+
require.NoError(t, err)
35+
36+
t.Run("couldn't open database", func(t *testing.T) {
37+
err := wc.migrate()
38+
require.Error(t, err)
39+
fmt.Println(err)
40+
})
41+
42+
require.NoError(t, db.Close())
43+
t.Run("no default bucket", func(t *testing.T) {
44+
err := wc.migrate()
45+
require.Error(t, err)
46+
fmt.Println(err)
47+
})
48+
49+
db, err = bbolt.Open(path, os.ModePerm, &bbolt.Options{
50+
NoFreelistSync: true,
51+
ReadOnly: false,
52+
Timeout: time.Second,
53+
})
54+
require.NoError(t, err)
55+
56+
obj := objecttest.Object()
57+
58+
var addr oid.Address
59+
addr.SetObject(obj.GetID())
60+
addr.SetContainer(obj.GetContainerID())
61+
62+
require.NoError(t, db.Batch(func(tx *bbolt.Tx) error {
63+
b, err := tx.CreateBucketIfNotExists(defaultBucket)
64+
require.NoError(t, err)
65+
66+
require.NoError(t, b.Put([]byte(addr.String()), obj.Marshal()))
67+
68+
return nil
69+
}))
70+
71+
t.Run("migrate object", func(t *testing.T) {
72+
require.NoError(t, db.Close())
73+
require.NoError(t, wc.migrate())
74+
75+
_, err := wc.Get(addr)
76+
require.Error(t, err, apistatus.ObjectNotFound{})
77+
78+
bObject, err := b.Get(addr, []byte{})
79+
require.NoError(t, err)
80+
require.Equal(t, obj.GetID(), bObject.GetID())
81+
require.Equal(t, obj.GetContainerID(), bObject.GetContainerID())
82+
require.Equal(t, obj.Marshal(), bObject.Marshal())
83+
84+
_, err = os.Stat(path)
85+
require.Error(t, err, os.ErrNotExist)
86+
})
87+
}

0 commit comments

Comments
 (0)