fix(#125): reject duplicate migration versions
This commit is contained in:
@@ -32,6 +32,9 @@ func (e *Migration) SetDb(db *gorm.DB) {
|
||||
func (e *Migration) SetVersion(k string, f func(db *gorm.DB, version string) error) {
|
||||
e.mutex.Lock()
|
||||
defer e.mutex.Unlock()
|
||||
if _, exists := e.version[k]; exists {
|
||||
panic(fmt.Sprintf("duplicate migration version registered: %s", k))
|
||||
}
|
||||
e.version[k] = f
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package migration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
@@ -123,3 +124,19 @@ func TestMigrateRunsPendingVersions(t *testing.T) {
|
||||
t.Fatalf("汇总不对: %q", output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetVersionRejectsDuplicateRegistration(t *testing.T) {
|
||||
migration := &Migration{version: map[string]func(*gorm.DB, string) error{}}
|
||||
migration.SetVersion("0000000000001", func(*gorm.DB, string) error { return nil })
|
||||
|
||||
defer func() {
|
||||
value := recover()
|
||||
if value == nil {
|
||||
t.Fatal("重复迁移版本不应静默覆盖")
|
||||
}
|
||||
if !strings.Contains(fmt.Sprint(value), "duplicate migration version registered: 0000000000001") {
|
||||
t.Fatalf("重复版本错误不明确: %v", value)
|
||||
}
|
||||
}()
|
||||
migration.SetVersion("0000000000001", func(*gorm.DB, string) error { return nil })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user