refactor: assemble and reuse Instance dependencies
This commit is contained in:
@@ -28,7 +28,7 @@ import (
|
||||
databasev1alpha1 "git.ddupan.top/panxiao81/postgresql-tenant-operator/api/v1alpha1"
|
||||
)
|
||||
|
||||
type fakeInstanceInitializer struct {
|
||||
type fakeInstances struct {
|
||||
validateVersion string
|
||||
registryVersion string
|
||||
err error
|
||||
@@ -36,18 +36,20 @@ type fakeInstanceInitializer struct {
|
||||
|
||||
const testPostgreSQLVersion = "17.6"
|
||||
|
||||
func (f fakeInstanceInitializer) Validate(context.Context, *databasev1alpha1.PostgreSQLInstance) (string, error) {
|
||||
func (f fakeInstances) Forget(string) {}
|
||||
|
||||
func (f fakeInstances) Validate(context.Context, *databasev1alpha1.PostgreSQLInstance) (string, error) {
|
||||
return f.validateVersion, f.err
|
||||
}
|
||||
|
||||
func (f fakeInstanceInitializer) InitializeRegistry(context.Context, *databasev1alpha1.PostgreSQLInstance) (string, error) {
|
||||
func (f fakeInstances) InitializeRegistry(context.Context, *databasev1alpha1.PostgreSQLInstance) (string, error) {
|
||||
return f.registryVersion, f.err
|
||||
}
|
||||
|
||||
var _ = Describe("phase handler state machines", func() {
|
||||
It("persists validation intent before touching unavailable dependencies", func() {
|
||||
instance := &databasev1alpha1.PostgreSQLInstance{}
|
||||
machine := newInstanceStateMachine(fakeInstanceInitializer{err: errors.New("must not be called")})
|
||||
machine := newInstanceStateMachine(fakeInstances{err: errors.New("must not be called")})
|
||||
result, err := machine.reconcile(context.Background(), instance)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(result.RequeueAfter).To(BeNumerically(">", 0))
|
||||
@@ -62,7 +64,7 @@ var _ = Describe("phase handler state machines", func() {
|
||||
Phase: databasev1alpha1.PostgreSQLInstancePhaseReady, ObservedGeneration: 3,
|
||||
},
|
||||
}
|
||||
machine := newInstanceStateMachine(fakeInstanceInitializer{err: errors.New("must not be called")})
|
||||
machine := newInstanceStateMachine(fakeInstances{err: errors.New("must not be called")})
|
||||
_, err := machine.reconcile(context.Background(), instance)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(instance.Status.Phase).To(Equal(databasev1alpha1.PostgreSQLInstancePhaseValidating))
|
||||
@@ -76,12 +78,12 @@ var _ = Describe("phase handler state machines", func() {
|
||||
Phase: databasev1alpha1.PostgreSQLInstancePhaseReady, ObservedGeneration: 3,
|
||||
},
|
||||
}
|
||||
machine := newInstanceStateMachine(fakeInstanceInitializer{err: errors.New("unavailable")})
|
||||
machine := newInstanceStateMachine(fakeInstances{err: errors.New("unavailable")})
|
||||
_, err := machine.reconcile(context.Background(), instance)
|
||||
Expect(err).To(MatchError("unavailable"))
|
||||
Expect(instance.Status.Phase).To(Equal(databasev1alpha1.PostgreSQLInstancePhaseValidating))
|
||||
Expect(instance.Status.Conditions[0].Status).To(Equal(metav1.ConditionFalse))
|
||||
machine.initializer = fakeInstanceInitializer{
|
||||
machine.instances = fakeInstances{
|
||||
validateVersion: testPostgreSQLVersion,
|
||||
registryVersion: testPostgreSQLVersion,
|
||||
}
|
||||
@@ -102,7 +104,7 @@ var _ = Describe("phase handler state machines", func() {
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 3},
|
||||
Status: databasev1alpha1.PostgreSQLInstanceStatus{Phase: databasev1alpha1.PostgreSQLInstancePhaseValidating},
|
||||
}
|
||||
machine := newInstanceStateMachine(fakeInstanceInitializer{
|
||||
machine := newInstanceStateMachine(fakeInstances{
|
||||
validateVersion: testPostgreSQLVersion,
|
||||
registryVersion: testPostgreSQLVersion,
|
||||
})
|
||||
@@ -124,7 +126,7 @@ var _ = Describe("phase handler state machines", func() {
|
||||
ObjectMeta: metav1.ObjectMeta{Generation: 2},
|
||||
Status: databasev1alpha1.PostgreSQLInstanceStatus{Phase: databasev1alpha1.PostgreSQLInstancePhaseValidating},
|
||||
}
|
||||
machine := newInstanceStateMachine(fakeInstanceInitializer{err: errors.New("unavailable")})
|
||||
machine := newInstanceStateMachine(fakeInstances{err: errors.New("unavailable")})
|
||||
_, err := machine.reconcile(context.Background(), instance)
|
||||
Expect(err).To(MatchError("unavailable"))
|
||||
Expect(instance.Status.Phase).To(Equal(databasev1alpha1.PostgreSQLInstancePhaseValidating))
|
||||
@@ -135,7 +137,7 @@ var _ = Describe("phase handler state machines", func() {
|
||||
|
||||
DescribeTable("dispatches Instance phases",
|
||||
func(instance *databasev1alpha1.PostgreSQLInstance, expected databasev1alpha1.PostgreSQLInstancePhase, hasMessage bool) {
|
||||
_, err := newInstanceStateMachine(nil).reconcile(context.Background(), instance)
|
||||
_, err := newInstanceStateMachine(fakeInstances{}).reconcile(context.Background(), instance)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(instance.Status.Phase).To(Equal(expected))
|
||||
if hasMessage {
|
||||
@@ -149,12 +151,12 @@ var _ = Describe("phase handler state machines", func() {
|
||||
databasev1alpha1.PostgreSQLInstancePhaseValidating,
|
||||
true,
|
||||
),
|
||||
Entry("keeps an active phase until its handler can observe dependencies",
|
||||
Entry("initializes the registry and reaches Ready",
|
||||
&databasev1alpha1.PostgreSQLInstance{Status: databasev1alpha1.PostgreSQLInstanceStatus{
|
||||
Phase: databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry,
|
||||
}},
|
||||
databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry,
|
||||
false,
|
||||
databasev1alpha1.PostgreSQLInstancePhaseReady,
|
||||
true,
|
||||
),
|
||||
Entry("routes deletion independently of the previous phase",
|
||||
deletingInstance(),
|
||||
|
||||
Reference in New Issue
Block a user