Skip to content

Commit 95a658f

Browse files
committed
feat(documentdb): Add tests backups & client
Signed-off-by: P-Louw <[email protected]>
1 parent 21380e7 commit 95a658f

21 files changed

+573
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: minio-cleanup
5+
status:
6+
succeeded: 1
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: minio-cleanup
5+
spec:
6+
template:
7+
spec:
8+
restartPolicy: OnFailure
9+
containers:
10+
- name: minio-cleanup
11+
image: minio/mc
12+
command: ['sh', '-c']
13+
args:
14+
- |
15+
mc alias set myminio https://minio.minio.svc.cluster.local minio minio123
16+
mc rm --recursive --force myminio/mybucket/documentdb
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: postgresql.cnpg.io/v1
2+
kind: Cluster
3+
metadata:
4+
name: documentdb-cluster
5+
status:
6+
readyInstances: 2
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
type: documentdb
2+
mode: standalone
3+
version:
4+
postgresql: "17"
5+
documentdb: "0.106.0"
6+
ferretdb: "2.5.0"
7+
8+
cluster:
9+
instances: 2
10+
storage:
11+
size: 256Mi
12+
13+
backups:
14+
enabled: true
15+
16+
provider: s3
17+
endpointURL: "https://minio.minio.svc.cluster.local"
18+
endpointCA:
19+
name: kube-root-ca.crt
20+
key: ca.crt
21+
wal:
22+
encryption: ""
23+
data:
24+
encryption: ""
25+
s3:
26+
bucket: "mybucket"
27+
path: "/documentdb/v1"
28+
accessKey: "minio"
29+
secretKey: "minio123"
30+
region: "local"
31+
scheduledBackups: []
32+
retentionPolicy: "30d"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: documentdb-test
5+
status:
6+
succeeded: 1
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: documentdb-test
5+
spec:
6+
template:
7+
spec:
8+
restartPolicy: OnFailure
9+
containers:
10+
- name: data-test
11+
env:
12+
- name: DB_URI
13+
valueFrom:
14+
secretKeyRef:
15+
name: documentdb-cluster-app
16+
key: uri
17+
image: alpine:3.19
18+
command: ['sh', '-c']
19+
args:
20+
- |
21+
apk --no-cache add postgresql-client
22+
test "$(psql $DB_URI -t -c 'SELECT EXISTS (SELECT FROM pg_extension WHERE extname = '\''documentdb'\'')' --csv -q 2>/dev/null)" = "t"
23+
test "$(psql $DB_URI -t -c 'SELECT EXISTS (SELECT FROM pg_extension WHERE extname = '\''pg_cron'\'')' --csv -q 2>/dev/null)" = "t"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: documentdb-mongodb-client-test
5+
status:
6+
succeeded: 1
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: documentdb-mongodb-client-test
5+
spec:
6+
template:
7+
spec:
8+
restartPolicy: OnFailure
9+
containers:
10+
- name: mongo-client-test
11+
image: mongo:7.0
12+
env:
13+
- name: POSTGRES_HOST
14+
value: "documentdb-cluster-rw"
15+
- name: DB_USER
16+
valueFrom:
17+
secretKeyRef:
18+
name: documentdb-cluster-app
19+
key: username
20+
- name: DB_PASSWORD
21+
valueFrom:
22+
secretKeyRef:
23+
name: documentdb-cluster-app
24+
key: password
25+
- name: DB_NAME
26+
value: "app"
27+
command: ['sh', '-c']
28+
args:
29+
- |
30+
# Wait a moment for the service to be ready
31+
sleep 5
32+
33+
# Test MongoDB client connectivity and operations
34+
mongosh "mongodb://$DB_USER:$DB_PASSWORD@$POSTGRES_HOST:27017/$DB_NAME?directConnection=true" --eval '
35+
print("Testing MongoDB client connectivity to DocumentDB...");
36+
37+
// Test 1: Insert a document
38+
print("Test 1: Inserting document...");
39+
const insertResult = db.test_collection.insertOne({
40+
hello: "world",
41+
timestamp: new Date(),
42+
nested: { field: "value" },
43+
array: [1, 2, 3]
44+
});
45+
print("Insert successful, _id: " + insertResult.insertedId);
46+
47+
// Test 2: Find the document
48+
print("Test 2: Finding document...");
49+
const doc = db.test_collection.findOne({ hello: "world" });
50+
if (!doc || doc.hello !== "world") {
51+
throw new Error("Document not found or incorrect");
52+
}
53+
print("Find successful: " + JSON.stringify(doc));
54+
55+
// Test 3: Update the document
56+
print("Test 3: Updating document...");
57+
const updateResult = db.test_collection.updateOne(
58+
{ hello: "world" },
59+
{ $set: { updated: true, updateTime: new Date() } }
60+
);
61+
if (updateResult.modifiedCount !== 1) {
62+
throw new Error("Update failed");
63+
}
64+
print("Update successful");
65+
66+
// Test 4: Verify update
67+
print("Test 4: Verifying update...");
68+
const updatedDoc = db.test_collection.findOne({ hello: "world" });
69+
if (!updatedDoc.updated) {
70+
throw new Error("Update verification failed");
71+
}
72+
print("Update verified");
73+
74+
// Test 5: Count documents
75+
print("Test 5: Counting documents...");
76+
const count = db.test_collection.countDocuments({ hello: "world" });
77+
if (count !== 1) {
78+
throw new Error("Count failed, expected 1 got " + count);
79+
}
80+
print("Count successful: " + count);
81+
82+
// Test 6: Delete the document
83+
print("Test 6: Deleting document...");
84+
const deleteResult = db.test_collection.deleteOne({ hello: "world" });
85+
if (deleteResult.deletedCount !== 1) {
86+
throw new Error("Delete failed");
87+
}
88+
print("Delete successful");
89+
90+
// Test 7: Verify deletion
91+
print("Test 7: Verifying deletion...");
92+
const deletedDoc = db.test_collection.findOne({ hello: "world" });
93+
if (deletedDoc !== null) {
94+
throw new Error("Document still exists after deletion");
95+
}
96+
print("Deletion verified");
97+
98+
print("✓ All MongoDB client operations successful!");
99+
'
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: data-write
5+
status:
6+
succeeded: 1
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: configmap-creator-sa
5+
---
6+
apiVersion: rbac.authorization.k8s.io/v1
7+
kind: Role
8+
metadata:
9+
name: configmap-creator
10+
rules:
11+
- apiGroups: [""]
12+
resources: ["configmaps"]
13+
verbs: ["create"]
14+
---
15+
apiVersion: rbac.authorization.k8s.io/v1
16+
kind: RoleBinding
17+
metadata:
18+
name: configmap-creator-binding
19+
subjects:
20+
- kind: ServiceAccount
21+
name: configmap-creator-sa
22+
roleRef:
23+
kind: Role
24+
name: configmap-creator
25+
apiGroup: rbac.authorization.k8s.io
26+
---
27+
apiVersion: batch/v1
28+
kind: Job
29+
metadata:
30+
name: data-write
31+
spec:
32+
template:
33+
spec:
34+
serviceAccountName: configmap-creator-sa
35+
restartPolicy: OnFailure
36+
containers:
37+
- name: data-write
38+
env:
39+
- name: DB_URI
40+
valueFrom:
41+
secretKeyRef:
42+
name: documentdb-cluster-superuser
43+
key: uri
44+
image: alpine:3.19
45+
command: ['sh', '-c']
46+
args:
47+
- |
48+
apk --no-cache add postgresql-client kubectl coreutils
49+
DB_URI=$(echo $DB_URI | sed "s|/\*|/|" )
50+
psql "$DB_URI" -c "CREATE TABLE mygoodtable (id serial PRIMARY KEY);"
51+
sleep 5
52+
DATE_NO_BAD_TABLE=$(date --rfc-3339=ns)
53+
kubectl create configmap date-no-bad-table --from-literal=date="$DATE_NO_BAD_TABLE"
54+
sleep 5

0 commit comments

Comments
 (0)