From 4a7e796a46bb4e7ef474657a5f131014e8a72147 Mon Sep 17 00:00:00 2001
From: Maarten de Waard <maarten@greenhost.nl>
Date: Fri, 1 Oct 2021 11:06:17 +0200
Subject: [PATCH] Test if all expected replicas are ready for deployments and
 statefulsets, improve test for daemonsets

TRIGGER_JOBS=enable-nextcloud,enable-monitoring,enable-wekan,enable-wordpress,enable-rocketchat
---
 test/pytest/test_resources.py | 34 +++++++++++++++++++++++-----------
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/test/pytest/test_resources.py b/test/pytest/test_resources.py
index 98657e5e5..4246f8296 100644
--- a/test/pytest/test_resources.py
+++ b/test/pytest/test_resources.py
@@ -227,10 +227,18 @@ def test_deployments(resource, namespace):
         resource = deployment.metadata.name
         namespace = deployment.metadata.namespace
         deployment = api.read_namespaced_deployment_status(resource, namespace)
-        ready = deployment.status.replicas == deployment.status.ready_replicas
-        print(f'Deployment "{resource}" in namespace "{namespace}": {ready}')
 
-        if not ready:
+        for condition in deployment.status.conditions:
+            if condition.type == 'Available':
+                available = condition.status == 'True'
+        replicas = deployment.spec.replicas
+        ready_replicas = deployment.status.ready_replicas
+        # Check if all replicas from the spec are ready
+        print(f'Deployment "{resource}" in namespace "{namespace}": '
+              f'{available} ({ready_replicas}/{replicas})')
+
+
+        if not available or replicas != ready_replicas:
             failed += 1
             failed_resources.append(resource)
 
@@ -267,10 +275,12 @@ def test_statefulsets(resource, namespace):
     for statefulset in statefulsets.items:
         resource = statefulset.metadata.name
         namespace = statefulset.metadata.namespace
-        status = api.read_namespaced_stateful_set_status(resource, namespace)
-        ready = status.status.replicas == status.status.ready_replicas
-        print(f'statefulset "{resource}" in namespace "{namespace}": {ready}')
-        if not ready:
+        statefulset = api.read_namespaced_stateful_set_status(resource, namespace)
+        replicas = statefulset.spec.replicas
+        ready_replicas = statefulset.status.ready_replicas
+        print(f'statefulset "{resource}" in namespace "{namespace}": '
+              f'{ready_replicas}/{replicas}')
+        if replicas != ready_replicas:
             failed += 1
             failed_resources.append(resource)
 
@@ -307,10 +317,12 @@ def test_daemonsets(resource, namespace):
     for daemonset in daemonsets.items:
         resource = daemonset.metadata.name
         namespace = daemonset.metadata.namespace
-        status = api.read_namespaced_daemon_set_status(resource, namespace)
-        ready = status.status.desired_number_scheduled == status.status.number_available
-        print(f'daemonset "{resource}" in namespace "{namespace}": {ready}')
-        if not ready:
+        daemonset = api.read_namespaced_daemon_set_status(resource, namespace)
+        desired_number_scheduled = daemonset.status.desired_number_scheduled
+        number_ready = daemonset.status.number_ready
+        print(f'daemonset "{resource}" in namespace "{namespace}": '
+              f'{number_ready}/{desired_number_scheduled}')
+        if desired_number_scheduled != number_ready:
             failed += 1
             failed_resources.append(resource)
 
-- 
GitLab