bbolt/c/cursor_test.go
Martin Kobetic fd4263d944 first draft
2014-04-16 13:27:48 +00:00

56 lines
1.3 KiB
Go

package c
import "C"
import (
"github.com/boltdb/bolt"
"github.com/stretchr/testify/assert"
"testing"
"testing/quick"
)
// Ensure that a cursor can iterate over all elements in a bucket.
func TestIterate(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
f := func(items testdata) bool {
withOpenDB(func(db *DB, path string) {
// Bulk insert all values.
tx, _ := db.Begin(true)
tx.CreateBucket("widgets")
b := tx.Bucket("widgets")
for _, item := range items {
assert.NoError(t, b.Put(item.Key, item.Value))
}
assert.NoError(t, tx.Commit())
// Sort test data.
sort.Sort(items)
// Iterate over all items and check consistency.
var index = 0
tx, _ = db.Begin(false)
var k, v C.bolt_val
c := NewCursor(tx.Bucket("widgets"))
C.bolt_cursor_first(c, &k, &v)
key := C.GoBytes(k.data, k.size)
for key != nil && index < len(items) {
assert.Equal(t, key, items[index].Key)
assert.Equal(t, C.GoBytes(v.data, v.size), items[index].Value)
index++
C.bolt_cursor_next(c, &k, &v)
key := C.GoBytes(k.data, k.size)
}
assert.Equal(t, len(items), index)
assert.Equal(t, len(items), index)
tx.Rollback()
})
return true
}
if err := quick.Check(f, qconfig()); err != nil {
t.Error(err)
}
fmt.Fprint(os.Stderr, "\n")
}