74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package storm
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestBucket(t *testing.T) {
|
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
|
defer os.RemoveAll(dir)
|
|
db, _ := Open(filepath.Join(dir, "storm.db"))
|
|
defer db.Close()
|
|
|
|
// Read tx
|
|
readTx, err := db.Bolt.Begin(false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.Nil(t, db.root.GetBucket(readTx, "none"))
|
|
|
|
b, err := db.root.CreateBucketIfNotExists(readTx, "new")
|
|
|
|
// Cannot create buckets in a read transaction
|
|
assert.Error(t, err)
|
|
assert.Nil(t, b)
|
|
|
|
// Read transactions in Bolt needs a rollback and not a commit
|
|
readTx.Rollback()
|
|
|
|
// End read tx
|
|
|
|
// Write tx
|
|
writeTx, err := db.Bolt.Begin(true)
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.Nil(t, db.root.GetBucket(writeTx, "none"))
|
|
|
|
b, err = db.root.CreateBucketIfNotExists(writeTx, "new")
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, b)
|
|
|
|
n2 := db.From("a", "b")
|
|
b, err = n2.CreateBucketIfNotExists(writeTx, "c")
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, b)
|
|
|
|
writeTx.Commit()
|
|
|
|
// End write tx
|
|
|
|
// Read tx
|
|
readTx, err = db.Bolt.Begin(false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
assert.NotNil(t, db.root.GetBucket(readTx, "new"))
|
|
assert.Nil(t, db.root.GetBucket(readTx, "c"))
|
|
assert.NotNil(t, n2.GetBucket(readTx, "c"))
|
|
|
|
readTx.Rollback()
|
|
// End read tx
|
|
}
|