From fd4263d944f1e0bfef22c3f7a042c80d1a54972d Mon Sep 17 00:00:00 2001 From: Martin Kobetic Date: Fri, 11 Apr 2014 18:02:39 -0400 Subject: first draft --- c/cursor_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 c/cursor_test.go (limited to 'c/cursor_test.go') diff --git a/c/cursor_test.go b/c/cursor_test.go new file mode 100644 index 0000000..7c45346 --- /dev/null +++ b/c/cursor_test.go @@ -0,0 +1,55 @@ +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") +} -- cgit v1.2.3