| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package migrations
- import (
- "fmt"
- "strings"
- "testing"
- "github.com/go-xorm/xorm"
- "github.com/torkelo/grafana-pro/pkg/log"
- . "github.com/smartystreets/goconvey/convey"
- )
- func cleanDB(x *xorm.Engine) {
- tables, _ := x.DBMetas()
- sess := x.NewSession()
- defer sess.Close()
- for _, table := range tables {
- if _, err := sess.Exec("SET FOREIGN_KEY_CHECKS = 0"); err != nil {
- panic("Failed to disable foreign key checks")
- }
- if _, err := sess.Exec("DROP TABLE " + table.Name); err != nil {
- panic(fmt.Sprintf("Failed to delete table: %v, err: %v", table.Name, err))
- }
- if _, err := sess.Exec("SET FOREIGN_KEY_CHECKS = 1"); err != nil {
- panic("Failed to disable foreign key checks")
- }
- }
- }
- var indexTypes = []string{"Unknown", "", "UNIQUE"}
- func TestMigrations(t *testing.T) {
- log.NewLogger(0, "console", `{"level": 0}`)
- testDBs := [][]string{
- []string{"mysql", "grafana:password@tcp(localhost:3306)/grafana_tests?charset=utf8"},
- []string{"sqlite3", ":memory:"},
- }
- for _, testDB := range testDBs {
- Convey("Initial "+testDB[0]+" migration", t, func() {
- x, err := xorm.NewEngine(testDB[0], testDB[1])
- So(err, ShouldBeNil)
- if testDB[0] == "mysql" {
- cleanDB(x)
- }
- mg := NewMigrator(x)
- AddMigrations(mg)
- err = mg.Start()
- So(err, ShouldBeNil)
- tables, err := x.DBMetas()
- So(err, ShouldBeNil)
- So(len(tables), ShouldEqual, 2)
- fmt.Printf("\nDB Schema after migration: table count: %v\n", len(tables))
- for _, table := range tables {
- fmt.Printf("\nTable: %v \n", table.Name)
- for _, column := range table.Columns() {
- fmt.Printf("\t %v \n", column.String(x.Dialect()))
- }
- if len(table.Indexes) > 0 {
- fmt.Printf("\n\tIndexes:\n")
- for _, index := range table.Indexes {
- fmt.Printf("\t %v (%v) %v \n", index.Name, strings.Join(index.Cols, ","), indexTypes[index.Type])
- }
- }
- }
- })
- }
- }
|