Skip to content

Commit

Permalink
support auto create database for mysql
Browse files Browse the repository at this point in the history
  • Loading branch information
junqiang.zhang committed Sep 23, 2022
1 parent 20d1d40 commit df43dc6
Show file tree
Hide file tree
Showing 6 changed files with 292 additions and 45 deletions.
88 changes: 48 additions & 40 deletions example/exmaple.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ type User struct {
}

func main() {
//testMockGORM()
testMockGORM()
//testMockGORMV2()
//testMockXORM()
//testMockZORM()
//testMockRedis()
//testMockHttpServer()
testMockDocker()
//testDBUtil()
////testMockXORM()
////testMockZORM()
////testMockRedis()
////testMockHttpServer()
//testMockDocker()
////testDBUtil()

}

Expand Down Expand Up @@ -71,36 +71,46 @@ func testMockZORM() {
}

func testMockGORM() {
var db *gorm.DB
mockdb.DBType = "mysql"
mock := gmock.NewMockGORM("example", func(gorm *mockdb.MockGORM) {
db = gorm.GetGormDB()
})
fmt.Println(mock.GetDSN())
mock.RegisterModels(&User{})
mock.InitSchemas(`CREATE TABLE user (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
age int(3) DEFAULT NULL,
name varchar(255) DEFAULT NULL COMMENT '名称',
// var db *gorm.DB
// mockdb.DBType = "mysql"
// mock := gmock.NewMockGORM("example", "mock")
// db=mock.GetGormDB()
// fmt.Println(mock.GetDSN())
// mock.RegisterModels(&User{})
// mock.InitSchemas(`CREATE TABLE user (
// id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
// age int(3) DEFAULT NULL,
// name varchar(255) DEFAULT NULL COMMENT '名称',
//remark varchar(255) DEFAULT NULL COMMENT '名称',
// PRIMARY KEY (id)
//) ENGINE=InnoDB ;`)
// mock.ResetAndInit()
//
// mock.DoRecord(mock.GetGormDB())
//
// var user []User
// err := db.Where("id=?", 1).Find(&user).Error
// if err != nil {
// panic(err)
// }
// if user[0].Id != 1 {
// panic(fmt.Errorf("testMockGORM error"))
// }
//
// for _, sql := range mock.GetDBUtil().DumpFromRecordInfo(mock.GetSqlDB(), mock.DumpRecorderInfo()) {
// fmt.Println(sql)
// }

MockDB := gmock.NewGORMFromDSN("./example/ddl.txt", "mysql", "root:mock@tcp(127.0.0.1:63307)/hello?charset=utf8&parseTime=True&loc=Local")

MockDB.InitSchemas(`CREATE TABLE user (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
age int(3) DEFAULT NULL,
name varchar(255) DEFAULT NULL COMMENT '名称',
remark varchar(255) DEFAULT NULL COMMENT '名称',
PRIMARY KEY (id)
PRIMARY KEY (id)
) ENGINE=InnoDB ;`)
mock.ResetAndInit()

mock.DoRecord(mock.GetGormDB())

var user []User
err := db.Where("id=?", 1).Find(&user).Error
if err != nil {
panic(err)
}
if user[0].Id != 1 {
panic(fmt.Errorf("testMockGORM error"))
}

for _, sql := range mock.GetDBUtil().DumpFromRecordInfo(mock.GetSqlDB(), mock.DumpRecorderInfo()) {
fmt.Println(sql)
}
MockDB.ResetAndInit()

}

Expand All @@ -121,10 +131,8 @@ func testDBUtil() {
func testMockGORMV2() {
//mockdb.DBType = "mysql"
var db *gormv2.DB
mock := gmock.NewMockGORMV2("example", func(orm *mockdb.MockGORMV2) {
db = orm.GetGormDB()
})

mock := gmock.NewMockGORMV2("example", "mock")
db = mock.GetGormDB()
mock.DoRecord(mock.GetGormDB())
//注册模型

Expand Down Expand Up @@ -244,7 +252,7 @@ func testMockDocker() {
default:
if !checker() {
util.Exec("open /Applications/Docker.app")
time.Sleep(time.Second*25)
time.Sleep(time.Second * 25)
} else {
c <- true
goto BREAK
Expand Down
24 changes: 22 additions & 2 deletions mockdb/mock_gorm.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,29 @@ func NewGORMFromDSN(pathToSqlFileName string, dbType string, dsn string) *MockGO
//onceRecorder: sync.Once{},
}
mock.dsn = dsn
var dn *util.DSN
var err error
db, err := gorm.Open(dbType, mock.dsn)
if err != nil {
panic(err)
dsn2 := dbType + "://" + dsn
dn, err = util.Parse(dsn2)
if err != nil {
panic(err)
}
dbName := dn.DatabaseName()
dn.SetDatabaseName("sys")
db, err = gorm.Open(dbType, dn.DSN(false))
if err != nil {
panic(err)
}
err = db.Exec(fmt.Sprintf("create database %s", dbName)).Error
if err != nil {
panic(err)
}
db, err = gorm.Open(dbType, mock.dsn)
if err!=nil {
panic(err)
}
}
mock.db = db
mock.dbType = dbType
Expand Down Expand Up @@ -108,7 +128,7 @@ func NewMockGORM(pathToSqlFileName string, dbName string) *MockGORM {
}
mock.util.RunMySQLServer(dbName, i, false)
time.Sleep(time.Second)
mock.dsn = fmt.Sprintf("root:root@tcp(127.0.0.1:%v)/%s?charset=utf8&parseTime=True&loc=Local", i,dbName)
mock.dsn = fmt.Sprintf("root:root@tcp(127.0.0.1:%v)/%s?charset=utf8&parseTime=True&loc=Local", i, dbName)
mock.dbType = "mysql"
db, err = gorm.Open("mysql", mock.dsn)
break
Expand Down
24 changes: 22 additions & 2 deletions mockdb/mock_gormv2.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,29 @@ func NewGORMV2FromDSN(pathToSqlFileName string, dbType string, dsn string) *Mock
ns := schema.NamingStrategy{
SingularTable: true,
}
var dn *util.DSN
db, err := gorm.Open(mysql.Open(mock.dsn), &gorm.Config{NamingStrategy: ns})
if err != nil {
panic(err)
//panic(err)
dsn2 := dbType + "://" + dsn
dn, err = util.Parse(dsn2)
if err != nil {
panic(err)
}
dbName := dn.DatabaseName()
dn.SetDatabaseName("sys")
db, err = gorm.Open(mysql.Open(dn.DSN(false)), &gorm.Config{NamingStrategy: ns})
if err != nil {
panic(err)
}
err = db.Exec(fmt.Sprintf("create database %s", dbName)).Error
if err != nil {
panic(err)
}
db, err = gorm.Open(mysql.Open(dn.DSN(false)), &gorm.Config{NamingStrategy: ns})
if err != nil {
panic(err)
}
}
mock.db = db
mock.dbType = dbType
Expand Down Expand Up @@ -86,7 +106,7 @@ func NewMockGORMV2(pathToSqlFileName string, dbName string) *MockGORMV2 {
}
mock.util.RunMySQLServer(dbName, i, false)
time.Sleep(time.Second)
mock.dsn = fmt.Sprintf("root:root@tcp(127.0.0.1:%v)/%s?charset=utf8&parseTime=True&loc=Local", i,dbName)
mock.dsn = fmt.Sprintf("root:root@tcp(127.0.0.1:%v)/%s?charset=utf8&parseTime=True&loc=Local", i, dbName)
mock.dbType = "mysql"
db, err = gorm.Open(mysql.Open(mock.dsn), &gorm.Config{NamingStrategy: ns})
break
Expand Down
12 changes: 11 additions & 1 deletion mockhttp/mock_http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
)

func TestHttpServer(t *testing.T) {
httpMock := NewMockHttpServer(12345, "./", []string{"wwww.baidu.com"})
httpMock := NewMockHttpServer(12345, "./", []string{"www.baidu.com"})
httpMock.SetReqRspHandler(func(req *Request, rsp *Response) {
req.Method = "POST"
req.Endpoint = "/index.html"
Expand All @@ -16,6 +16,16 @@ func TestHttpServer(t *testing.T) {
})
httpMock.InitMockHttpServer()


resp, er := requests.PostJson("https://www.baidu.com/index.html", `{"name":test}`)
//resp, err := requests.Get("http://www.baidu.com/index.html")
if er != nil {
t.Fail()
}
if resp.Text() != "baidu!" {
t.Fail()
}

resp, err := requests.PostJson("http://www.baidu.com/index.html", `{"name":test}`)
//resp, err := requests.Get("http://www.baidu.com/index.html")
if err != nil {
Expand Down
Loading

0 comments on commit df43dc6

Please sign in to comment.