xorm_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package xorm
  2. import (
  3. "flag"
  4. "fmt"
  5. "os"
  6. "strings"
  7. "testing"
  8. _ "github.com/denisenkom/go-mssqldb"
  9. _ "github.com/go-sql-driver/mysql"
  10. "github.com/go-xorm/core"
  11. _ "github.com/lib/pq"
  12. _ "github.com/mattn/go-sqlite3"
  13. _ "github.com/ziutek/mymysql/godrv"
  14. )
  15. var (
  16. testEngine EngineInterface
  17. dbType string
  18. connString string
  19. db = flag.String("db", "sqlite3", "the tested database")
  20. showSQL = flag.Bool("show_sql", true, "show generated SQLs")
  21. ptrConnStr = flag.String("conn_str", "./test.db?cache=shared&mode=rwc", "test database connection string")
  22. mapType = flag.String("map_type", "snake", "indicate the name mapping")
  23. cache = flag.Bool("cache", false, "if enable cache")
  24. cluster = flag.Bool("cluster", false, "if this is a cluster")
  25. splitter = flag.String("splitter", ";", "the splitter on connstr for cluster")
  26. )
  27. func createEngine(dbType, connStr string) error {
  28. if testEngine == nil {
  29. var err error
  30. if !*cluster {
  31. testEngine, err = NewEngine(dbType, connStr)
  32. } else {
  33. testEngine, err = NewEngineGroup(dbType, strings.Split(connStr, *splitter))
  34. }
  35. if err != nil {
  36. return err
  37. }
  38. testEngine.ShowSQL(*showSQL)
  39. testEngine.SetLogLevel(core.LOG_DEBUG)
  40. if *cache {
  41. cacher := NewLRUCacher(NewMemoryStore(), 100000)
  42. testEngine.SetDefaultCacher(cacher)
  43. }
  44. if len(*mapType) > 0 {
  45. switch *mapType {
  46. case "snake":
  47. testEngine.SetMapper(core.SnakeMapper{})
  48. case "same":
  49. testEngine.SetMapper(core.SameMapper{})
  50. case "gonic":
  51. testEngine.SetMapper(core.LintGonicMapper)
  52. }
  53. }
  54. }
  55. tables, err := testEngine.DBMetas()
  56. if err != nil {
  57. return err
  58. }
  59. var tableNames = make([]interface{}, 0, len(tables))
  60. for _, table := range tables {
  61. tableNames = append(tableNames, table.Name)
  62. }
  63. if err = testEngine.DropTables(tableNames...); err != nil {
  64. return err
  65. }
  66. return nil
  67. }
  68. func prepareEngine() error {
  69. return createEngine(dbType, connString)
  70. }
  71. func TestMain(m *testing.M) {
  72. flag.Parse()
  73. dbType = *db
  74. if *db == "sqlite3" {
  75. if ptrConnStr == nil {
  76. connString = "./test.db?cache=shared&mode=rwc"
  77. } else {
  78. connString = *ptrConnStr
  79. }
  80. } else {
  81. if ptrConnStr == nil {
  82. fmt.Println("you should indicate conn string")
  83. return
  84. }
  85. connString = *ptrConnStr
  86. }
  87. dbs := strings.Split(*db, "::")
  88. conns := strings.Split(connString, "::")
  89. var res int
  90. for i := 0; i < len(dbs); i++ {
  91. dbType = dbs[i]
  92. connString = conns[i]
  93. testEngine = nil
  94. fmt.Println("testing", dbType, connString)
  95. if err := prepareEngine(); err != nil {
  96. fmt.Println(err)
  97. return
  98. }
  99. code := m.Run()
  100. if code > 0 {
  101. res = code
  102. }
  103. }
  104. os.Exit(res)
  105. }
  106. func TestPing(t *testing.T) {
  107. if err := testEngine.Ping(); err != nil {
  108. t.Fatal(err)
  109. }
  110. }