Commit fbd83e83 authored by Konstantinos Togias's avatar Konstantinos Togias
Browse files

test: wait for every EURECOM ingress upstream

parent 711c2885
Loading
Loading
Loading
Loading
Loading
+8 −1
Changes for ansible/tests/unit/test_eurecom_lab.py: 8 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -108,5 +108,12 @@ def test_failed_start_records_safe_states_before_cleanup_and_preserves_failure(t
    assert caught.value is failure
    states=lab.evidence['startup_failure']
    assert states['ue-identity']=={'status':'exited','exit_code':1,'oom_killed':False,
                                 'health':'unhealthy','redis_connection_error':True}
                                 'health':'unhealthy','redis_connection_error':True,'upstream_resolution_error':False}
    assert 'PRIVATE-CONFIG' not in json.dumps(lab.evidence)+capsys.readouterr().out


def test_ingress_waits_for_every_proxy_target_including_redis_delayed_monitoring():
    actual=composition(original(),{'upstream:test':'example/nef@sha256:'+'a'*64},'k3d-owned','/owned','oop-ci-owned')['services']
    assert actual['ingress-controller']['depends_on']=={
        name:{'condition':'service_healthy'} for name in
        ('as-session-with-qos','traffic-influence','monitoring-event','ue-id','ue-address')}
+7 −0
Changes for ci/eurecom_lab.py: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -53,6 +53,12 @@ def composition(original, pins, network, directory, name):
    }
    for key in ('ue-identity', 'ue-profile', 'monitoring-event', 'core-network-service'):
        services[key].setdefault('depends_on', {})['redis'] = {'condition':'service_healthy'}
    # Nginx resolves every proxy target when it starts, including the monitoring
    # service delayed by Redis readiness. Wait for all configured upstreams.
    services['ingress-controller']['depends_on'] = {
        key:{'condition':'service_healthy'} for key in (
            'as-session-with-qos','traffic-influence','monitoring-event','ue-id','ue-address')
    }
    return {'services':services, 'networks':{'lab':{'external':True,'name':network}}}


@@ -169,6 +175,7 @@ class EurecomLab:
                        'redis_connection_error':bool(re.search(
                            r'(?i)(redis|:6379).*?(refused|timeout|no such host|failed|error)',
                            logs.stdout + logs.stderr)),
                        'upstream_resolution_error':'host not found in upstream' in (logs.stdout + logs.stderr).lower(),
                    }
                except (OSError, ValueError, KeyError, IndexError, subprocess.SubprocessError):
                    failures[key] = {'diagnostic':'unavailable'}
+4 −2
Changes for ci/lab/README.md: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -396,5 +396,7 @@ GitLab runner or qualification of release-specific images.

EURECOM middleware waits for a successful Redis PING before starting. The lab
retains upstream health checks and the CoreSim dependency. A failed provider
startup records only container state, exit code, OOM status, health and a Redis
connection-error classification before cleanup; raw provider logs stay private.
startup records only container state, exit code, OOM status, health and fixed
Redis-connection/upstream-resolution error classifications before cleanup; raw
provider logs stay private. Ingress waits for all five configured proxy targets to be
healthy before Nginx resolves their names at startup.