feat: 接通 PostgreSQL 角色与数据库创建闭环
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package provisioning
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestResume(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
name string
|
||||
state State
|
||||
resume bool
|
||||
}{
|
||||
{"初次", State{}, true},
|
||||
{"角色创建不确定", State{Phase: CreatingRole}, false},
|
||||
{"库创建不确定", State{RoleOID: 11, Phase: CreatingDatabase}, false},
|
||||
{"已确认角色", State{RoleOID: 11, Phase: Pending}, true},
|
||||
{"已确认资源暂不可用", State{RoleOID: 11, DatabaseOID: 22, Phase: Unavailable}, true},
|
||||
{"冲突保持", State{RoleOID: 11, Phase: Conflict, Message: "首次诊断"}, false},
|
||||
} {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
state, resume := test.state.Resume()
|
||||
if resume != test.resume || state.RoleOID != test.state.RoleOID || state.DatabaseOID != test.state.DatabaseOID {
|
||||
t.Fatal("恢复决策丢失确认或错误放行")
|
||||
}
|
||||
if !resume && state.Phase != Conflict {
|
||||
t.Fatal("不确定创建未转冲突")
|
||||
}
|
||||
if test.state.Phase == Conflict && state != test.state {
|
||||
t.Fatal("冲突诊断被覆盖")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestObservedIdentity(t *testing.T) {
|
||||
state := State{RoleOID: 11, DatabaseOID: 22}
|
||||
good := Observation{RoleOID: 11, DatabaseOID: 22, RoleSafe: true, OwnerOID: 11}
|
||||
if err := state.Check(good); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, observed := range []Observation{
|
||||
{}, {RoleOID: 12, DatabaseOID: 22, RoleSafe: true, OwnerOID: 12},
|
||||
{RoleOID: 11, DatabaseOID: 23, RoleSafe: true, OwnerOID: 11},
|
||||
{RoleOID: 11, DatabaseOID: 22, RoleSafe: false, OwnerOID: 11},
|
||||
{RoleOID: 11, DatabaseOID: 22, RoleSafe: true, OwnerOID: 99},
|
||||
} {
|
||||
if state.Check(observed) == nil {
|
||||
t.Fatal("对象身份或权限漂移被接受")
|
||||
}
|
||||
}
|
||||
if (State{}).Check(good) == nil {
|
||||
t.Fatal("未确认同名对象被认领")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user