Ensure a user can loop over all key/value pairs in a bucket.
(t *testing.T)
| 977 | |
| 978 | // Ensure a user can loop over all key/value pairs in a bucket. |
| 979 | func 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 | |
| 1028 | func TestBucket_ForEachBucket(t *testing.T) { |
| 1029 | db := btesting.MustCreateDB(t) |
nothing calls this directly
no test coverage detected