aboutsummaryrefslogtreecommitdiff
path: root/transaction_test.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-03-08 20:25:37 -0700
committerBen Johnson <benbjohnson@yahoo.com>2014-03-08 20:40:48 -0700
commitc551e45a4722f58dc4c19f9d1b80b0b8db3ad039 (patch)
tree93ac43914f9cd20c8eea13f18105e55026a7ea8d /transaction_test.go
parentRename Transaction to Tx. (diff)
downloaddedo-c551e45a4722f58dc4c19f9d1b80b0b8db3ad039.tar.gz
dedo-c551e45a4722f58dc4c19f9d1b80b0b8db3ad039.tar.xz
Consolidate Tx and RWTx.
Diffstat (limited to 'transaction_test.go')
-rw-r--r--transaction_test.go265
1 files changed, 0 insertions, 265 deletions
diff --git a/transaction_test.go b/transaction_test.go
deleted file mode 100644
index 59f4dd5..0000000
--- a/transaction_test.go
+++ /dev/null
@@ -1,265 +0,0 @@
-package bolt
-
-import (
- "fmt"
- "math/rand"
- "os"
- "sort"
- "strconv"
- "strings"
- "testing"
- "testing/quick"
-
- "github.com/stretchr/testify/assert"
-)
-
-// Ensure that the database can retrieve a list of buckets.
-func TestTxBuckets(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("foo")
- db.CreateBucket("bar")
- db.CreateBucket("baz")
- buckets, err := db.Buckets()
- if assert.NoError(t, err) && assert.Equal(t, len(buckets), 3) {
- assert.Equal(t, buckets[0].Name(), "bar")
- assert.Equal(t, buckets[1].Name(), "baz")
- assert.Equal(t, buckets[2].Name(), "foo")
- }
- })
-}
-
-// Ensure that a Tx can retrieve a bucket.
-func TestTxBucketMissing(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- b, err := db.Bucket("widgets")
- assert.NoError(t, err)
- if assert.NotNil(t, b) {
- assert.Equal(t, "widgets", b.Name())
- }
- })
-}
-
-// Ensure that a Tx retrieving a non-existent key returns nil.
-func TestTxGetMissing(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.Put("widgets", []byte("foo"), []byte("bar"))
- value, err := db.Get("widgets", []byte("no_such_key"))
- assert.NoError(t, err)
- assert.Nil(t, value)
- })
-}
-
-// Ensure that a Tx cursor can iterate over an empty bucket without error.
-func TestTxCursorEmptyBucket(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
- k, v := c.First()
- assert.Nil(t, k)
- assert.Nil(t, v)
- txn.Close()
- })
-}
-
-// Ensure that a Tx cursor can iterate over a single root with a couple elements.
-func TestTxCursorLeafRoot(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.Put("widgets", []byte("baz"), []byte{})
- db.Put("widgets", []byte("foo"), []byte{0})
- db.Put("widgets", []byte("bar"), []byte{1})
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
-
- k, v := c.First()
- assert.Equal(t, string(k), "bar")
- assert.Equal(t, v, []byte{1})
-
- k, v = c.Next()
- assert.Equal(t, string(k), "baz")
- assert.Equal(t, v, []byte{})
-
- k, v = c.Next()
- assert.Equal(t, string(k), "foo")
- assert.Equal(t, v, []byte{0})
-
- k, v = c.Next()
- assert.Nil(t, k)
- assert.Nil(t, v)
-
- k, v = c.Next()
- assert.Nil(t, k)
- assert.Nil(t, v)
-
- txn.Close()
- })
-}
-
-// Ensure that a Tx cursor can iterate in reverse over a single root with a couple elements.
-func TestTxCursorLeafRootReverse(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.Put("widgets", []byte("baz"), []byte{})
- db.Put("widgets", []byte("foo"), []byte{0})
- db.Put("widgets", []byte("bar"), []byte{1})
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
-
- k, v := c.Last()
- assert.Equal(t, string(k), "foo")
- assert.Equal(t, v, []byte{0})
-
- k, v = c.Prev()
- assert.Equal(t, string(k), "baz")
- assert.Equal(t, v, []byte{})
-
- k, v = c.Prev()
- assert.Equal(t, string(k), "bar")
- assert.Equal(t, v, []byte{1})
-
- k, v = c.Prev()
- assert.Nil(t, k)
- assert.Nil(t, v)
-
- k, v = c.Prev()
- assert.Nil(t, k)
- assert.Nil(t, v)
-
- txn.Close()
- })
-}
-
-// Ensure that a Tx cursor can restart from the beginning.
-func TestTxCursorRestart(t *testing.T) {
- withOpenDB(func(db *DB, path string) {
- db.CreateBucket("widgets")
- db.Put("widgets", []byte("bar"), []byte{})
- db.Put("widgets", []byte("foo"), []byte{})
-
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
-
- k, _ := c.First()
- assert.Equal(t, string(k), "bar")
-
- k, _ = c.Next()
- assert.Equal(t, string(k), "foo")
-
- k, _ = c.First()
- assert.Equal(t, string(k), "bar")
-
- k, _ = c.Next()
- assert.Equal(t, string(k), "foo")
-
- txn.Close()
- })
-}
-
-// Ensure that a Tx can iterate over all elements in a bucket.
-func TestTxCursorIterate(t *testing.T) {
- f := func(items testdata) bool {
- withOpenDB(func(db *DB, path string) {
- // Bulk insert all values.
- db.CreateBucket("widgets")
- rwtxn, _ := db.RWTx()
- b := rwtxn.Bucket("widgets")
- for _, item := range items {
- assert.NoError(t, b.Put(item.Key, item.Value))
- }
- assert.NoError(t, rwtxn.Commit())
-
- // Sort test data.
- sort.Sort(items)
-
- // Iterate over all items and check consistency.
- var index = 0
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
- for k, v := c.First(); k != nil && index < len(items); k, v = c.Next() {
- assert.Equal(t, k, items[index].Key)
- assert.Equal(t, v, items[index].Value)
- index++
- }
- assert.Equal(t, len(items), index)
- txn.Close()
- })
- fmt.Fprint(os.Stderr, ".")
- return true
- }
- if err := quick.Check(f, qconfig()); err != nil {
- t.Error(err)
- }
- fmt.Fprint(os.Stderr, "\n")
-}
-
-// Ensure that a transaction can iterate over all elements in a bucket in reverse.
-func TestTxCursorIterateReverse(t *testing.T) {
- f := func(items testdata) bool {
- withOpenDB(func(db *DB, path string) {
- // Bulk insert all values.
- db.CreateBucket("widgets")
- rwtxn, _ := db.RWTx()
- b := rwtxn.Bucket("widgets")
- for _, item := range items {
- assert.NoError(t, b.Put(item.Key, item.Value))
- }
- assert.NoError(t, rwtxn.Commit())
-
- // Sort test data.
- sort.Sort(revtestdata(items))
-
- // Iterate over all items and check consistency.
- var index = 0
- txn, _ := db.Tx()
- c := txn.Bucket("widgets").Cursor()
- for k, v := c.Last(); k != nil && index < len(items); k, v = c.Prev() {
- assert.Equal(t, k, items[index].Key)
- assert.Equal(t, v, items[index].Value)
- index++
- }
- assert.Equal(t, len(items), index)
- txn.Close()
- })
- fmt.Fprint(os.Stderr, ".")
- return true
- }
- if err := quick.Check(f, qconfig()); err != nil {
- t.Error(err)
- }
- fmt.Fprint(os.Stderr, "\n")
-}
-
-// Benchmark the performance iterating over a cursor.
-func BenchmarkTxCursor(b *testing.B) {
- indexes := rand.Perm(b.N)
- value := []byte(strings.Repeat("0", 64))
-
- withOpenDB(func(db *DB, path string) {
- // Write data to bucket.
- 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(indexes[i])), value)
- }
- return nil
- })
- b.ResetTimer()
-
- // Iterate over bucket using cursor.
- db.With(func(txn *Tx) error {
- count := 0
- c := txn.Bucket("widgets").Cursor()
- for k, _ := c.First(); k != nil; k, _ = c.Next() {
- count++
- }
- if count != b.N {
- b.Fatalf("wrong count: %d; expected: %d", count, b.N)
- }
- return nil
- })
- })
-}