package mysqldriver import ( "github.com/pressly/goose" "log" "os" "testing" "time" ) var testDB *DB func TestMain(m *testing.M) { testDbConnect := os.Getenv("DB_TEST_CONNECT") if testDbConnect == "" { testDbConnect = "stufflog_test:test1234@(localhost:3306)/stufflog_test" } for i := 0; i < 10; i++ { db, err := Open(testDbConnect) if err != nil { log.Println("DB ERROR", i, err) time.Sleep(time.Second) continue } testDB = db break } if testDB == nil { log.Println("DB FAILED") os.Exit(1) return } err := goose.SetDialect("mysql") if err != nil { log.Println("GOOSE ERROR", err) os.Exit(1) return } for { err = goose.Down(testDB.db.DB, "../../../migrations/mysql") if err != nil { break } } err = goose.Up(testDB.db.DB, "../../../migrations/mysql") if err != nil && err != goose.ErrNoNextVersion && err != goose.ErrNoCurrentVersion { log.Println("UP ERROR", err) os.Exit(3) return } code := m.Run() os.Exit(code) } func clearTable(tableName string) error { // If you really want to SQL inject the test DB, go right ahead! _, err := testDB.db.Exec("DELETE FROM " + tableName + " WHERE TRUE") return err } func mustParseTime(str string) time.Time { d, err := time.Parse(time.RFC3339Nano, str) if err != nil { panic(err) } return d.UTC() } func ptrInt(v int) *int { return &v } func ptrString(v string) *string { return &v } func ptrBool(v bool) *bool { return &v }