diff --git a/config/settings.local.yaml.tpl b/config/settings.local.yaml.tpl index d1a54217..9e15f36e 100644 --- a/config/settings.local.yaml.tpl +++ b/config/settings.local.yaml.tpl @@ -18,6 +18,7 @@ # image: "HTTPBIN_IMAGE" # mockserver: # url: "MOCKSERVER_URL" +# image: "MOCKSERVER_IMAGE" # Image to be used for self-deployed Mockserver # tracing: # backend: "jaeger" # Tracing backend # collector_url: "rpc://jaeger-collector.com:4317" # Tracing collector URL (may be internal) @@ -48,6 +49,7 @@ # api_url: "https://api.kubernetes2.com" # token: "KUADRANT_RULEZ" # kubeconfig_path: "~/.kube/config2" +# slow_loadbalancers: false # For use in Openshift on AWS: If true, causes all Gateways and LoadBalancer Services to wait longer to become ready # provider_secret: "aws-credentials" # Name of the Secret resource that contains DNS provider credentials # issuer: # Issuer object for testing TLSPolicy # name: "selfsigned-cluster-issuer" # Name of Issuer CR diff --git a/config/settings.yaml b/config/settings.yaml index 6a87dd2c..7285ea00 100644 --- a/config/settings.yaml +++ b/config/settings.yaml @@ -11,6 +11,8 @@ default: password: "testPassword" httpbin: image: "quay.io/trepel/httpbin:jsmadis" + mockserver: + image: "quay.io/mganisin/mockserver:latest" service_protection: system_project: "kuadrant-system" project: "kuadrant" @@ -25,6 +27,7 @@ default: log_level: "debug" control_plane: cluster: {} + slow_loadbalancers: false provider_secret: "aws-credentials" issuer: name: "selfsigned-issuer" diff --git a/testsuite/backend/mockserver.py b/testsuite/backend/mockserver.py index d4875311..0bcac29a 100644 --- a/testsuite/backend/mockserver.py +++ b/testsuite/backend/mockserver.py @@ -1,5 +1,6 @@ """Mockserver implementation as Backend""" +from testsuite.config import settings from testsuite.backend import Backend from testsuite.kubernetes import Selector from testsuite.kubernetes.deployment import Deployment, ContainerResources @@ -15,7 +16,7 @@ def commit(self): self.cluster, self.name, container_name="mockserver", - image="quay.io/mganisin/mockserver:latest", + image=settings["mockserver"]["image"], ports={"api": 1080}, selector=Selector(matchLabels=match_labels), labels={"app": self.label}, @@ -23,7 +24,6 @@ def commit(self): lifecycle={"postStart": {"exec": {"command": ["/bin/sh", "init-mockserver"]}}}, ) self.deployment.commit() - self.deployment.wait_for_ready() self.service = Service.create_instance( self.cluster, @@ -35,9 +35,7 @@ def commit(self): ) self.service.commit() - def wait_for_ready(self, timeout=300): - """Waits until Deployment is marked as ready""" - success = self.service.wait_until( - lambda obj: "ip" in self.service.refresh().model.status.loadBalancer.ingress[0], timelimit=timeout - ) - assert success, f"Service {self.name} did not get ready in time" + def wait_for_ready(self, timeout=60 * 5): + """Waits until Deployment and Service is marked as ready""" + self.deployment.wait_for_ready(timeout) + self.service.wait_for_ready(timeout, settings["control_plane"]["slow_loadbalancers"]) diff --git a/testsuite/gateway/gateway_api/gateway.py b/testsuite/gateway/gateway_api/gateway.py index 2fe7ab5a..9db8a220 100644 --- a/testsuite/gateway/gateway_api/gateway.py +++ b/testsuite/gateway/gateway_api/gateway.py @@ -1,9 +1,11 @@ """Module containing all gateway classes""" +from time import sleep from typing import Any import openshift_client as oc +from testsuite.config import settings from testsuite.certificates import Certificate from testsuite.gateway import Gateway, GatewayListener from testsuite.kubernetes.client import KubernetesClient @@ -69,6 +71,8 @@ def wait_for_ready(self, timeout: int = 10 * 60): """Waits for the gateway to be ready in the sense of is_ready(self)""" success = self.wait_until(lambda obj: self.__class__(obj.model).is_ready(), timelimit=timeout) assert success, "Gateway didn't get ready in time" + if settings["control_plane"]["slow_loadbalancers"]: + sleep(60) def is_affected_by(self, policy: Policy) -> bool: """Returns True, if affected by status is found within the object for the specific policy""" diff --git a/testsuite/kubernetes/service.py b/testsuite/kubernetes/service.py index d2199d36..4ef54f49 100644 --- a/testsuite/kubernetes/service.py +++ b/testsuite/kubernetes/service.py @@ -1,5 +1,6 @@ """Service related objects""" +from time import sleep from dataclasses import dataclass, asdict from typing import Literal @@ -73,3 +74,16 @@ def delete(self, ignore_not_found=True, cmd_args=None): with timeout(10 * 60): deleted = super(KubernetesObject, self).delete(ignore_not_found, cmd_args) return deleted + + def wait_for_ready(self, timeout=60 * 5, slow_loadbalancers=False): + """Waits until LoadBalancer service gets ready.""" + if self.model.spec.type != "LoadBalancer": + return + success = self.wait_until( + lambda obj: "ip" in self.refresh().model.status.loadBalancer.ingress[0] + or "hostname" in self.refresh().model.status.loadBalancer.ingress[0], + timelimit=timeout, + ) + assert success, f"Service {self.name} did not get ready in time" + if slow_loadbalancers: + sleep(60)