Skip to content

Commit

Permalink
Add test for DNSPolicy health check with additional headers
Browse files Browse the repository at this point in the history
  • Loading branch information
averevki committed Jan 24, 2024
1 parent 7cbf6f9 commit b8d7ae5
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 1 deletion.
10 changes: 9 additions & 1 deletion testsuite/policy/dns_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,18 @@


@dataclass
class HealthCheck: # pylint: disable=invalid-name
class AdditionalHeadersRef:
"""Object representing DNSPolicy additionalHeadersRef field"""

name: str


@dataclass
class HealthCheck: # pylint: disable=invalid-name,too-many-instance-attributes
"""Object representing DNSPolicy health check specification"""

allowInsecureCertificates: Optional[bool] = None
additionalHeadersRef: Optional[AdditionalHeadersRef] = None
endpoint: Optional[str] = None
expectedResponses: Optional[list[int]] = None
failureThreshold: Optional[int] = None
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"""Tests for DNSPolicy health checks - additional authentication headers sent with health check requests"""
import pytest

from testsuite.openshift.secret import Secret
from testsuite.mockserver import MockserverBackend
from testsuite.policy.dns_policy import HealthCheck, AdditionalHeadersRef

pytestmark = [pytest.mark.mgc]

HEADER_NAME = "test-header"
HEADER_VALUE = "test-value"


@pytest.fixture(scope="module")
def backend(request, openshift, name, base_domain, blame, label):
"""Use mockserver as backend for health check requests to verify additional headers"""
mockserver = MockserverBackend(openshift, f"http://{name}.{base_domain}", blame("mocksrv"), label)
request.addfinalizer(mockserver.delete)
mockserver.commit()

return mockserver


@pytest.fixture(scope="module", autouse=True)
def mockserver_backend_expectation(backend, route, module_label): # pylint: disable=unused-argument
"""Creates Mockserver Expectation which requires additional headers for successful request"""
backend.create_request_expectation(module_label, headers={HEADER_NAME: [HEADER_VALUE]})


@pytest.fixture(scope="module")
def headers_secret(request, hub_openshift, blame):
"""Creates Secret with additional headers for DNSPolicy health check"""
secret_name = blame("headers")
headers_secret = Secret.create_instance(hub_openshift, secret_name, {HEADER_NAME: HEADER_VALUE})

request.addfinalizer(headers_secret.delete)
headers_secret.commit()
return secret_name


@pytest.fixture(scope="module")
def health_check(headers_secret, module_label):
"""Returns healthy endpoint specification with additional authentication header for DNSPolicy health check"""
return HealthCheck(
allowInsecureCertificates=True,
additionalHeadersRef=AdditionalHeadersRef(name=headers_secret),
endpoint=f"/{module_label}",
interval="5s",
port=80,
protocol="http",
)


def test_additional_headers(dns_health_probe, backend, module_label):
"""Test if additional headers in health check requests are used"""
assert dns_health_probe.is_healthy()

requests = backend.retrieve_requests(module_label)
assert len(requests) > 0

request_headers = requests[0]["headers"]
assert request_headers.get(HEADER_NAME) == [HEADER_VALUE]

0 comments on commit b8d7ae5

Please sign in to comment.