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

Function TestOpen_ErrChecksum

db_test.go:185–218  ·  view source on GitHub ↗

Ensure that opening a file with two invalid checksums returns ErrChecksum.

(t *testing.T)

Source from the content-addressed store, hash-verified

183
184// Ensure that opening a file with two invalid checksums returns ErrChecksum.
185func TestOpen_ErrChecksum(t *testing.T) {
186 if pageSize != os.Getpagesize() {
187 t.Skip("page size mismatch")
188 }
189
190 // Create empty database.
191 db := btesting.MustCreateDB(t)
192 path := db.Path()
193
194 // Close database.
195 if err := db.Close(); err != nil {
196 t.Fatal(err)
197 }
198
199 // Read data file.
200 buf, err := os.ReadFile(path)
201 if err != nil {
202 t.Fatal(err)
203 }
204
205 // Rewrite meta pages.
206 meta0 := (*meta)(unsafe.Pointer(&buf[pageHeaderSize]))
207 meta0.pgid++
208 meta1 := (*meta)(unsafe.Pointer(&buf[pageSize+pageHeaderSize]))
209 meta1.pgid++
210 if err := os.WriteFile(path, buf, 0666); err != nil {
211 t.Fatal(err)
212 }
213
214 // Reopen data file.
215 if _, err := bolt.Open(path, 0600, nil); err != berrors.ErrChecksum {
216 t.Fatalf("unexpected error: %s", err)
217 }
218}
219
220// Ensure that it can read the page size from the second meta page if the first one is invalid.
221// The page size is expected to be the OS's page size in this case.

Callers

nothing calls this directly

Calls 5

MustCreateDBFunction · 0.92
FatalMethod · 0.65
FatalfMethod · 0.65
PathMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected