aboutsummaryrefslogtreecommitdiff
path: root/test/testrig
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-01-23 13:17:15 +0100
committerGitHub <noreply@github.com>2023-01-23 13:17:15 +0100
commit48fa869fa3578741d1d5775d30f24f6b097ab995 (patch)
treeadaf9b174493a30fec8aeb26cea18f7b42ac9db1 /test/testrig
parent430932f0f161dd836c98082ff97b57beedec02e6 (diff)
Use `t.TempDir` for SQLite databases, so tests don't rip out each others databases (#2950)
This should hopefully finally fix issues about `disk I/O error` as seen [here](https://gitlab.alpinelinux.org/alpine/aports/-/jobs/955030/raw) Hopefully this will also fix `SSL accept attempt failed` issues by disabling HTTP keep alives when generating a config for CI.
Diffstat (limited to 'test/testrig')
-rw-r--r--test/testrig/base.go37
1 files changed, 14 insertions, 23 deletions
diff --git a/test/testrig/base.go b/test/testrig/base.go
index 52e6ef5f..9773da22 100644
--- a/test/testrig/base.go
+++ b/test/testrig/base.go
@@ -15,18 +15,14 @@
package testrig
import (
- "errors"
"fmt"
- "io/fs"
- "os"
- "strings"
+ "path/filepath"
"testing"
- "github.com/nats-io/nats.go"
-
"github.com/matrix-org/dendrite/setup/base"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/test"
+ "github.com/nats-io/nats.go"
)
func CreateBaseDendrite(t *testing.T, dbType test.DBType) (*base.BaseDendrite, func()) {
@@ -77,27 +73,22 @@ func CreateBaseDendrite(t *testing.T, dbType test.DBType) (*base.BaseDendrite, f
// use a distinct prefix else concurrent postgres/sqlite runs will clash since NATS will use
// the file system event with InMemory=true :(
cfg.Global.JetStream.TopicPrefix = fmt.Sprintf("Test_%d_", dbType)
+
+ // Use a temp dir provided by go for tests, this will be cleanup by a call to t.CleanUp()
+ tempDir := t.TempDir()
+ cfg.FederationAPI.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "federationapi.db"))
+ cfg.KeyServer.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "keyserver.db"))
+ cfg.MSCs.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "mscs.db"))
+ cfg.MediaAPI.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "mediaapi.db"))
+ cfg.RoomServer.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "roomserver.db"))
+ cfg.SyncAPI.Database.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "syncapi.db"))
+ cfg.UserAPI.AccountDatabase.ConnectionString = config.DataSource(filepath.Join("file://", tempDir, "userapi.db"))
+
base := base.NewBaseDendrite(&cfg, "Test", base.DisableMetrics)
return base, func() {
base.ShutdownDendrite()
base.WaitForShutdown()
- // cleanup db files. This risks getting out of sync as we add more database strings :(
- dbFiles := []config.DataSource{
- cfg.FederationAPI.Database.ConnectionString,
- cfg.KeyServer.Database.ConnectionString,
- cfg.MSCs.Database.ConnectionString,
- cfg.MediaAPI.Database.ConnectionString,
- cfg.RoomServer.Database.ConnectionString,
- cfg.SyncAPI.Database.ConnectionString,
- cfg.UserAPI.AccountDatabase.ConnectionString,
- }
- for _, fileURI := range dbFiles {
- path := strings.TrimPrefix(string(fileURI), "file:")
- err := os.Remove(path)
- if err != nil && !errors.Is(err, fs.ErrNotExist) {
- t.Fatalf("failed to cleanup sqlite db '%s': %s", fileURI, err)
- }
- }
+ t.Cleanup(func() {}) // removes t.TempDir, where all database files are created
}
default:
t.Fatalf("unknown db type: %v", dbType)