diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-02-05 22:15:47 -0700 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-02-05 22:15:47 -0700 |
commit | 0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e (patch) | |
tree | ac84cf42ed379c1d7b9b0d094a1ac2fe02869dd2 /buckets_test.go | |
parent | Merge pull request #7 from benbjohnson/delete (diff) | |
download | dedo-0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e.tar.gz dedo-0ed3dc3071d7ef0503f3fcbd015b63bbd6eae93e.tar.xz |
Rename sys ☞ buckets.
Diffstat (limited to 'buckets_test.go')
-rw-r--r-- | buckets_test.go | 70 |
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)) +} |