github.com/nutsdb/nutsdb@v1.0.4/bucket_manager_test.go (about) 1 package nutsdb 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "testing" 6 ) 7 8 func TestBucketManager_NewBucketAndDeleteBucket(t *testing.T) { 9 bucket1 := "bucket_1" 10 bucket2 := "bucket_2" 11 runNutsDBTest(t, nil, func(t *testing.T, db *DB) { 12 txNewBucket(t, db, bucket1, DataStructureBTree, nil, nil) 13 exist := db.bm.ExistBucket(DataStructureBTree, bucket1) 14 assert.Equal(t, true, exist) 15 txNewBucket(t, db, bucket2, DataStructureBTree, nil, nil) 16 exist = db.bm.ExistBucket(DataStructureBTree, bucket2) 17 assert.Equal(t, true, exist) 18 }) 19 20 runNutsDBTest(t, nil, func(t *testing.T, db *DB) { 21 txNewBucket(t, db, bucket1, DataStructureBTree, nil, nil) 22 exist := db.bm.ExistBucket(DataStructureBTree, bucket1) 23 assert.Equal(t, true, exist) 24 txDeleteBucketFunc(t, db, bucket1, DataStructureBTree, nil, nil) 25 exist = db.bm.ExistBucket(DataStructureBTree, bucket1) 26 assert.Equal(t, false, exist) 27 }) 28 } 29 30 func TestBucketManager_ExistBucket(t *testing.T) { 31 bucket1 := "bucket_1" 32 runNutsDBTest(t, nil, func(t *testing.T, db *DB) { 33 exist := db.bm.ExistBucket(DataStructureBTree, bucket1) 34 assert.Equal(t, false, exist) 35 36 txNewBucket(t, db, bucket1, DataStructureBTree, nil, nil) 37 exist = db.bm.ExistBucket(DataStructureBTree, bucket1) 38 assert.Equal(t, true, exist) 39 }) 40 } 41 42 func TestBucketManager_Recovery(t *testing.T) { 43 dir := "/tmp/nutsdb_test_data" 44 const bucket1 = "bucket_1" 45 const bucket2 = "bucket_2" 46 db, err := Open(DefaultOptions, WithDir(dir)) 47 defer removeDir(dir) 48 assert.NotNil(t, db) 49 assert.Nil(t, err) 50 txNewBucket(t, db, bucket1, DataStructureBTree, nil, nil) 51 txNewBucket(t, db, bucket2, DataStructureBTree, nil, nil) 52 txDeleteBucketFunc(t, db, bucket1, DataStructureBTree, nil, nil) 53 db.Close() 54 55 db, err = Open(DefaultOptions, WithDir(dir)) 56 assert.Nil(t, err) 57 assert.NotNil(t, db) 58 59 err = db.View(func(tx *Tx) error { 60 exist := tx.ExistBucket(DataStructureBTree, bucket2) 61 assert.Equal(t, true, exist) 62 exist = tx.ExistBucket(DataStructureBTree, bucket1) 63 assert.Equal(t, false, exist) 64 return nil 65 }) 66 assert.Nil(t, err) 67 } 68 69 func TestBucketManager_DataStructureIsolation(t *testing.T) { 70 const bucket1 = "bucket_1" 71 runNutsDBTest(t, nil, func(t *testing.T, db *DB) { 72 txCreateBucket(t, db, DataStructureBTree, bucket1, nil) 73 74 assert.Equal(t, false, db.bm.ExistBucket(DataStructureList, bucket1)) 75 assert.Equal(t, false, db.bm.ExistBucket(DataStructureSortedSet, bucket1)) 76 assert.Equal(t, false, db.bm.ExistBucket(DataStructureSet, bucket1)) 77 }) 78 } 79 80 func TestBucketManager_DeleteBucketIsolation(t *testing.T) { 81 runNutsDBTest(t, nil, func(t *testing.T, db *DB) { 82 const bucket1 = "bucket_1" 83 txCreateBucket(t, db, DataStructureBTree, bucket1, nil) 84 txPut(t, db, bucket1, []byte("key_1"), []byte("value_1"), Persistent, nil, nil) 85 txDeleteBucket(t, db, DataStructureBTree, bucket1, nil) 86 txGet(t, db, bucket1, []byte("key_1"), nil, ErrBucketNotExist) 87 }) 88 } 89 90 func txNewBucket(t *testing.T, db *DB, bucket string, ds uint16, expectErr error, finalExpectErr error) { 91 err := db.Update(func(tx *Tx) error { 92 err2 := tx.NewBucket(ds, bucket) 93 assertErr(t, expectErr, err2) 94 return nil 95 }) 96 assertErr(t, err, finalExpectErr) 97 98 } 99 100 func txDeleteBucketFunc(t *testing.T, db *DB, bucket string, ds uint16, expectErr error, finalExpectErr error) { 101 err := db.Update(func(tx *Tx) error { 102 err2 := tx.DeleteBucket(ds, bucket) 103 assertErr(t, expectErr, err2) 104 return nil 105 }) 106 assertErr(t, err, finalExpectErr) 107 }