diff --git a/tests/db_test.go b/tests/db_test.go index 14a697b..103175c 100644 --- a/tests/db_test.go +++ b/tests/db_test.go @@ -1,7 +1,6 @@ package tests import ( - "os" "path/filepath" "testing" @@ -14,13 +13,7 @@ func TestDB_memory(t *testing.T) { } func TestDB_file(t *testing.T) { - dir, err := os.MkdirTemp("", "sqlite3-") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - testDB(t, filepath.Join(dir, "test.db")) + testDB(t, filepath.Join(t.TempDir(), "test.db")) } func testDB(t *testing.T, name string) { diff --git a/tests/parallel_test.go b/tests/parallel_test.go index a81b577..347cf80 100644 --- a/tests/parallel_test.go +++ b/tests/parallel_test.go @@ -2,6 +2,7 @@ package tests import ( "os" + "os/exec" "path/filepath" "testing" @@ -12,12 +13,35 @@ import ( ) func TestParallel(t *testing.T) { - dir, err := os.MkdirTemp("", "sqlite3-") - if err != nil { + testParallel(t, t.TempDir(), 50) +} + +func TestMultiProcess(t *testing.T) { + if testing.Short() { + return + } + + dir := t.TempDir() + t.Setenv("TestParallel_dir", dir) + cmd := exec.Command("go", "test", "-run", "TestChildProcess") + if err := cmd.Start(); err != nil { t.Fatal(err) } - defer os.RemoveAll(dir) + testParallel(t, dir, 500) + cmd.Wait() +} + +func TestChildProcess(t *testing.T) { + dir := os.Getenv("TestParallel_dir") + if dir == "" || testing.Short() { + return + } + + testParallel(t, dir, 500) +} + +func testParallel(t *testing.T, dir string, n int) { writer := func() error { db, err := sqlite3.Open(filepath.Join(dir, "test.db")) if err != nil { @@ -27,7 +51,7 @@ func TestParallel(t *testing.T) { err = db.Exec(` PRAGMA locking_mode = NORMAL; - PRAGMA busy_timeout = 1000; + PRAGMA busy_timeout = 10000; `) if err != nil { return err @@ -55,7 +79,7 @@ func TestParallel(t *testing.T) { err = db.Exec(` PRAGMA locking_mode = NORMAL; - PRAGMA busy_timeout = 1000; + PRAGMA busy_timeout = 10000; `) if err != nil { return err @@ -85,14 +109,14 @@ func TestParallel(t *testing.T) { return db.Close() } - err = writer() + err := writer() if err != nil { t.Fatal(err) } var group errgroup.Group group.SetLimit(4) - for i := 0; i < 32; i++ { + for i := 0; i < n; i++ { if i&7 != 7 { group.Go(reader) } else { diff --git a/vfs_test.go b/vfs_test.go index 42a81ca..4b7df92 100644 --- a/vfs_test.go +++ b/vfs_test.go @@ -163,14 +163,8 @@ func Test_vfsDelete(t *testing.T) { } func Test_vfsAccess(t *testing.T) { - dir, err := os.MkdirTemp("", "sqlite3-") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - mem := newMemory(128 + _MAX_PATHNAME) - mem.writeString(8, dir) + mem.writeString(8, t.TempDir()) rc := vfsAccess(context.TODO(), mem.mod, 0, 8, ACCESS_EXISTS, 4) if rc != _OK { diff --git a/vfs_unix.go b/vfs_unix.go index 8a0ef8b..3d1e9cf 100644 --- a/vfs_unix.go +++ b/vfs_unix.go @@ -140,13 +140,14 @@ func (*vfsFileLocker) errorCode(err error, def xErrorCode) xErrorCode { } if errno, ok := err.(syscall.Errno); ok { switch errno { - case syscall.EACCES: - case syscall.EAGAIN: - case syscall.EBUSY: - case syscall.EINTR: - case syscall.ENOLCK: - case syscall.EDEADLK: - case syscall.ETIMEDOUT: + case + syscall.EACCES, + syscall.EAGAIN, + syscall.EBUSY, + syscall.EINTR, + syscall.ENOLCK, + syscall.EDEADLK, + syscall.ETIMEDOUT: return xErrorCode(BUSY) case syscall.EPERM: return xErrorCode(PERM)