Skip to content

Commit 1978a3c

Browse files
committed
improved concurrent test
1 parent 4bbe25b commit 1978a3c

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

driver_test.go

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"os"
88
"sync"
99
"testing"
10-
"time"
1110
)
1211

1312
var (
@@ -694,42 +693,62 @@ func TestStmtMultiRows(t *testing.T) {
694693

695694
}
696695

697-
var canStop bool
696+
func TestConcurrent(t *testing.T) {
697+
if os.Getenv("MYSQL_TEST_CONCURRENT") != "1" {
698+
t.Log("CONCURRENT env var not set. Skipping TestConcurrent")
699+
return
700+
}
701+
if !getEnv() {
702+
t.Logf("MySQL-Server not running on %s. Skipping TestConcurrent", netAddr)
703+
return
704+
}
698705

699-
func doStuff(t *testing.T) {
700706
db, err := sql.Open("mysql", dsn)
701707
if err != nil {
702708
t.Fatalf("Error connecting: %v", err)
703709
}
704710

705711
defer db.Close()
706712

707-
for !canStop {
708-
_, err := db.Exec("SELECT 1")
709-
if err != nil {
710-
canStop = true
711-
t.Fatalf(err.Error())
712-
}
713+
var max int
714+
err = db.QueryRow("SELECT @@max_connections").Scan(&max)
715+
if err != nil {
716+
t.Fatalf("%v", err)
713717
}
714-
}
715718

716-
func TestConcurrent(t *testing.T) {
717-
if os.Getenv("MYSQL_TEST_CONCURRENT") != "1" {
718-
t.Log("CONCURRENT env var not set. Skipping TestConcurrent")
719-
return
720-
}
721-
if !getEnv() {
722-
t.Logf("MySQL-Server not running on %s. Skipping TestConcurrent", netAddr)
723-
return
724-
}
719+
t.Logf("Testing %d concurrent connections \r\n", max)
725720

726-
fmt.Println("Run")
721+
canStop := false
727722

728-
canStop = false
729-
for i := 0; i < 500; i++ {
730-
go doStuff(t)
723+
c := make(chan struct{}, max)
724+
for i := 0; i < max; i++ {
725+
go func() {
726+
tx, err := db.Begin()
727+
if err != nil {
728+
canStop = true
729+
t.Fatalf("Error on Con %d: %s", i, err.Error())
730+
}
731+
732+
c <- struct{}{}
733+
734+
for !canStop {
735+
_, err := tx.Exec("SELECT 1")
736+
if err != nil {
737+
canStop = true
738+
t.Fatalf("Error on Con %d: %s", i, err.Error())
739+
}
740+
}
741+
742+
err = tx.Commit()
743+
if err != nil {
744+
canStop = true
745+
t.Fatalf("Error on Con %d: %s", i, err.Error())
746+
}
747+
}()
731748
}
732749

733-
time.Sleep(3 * time.Second)
750+
for i := 0; i < max; i++ {
751+
<-c
752+
}
734753
canStop = true
735754
}

0 commit comments

Comments
 (0)