forked from mirror/gorm
test: no cache preload in goroutine
This commit is contained in:
parent
557b874ee3
commit
590e73ff95
|
@ -6,6 +6,7 @@ require (
|
||||||
github.com/google/uuid v1.1.1
|
github.com/google/uuid v1.1.1
|
||||||
github.com/jinzhu/now v1.1.1
|
github.com/jinzhu/now v1.1.1
|
||||||
github.com/lib/pq v1.6.0
|
github.com/lib/pq v1.6.0
|
||||||
|
github.com/stretchr/testify v1.5.1
|
||||||
gorm.io/driver/mysql v1.0.3
|
gorm.io/driver/mysql v1.0.3
|
||||||
gorm.io/driver/postgres v1.0.5
|
gorm.io/driver/postgres v1.0.5
|
||||||
gorm.io/driver/sqlite v1.1.3
|
gorm.io/driver/sqlite v1.1.3
|
||||||
|
|
|
@ -5,8 +5,11 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
. "gorm.io/gorm/utils/tests"
|
. "gorm.io/gorm/utils/tests"
|
||||||
|
@ -212,3 +215,46 @@ func TestPreloadEmptyData(t *testing.T) {
|
||||||
t.Errorf("json marshal is not empty slice, got %v", string(r))
|
t.Errorf("json marshal is not empty slice, got %v", string(r))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPreloadGoroutine goroutine中在没有缓存的情况下使用Preload
|
||||||
|
func TestPreloadGoroutine(t *testing.T) {
|
||||||
|
// 这里不要用Create,因为会缓存relations
|
||||||
|
// 把tests_test.go中init()函数中的RunMigrations()注释掉,数据库中保留一些数据来触发Preload
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
|
DB = DB.Where("id = ?", 1)
|
||||||
|
tx := DB.Session(&gorm.Session{})
|
||||||
|
|
||||||
|
wg.Add(2)
|
||||||
|
for i := 0; i < 2; i++ {
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
var user2 []User
|
||||||
|
tx = tx.Preload("Team")
|
||||||
|
err := tx.Find(&user2).Error
|
||||||
|
|
||||||
|
ast := assert.New(t)
|
||||||
|
// 这里会报错,Team: unsupported relations
|
||||||
|
// relations是空的
|
||||||
|
ast.Equal(err, nil)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestPreloadNotGoroutine 正常情况在没有缓存的时候下使用Preload
|
||||||
|
func TestPreloadNotGoroutine(t *testing.T) {
|
||||||
|
// 这里不要用Create,因为会缓存relations
|
||||||
|
// 把tests_test.go中init()函数中的RunMigrations()注释掉,数据库中保留一些数据来触发Preload
|
||||||
|
DB = DB.Where("id = ?", 1)
|
||||||
|
tx := DB.Session(&gorm.Session{})
|
||||||
|
|
||||||
|
var user2 []User
|
||||||
|
tx = tx.Preload("Team")
|
||||||
|
err := tx.Find(&user2).Error
|
||||||
|
|
||||||
|
ast := assert.New(t)
|
||||||
|
// 这里不会报错
|
||||||
|
// relations不是空的
|
||||||
|
ast.Equal(err, nil)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue