Skip to content

Commit f9cf8c7

Browse files
author
lamai93
committed
Added test for volume claim template resizing.
1 parent 93a2ad7 commit f9cf8c7

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
good Test: test1a, Desc: Deployment of mode single (development)
2+
good Test: test1b, Desc: Deployment of mode active/failover (development)
3+
good Test: test1c, Desc: Deployment of mode cluster (development, enterprise)
4+
good Test: test1d, Desc: Deployment of mode cluster with sync (development, enterprise)
5+
good Test: test2a, Desc: Scale an active failover deployment (enterprise, development)
6+
good Test: test2b, Desc: Scale a cluster deployment (development, enterprise)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: "database.arangodb.com/v1alpha"
2+
kind: "ArangoDeployment"
3+
metadata:
4+
name: "acceptance-cluster"
5+
spec:
6+
environment: Development
7+
image: arangodb/enterprise-preview:3.4.5
8+
disableIPv6: false
9+
externalAccess:
10+
type: LoadBalancer
11+
license:
12+
secretName: arangodb-license-key
13+
mode: Cluster

tests/persistent_volumes_test.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,90 @@ func TestPVCResize(t *testing.T) {
171171
}
172172

173173
}
174+
175+
func TestPVCTemplateResize(t *testing.T) {
176+
longOrSkip(t)
177+
178+
k8sNameSpace := getNamespace(t)
179+
k8sClient := mustNewKubeClient(t)
180+
181+
mode := api.DeploymentModeCluster
182+
engine := api.StorageEngineRocksDB
183+
184+
size10GB, _ := resource.ParseQuantity("10Gi")
185+
size08GB, _ := resource.ParseQuantity("8Gi")
186+
187+
deploymentClient := kubeArangoClient.MustNewInCluster()
188+
deploymentTemplate := newDeployment(strings.Replace(fmt.Sprintf("trsz-%s-%s-%s", mode[:2], engine[:2], uniuri.NewLen(4)), ".", "", -1))
189+
deploymentTemplate.Spec.Mode = api.NewMode(mode)
190+
deploymentTemplate.Spec.StorageEngine = api.NewStorageEngine(engine)
191+
deploymentTemplate.Spec.TLS = api.TLSSpec{}
192+
deploymentTemplate.Spec.SetDefaults(deploymentTemplate.GetName()) // this must be last
193+
assert.NoError(t, deploymentTemplate.Spec.Validate())
194+
assert.NotNil(t, deploymentTemplate.Spec.DBServers.VolumeClaimTemplate)
195+
deploymentTemplate.Spec.DBServers.VolumeClaimTemplate.Spec.Resources.Requests[corev1.ResourceStorage] = size08GB
196+
197+
// Create deployment
198+
_, err := deploymentClient.DatabaseV1alpha().ArangoDeployments(k8sNameSpace).Create(deploymentTemplate)
199+
defer removeDeployment(deploymentClient, deploymentTemplate.GetName(), k8sNameSpace)
200+
assert.NoError(t, err, "failed to create deplyment: %s", err)
201+
202+
depl, err := waitUntilDeployment(deploymentClient, deploymentTemplate.GetName(), k8sNameSpace, deploymentIsReady())
203+
assert.NoError(t, err, fmt.Sprintf("Deployment not running in time: %s", err))
204+
205+
// Get list of all pvcs for dbservers
206+
for _, m := range depl.Status.Members.DBServers {
207+
pvc, err := k8sClient.CoreV1().PersistentVolumeClaims(k8sNameSpace).Get(m.PersistentVolumeClaimName, metav1.GetOptions{})
208+
assert.NoError(t, err, "failed to get pvc: %s", err)
209+
volumeSize, ok := pvc.Spec.Resources.Requests[corev1.ResourceStorage]
210+
assert.True(t, ok, "pvc does not have storage resource")
211+
assert.True(t, volumeSize.Cmp(size08GB) == 0, "wrong volume size: expected: %s, found: %s", size08GB.String(), volumeSize.String())
212+
}
213+
214+
// Update the deployment
215+
// Try to change image version
216+
depl, err = updateDeployment(deploymentClient, deploymentTemplate.GetName(), k8sNameSpace,
217+
func(depl *api.DeploymentSpec) {
218+
depl.DBServers.VolumeClaimTemplate.Spec.Resources.Requests[corev1.ResourceStorage] = size10GB
219+
})
220+
if err != nil {
221+
t.Fatalf("Failed to update the deployment")
222+
} else {
223+
t.Log("Updated deployment")
224+
}
225+
226+
if err := retry.Retry(func() error {
227+
// Get list of all pvcs for dbservers and check for new size
228+
for _, m := range depl.Status.Members.DBServers {
229+
pvc, err := k8sClient.CoreV1().PersistentVolumeClaims(k8sNameSpace).Get(m.PersistentVolumeClaimName, metav1.GetOptions{})
230+
if err != nil {
231+
return err
232+
}
233+
volumeSize, ok := pvc.Spec.Resources.Requests[corev1.ResourceStorage]
234+
if !ok {
235+
return fmt.Errorf("pvc does not have storage resource")
236+
}
237+
if volumeSize.Cmp(size10GB) != 0 {
238+
return fmt.Errorf("wrong pvc size: expected: %s, found: %s", size10GB.String(), volumeSize.String())
239+
}
240+
volume, err := k8sClient.CoreV1().PersistentVolumes().Get(pvc.Spec.VolumeName, metav1.GetOptions{})
241+
if err != nil {
242+
return err
243+
}
244+
volumeSize, ok = volume.Spec.Capacity[corev1.ResourceStorage]
245+
if !ok {
246+
return fmt.Errorf("pv does not have storage resource")
247+
}
248+
if volumeSize.Cmp(size10GB) != 0 {
249+
return fmt.Errorf("wrong volume size: expected: %s, found: %s", size10GB.String(), volumeSize.String())
250+
}
251+
if k8sutil.IsPersistentVolumeClaimFileSystemResizePending(pvc) {
252+
return fmt.Errorf("persistent volume claim file system resize pending")
253+
}
254+
}
255+
return nil
256+
}, 5*time.Minute); err != nil {
257+
t.Fatalf("PVCs not resized: %s", err.Error())
258+
}
259+
260+
}

0 commit comments

Comments
 (0)