mirror of https://github.com/etcd-io/bbolt.git
71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package bolt
|
|
|
|
import (
|
|
"testing"
|
|
"unsafe"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// Ensure that a system page can set a bucket.
|
|
func TestSysPut(t *testing.T) {
|
|
s := &sys{buckets: make(map[string]*bucket)}
|
|
s.put("foo", &bucket{root: 2})
|
|
s.put("bar", &bucket{root: 3})
|
|
s.put("foo", &bucket{root: 4})
|
|
assert.Equal(t, len(s.buckets), 2)
|
|
assert.Equal(t, s.get("foo").root, pgid(4))
|
|
assert.Equal(t, s.get("bar").root, pgid(3))
|
|
assert.Nil(t, s.get("no_such_bucket"))
|
|
}
|
|
|
|
// Ensure that a system page can deserialize from a page.
|
|
func TestSysRead(t *testing.T) {
|
|
// Create a page.
|
|
var buf [4096]byte
|
|
page := (*page)(unsafe.Pointer(&buf[0]))
|
|
page.count = 2
|
|
|
|
// Insert 2 buckets at the beginning.
|
|
buckets := (*[3]bucket)(unsafe.Pointer(&page.ptr))
|
|
buckets[0] = bucket{root: 3}
|
|
buckets[1] = bucket{root: 4}
|
|
|
|
// Write data for the nodes at the end.
|
|
data := (*[4096]byte)(unsafe.Pointer(&buckets[2]))
|
|
data[0] = 3
|
|
copy(data[1:], []byte("bar"))
|
|
data[4] = 10
|
|
copy(data[5:], []byte("helloworld"))
|
|
|
|
// Deserialize page into a system page.
|
|
s := &sys{buckets: make(map[string]*bucket)}
|
|
s.read(page)
|
|
|
|
// Check that there are two items with correct data.
|
|
assert.Equal(t, len(s.buckets), 2)
|
|
assert.Equal(t, s.get("bar").root, pgid(3))
|
|
assert.Equal(t, s.get("helloworld").root, pgid(4))
|
|
}
|
|
|
|
// Ensure that a system page can serialize itself.
|
|
func TestSysWrite(t *testing.T) {
|
|
s := &sys{buckets: make(map[string]*bucket)}
|
|
s.put("foo", &bucket{root: 2})
|
|
s.put("bar", &bucket{root: 3})
|
|
|
|
// Write it to a page.
|
|
var buf [4096]byte
|
|
p := (*page)(unsafe.Pointer(&buf[0]))
|
|
s.write(p)
|
|
|
|
// Read the page back in.
|
|
s2 := &sys{buckets: make(map[string]*bucket)}
|
|
s2.read(p)
|
|
|
|
// Check that the two pages are the same.
|
|
assert.Equal(t, len(s.buckets), 2)
|
|
assert.Equal(t, s.get("foo").root, pgid(2))
|
|
assert.Equal(t, s.get("bar").root, pgid(3))
|
|
}
|