Skip to content

Commit 6086a21

Browse files
committed
More tests & platforms
1 parent 11f310a commit 6086a21

File tree

2 files changed

+169
-10
lines changed

2 files changed

+169
-10
lines changed

docs/design/acceptance_test.md

Lines changed: 157 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,14 @@ kubectl apply -f examples/arango-local-storage.yaml
4646

4747
The basis tests are executed on every platform with various images:
4848

49-
Run the following tests for the following images:
49+
Run the following tests with the following images:
5050

5151
- Community 3.3.10
5252
- Enterprise 3.3.10
5353

54+
For every tests, one of these images can be chosen, as long as each image
55+
is used in a test at least once.
56+
5457
### Test 1a: Create single server deployment
5558

5659
Create an `ArangoDeployment` of mode `Single`.
@@ -87,6 +90,21 @@ Hint: Use `tests/acceptance/cluster.yaml`.
8790
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
8891
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
8992

93+
### Test 1d: Create cluster deployment with dc2dc
94+
95+
This test requires the use of the enterprise image.
96+
97+
Create an `ArangoDeployment` of mode `Cluster` and dc2dc enabled.
98+
99+
Hint: Derive `tests/acceptance/cluster.yaml`.
100+
101+
- [ ] The deployment must start
102+
- [ ] The deployment must yield 15 `Pods`
103+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
104+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
105+
- [ ] The deployment must yield a `Service` named `<deployment-name>-sync`
106+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
107+
90108
### Test 2a: Scale an active failover deployment
91109

92110
Create an `ArangoDeployment` of mode `ActiveFailover`.
@@ -290,7 +308,7 @@ Delete a `Pod` of the deployment that contains a single server.
290308

291309
Create an `ArangoDeployment` of mode `Cluster`.
292310

293-
Hint: Use from `tests/acceptance/single.yaml`.
311+
Hint: Use from `tests/acceptance/cluster.yaml`.
294312

295313
- [ ] The deployment must start
296314
- [ ] The deployment must yield 9 `Pods`
@@ -315,13 +333,142 @@ Delete a `Pod` of the deployment that contains an coordinator.
315333
requests targeting the restarting coordinator.
316334
- [ ] The `Pod` must be restarted
317335

