refactor: 集中显式注入并归位凭据领域规则
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package credential_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.ddupan.top/panxiao81/ayatori/internal/database/domain/binding"
|
||||
credential "git.ddupan.top/panxiao81/ayatori/internal/database/domain/credential"
|
||||
)
|
||||
|
||||
const (
|
||||
targetTestApplication = "sampleapp"
|
||||
targetTestInstance = "test-instance"
|
||||
)
|
||||
|
||||
func TestPreparationTarget(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
name string
|
||||
change func(*credential.Target)
|
||||
want credential.Phase
|
||||
}{
|
||||
{"完整绑定", func(*credential.Target) {}, credential.Pending},
|
||||
{"单向绑定", func(target *credential.Target) { target.Tenant.Database = nil }, credential.Unavailable},
|
||||
{"旧租户身份", func(target *credential.Target) { target.Tenant.Identity.UID = "new" }, credential.Conflict},
|
||||
{"旧实例身份", func(target *credential.Target) { target.Instance.Identity.UID = "new" }, credential.Conflict},
|
||||
{"资源删除", func(target *credential.Target) { target.Database.Deleting = true }, credential.Stopped},
|
||||
{"申请删除", func(target *credential.Target) { target.Tenant.Deleting = true }, credential.Stopped},
|
||||
{"Released", func(target *credential.Target) { target.Database.Phase = "Released" }, credential.Stopped},
|
||||
{"缺少保护", func(target *credential.Target) { target.DatabaseProtected = false }, credential.Stopped},
|
||||
{"实例未就绪", func(target *credential.Target) { target.Instance.Ready = false }, credential.Unavailable},
|
||||
{"目标变化", func(target *credential.Target) { target.Database.LoginRole = "other" }, credential.Conflict},
|
||||
} {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
tenantID := binding.TenantIdentity{Namespace: "apps", Name: targetTestApplication, UID: "tenant"}
|
||||
databaseID := binding.Identity{Name: binding.DynamicDatabaseName(tenantID.UID), UID: "database"}
|
||||
target := credential.Target{
|
||||
Database: binding.Database{Identity: databaseID, Tenant: &tenantID, Instance: targetTestInstance, InstanceUID: "instance-id", Name: targetTestApplication, LoginRole: targetTestApplication, Source: "Provision"},
|
||||
Tenant: &binding.Tenant{Identity: tenantID, Database: &databaseID, Phase: binding.Bound, Request: binding.Request{Provision: &binding.ProvisionRequest{Instance: targetTestInstance}}},
|
||||
Instance: &credential.Instance{Identity: binding.Identity{Name: targetTestInstance, UID: "instance-id"}, Ready: true},
|
||||
DatabaseProtected: true, TenantProtected: true,
|
||||
}
|
||||
test.change(&target)
|
||||
issue := target.Check()
|
||||
if test.want == credential.Pending {
|
||||
if issue != nil {
|
||||
t.Fatalf("有效绑定被拒绝: %s", issue.Message)
|
||||
}
|
||||
} else if issue == nil || issue.Phase != test.want {
|
||||
t.Fatal("领域资格判定不符")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user