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  }