318-
## Further ideas to be discussed
336+
### Test 6a: Test `Node` reboot on single servers
337+
338+
Create an `ArangoDeployment` of mode `Single`.
339+
340+
Hint: Use from `tests/acceptance/single.yaml`.
341+
342+
- [ ] The deployment must start
343+
- [ ] The deployment must yield 1 `Pod`
344+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
345+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
346+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
347+
348+
Reboot the `Node` of the deployment that contains the single server.
349+
350+
- [ ] The `Pod` running on the `Node` must be restarted
351+
- [ ] After the `Pod` has restarted, the server must have the same data and be responsive again
352+
353+
### Test 6b: Test `Node` reboot on active failover
354+
355+
Create an `ArangoDeployment` of mode `ActiveFailover` with an environment of `Production`.
356+
357+
Hint: Use from `tests/acceptance/activefailover.yaml`.
358+
359+
- [ ] The deployment must start
360+
- [ ] The deployment must yield 5 `Pods`
361+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
362+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
363+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
364+
365+
Reboot a `Node`.
366+
367+
- [ ] While the `Node` is restarting, the cluster must still respond to requests (R/W)
368+
- [ ] All `Pods` on the `Node` must be restarted
369+
370+
### Test 6c: Test `Node` reboot on clusters
371+
372+
Create an `ArangoDeployment` of mode `Cluster` with an environment of `Production`.
373+
374+
Hint: Use from `tests/acceptance/cluster.yaml`.
375+
376+
- [ ] The deployment must start
377+
- [ ] The deployment must yield 9 `Pods`
378+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
379+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
380+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
381+
382+
Reboot a `Node`.
383+
384+
- [ ] While the `Node` is restarting, the cluster must still respond to requests (R/W)
385+
- [ ] All `Pods` on the `Node` must be restarted
386+
387+
### Test 6d: Test `Node` removal on single servers
388+
389+
This test is only valid when `StorageClass` is used that provides network attached `PersistentVolumes`.
390+
391+
Create an `ArangoDeployment` of mode `Single`.
392+
393+
Hint: Use from `tests/acceptance/single.yaml`.
394+
395+
- [ ] The deployment must start
396+
- [ ] The deployment must yield 1 `Pod`
397+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
398+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
399+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
400+
401+
Remove the `Node` containing the deployment from the Kubernetes cluster.
402+
403+
- [ ] The `Pod` running on the `Node` must be restarted on another `Node`
404+
- [ ] After the `Pod` has restarted, the server must have the same data and be responsive again
405+
406+
### Test 6e: Test `Node` removal on active failover
407+
408+
Create an `ArangoDeployment` of mode `ActiveFailover` with an environment of `Production`.
409+
410+
Hint: Use from `tests/acceptance/activefailover.yaml`.
411+
412+
- [ ] The deployment must start
413+
- [ ] The deployment must yield 5 `Pods`
414+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
415+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
416+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
417+
418+
Remove a `Node` containing the `Pods` of the deployment from the Kubernetes cluster.
419+
420+
- [ ] While the `Pods` are being restarted on new `Nodes`, the cluster must still respond to requests (R/W)
421+
- [ ] The `Pods` running on the `Node` must be restarted on another `Node`
422+
- [ ] After the `Pods` have restarted, the server must have the same data and be responsive again
423+
424+
### Test 6f: Test `Node` removal on clusters
425+
426+
This test is only valid when:
427+
428+
- A `StorageClass` is used that provides network attached `PersistentVolumes`
429+
- or all collections have a replication factor of 2 or higher
430+
431+
Create an `ArangoDeployment` of mode `Cluster` with an environment of `Production`.
432+
433+
Hint: Use from `tests/acceptance/cluster.yaml`.
434+
435+
- [ ] The deployment must start
436+
- [ ] The deployment must yield 9 `Pods`
437+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
438+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
439+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
440+
441+
Remove a `Node` containing the `Pods` of the deployment from the Kubernetes cluster.
442+
443+
- [ ] While the `Pods` are being restarted on new `Nodes`, the cluster must still respond to requests (R/W)
444+
- [ ] The `Pods` running on the `Node` must be restarted on another `Node`
445+
- [ ] After the `Pods` have restarted, the server must have the same data and be responsive again
446+
447+
### Test 6g: Test `Node` removal on clusters with replication factor 1
448+
449+
This test is only valid when:
450+
451+
- A `StorageClass` is used that provides `Node` local `PersistentVolumes`
452+
- and at least some collections have a replication factor of 1
453+
454+
Create an `ArangoDeployment` of mode `Cluster` with an environment of `Production`.
455+
456+
Hint: Use from `tests/acceptance/cluster.yaml`.
457+
458+
- [ ] The deployment must start
459+
- [ ] The deployment must yield 9 `Pods`
460+
- [ ] The deployment must yield a `Service` named `<deployment-name>`
461+
- [ ] The deployment must yield a `Service` named `<deployment-name>-ea`
462+
- [ ] The `Service` named `<deployment-name>-ea` must be accessible from outside (LoadBalancer or NodePort) and show WebUI
463+
464+
Remove a `Node`, containing the dbserver `Pod` that holds a collection with replication factor 1,
465+
from the Kubernetes cluster.
466+
467+
- [ ] While the `Pods` are being restarted on new `Nodes`, the cluster must still respond to requests (R/W),
468+
except requests involving collections with a replication factor of 1
469+
- [ ] The `Pod` running the dbserver with a collection that has a replication factor of 1 must NOT be restarted on another `Node`
319470

320-
I just collect further things which I think are missing:
471+
Remove the collections with the replication factor of 1
321472

322-
- add resilience tests:
323-
- reboot a node, should come back, at least if nothing is ephemeral
324-
- kill a node permanently with replicated data, should recover and repair
325-
- kill a node if it contains non-replicated data
326-
should hang and not recover, but dropping the collection should
327-
alow it to recover and repair (obviously, without the data)
473+
- [ ] The remaining `Pods` running on the `Node` must be restarted on another `Node`
474+
- [ ] After the `Pods` have restarted, the server must have the same data, except for the removed collections, and be responsive again
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Acceptance test platforms
2+
3+
The [kube-arangodb acceptance tests](./acceptance_test.md) must be
4+
executed on the following platforms:
5+
6+
- Google GKE, with Kubernetes version 1.10
7+
- Amazon EKS, with Kubernetes version 1.10
8+
- Azure AKS, with Kubernetes version 1.10
9+
- Openshift, based on Kubernetes version 1.10
10+
- Bare metal with kubeadm 1.10
11+
- Minikube with Kubernetes version 1.10
12+
- Kubernetes on docker for Mac, with Kubernetes version 1.10

0 commit comments

Comments
 (0)