Skip to content

Commit 1043bff

Browse files
committed
Add repo host volume tests to TestStoreDesiredRequest
Update test and refactor to support different volume types.
1 parent 2cd589f commit 1043bff

File tree

1 file changed

+115
-78
lines changed

1 file changed

+115
-78
lines changed

internal/controller/postgrescluster/autogrow_test.go

Lines changed: 115 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -54,88 +54,125 @@ func TestStoreDesiredRequest(t *testing.T) {
5454
}, {
5555
Name: "blue",
5656
Replicas: initialize.Int32(1),
57-
}}}}
58-
59-
t.Run("BadRequestNoBackup", func(t *testing.T) {
60-
recorder := events.NewRecorder(t, runtime.Scheme)
61-
reconciler := &Reconciler{Recorder: recorder}
62-
ctx, logs := setupLogCapture(ctx)
63-
64-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "red", "woot", "")
65-
66-
assert.Equal(t, value, "")
67-
assert.Equal(t, len(recorder.Events), 0)
68-
assert.Equal(t, len(*logs), 1)
69-
assert.Assert(t, cmp.Contains((*logs)[0], "Unable to parse pgData volume request from status"))
70-
})
71-
72-
t.Run("BadRequestWithBackup", func(t *testing.T) {
73-
recorder := events.NewRecorder(t, runtime.Scheme)
74-
reconciler := &Reconciler{Recorder: recorder}
75-
ctx, logs := setupLogCapture(ctx)
76-
77-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "red", "foo", "1Gi")
78-
79-
assert.Equal(t, value, "1Gi")
80-
assert.Equal(t, len(recorder.Events), 0)
81-
assert.Equal(t, len(*logs), 1)
82-
assert.Assert(t, cmp.Contains((*logs)[0], "Unable to parse pgData volume request from status (foo) for rhino/red"))
83-
})
84-
85-
t.Run("NoLimitNoEvent", func(t *testing.T) {
86-
recorder := events.NewRecorder(t, runtime.Scheme)
87-
reconciler := &Reconciler{Recorder: recorder}
88-
ctx, logs := setupLogCapture(ctx)
89-
90-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "blue", "1Gi", "")
91-
92-
assert.Equal(t, value, "1Gi")
93-
assert.Equal(t, len(*logs), 0)
94-
assert.Equal(t, len(recorder.Events), 0)
95-
})
96-
97-
t.Run("BadBackupRequest", func(t *testing.T) {
98-
recorder := events.NewRecorder(t, runtime.Scheme)
99-
reconciler := &Reconciler{Recorder: recorder}
100-
ctx, logs := setupLogCapture(ctx)
101-
102-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "red", "2Gi", "bar")
103-
104-
assert.Equal(t, value, "2Gi")
105-
assert.Equal(t, len(*logs), 1)
106-
assert.Assert(t, cmp.Contains((*logs)[0], "Unable to parse pgData volume request from status backup (bar) for rhino/red"))
107-
assert.Equal(t, len(recorder.Events), 1)
108-
assert.Equal(t, recorder.Events[0].Regarding.Name, cluster.Name)
109-
assert.Equal(t, recorder.Events[0].Reason, "VolumeAutoGrow")
110-
assert.Equal(t, recorder.Events[0].Note, "pgData volume expansion to 2Gi requested for rhino/red.")
111-
})
112-
113-
t.Run("ValueUpdateWithEvent", func(t *testing.T) {
114-
recorder := events.NewRecorder(t, runtime.Scheme)
115-
reconciler := &Reconciler{Recorder: recorder}
116-
ctx, logs := setupLogCapture(ctx)
117-
118-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "red", "1Gi", "")
57+
}},
58+
Backups: v1beta1.Backups{
59+
PGBackRest: v1beta1.PGBackRestArchive{
60+
Repos: []v1beta1.PGBackRestRepo{{
61+
Name: "repo1",
62+
Volume: &v1beta1.RepoPVC{
63+
VolumeClaimSpec: v1beta1.VolumeClaimSpec{
64+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
65+
Resources: corev1.VolumeResourceRequirements{
66+
Limits: map[corev1.ResourceName]resource.Quantity{
67+
corev1.ResourceStorage: resource.MustParse("1Gi"),
68+
}}},
69+
},
70+
}, {
71+
Name: "repo2",
72+
}}},
73+
},
74+
},
75+
}
11976

