aboutsummaryrefslogtreecommitdiff
path: root/tx_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tx_test.go')
-rw-r--r--tx_test.go107
1 files changed, 49 insertions, 58 deletions
diff --git a/tx_test.go b/tx_test.go
index 55a31ea..1046842 100644
--- a/tx_test.go
+++ b/tx_test.go
@@ -1,4 +1,4 @@
-package bolt
+package bolt_test
import (
"errors"
@@ -6,6 +6,7 @@ import (
"os"
"testing"
+ "github.com/boltdb/bolt"
"github.com/stretchr/testify/assert"
)
@@ -16,7 +17,7 @@ func TestTx_Commit_Closed(t *testing.T) {
tx, _ := db.Begin(true)
tx.CreateBucket([]byte("foo"))
assert.NoError(t, tx.Commit())
- assert.Equal(t, tx.Commit(), ErrTxClosed)
+ assert.Equal(t, tx.Commit(), bolt.ErrTxClosed)
}
// Ensure that rolling back a closed transaction returns an error.
@@ -25,7 +26,7 @@ func TestTx_Rollback_Closed(t *testing.T) {
defer db.Close()
tx, _ := db.Begin(true)
assert.NoError(t, tx.Rollback())
- assert.Equal(t, tx.Rollback(), ErrTxClosed)
+ assert.Equal(t, tx.Rollback(), bolt.ErrTxClosed)
}
// Ensure that committing a read-only transaction returns an error.
@@ -33,14 +34,14 @@ func TestTx_Commit_ReadOnly(t *testing.T) {
db := NewTestDB()
defer db.Close()
tx, _ := db.Begin(false)
- assert.Equal(t, tx.Commit(), ErrTxNotWritable)
+ assert.Equal(t, tx.Commit(), bolt.ErrTxNotWritable)
}
// Ensure that a transaction can retrieve a cursor on the root bucket.
func TestTx_Cursor(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.CreateBucket([]byte("woojits"))
c := tx.Cursor()
@@ -65,10 +66,10 @@ func TestTx_Cursor(t *testing.T) {
func TestTx_CreateBucket_ReadOnly(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.View(func(tx *Tx) error {
+ db.View(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket([]byte("foo"))
assert.Nil(t, b)
- assert.Equal(t, ErrTxNotWritable, err)
+ assert.Equal(t, bolt.ErrTxNotWritable, err)
return nil
})
}
@@ -81,14 +82,14 @@ func TestTx_CreateBucket_Closed(t *testing.T) {
tx.Commit()
b, err := tx.CreateBucket([]byte("foo"))
assert.Nil(t, b)
- assert.Equal(t, ErrTxClosed, err)
+ assert.Equal(t, bolt.ErrTxClosed, err)
}
// Ensure that a Tx can retrieve a bucket.
func TestTx_Bucket(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
b := tx.Bucket([]byte("widgets"))
assert.NotNil(t, b)
@@ -100,7 +101,7 @@ func TestTx_Bucket(t *testing.T) {
func TestTx_Get_Missing(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
value := tx.Bucket([]byte("widgets")).Get([]byte("no_such_key"))
@@ -115,7 +116,7 @@ func TestTx_CreateBucket(t *testing.T) {
defer db.Close()
// Create a bucket.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket([]byte("widgets"))
assert.NotNil(t, b)
assert.NoError(t, err)
@@ -123,7 +124,7 @@ func TestTx_CreateBucket(t *testing.T) {
})
// Read the bucket through a separate transaction.
- db.View(func(tx *Tx) error {
+ db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("widgets"))
assert.NotNil(t, b)
return nil
@@ -134,7 +135,7 @@ func TestTx_CreateBucket(t *testing.T) {
func TestTx_CreateBucketIfNotExists(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte("widgets"))
assert.NotNil(t, b)
assert.NoError(t, err)
@@ -145,16 +146,16 @@ func TestTx_CreateBucketIfNotExists(t *testing.T) {
b, err = tx.CreateBucketIfNotExists([]byte{})
assert.Nil(t, b)
- assert.Equal(t, ErrBucketNameRequired, err)
+ assert.Equal(t, bolt.ErrBucketNameRequired, err)
b, err = tx.CreateBucketIfNotExists(nil)
assert.Nil(t, b)
- assert.Equal(t, ErrBucketNameRequired, err)
+ assert.Equal(t, bolt.ErrBucketNameRequired, err)
return nil
})
// Read the bucket through a separate transaction.
- db.View(func(tx *Tx) error {
+ db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("widgets"))
assert.NotNil(t, b)
return nil
@@ -166,7 +167,7 @@ func TestTx_CreateBucket_Exists(t *testing.T) {
db := NewTestDB()
defer db.Close()
// Create a bucket.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket([]byte("widgets"))
assert.NotNil(t, b)
assert.NoError(t, err)
@@ -174,10 +175,10 @@ func TestTx_CreateBucket_Exists(t *testing.T) {
})
// Create the same bucket again.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket([]byte("widgets"))
assert.Nil(t, b)
- assert.Equal(t, ErrBucketExists, err)
+ assert.Equal(t, bolt.ErrBucketExists, err)
return nil
})
}
@@ -186,10 +187,10 @@ func TestTx_CreateBucket_Exists(t *testing.T) {
func TestTx_CreateBucket_NameRequired(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket(nil)
assert.Nil(t, b)
- assert.Equal(t, ErrBucketNameRequired, err)
+ assert.Equal(t, bolt.ErrBucketNameRequired, err)
return nil
})
}
@@ -200,30 +201,20 @@ func TestTx_DeleteBucket(t *testing.T) {
defer db.Close()
// Create a bucket and add a value.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
return nil
})
- // Save root page id.
- var root pgid
- db.View(func(tx *Tx) error {
- root = tx.Bucket([]byte("widgets")).root
- return nil
- })
-
// Delete the bucket and make sure we can't get the value.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
assert.NoError(t, tx.DeleteBucket([]byte("widgets")))
assert.Nil(t, tx.Bucket([]byte("widgets")))
return nil
})
- db.Update(func(tx *Tx) error {
- // Verify that the bucket's page is free.
- assert.Equal(t, []pgid{4, 5}, db.freelist.all())
-
+ db.Update(func(tx *bolt.Tx) error {
// Create the bucket again and make sure there's not a phantom value.
b, err := tx.CreateBucket([]byte("widgets"))
assert.NotNil(t, b)
@@ -239,15 +230,15 @@ func TestTx_DeleteBucket_Closed(t *testing.T) {
defer db.Close()
tx, _ := db.Begin(true)
tx.Commit()
- assert.Equal(t, tx.DeleteBucket([]byte("foo")), ErrTxClosed)
+ assert.Equal(t, tx.DeleteBucket([]byte("foo")), bolt.ErrTxClosed)
}
// Ensure that deleting a bucket with a read-only transaction returns an error.
func TestTx_DeleteBucket_ReadOnly(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.View(func(tx *Tx) error {
- assert.Equal(t, tx.DeleteBucket([]byte("foo")), ErrTxNotWritable)
+ db.View(func(tx *bolt.Tx) error {
+ assert.Equal(t, tx.DeleteBucket([]byte("foo")), bolt.ErrTxNotWritable)
return nil
})
}
@@ -256,8 +247,8 @@ func TestTx_DeleteBucket_ReadOnly(t *testing.T) {
func TestTx_DeleteBucket_NotFound(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
- assert.Equal(t, ErrBucketNotFound, tx.DeleteBucket([]byte("widgets")))
+ db.Update(func(tx *bolt.Tx) error {
+ assert.Equal(t, bolt.ErrBucketNotFound, tx.DeleteBucket([]byte("widgets")))
return nil
})
}
@@ -267,7 +258,7 @@ func TestTx_OnCommit(t *testing.T) {
var x int
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.OnCommit(func() { x += 1 })
tx.OnCommit(func() { x += 2 })
_, err := tx.CreateBucket([]byte("widgets"))
@@ -281,7 +272,7 @@ func TestTx_OnCommit_Rollback(t *testing.T) {
var x int
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.OnCommit(func() { x += 1 })
tx.OnCommit(func() { x += 2 })
tx.CreateBucket([]byte("widgets"))
@@ -295,20 +286,20 @@ func TestTx_CopyFile(t *testing.T) {
db := NewTestDB()
defer db.Close()
var dest = tempfile()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
tx.Bucket([]byte("widgets")).Put([]byte("baz"), []byte("bat"))
return nil
})
- assert.NoError(t, db.View(func(tx *Tx) error { return tx.CopyFile(dest, 0600) }))
+ assert.NoError(t, db.View(func(tx *bolt.Tx) error { return tx.CopyFile(dest, 0600) }))
- db2, err := Open(dest, 0600, nil)
+ db2, err := bolt.Open(dest, 0600, nil)
assert.NoError(t, err)
defer db2.Close()
- db2.View(func(tx *Tx) error {
+ db2.View(func(tx *bolt.Tx) error {
assert.Equal(t, []byte("bar"), tx.Bucket([]byte("widgets")).Get([]byte("foo")))
assert.Equal(t, []byte("bat"), tx.Bucket([]byte("widgets")).Get([]byte("baz")))
return nil
@@ -340,14 +331,14 @@ func (f *failWriter) Write(p []byte) (n int, err error) {
func TestTx_CopyFile_Error_Meta(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
tx.Bucket([]byte("widgets")).Put([]byte("baz"), []byte("bat"))
return nil
})
- err := db.View(func(tx *Tx) error { return tx.Copy(&failWriter{}) })
+ err := db.View(func(tx *bolt.Tx) error { return tx.Copy(&failWriter{}) })
assert.EqualError(t, err, "meta copy: error injected for tests")
}
@@ -355,31 +346,31 @@ func TestTx_CopyFile_Error_Meta(t *testing.T) {
func TestTx_CopyFile_Error_Normal(t *testing.T) {
db := NewTestDB()
defer db.Close()
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
tx.Bucket([]byte("widgets")).Put([]byte("baz"), []byte("bat"))
return nil
})
- err := db.View(func(tx *Tx) error { return tx.Copy(&failWriter{3 * db.pageSize}) })
+ err := db.View(func(tx *bolt.Tx) error { return tx.Copy(&failWriter{3 * db.Info().PageSize}) })
assert.EqualError(t, err, "error injected for tests")
}
func ExampleTx_Rollback() {
// Open the database.
- db, _ := Open(tempfile(), 0666, nil)
+ db, _ := bolt.Open(tempfile(), 0666, nil)
defer os.Remove(db.Path())
defer db.Close()
// Create a bucket.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucket([]byte("widgets"))
return err
})
// Set a value for a key.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
return tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
})
@@ -390,7 +381,7 @@ func ExampleTx_Rollback() {
tx.Rollback()
// Ensure that our original value is still set.
- db.View(func(tx *Tx) error {
+ db.View(func(tx *bolt.Tx) error {
value := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
fmt.Printf("The value for 'foo' is still: %s\n", value)
return nil
@@ -402,12 +393,12 @@ func ExampleTx_Rollback() {
func ExampleTx_CopyFile() {
// Open the database.
- db, _ := Open(tempfile(), 0666, nil)
+ db, _ := bolt.Open(tempfile(), 0666, nil)
defer os.Remove(db.Path())
defer db.Close()
// Create a bucket and a key.
- db.Update(func(tx *Tx) error {
+ db.Update(func(tx *bolt.Tx) error {
tx.CreateBucket([]byte("widgets"))
tx.Bucket([]byte("widgets")).Put([]byte("foo"), []byte("bar"))
return nil
@@ -415,15 +406,15 @@ func ExampleTx_CopyFile() {
// Copy the database to another file.
toFile := tempfile()
- db.View(func(tx *Tx) error { return tx.CopyFile(toFile, 0666) })
+ db.View(func(tx *bolt.Tx) error { return tx.CopyFile(toFile, 0666) })
defer os.Remove(toFile)
// Open the cloned database.
- db2, _ := Open(toFile, 0666, nil)
+ db2, _ := bolt.Open(toFile, 0666, nil)
defer db2.Close()
// Ensure that the key exists in the copy.
- db2.View(func(tx *Tx) error {
+ db2.View(func(tx *bolt.Tx) error {
value := tx.Bucket([]byte("widgets")).Get([]byte("foo"))
fmt.Printf("The value for 'foo' in the clone is: %s\n", value)
return nil