Ensure that opening a file with two invalid checksums returns ErrChecksum.
(t *testing.T)
| 183 | |
| 184 | // Ensure that opening a file with two invalid checksums returns ErrChecksum. |
| 185 | func 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. |
nothing calls this directly
no test coverage detected