代码拉取完成,页面将自动刷新
package mysql
import (
"errors"
"testing"
"time"
"gitee.com/ideadawn/dbvm/manager"
sqlmock "github.com/DATA-DOG/go-sqlmock"
"github.com/VividCortex/mysqlerr"
driver "github.com/go-sql-driver/mysql"
"github.com/stretchr/testify/assert"
)
func Test_MySQL(t *testing.T) {
db, mock, err := sqlmock.New()
assert.Equal(t, nil, err)
my := New()
my.db = db
my.table = `dbvm`
// Initiate
mock.ExpectQuery("^SELECT `name` FROM `" + my.table + "` LIMIT 1$").
WillReturnError(&driver.MySQLError{
Number: mysqlerr.ER_NO_SUCH_TABLE,
Message: `No such table.`,
})
mock.ExpectExec("^CREATE TABLE IF NOT EXISTS `" + my.table + "` .*").
WillReturnResult(sqlmock.NewResult(0, 0))
mock.ExpectQuery("^SELECT `id`,`name`,`time`,`status` FROM `"+my.table+"` WHERE `id` > \\? ORDER BY `id` ASC LIMIT \\?$").
WithArgs(int64(0), 1000).
WillReturnRows(sqlmock.
NewRows([]string{`id`, `name`, `time`, `status`}).
AddRow(int64(1), `v1.6.0`, int64(162), int8(2)),
)
err = my.Initiate(my.table)
assert.Equal(t, nil, err)
logs, err := my.ListLogs()
assert.Equal(t, nil, err)
assert.Equal(t, int64(1), logs[0].ID)
plan := &manager.Plan{
Name: `v1.6.0`,
Requires: []string{},
Time: time.Now(),
Deploy: `../testdata/deploy/v1.6.0.sql`,
Revert: `../testdata/revert/v1.6.0.sql`,
}
// Deploy
mockDeploy(mock)
err = my.Deploy(plan)
assert.Equal(t, nil, err)
// Revert
mockRevert(mock)
err = my.Revert(plan)
assert.Equal(t, nil, err)
mock.ExpectClose()
my.Close()
}
func mockDeploy(mock sqlmock.Sqlmock) {
result := sqlmock.NewResult(0, 0)
mock.ExpectBegin()
mock.ExpectExec("^(?is)CREATE TABLE ").WillReturnError(errors.New(`Temp-DB-Error`))
mock.ExpectRollback()
mock.ExpectBegin()
mock.ExpectExec("^(?is)CREATE TABLE ").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*ADD COLUMN `phone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*ADD COLUMN `nickname`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*DROP COLUMN `not_exists`").
WillReturnError(&driver.MySQLError{
Number: mysqlerr.ER_CANT_DROP_FIELD_OR_KEY,
Message: `Column is not exists.`,
})
mock.ExpectRollback()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*ADD INDEX `phone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*ADD PRIMARY").
WillReturnError(&driver.MySQLError{
Number: mysqlerr.ER_MULTIPLE_PRI_KEY,
Message: `Multi PRIMARY KEY.`,
})
mock.ExpectRollback()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*MODIFY COLUMN `id`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*CHANGE COLUMN `phone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectExec("^DROP PROCEDURE IF EXISTS `delTestById`").WillReturnResult(result)
mock.ExpectExec("^CREATE DEFINER=`root`@`localhost` PROCEDURE `delTestById`").WillReturnResult(result)
mock.ExpectBegin()
mock.ExpectExec("^DROP PROCEDURE IF EXISTS `delTestByPhone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^CREATE DEFINER=`root`@`localhost` PROCEDURE `delTestByPhone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^INSERT INTO ").WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
}
func mockRevert(mock sqlmock.Sqlmock) {
result := sqlmock.NewResult(0, 0)
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*DROP COLUMN `not_exists`").WillReturnError(errors.New(`Temp-DB-Error`))
mock.ExpectRollback()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*DROP COLUMN `not_exists`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^(?is)ALTER TABLE `test`.*DROP KEY `phone`").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^DROP TABLE ").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^DROP PROCEDURE ").WillReturnResult(result)
mock.ExpectCommit()
mock.ExpectBegin()
mock.ExpectExec("^DELETE FROM ").WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。