mirror of
https://gitee.com/johng/gf
synced 2026-06-25 01:05:41 +08:00
103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
|
|
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
||
|
|
//
|
||
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
||
|
|
// If a copy of the MIT was not distributed with this file,
|
||
|
|
// You can obtain one at https://github.com/gogf/gf.
|
||
|
|
|
||
|
|
package pgsql_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/gogf/gf/v2/database/gdb"
|
||
|
|
"github.com/gogf/gf/v2/os/glog"
|
||
|
|
"github.com/gogf/gf/v2/test/gtest"
|
||
|
|
)
|
||
|
|
|
||
|
|
func Test_Ctx(t *testing.T) {
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db, err := gdb.Instance()
|
||
|
|
t.AssertNil(err)
|
||
|
|
|
||
|
|
err1 := db.PingMaster()
|
||
|
|
err2 := db.PingSlave()
|
||
|
|
t.Assert(err1, nil)
|
||
|
|
t.Assert(err2, nil)
|
||
|
|
|
||
|
|
newDb := db.Ctx(context.Background())
|
||
|
|
t.AssertNE(newDb, nil)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_Ctx_Query(t *testing.T) {
|
||
|
|
db.GetLogger().(*glog.Logger).SetCtxKeys("SpanId", "TraceId")
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db.SetDebug(true)
|
||
|
|
defer db.SetDebug(false)
|
||
|
|
ctx := context.WithValue(context.Background(), "TraceId", "12345678")
|
||
|
|
ctx = context.WithValue(ctx, "SpanId", "0.1")
|
||
|
|
db.Query(ctx, "select 1")
|
||
|
|
})
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db.SetDebug(true)
|
||
|
|
defer db.SetDebug(false)
|
||
|
|
db.Query(ctx, "select 2")
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_Ctx_Model(t *testing.T) {
|
||
|
|
table := createInitTable()
|
||
|
|
defer dropTable(table)
|
||
|
|
db.GetLogger().(*glog.Logger).SetCtxKeys("SpanId", "TraceId")
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db.SetDebug(true)
|
||
|
|
defer db.SetDebug(false)
|
||
|
|
ctx := context.WithValue(context.Background(), "TraceId", "12345678")
|
||
|
|
ctx = context.WithValue(ctx, "SpanId", "0.1")
|
||
|
|
db.Model(table).Ctx(ctx).All()
|
||
|
|
})
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db.SetDebug(true)
|
||
|
|
defer db.SetDebug(false)
|
||
|
|
db.Model(table).All()
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_Ctx_Transaction(t *testing.T) {
|
||
|
|
table := createInitTable()
|
||
|
|
defer dropTable(table)
|
||
|
|
|
||
|
|
db.GetLogger().(*glog.Logger).SetCtxKeys("SpanId", "TraceId")
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
db.SetDebug(true)
|
||
|
|
defer db.SetDebug(false)
|
||
|
|
ctx := context.WithValue(context.Background(), "TraceId", "tx_trace_123")
|
||
|
|
ctx = context.WithValue(ctx, "SpanId", "0.2")
|
||
|
|
|
||
|
|
err := db.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||
|
|
_, err := tx.Model(table).Ctx(ctx).Where("id", 1).One()
|
||
|
|
return err
|
||
|
|
})
|
||
|
|
t.AssertNil(err)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
func Test_Ctx_Timeout(t *testing.T) {
|
||
|
|
table := createInitTable()
|
||
|
|
defer dropTable(table)
|
||
|
|
|
||
|
|
gtest.C(t, func(t *gtest.T) {
|
||
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*10)
|
||
|
|
defer cancel()
|
||
|
|
|
||
|
|
// Wait for the context to expire
|
||
|
|
time.Sleep(time.Millisecond * 50)
|
||
|
|
|
||
|
|
// Query with expired context should return error
|
||
|
|
_, err := db.Model(table).Ctx(ctx).All()
|
||
|
|
t.AssertNE(err, nil)
|
||
|
|
})
|
||
|
|
}
|