(t *testing.T, opts ...Option)
| 1194 | } |
| 1195 | |
| 1196 | func openLowBusyTestKernel(t *testing.T, opts ...Option) (*Kernel, *sql.DB) { |
| 1197 | t.Helper() |
| 1198 | |
| 1199 | dbPath := filepath.Join(t.TempDir(), store.GlobalDatabaseName) |
| 1200 | dsnURL := url.URL{ |
| 1201 | Scheme: "file", |
| 1202 | Path: filepath.ToSlash(dbPath), |
| 1203 | } |
| 1204 | query := dsnURL.Query() |
| 1205 | query.Add("_pragma", "busy_timeout(1)") |
| 1206 | query.Add("_pragma", "foreign_keys(ON)") |
| 1207 | query.Add("_pragma", "journal_mode(WAL)") |
| 1208 | query.Add("_pragma", "synchronous(NORMAL)") |
| 1209 | dsnURL.RawQuery = query.Encode() |
| 1210 | |
| 1211 | db, err := sql.Open("sqlite", dsnURL.String()) |
| 1212 | if err != nil { |
| 1213 | t.Fatalf("sql.Open() error = %v", err) |
| 1214 | } |
| 1215 | db.SetMaxOpenConns(8) |
| 1216 | db.SetMaxIdleConns(8) |
| 1217 | t.Cleanup(func() { |
| 1218 | if closeErr := db.Close(); closeErr != nil { |
| 1219 | t.Fatalf("db.Close() error = %v", closeErr) |
| 1220 | } |
| 1221 | }) |
| 1222 | |
| 1223 | ctx := testutil.Context(t) |
| 1224 | if err := db.PingContext(ctx); err != nil { |
| 1225 | t.Fatalf("db.PingContext() error = %v", err) |
| 1226 | } |
| 1227 | if err := store.EnsureSchema(ctx, db, SchemaStatements()); err != nil { |
| 1228 | t.Fatalf("EnsureSchema() error = %v", err) |
| 1229 | } |
| 1230 | |
| 1231 | options := append([]Option{ |
| 1232 | WithNow(func() time.Time { |
| 1233 | return time.Date(2026, 4, 15, 12, 0, 0, 0, time.UTC) |
| 1234 | }), |
| 1235 | }, opts...) |
| 1236 | kernel, err := NewKernel(db, options...) |
| 1237 | if err != nil { |
| 1238 | t.Fatalf("NewKernel() error = %v", err) |
| 1239 | } |
| 1240 | return kernel, db |
| 1241 | } |
| 1242 | |
| 1243 | func holdResourceWriteLock(ctx context.Context, t *testing.T, db *sql.DB) { |
| 1244 | t.Helper() |
no test coverage detected