120-
assert.Equal(t, value, "1Gi")
121-
assert.Equal(t, len(*logs), 0)
122-
assert.Equal(t, len(recorder.Events), 1)
123-
assert.Equal(t, recorder.Events[0].Regarding.Name, cluster.Name)
124-
assert.Equal(t, recorder.Events[0].Reason, "VolumeAutoGrow")
125-
assert.Equal(t, recorder.Events[0].Note, "pgData volume expansion to 1Gi requested for rhino/red.")
126-
})
77+
testCases := []struct {
78+
tcName string
79+
Voltype string
80+
host string
81+
desiredRequest string
82+
desiredRequestBackup string
83+
expectedValue string
84+
expectedNumLogs int
85+
expectedLog string
86+
expectedNumEvents int
87+
expectedEvent string
88+
}{{
89+
tcName: "PGData-BadRequestNoBackup",
90+
Voltype: "pgData", host: "red",
91+
desiredRequest: "woot", desiredRequestBackup: "", expectedValue: "",
92+
expectedNumEvents: 0, expectedNumLogs: 1,
93+
expectedLog: "Unable to parse pgData volume request from status (woot) for rhino/red",
94+
}, {
95+
tcName: "PGData-BadRequestWithBackup",
96+
Voltype: "pgData", host: "red",
97+
desiredRequest: "foo", desiredRequestBackup: "1Gi", expectedValue: "1Gi",
98+
expectedNumEvents: 0, expectedNumLogs: 1,
99+
expectedLog: "Unable to parse pgData volume request from status (foo) for rhino/red",
100+
}, {
101+
tcName: "PGData-NoLimitNoEvent",
102+
Voltype: "pgData", host: "blue",
103+
desiredRequest: "1Gi", desiredRequestBackup: "", expectedValue: "1Gi",
104+
expectedNumEvents: 0, expectedNumLogs: 0,
105+
}, {
106+
tcName: "PGData-BadBackupRequest",
107+
Voltype: "pgData", host: "red",
108+
desiredRequest: "2Gi", desiredRequestBackup: "bar", expectedValue: "2Gi",
109+
expectedNumEvents: 1, expectedEvent: "pgData volume expansion to 2Gi requested for rhino/red.",
110+
expectedNumLogs: 1, expectedLog: "Unable to parse pgData volume request from status backup (bar) for rhino/red",
111+
}, {
112+
tcName: "PGData-ValueUpdateWithEvent",
113+
Voltype: "pgData", host: "red",
114+
desiredRequest: "1Gi", desiredRequestBackup: "", expectedValue: "1Gi",
115+
expectedNumEvents: 1, expectedEvent: "pgData volume expansion to 1Gi requested for rhino/red.",
116+
expectedNumLogs: 0,
117+
}, {
118+
tcName: "Repo-BadRequestNoBackup",
119+
Voltype: "repo1", host: "repo-host",
120+
desiredRequest: "woot", desiredRequestBackup: "", expectedValue: "",
121+
expectedNumEvents: 0, expectedNumLogs: 1,
122+
expectedLog: "Unable to parse repo1 volume request from status (woot) for rhino/repo-host",
123+
}, {
124+
tcName: "Repo-BadRequestWithBackup",
125+
Voltype: "repo1", host: "repo-host",
126+
desiredRequest: "foo", desiredRequestBackup: "1Gi", expectedValue: "1Gi",
127+
expectedNumEvents: 0, expectedNumLogs: 1,
128+
expectedLog: "Unable to parse repo1 volume request from status (foo) for rhino/repo-host",
129+
}, {
130+
tcName: "Repo-NoLimitNoEvent",
131+
Voltype: "repo2", host: "repo-host",
132+
desiredRequest: "1Gi", desiredRequestBackup: "", expectedValue: "1Gi",
133+
expectedNumEvents: 0, expectedNumLogs: 0,
134+
}, {
135+
tcName: "Repo-BadBackupRequest",
136+
Voltype: "repo1", host: "repo-host",
137+
desiredRequest: "2Gi", desiredRequestBackup: "bar", expectedValue: "2Gi",
138+
expectedNumEvents: 1, expectedEvent: "repo1 volume expansion to 2Gi requested for rhino/repo-host.",
139+
expectedNumLogs: 1, expectedLog: "Unable to parse repo1 volume request from status backup (bar) for rhino/repo-host",
140+
}, {
141+
tcName: "Repo-ValueUpdateWithEvent",
142+
Voltype: "repo1", host: "repo-host",
143+
desiredRequest: "1Gi", desiredRequestBackup: "", expectedValue: "1Gi",
144+
expectedNumEvents: 1, expectedEvent: "repo1 volume expansion to 1Gi requested for rhino/repo-host.",
145+
expectedNumLogs: 0,
146+
}}
127147

128-
t.Run("NoLimitNoEvent", func(t *testing.T) {
129-
recorder := events.NewRecorder(t, runtime.Scheme)
130-
reconciler := &Reconciler{Recorder: recorder}
131-
ctx, logs := setupLogCapture(ctx)
148+
for _, tc := range testCases {
149+
t.Run(tc.tcName, func(t *testing.T) {
150+
recorder := events.NewRecorder(t, runtime.Scheme)
151+
reconciler := &Reconciler{Recorder: recorder}
152+
ctx, logs := setupLogCapture(ctx)
132153

133-
value := reconciler.storeDesiredRequest(ctx, &cluster, "pgData", "blue", "1Gi", "")
154+
value := reconciler.storeDesiredRequest(
155+
ctx,
156+
&cluster,
157+
tc.Voltype,
158+
tc.host,
159+
tc.desiredRequest,
160+
tc.desiredRequestBackup,
161+
)
162+
assert.Equal(t, value, tc.expectedValue)
163+
assert.Equal(t, len(recorder.Events), tc.expectedNumEvents)
164+
if tc.expectedNumEvents == 1 {
165+
assert.Equal(t, recorder.Events[0].Regarding.Name, cluster.Name)
166+
assert.Equal(t, recorder.Events[0].Reason, "VolumeAutoGrow")
167+
assert.Equal(t, recorder.Events[0].Note, tc.expectedEvent)
168+
}
169+
assert.Equal(t, len(*logs), tc.expectedNumLogs)
170+
if tc.expectedNumLogs == 1 {
171+
assert.Assert(t, cmp.Contains((*logs)[0], tc.expectedLog))
172+
}
173+
})
134174

135-
assert.Equal(t, value, "1Gi")
136-
assert.Equal(t, len(*logs), 0)
137-
assert.Equal(t, len(recorder.Events), 0)
138-
})
175+
}
139176
}
140177

141178
func TestLimitIsSet(t *testing.T) {

0 commit comments

Comments
 (0)