Interrupt busy handlers.

This commit is contained in:
Nuno Cruces
2024-05-19 01:04:56 +01:00
parent 3d30a561f0
commit ed932ee93b
11 changed files with 113 additions and 11 deletions

View File

@@ -8,6 +8,7 @@ import (
"github.com/ncruces/go-sqlite3"
_ "github.com/ncruces/go-sqlite3/embed"
_ "github.com/ncruces/go-sqlite3/tests/testcfg"
_ "github.com/ncruces/go-sqlite3/vfs/memdb"
)
func TestConn_Transaction_exec(t *testing.T) {
@@ -247,6 +248,51 @@ func TestConn_Transaction_interrupted(t *testing.T) {
}
}
func TestConn_Transaction_busy(t *testing.T) {
t.Parallel()
db1, err := sqlite3.Open("file:/test.db?vfs=memdb")
if err != nil {
t.Fatal(err)
}
defer db1.Close()
db2, err := sqlite3.Open("file:/test.db?vfs=memdb&_pragma=busy_timeout(10000)")
if err != nil {
t.Fatal(err)
}
defer db2.Close()
err = db1.Exec(`CREATE TABLE test (col)`)
if err != nil {
t.Fatal(err)
}
tx, err := db1.BeginImmediate()
if err != nil {
t.Fatal(err)
}
err = db1.Exec(`INSERT INTO test VALUES (1)`)
if err != nil {
t.Fatal(err)
}
ctx, cancel := context.WithCancel(context.Background())
db2.SetInterrupt(ctx)
go cancel()
_, err = db2.BeginExclusive()
if !errors.Is(err, sqlite3.BUSY) {
t.Errorf("got %v, want sqlite3.BUSY", err)
}
err = nil
tx.End(&err)
if err != nil {
t.Fatal(err)
}
}
func TestConn_Transaction_rollback(t *testing.T) {
t.Parallel()