Give each IRC listener test its own database (closes #129) #130
@@ -2,6 +2,7 @@ package ircserver_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"crypto/rand"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
@@ -69,9 +70,11 @@ func newTestEnvWithConfig(
|
|||||||
) *testEnv {
|
) *testEnv {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
|
// A random name, so that no other test environment, not
|
||||||
|
// even an earlier run of the same test, can share it.
|
||||||
dsn := fmt.Sprintf(
|
dsn := fmt.Sprintf(
|
||||||
"file:%s?mode=memory&cache=shared&_journal_mode=WAL",
|
"file:%s?mode=memory&cache=shared&_journal_mode=WAL",
|
||||||
t.Name(),
|
rand.Text(),
|
||||||
)
|
)
|
||||||
|
|
||||||
conn, err := sql.Open("sqlite", dsn)
|
conn, err := sql.Open("sqlite", dsn)
|
||||||
@@ -79,6 +82,13 @@ func newTestEnvWithConfig(
|
|||||||
t.Fatalf("open db: %v", err)
|
t.Fatalf("open db: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
err := conn.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Logf("close db: %v", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
conn.SetMaxOpenConns(1)
|
conn.SetMaxOpenConns(1)
|
||||||
|
|
||||||
_, err = conn.ExecContext(
|
_, err = conn.ExecContext(
|
||||||
@@ -123,14 +133,9 @@ func newTestEnvWithConfig(
|
|||||||
t.Fatalf("start irc server: %v", err)
|
t.Fatalf("start irc server: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Cleanup(func() {
|
// Cleanups run last registered first, so the server stops
|
||||||
srv.Stop()
|
// before its database is closed.
|
||||||
|
t.Cleanup(srv.Stop)
|
||||||
err := conn.Close()
|
|
||||||
if err != nil {
|
|
||||||
t.Logf("close db: %v", err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return &testEnv{
|
return &testEnv{
|
||||||
database: database,
|
database: database,
|
||||||
@@ -342,6 +347,20 @@ func TestRegistration(t *testing.T) {
|
|||||||
assertContains(t, lines, " 001 ", "RPL_WELCOME")
|
assertContains(t, lines, " 001 ", "RPL_WELCOME")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestEachTestEnvHasItsOwnDatabase checks that a test
|
||||||
|
// environment starts on an empty database while another one
|
||||||
|
// is still open.
|
||||||
|
func TestEachTestEnvHasItsOwnDatabase(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
first := newTestEnv(t)
|
||||||
|
first.dial(t).register("samenick")
|
||||||
|
|
||||||
|
second := newTestEnv(t)
|
||||||
|
lines := second.dial(t).register("samenick")
|
||||||
|
assertContains(t, lines, " 001 ", "RPL_WELCOME")
|
||||||
|
}
|
||||||
|
|
||||||
func TestWelcomeContainsNick(t *testing.T) {
|
func TestWelcomeContainsNick(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user