Keep each test database when the pool replaces its connection (closes #209)
check / check (push) Waiting to run

SQLite deletes a shared in-memory database when its last connection
closes. A query cancelled while it runs makes the pool close its
connection, so a test could lose all its tables and rows at random.

NewTestDatabaseURL in internal/db returns the URL of a new in-memory
database with a random name. It holds one connection to it open until
the test ends. The db, handlers, ircserver, server and service tests
now take their database URL from it.

A new test cancels a query on such a database, checks with a TEMP
table that the connection was replaced, and checks that a row is
still there.

Model: opus-5-5
This commit is contained in:
2026-10-27 10:29:04 +00:00
parent 53009cf9a0
commit 2673cd4ab2
8 changed files with 85 additions and 42 deletions
+1 -8
View File
@@ -3,7 +3,6 @@ package handlers_test
import (
"bytes"
"context"
"crypto/rand"
"database/sql"
"encoding/json"
"errors"
@@ -164,13 +163,7 @@ func newTestServerWith(
viperMu.Lock()
defer viperMu.Unlock()
// A random name, so that no other test can share it, not
// even one that has finished but still holds its database
// open.
dbURL := fmt.Sprintf(
"file:%s?mode=memory&cache=shared",
rand.Text(),
)
dbURL := db.NewTestDatabaseURL(t)
copyTemplateDB(t, dbURL)
var (