aboutsummaryrefslogtreecommitdiff
path: root/buckets_test.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-02-05 22:15:47 -0700
committerBen Johnson <benbjohnson@yahoo.com>2014-02-05 22:15:47 -0700
commit0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e (patch)
treeac84cf42ed379c1d7b9b0d094a1ac2fe02869dd2 /buckets_test.go
parentMerge pull request #7 from benbjohnson/delete (diff)
downloaddedo-0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e.tar.gz
dedo-0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e.tar.xz
Rename sys ☞ buckets.
Diffstat (limited to 'buckets_test.go')
-rw-r--r--buckets_test.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/buckets_test.go b/buckets_test.go
new file mode 100644
index 0000000..0fc6288
--- /dev/null
+++ b/buckets_test.go
@@ -0,0 +1,70 @@
+package bolt
+
+import (
+ "testing"
+ "unsafe"
+
+ "github.com/stretchr/testify/assert"
+)
+
+// Ensure that a buckets page can set a bucket.
+func TestBucketsPut(t *testing.T) {
+ b := &buckets{items: make(map[string]*bucket)}
+ b.put("foo", &bucket{root: 2})
+ b.put("bar", &bucket{root: 3})
+ b.put("foo", &bucket{root: 4})
+ assert.Equal(t, len(b.items), 2)
+ assert.Equal(t, b.get("foo").root, pgid(4))
+ assert.Equal(t, b.get("bar").root, pgid(3))
+ assert.Nil(t, b.get("no_such_bucket"))
+}
+
+// Ensure that a buckets page can deserialize from a page.
+func TestBucketsRead(t *testing.T) {
+ // Create a page.
+ var buf [4096]byte
+ page := (*page)(unsafe.Pointer(&buf[0]))
+ page.count = 2
+
+ // Insert 2 items at the beginning.
+ s := (*[3]bucket)(unsafe.Pointer(&page.ptr))
+ s[0] = bucket{root: 3}
+ s[1] = bucket{root: 4}
+
+ // Write data for the nodes at the end.
+ data := (*[4096]byte)(unsafe.Pointer(&s[2]))
+ data[0] = 3
+ copy(data[1:], []byte("bar"))
+ data[4] = 10
+ copy(data[5:], []byte("helloworld"))
+
+ // Deserialize page into a buckets page.
+ b := &buckets{items: make(map[string]*bucket)}
+ b.read(page)
+
+ // Check that there are two items with correct data.
+ assert.Equal(t, len(b.items), 2)
+ assert.Equal(t, b.get("bar").root, pgid(3))
+ assert.Equal(t, b.get("helloworld").root, pgid(4))
+}
+
+// Ensure that a buckets page can serialize itself.
+func TestBucketsWrite(t *testing.T) {
+ b := &buckets{items: make(map[string]*bucket)}
+ b.put("foo", &bucket{root: 2})
+ b.put("bar", &bucket{root: 3})
+
+ // Write it to a page.
+ var buf [4096]byte
+ p := (*page)(unsafe.Pointer(&buf[0]))
+ b.write(p)
+
+ // Read the page back in.
+ b2 := &buckets{items: make(map[string]*bucket)}
+ b2.read(p)
+
+ // Check that the two pages are the same.
+ assert.Equal(t, len(b.items), 2)
+ assert.Equal(t, b.get("foo").root, pgid(2))
+ assert.Equal(t, b.get("bar").root, pgid(3))
+}