| 1 | package taskcatalog |
| 2 | |
| 3 | import ( |
| 4 | "context" |
| 5 | "errors" |
| 6 | "path/filepath" |
| 7 | "testing" |
| 8 | "time" |
| 9 | ) |
| 10 | |
| 11 | func TestCloseCanBeAwaitedAfterCanceledCaller(t *testing.T) { |
| 12 | catalog, err := Open(context.Background(), filepath.Join(t.TempDir(), "tasks.sqlite")) |
| 13 | if err != nil { |
| 14 | t.Fatalf("open: %v", err) |
| 15 | } |
| 16 | canceled, cancel := context.WithCancel(context.Background()) |
| 17 | cancel() |
| 18 | if err := catalog.Close(canceled); err != nil && !errors.Is(err, context.Canceled) { |
| 19 | t.Fatalf("first close: %v", err) |
| 20 | } |
| 21 | ctx, stop := context.WithTimeout(context.Background(), 5*time.Second) |
| 22 | defer stop() |
| 23 | if err := catalog.Close(ctx); err != nil { |
| 24 | t.Fatalf("await eventual close: %v", err) |
| 25 | } |
| 26 | if err := catalog.db.Ping(); err == nil { |
| 27 | t.Fatal("database remained open after close completion") |
| 28 | } |
| 29 | } |
| 30 |