(t *testing.T, opt ...testOpt)
| 275 | type testOpt func(*testOptions) |
| 276 | |
| 277 | func testDB(t *testing.T, opt ...testOpt) (context.Context, *metadata.DB, func(), error) { |
| 278 | ctx, cancel := context.WithCancel(context.Background()) |
| 279 | ctx = namespaces.WithNamespace(ctx, "testing") |
| 280 | |
| 281 | var topts testOptions |
| 282 | |
| 283 | for _, o := range opt { |
| 284 | o(&topts) |
| 285 | } |
| 286 | |
| 287 | dirname := t.TempDir() |
| 288 | |
| 289 | snapshotter, err := native.NewSnapshotter(filepath.Join(dirname, "native")) |
| 290 | if err != nil { |
| 291 | return ctx, nil, func() { cancel() }, err |
| 292 | } |
| 293 | |
| 294 | snapshotters := map[string]snapshots.Snapshotter{ |
| 295 | "native": snapshotter, |
| 296 | } |
| 297 | |
| 298 | for name, fn := range topts.extraSnapshots { |
| 299 | snapshotter, err := fn(filepath.Join(dirname, name)) |
| 300 | if err != nil { |
| 301 | return ctx, nil, func() { cancel() }, err |
| 302 | } |
| 303 | snapshotters[name] = snapshotter |
| 304 | } |
| 305 | |
| 306 | cs, err := local.NewStore(filepath.Join(dirname, "content")) |
| 307 | if err != nil { |
| 308 | return ctx, nil, func() { cancel() }, err |
| 309 | } |
| 310 | |
| 311 | bdb, err := bolt.Open(filepath.Join(dirname, "metadata.db"), 0644, nil) |
| 312 | if err != nil { |
| 313 | return ctx, nil, func() { cancel() }, err |
| 314 | } |
| 315 | |
| 316 | db := metadata.NewDB(bdb, cs, snapshotters) |
| 317 | if err := db.Init(ctx); err != nil { |
| 318 | return ctx, nil, func() { cancel() }, err |
| 319 | } |
| 320 | |
| 321 | return ctx, db, func() { |
| 322 | bdb.Close() |
| 323 | cancel() |
| 324 | }, nil |
| 325 | } |
| 326 | |
| 327 | func FuzzContentStore(f *testing.F) { |
| 328 | f.Fuzz(func(t *testing.T, data []byte) { |
no test coverage detected
searching dependent graphs…