diff options
Diffstat (limited to 'tx_test.go')
-rw-r--r-- | tx_test.go | 107 |
1 files changed, 49 insertions, 58 deletions
@@ -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 |