MCPcopy
hub / github.com/etcd-io/bbolt / TestBucket_ForEach

Function TestBucket_ForEach

bucket_test.go:979–1026  ·  view source on GitHub ↗

Ensure a user can loop over all key/value pairs in a bucket.

(t *testing.T)

Source from the content-addressed store, hash-verified

977
978// Ensure a user can loop over all key/value pairs in a bucket.
979func TestBucket_ForEach(t *testing.T) {
980 db := btesting.MustCreateDB(t)
981
982 type kv struct {
983 k []byte
984 v []byte
985 }
986
987 expectedItems := []kv{
988 {k: []byte("bar"), v: []byte("0002")},
989 {k: []byte("baz"), v: []byte("0001")},
990 {k: []byte("csubbucket"), v: nil},
991 {k: []byte("foo"), v: []byte("0000")},
992 }
993
994 verifyReads := func(b *bolt.Bucket) {
995 var items []kv
996 err := b.ForEach(func(k, v []byte) error {
997 items = append(items, kv{k: k, v: v})
998 return nil
999 })
1000 assert.NoErrorf(t, err, "b.ForEach failed")
1001 assert.Equal(t, expectedItems, items, "what we iterated (ForEach) is not what we put")
1002 }
1003
1004 err := db.Update(func(tx *bolt.Tx) error {
1005 b, err := tx.CreateBucket([]byte("widgets"))
1006 require.NoError(t, err, "bucket creation failed")
1007
1008 require.NoErrorf(t, b.Put([]byte("foo"), []byte("0000")), "put 'foo' failed")
1009 require.NoErrorf(t, b.Put([]byte("baz"), []byte("0001")), "put 'baz' failed")
1010 require.NoErrorf(t, b.Put([]byte("bar"), []byte("0002")), "put 'bar' failed")
1011 _, err = b.CreateBucket([]byte("csubbucket"))
1012 require.NoErrorf(t, err, "creation of subbucket failed")
1013
1014 verifyReads(b)
1015
1016 return nil
1017 })
1018 require.NoErrorf(t, err, "db.Update failed")
1019 err = db.View(func(tx *bolt.Tx) error {
1020 b := tx.Bucket([]byte("widgets"))
1021 require.NotNil(t, b, "bucket opening failed")
1022 verifyReads(b)
1023 return nil
1024 })
1025 assert.NoErrorf(t, err, "db.View failed")
1026}
1027
1028func TestBucket_ForEachBucket(t *testing.T) {
1029 db := btesting.MustCreateDB(t)

Callers

nothing calls this directly

Calls 7

MustCreateDBFunction · 0.92
UpdateMethod · 0.80
ViewMethod · 0.80
ForEachMethod · 0.45
CreateBucketMethod · 0.45
PutMethod · 0.45
BucketMethod · 0.45

Tested by

no test coverage detected