80 lines
2.5 KiB
Go
80 lines
2.5 KiB
Go
package application
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"git.ddupan.top/panxiao81/ayatori/internal/database/domain/instance"
|
|
)
|
|
|
|
func TestInstanceFailurePresentation(t *testing.T) {
|
|
cases := []struct {
|
|
err error
|
|
reason string
|
|
}{
|
|
{ErrAuthentication, "AuthenticationFailed"},
|
|
{ErrCredentialsInvalid, "InvalidCredentials"},
|
|
{ErrCredentialsChanged, "CredentialsChanged"},
|
|
{ErrCredentialsUnavailable, instanceDependencyUnavailable},
|
|
{context.DeadlineExceeded, instanceDependencyUnavailable},
|
|
{errors.New("private backend detail"), instanceDependencyUnavailable},
|
|
}
|
|
for _, test := range cases {
|
|
reason, message := observationFailure(test.err)
|
|
if reason != test.reason || message == "" || message == test.err.Error() {
|
|
t.Fatal("观察失败没有安全且可诊断的状态")
|
|
}
|
|
}
|
|
for _, failure := range []instance.Failure{
|
|
instance.NoFailure, instance.ObservationIncomplete, instance.DependencyUnavailable,
|
|
instance.AuthenticationFailed, instance.InsufficientPrivileges,
|
|
} {
|
|
reason, message := managementResult(failure)
|
|
if reason == "" || message == "" || (reason == "ManagementReady") != (failure == instance.NoFailure) {
|
|
t.Fatal("领域能力判定与状态不一致")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMetadataCannotEstablishManagementReadiness(t *testing.T) {
|
|
source := &sourceStub{}
|
|
source.credentials, _ = NewCredentials("test", serviceTestPassword)
|
|
connector := &connectorStub{}
|
|
service, err := NewInstanceService(source, connector)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer service.Close()
|
|
target := serviceTarget(t, "uid", "postgres.test", "management", 1)
|
|
if _, err := service.ObserveMetadata(t.Context(), target); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
connector.databases[0].metadata.Management = instance.ManagementChecks{
|
|
Connection: instance.CheckPassed, Metadata: instance.CheckPassed,
|
|
Roles: instance.CheckPassed, Databases: instance.CheckPassed,
|
|
Grants: instance.CheckPassed, Extensions: instance.CheckPassed,
|
|
}
|
|
observation, err := service.ObserveMetadata(t.Context(), target)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
capabilities, err := observation.Capabilities()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
aggregate, err := instance.Reconstitute(target, instance.Snapshot{}, false)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := aggregate.BeginValidation(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := aggregate.AssessManagement(capabilities); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if aggregate.Snapshot().Failure != instance.ObservationIncomplete {
|
|
t.Fatal("metadata 入口不应携带完整管理检查")
|
|
}
|
|
}
|