sqlconn_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package sqlx
  2. import (
  3. "database/sql"
  4. "io"
  5. "testing"
  6. "github.com/DATA-DOG/go-sqlmock"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "github.com/zeromicro/go-zero/core/trace/tracetest"
  10. )
  11. const mockedDatasource = "sqlmock"
  12. func init() {
  13. logx.Disable()
  14. }
  15. func TestSqlConn(t *testing.T) {
  16. me := tracetest.NewInMemoryExporter(t)
  17. mock, err := buildConn()
  18. assert.Nil(t, err)
  19. mock.ExpectExec("any")
  20. mock.ExpectQuery("any").WillReturnRows(sqlmock.NewRows([]string{"foo"}))
  21. conn := NewMysql(mockedDatasource)
  22. db, err := conn.RawDB()
  23. assert.Nil(t, err)
  24. rawConn := NewSqlConnFromDB(db, withMysqlAcceptable())
  25. badConn := NewMysql("badsql")
  26. _, err = conn.Exec("any", "value")
  27. assert.NotNil(t, err)
  28. _, err = badConn.Exec("any", "value")
  29. assert.NotNil(t, err)
  30. _, err = rawConn.Prepare("any")
  31. assert.NotNil(t, err)
  32. _, err = badConn.Prepare("any")
  33. assert.NotNil(t, err)
  34. var val string
  35. assert.NotNil(t, conn.QueryRow(&val, "any"))
  36. assert.NotNil(t, badConn.QueryRow(&val, "any"))
  37. assert.NotNil(t, conn.QueryRowPartial(&val, "any"))
  38. assert.NotNil(t, badConn.QueryRowPartial(&val, "any"))
  39. assert.NotNil(t, conn.QueryRows(&val, "any"))
  40. assert.NotNil(t, badConn.QueryRows(&val, "any"))
  41. assert.NotNil(t, conn.QueryRowsPartial(&val, "any"))
  42. assert.NotNil(t, badConn.QueryRowsPartial(&val, "any"))
  43. assert.NotNil(t, conn.Transact(func(session Session) error {
  44. return nil
  45. }))
  46. assert.NotNil(t, badConn.Transact(func(session Session) error {
  47. return nil
  48. }))
  49. assert.Equal(t, 14, len(me.GetSpans()))
  50. }
  51. func buildConn() (mock sqlmock.Sqlmock, err error) {
  52. _, err = connManager.GetResource(mockedDatasource, func() (io.Closer, error) {
  53. var db *sql.DB
  54. var err error
  55. db, mock, err = sqlmock.New()
  56. return db, err
  57. })
  58. return
  59. }