gorm/tests/easer_test.go

76 lines
1.1 KiB
Go

package tests_test
import (
"gorm.io/gorm"
"sync"
"testing"
"time"
)
func TestEaser(t *testing.T) {
t.Run("once", func(t *testing.T) {
db1 := DB.Unscoped()
db1.Config.EaseQueue = &sync.Map{}
wg := &sync.WaitGroup{}
wg.Add(2)
incr := 0
testQuery := func(d *gorm.DB) {
time.Sleep(time.Second)
incr++
}
go func() {
db1.Ease(testQuery)
wg.Done()
}()
go func() {
time.Sleep(500 * time.Millisecond)
db1.Ease(testQuery)
wg.Done()
}()
wg.Wait()
if incr != 1 {
t.Error("easer had to run the query only once")
}
})
t.Run("twice", func(t *testing.T) {
db1 := DB.Unscoped()
db1.Config.EaseQueue = &sync.Map{}
wg := &sync.WaitGroup{}
wg.Add(2)
incr := 0
testQuery := func(d *gorm.DB) {
time.Sleep(time.Second)
incr++
}
go func() {
db1.Statement.SQL.WriteString("q1")
db1.Ease(testQuery)
wg.Done()
}()
go func() {
time.Sleep(500 * time.Millisecond)
db1.Statement.SQL.WriteString("q2")
db1.Ease(testQuery)
wg.Done()
}()
wg.Wait()
if incr != 2 {
t.Error("easer had to run two separate queries")
}
})
}