Skip to content

Commit 7ca1f88

Browse files
committed
K8SPS-73 - Add gr-self-healing test
1 parent c07ad53 commit 7ca1f88

36 files changed

+1269
-0
lines changed

Diff for: e2e-tests/functions

+4
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ get_primary_from_haproxy() {
476476
run_mysql "SHOW VARIABLES LIKE '%hostname%';" "-h ${haproxy_pod_ip} -P3306 -uroot -proot_password" | awk '{print $2}'
477477
}
478478

479+
get_primary_from_group_replication() {
480+
run_mysql "SELECT MEMBER_HOST FROM performance_schema.replication_group_members where MEMBER_ROLE='PRIMARY';" "-h $(get_mysql_router_service $(get_cluster_name)) -P 6446 -uroot -proot_password" | cut -d'.' -f1
481+
}
482+
479483
verify_certificate_sans() {
480484
local certificate=$1
481485
local expected_sans=$2

Diff for: e2e-tests/run-distro.csv

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ gr-haproxy
77
gr-init-deploy
88
gr-one-pod
99
gr-scaling
10+
gr-self-healing
1011
gr-tls-cert-manager
1112
haproxy
1213
init-deploy

Diff for: e2e-tests/run-minikube.csv

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ gr-haproxy
77
gr-init-deploy
88
gr-one-pod
99
gr-scaling
10+
gr-self-healing
1011
gr-tls-cert-manager
1112
haproxy
1213
init-deploy

Diff for: e2e-tests/run-pr.csv

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ gr-ignore-annotations
1010
gr-init-deploy
1111
gr-one-pod
1212
gr-scaling
13+
gr-self-healing
1314
gr-tls-cert-manager
1415
haproxy
1516
init-deploy

Diff for: e2e-tests/run-release.csv

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ gr-ignore-annotations
99
gr-init-deploy
1010
gr-one-pod
1111
gr-scaling
12+
gr-self-healing
1213
gr-tls-cert-manager
1314
haproxy
1415
init-deploy

Diff for: e2e-tests/tests/gr-self-healing/00-assert.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 120
4+
---
5+
apiVersion: apiextensions.k8s.io/v1
6+
kind: CustomResourceDefinition
7+
metadata:
8+
name: perconaservermysqls.ps.percona.com
9+
spec:
10+
group: ps.percona.com
11+
names:
12+
kind: PerconaServerMySQL
13+
listKind: PerconaServerMySQLList
14+
plural: perconaservermysqls
15+
shortNames:
16+
- ps
17+
singular: perconaservermysql
18+
scope: Namespaced
19+
---
20+
apiVersion: kuttl.dev/v1beta1
21+
kind: TestAssert
22+
metadata:
23+
name: check-operator-deploy-status
24+
timeout: 120
25+
commands:
26+
- script: kubectl assert exist-enhanced deployment percona-server-mysql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 10
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
deploy_operator
12+
deploy_non_tls_cluster_secrets
13+
deploy_tls_cluster_secrets
14+
deploy_client

Diff for: e2e-tests/tests/gr-self-healing/01-assert.yaml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 120
4+
---
5+
apiVersion: apps/v1
6+
kind: Deployment
7+
metadata:
8+
name: chaos-controller-manager
9+
spec:
10+
replicas: 3
11+
status:
12+
availableReplicas: 3
13+
readyReplicas: 3
14+
replicas: 3
15+
updatedReplicas: 3
16+
---
17+
apiVersion: apps/v1
18+
kind: DaemonSet
19+
metadata:
20+
name: chaos-daemon
21+
status:
22+
currentNumberScheduled: 3
23+
desiredNumberScheduled: 3
24+
numberAvailable: 3
25+
numberMisscheduled: 0
26+
numberReady: 3
27+
updatedNumberScheduled: 3
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 10
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
deploy_chaos_mesh

Diff for: e2e-tests/tests/gr-self-healing/02-assert.yaml

+144
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 420
4+
---
5+
kind: StatefulSet
6+
apiVersion: apps/v1
7+
metadata:
8+
name: gr-self-healing-mysql
9+
status:
10+
observedGeneration: 1
11+
replicas: 3
12+
readyReplicas: 3
13+
currentReplicas: 3
14+
updatedReplicas: 3
15+
collisionCount: 0
16+
---
17+
kind: Deployment
18+
apiVersion: apps/v1
19+
metadata:
20+
name: gr-self-healing-router
21+
status:
22+
observedGeneration: 1
23+
replicas: 3
24+
readyReplicas: 3
25+
updatedReplicas: 3
26+
---
27+
apiVersion: ps.percona.com/v1alpha1
28+
kind: PerconaServerMySQL
29+
metadata:
30+
name: gr-self-healing
31+
finalizers:
32+
- delete-mysql-pods-in-order
33+
status:
34+
mysql:
35+
ready: 3
36+
size: 3
37+
state: ready
38+
router:
39+
ready: 3
40+
size: 3
41+
state: ready
42+
---
43+
apiVersion: v1
44+
kind: Service
45+
metadata:
46+
labels:
47+
app.kubernetes.io/component: mysql
48+
app.kubernetes.io/instance: gr-self-healing
49+
app.kubernetes.io/managed-by: percona-server-operator
50+
app.kubernetes.io/name: percona-server
51+
app.kubernetes.io/part-of: percona-server
52+
name: gr-self-healing-mysql
53+
ownerReferences:
54+
- apiVersion: ps.percona.com/v1alpha1
55+
blockOwnerDeletion: true
56+
controller: true
57+
kind: PerconaServerMySQL
58+
name: gr-self-healing
59+
spec:
60+
clusterIP: None
61+
ports:
62+
- name: mysql
63+
port: 3306
64+
protocol: TCP
65+
targetPort: 3306
66+
- name: mysql-admin
67+
port: 33062
68+
protocol: TCP
69+
targetPort: 33062
70+
- name: mysqlx
71+
port: 33060
72+
protocol: TCP
73+
targetPort: 33060
74+
- name: http
75+
port: 6033
76+
protocol: TCP
77+
targetPort: 6033
78+
- name: mysql-gr
79+
port: 33061
80+
protocol: TCP
81+
targetPort: 33061
82+
selector:
83+
app.kubernetes.io/component: mysql
84+
app.kubernetes.io/instance: gr-self-healing
85+
app.kubernetes.io/managed-by: percona-server-operator
86+
app.kubernetes.io/name: percona-server
87+
app.kubernetes.io/part-of: percona-server
88+
sessionAffinity: None
89+
type: ClusterIP
90+
---
91+
apiVersion: v1
92+
kind: Service
93+
metadata:
94+
labels:
95+
app.kubernetes.io/component: router
96+
app.kubernetes.io/instance: gr-self-healing
97+
app.kubernetes.io/managed-by: percona-server-operator
98+
app.kubernetes.io/name: percona-server
99+
app.kubernetes.io/part-of: percona-server
100+
name: gr-self-healing-router
101+
ownerReferences:
102+
- apiVersion: ps.percona.com/v1alpha1
103+
blockOwnerDeletion: true
104+
controller: true
105+
kind: PerconaServerMySQL
106+
name: gr-self-healing
107+
spec:
108+
ports:
109+
- name: http
110+
port: 8443
111+
protocol: TCP
112+
targetPort: 8443
113+
- name: rw-default
114+
port: 3306
115+
protocol: TCP
116+
targetPort: 6446
117+
- name: read-write
118+
port: 6446
119+
protocol: TCP
120+
targetPort: 6446
121+
- name: read-only
122+
port: 6447
123+
protocol: TCP
124+
targetPort: 6447
125+
- name: x-read-write
126+
port: 6448
127+
protocol: TCP
128+
targetPort: 6448
129+
- name: x-read-only
130+
port: 6449
131+
protocol: TCP
132+
targetPort: 6449
133+
- name: rw-admin
134+
port: 33062
135+
protocol: TCP
136+
targetPort: 33062
137+
selector:
138+
app.kubernetes.io/component: router
139+
app.kubernetes.io/instance: gr-self-healing
140+
app.kubernetes.io/managed-by: percona-server-operator
141+
app.kubernetes.io/name: percona-server
142+
app.kubernetes.io/part-of: percona-server
143+
sessionAffinity: None
144+
type: ClusterIP
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 10
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
get_cr \
12+
| yq eval '.spec.mysql.clusterType="group-replication"' - \
13+
| yq eval '.spec.mysql.size=3' - \
14+
| yq eval '.spec.mysql.affinity.antiAffinityTopologyKey="none"' - \
15+
| yq eval '.spec.proxy.haproxy.enabled=false' - \
16+
| yq eval '.spec.proxy.router.enabled=true' - \
17+
| yq eval '.spec.proxy.router.size=3' - \
18+
| yq eval '.spec.proxy.router.affinity.antiAffinityTopologyKey="none"' - \
19+
| yq eval '.spec.orchestrator.enabled=false' - \
20+
| kubectl -n "${NAMESPACE}" apply -f -

Diff for: e2e-tests/tests/gr-self-healing/03-write-data.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
run_mysql \
11+
"CREATE DATABASE IF NOT EXISTS myDB; CREATE TABLE IF NOT EXISTS myDB.myTable (id int PRIMARY KEY)" \
12+
"-h $(get_mysql_router_service $(get_cluster_name)) -P 6446 -uroot -proot_password"
13+
14+
run_mysql \
15+
"INSERT myDB.myTable (id) VALUES (100500)" \
16+
"-h $(get_mysql_router_service $(get_cluster_name)) -P 6446 -uroot -proot_password"

Diff for: e2e-tests/tests/gr-self-healing/04-assert.yaml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 30
4+
---
5+
kind: ConfigMap
6+
apiVersion: v1
7+
metadata:
8+
name: 04-read-from-primary
9+
data:
10+
data: "100500"
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 30
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
data=$(run_mysql "SELECT * FROM myDB.myTable" "-h $(get_mysql_router_service $(get_cluster_name)) -P 6446 -uroot -proot_password")
12+
13+
kubectl create configmap -n "${NAMESPACE}" 04-read-from-primary --from-literal=data="${data}"

0 commit comments

Comments
 (0)