Ensure a database can stop iteration early.
(t *testing.T)
| 1108 | |
| 1109 | // Ensure a database can stop iteration early. |
| 1110 | func TestBucket_ForEach_ShortCircuit(t *testing.T) { |
| 1111 | db := btesting.MustCreateDB(t) |
| 1112 | if err := db.Update(func(tx *bolt.Tx) error { |
| 1113 | b, err := tx.CreateBucket([]byte("widgets")) |
| 1114 | if err != nil { |
| 1115 | t.Fatal(err) |
| 1116 | } |
| 1117 | if err := b.Put([]byte("bar"), []byte("0000")); err != nil { |
| 1118 | t.Fatal(err) |
| 1119 | } |
| 1120 | if err := b.Put([]byte("baz"), []byte("0000")); err != nil { |
| 1121 | t.Fatal(err) |
| 1122 | } |
| 1123 | if err := b.Put([]byte("foo"), []byte("0000")); err != nil { |
| 1124 | t.Fatal(err) |
| 1125 | } |
| 1126 | |
| 1127 | var index int |
| 1128 | if err := tx.Bucket([]byte("widgets")).ForEach(func(k, v []byte) error { |
| 1129 | index++ |
| 1130 | if bytes.Equal(k, []byte("baz")) { |
| 1131 | return errors.New("marker") |
| 1132 | } |
| 1133 | return nil |
| 1134 | }); err == nil || err.Error() != "marker" { |
| 1135 | t.Fatalf("unexpected error: %s", err) |
| 1136 | } |
| 1137 | if index != 2 { |
| 1138 | t.Fatalf("unexpected index: %d", index) |
| 1139 | } |
| 1140 | |
| 1141 | return nil |
| 1142 | }); err != nil { |
| 1143 | t.Fatal(err) |
| 1144 | } |
| 1145 | } |
| 1146 | |
| 1147 | // Ensure that looping over a bucket on a closed database returns an error. |
| 1148 | func TestBucket_ForEach_Closed(t *testing.T) { |
nothing calls this directly
no test coverage detected