aboutsummaryrefslogtreecommitdiff
path: root/rwtransaction_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'rwtransaction_test.go')
-rw-r--r--rwtransaction_test.go181
1 files changed, 0 insertions, 181 deletions
diff --git a/rwtransaction_test.go b/rwtransaction_test.go
deleted file mode 100644
index c94f534..0000000
--- a/rwtransaction_test.go
+++ /dev/null
@@ -1,181 +0,0 @@
-package bolt
-
-import (
- "math/rand"
- "strconv"
- "strings"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-// Ensure that a RWTx can be retrieved.
-func TestRWTx(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- txn, err := db.RWTx()
- assert.NotNil(t, txn)
- assert.NoError(t, err)
- assert.Equal(t, txn.DB(), db)
- })
-}
-
-// Ensure that opening a RWTx while the DB is closed returns an error.
-func TestRWTxOpenWithClosedDB(t *testing.T) {
- withDB(func(db *DB, path string) {
- txn, err := db.RWTx()
- assert.Equal(t, err, ErrDatabaseNotOpen)
- assert.Nil(t, txn)
- })
-}
-
-// Ensure that retrieving all buckets returns writable buckets.
-func TestRWTxBuckets(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.CreateBucket("woojits")
- db.Do(func(txn *RWTx) error {
- buckets := txn.Buckets()
- assert.Equal(t, len(buckets), 2)
- assert.Equal(t, buckets[0].Name(), "widgets")
- assert.Equal(t, buckets[1].Name(), "woojits")
- buckets[0].Put([]byte("foo"), []byte("0000"))
- buckets[1].Put([]byte("bar"), []byte("0001"))
- return nil
- })
- v, _ := db.Get("widgets", []byte("foo"))
- assert.Equal(t, v, []byte("0000"))
- v, _ = db.Get("woojits", []byte("bar"))
- assert.Equal(t, v, []byte("0001"))
- })
-}
-
-// Ensure that a bucket can be created and retrieved.
-func TestRWTxCreateBucket(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- // Create a bucket.
- err := db.CreateBucket("widgets")
- assert.NoError(t, err)
-
- // Read the bucket through a separate transaction.
- b, err := db.Bucket("widgets")
- assert.NotNil(t, b)
- assert.NoError(t, err)
- })
-}
-
-// Ensure that a bucket can be created if it doesn't already exist.
-func TestRWTxCreateBucketIfNotExists(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- assert.NoError(t, db.CreateBucketIfNotExists("widgets"))
- assert.NoError(t, db.CreateBucketIfNotExists("widgets"))
- assert.Equal(t, db.CreateBucketIfNotExists(""), ErrBucketNameRequired)
-
- // Read the bucket through a separate transaction.
- b, err := db.Bucket("widgets")
- assert.NotNil(t, b)
- assert.NoError(t, err)
- })
-}
-
-// Ensure that a bucket cannot be created twice.
-func TestRWTxRecreateBucket(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- // Create a bucket.
- err := db.CreateBucket("widgets")
- assert.NoError(t, err)
-
- // Create the same bucket again.
- err = db.CreateBucket("widgets")
- assert.Equal(t, err, ErrBucketExists)
- })
-}
-
-// Ensure that a bucket is created with a non-blank name.
-func TestRWTxCreateBucketWithoutName(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- err := db.CreateBucket("")
- assert.Equal(t, err, ErrBucketNameRequired)
- })
-}
-
-// Ensure that a bucket name is not too long.
-func TestRWTxCreateBucketWithLongName(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- err := db.CreateBucket(strings.Repeat("X", 255))
- assert.NoError(t, err)
-
- err = db.CreateBucket(strings.Repeat("X", 256))
- assert.Equal(t, err, ErrBucketNameTooLarge)
- })
-}
-
-// Ensure that a bucket can be deleted.
-func TestRWTxDeleteBucket(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- // Create a bucket and add a value.
- db.CreateBucket("widgets")
- db.Put("widgets", []byte("foo"), []byte("bar"))
-
- b, _ := db.Bucket("widgets")
-
- // Delete the bucket and make sure we can't get the value.
- assert.NoError(t, db.DeleteBucket("widgets"))
- value, err := db.Get("widgets", []byte("foo"))
- assert.Equal(t, err, ErrBucketNotFound)
- assert.Nil(t, value)
-
- // Verify that the bucket's page is free.
- assert.Equal(t, db.freelist.all(), []pgid{b.root})
-
- // Create the bucket again and make sure there's not a phantom value.
- assert.NoError(t, db.CreateBucket("widgets"))
- value, err = db.Get("widgets", []byte("foo"))
- assert.NoError(t, err)
- assert.Nil(t, value)
- })
-}
-
-// Ensure that an error is returned when deleting from a bucket that doesn't exist.
-func TestRWTxDeleteBucketNotFound(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- err := db.DeleteBucket("widgets")
- assert.Equal(t, err, ErrBucketNotFound)
- })
-}
-
-// Benchmark the performance of bulk put transactions in random order.
-func BenchmarkRWTxPutRandom(b *testing.B) {
- indexes := rand.Perm(b.N)
- value := []byte(strings.Repeat("0", 64))
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- var txn *RWTx
- var bucket *Bucket
- for i := 0; i < b.N; i++ {
- if i%1000 == 0 {
- if txn != nil {
- txn.Commit()
- }
- txn, _ = db.RWTx()
- bucket = txn.Bucket("widgets")
- }
- bucket.Put([]byte(strconv.Itoa(indexes[i])), value)
- }
- txn.Commit()
- })
-}
-
-// Benchmark the performance of bulk put transactions in sequential order.
-func BenchmarkRWTxPutSequential(b *testing.B) {
- value := []byte(strings.Repeat("0", 64))
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.Do(func(txn *RWTx) error {
- bucket := txn.Bucket("widgets")
- for i := 0; i < b.N; i++ {
- bucket.Put([]byte(strconv.Itoa(i)), value)
- }
- return nil
- })
- })
-}