conn_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package common_db
  2. import (
  3. "context"
  4. "git.shuncheng.lu/bigthing/gocommon/pkg/conf"
  5. "git.shuncheng.lu/bigthing/gocommon/pkg/internal/properties"
  6. "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util"
  7. "git.shuncheng.lu/bigthing/gocommon/pkg/trace"
  8. "sync"
  9. "testing"
  10. "time"
  11. )
  12. type UserInfo struct {
  13. Id uint64 `xorm:"pk autoincr id"`
  14. UserId uint64 `xorm:"user_id"`
  15. UserName string `xorm:"user_name"`
  16. IdCard string `xorm:"id_card"`
  17. Gender uint8 `xorm:"gender"`
  18. CreateTime time.Time `xorm:"created create_time"`
  19. UpdateTime time.Time `xorm:"updated update_time"`
  20. }
  21. func (*UserInfo) TableName() string {
  22. return "user_info"
  23. }
  24. // docker run -d --rm --name mysql -m 512m -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  25. var (
  26. mysqlConfig = `
  27. mysql.host=localhost
  28. mysql.port=3306
  29. mysql.user=root
  30. mysql.password=123456
  31. mysql.dbname=gocommon
  32. mysql.slave_host=localhost
  33. mysql.slave_port=3306
  34. mysql.slave_user=root
  35. mysql.slave_password=123456
  36. mysql.slave_dbname=gocommon
  37. mysql.log_file=/data/log/gocommon/gocommon_mysql.log
  38. mysql.refresh_config_time=1
  39. mysql.read_timeout=1
  40. mysql.write_timeout=1
  41. mysql.timeout=1
  42. # trace
  43. trace.sky_walking_host = localhost:11800
  44. trace.application_name = gocommon_dev
  45. `
  46. )
  47. func initConfig(t testing.TB) properties.Properties {
  48. config, err := properties.ReadFromString(mysqlConfig)
  49. if err != nil {
  50. t.Fatal(err)
  51. }
  52. conf.MustValue = func(section, key string, defaultVal ...string) string {
  53. return config.GetString(section+"."+key, defaultVal...)
  54. }
  55. return config
  56. }
  57. func TestNewDbConn(t *testing.T) {
  58. config := initConfig(t)
  59. conn, err := NewDbConn("mysql")
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. wg := sync.WaitGroup{}
  64. wg.Add(2)
  65. // 启动后修改配置 host
  66. util.GoWithRecover(func() {
  67. defer wg.Done()
  68. <-time.After(time.Second * 2)
  69. config.SetString("mysql.slave_host", "127.0.0.2")
  70. }, nil)
  71. // 10s查询db
  72. util.GoWithRecover(func() {
  73. defer wg.Done()
  74. for x := 0; x < 10; x++ {
  75. <-time.After(time.Second)
  76. info := new(UserInfo)
  77. if _, err := conn.NewSlaveCtxSession(context.Background()).Where("id=?", 1).Get(info); err != nil {
  78. t.Fatal(err)
  79. }
  80. }
  81. }, nil)
  82. wg.Wait()
  83. }
  84. func TestTraceDb(t *testing.T) {
  85. initConfig(t)
  86. if err := trace.Init(); err != nil {
  87. t.Fatal(err)
  88. }
  89. conn, err := NewDbConn("mysql")
  90. if err != nil {
  91. t.Fatal(err)
  92. }
  93. ctx, span := trace.MockContext(context.Background(), "test")
  94. defer func() {
  95. span.End()
  96. time.Sleep(time.Second * 5)
  97. }()
  98. t.Log(trace.GetTraceId(ctx))
  99. list := make([]UserInfo, 0)
  100. if err := conn.NewSlaveCtxSession(ctx).Find(&list); err != nil {
  101. t.Fatal(err)
  102. }
  103. t.Logf("RESULT: %v", list)
  104. }