// 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) }) }