Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

D&O merged policies / sectionName tests #608

Closed
wants to merge 8 commits into from
Prev Previous commit
Next Next commit
ADD: Defaults and overrides: override merge on same target
This adds test that make use of the merge strategy on overrides that are
targeting the same resource.

Signed-off-by: Jim Fitzpatrick <[email protected]>
Boomatang committed Dec 3, 2024
commit 0852e073e8760af44b6fcb63ec02c5b09bc2d8d7
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import pytest

from testsuite.gateway import MatchType, PathMatch, RouteMatch
from testsuite.kuadrant.policy import CelPredicate, Strategy
from testsuite.kuadrant.policy.rate_limit import Limit, RateLimitPolicy

LIMIT = Limit(8, "5s")
OVERRIDE_LIMIT = Limit(6, "5s")


@pytest.fixture(scope="module")
def route(route, backend):
"""Add two new rules to the route"""
route.remove_all_rules()
route.add_rule(
backend,
RouteMatch(path=PathMatch(value="/get", type=MatchType.PATH_PREFIX)),
)
route.add_rule(
backend,
RouteMatch(path=PathMatch(value="/anything", type=MatchType.PATH_PREFIX)),
)
return route


@pytest.fixture(scope="module")
def rate_limit(cluster, blame, module_label, route):
"""Add a RateLimitPolicy targeting the first HTTPRouteRule."""
rate_limit = RateLimitPolicy.create_instance(cluster, blame("sp"), route, labels={"testRun": module_label})
basic_when = [
CelPredicate("request.path == '/get'"),
]
rate_limit.add_limit("basic", [LIMIT], when=basic_when)
return rate_limit


@pytest.fixture(scope="module")
def override_merge_rate_limit(cluster, blame, module_label, route):
"""Add a RateLimitPolicy targeting the first HTTPRouteRule."""
policy = RateLimitPolicy.create_instance(cluster, blame("omp"), route, labels={"testRun": module_label})
basic_when = [
CelPredicate("request.path == '/get'"),
]
override_when = [
CelPredicate("request.path == '/anything'"),
]
policy.overrides.add_limit("basic", [OVERRIDE_LIMIT], when=basic_when)
policy.overrides.add_limit("override", [OVERRIDE_LIMIT], when=override_when)
Copy link
Contributor Author

@martinhesko martinhesko Dec 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Boomatang in this case there is functionally no difference between the two related tests, I would suggest reworking this with 2 normal limits and 1 override in this policy to apply the partial override in one case, similar to how it works in overrides/merge/test_gateway_override_merge.py

policy.strategy(Strategy.MERGE)
return policy
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""Test override policies aimed at the same resoure uses oldested policy."""

import pytest

from .conftest import OVERRIDE_LIMIT

pytestmark = [pytest.mark.kuadrant_only]


@pytest.fixture(scope="module", autouse=True)
def commit(request, route, rate_limit, override_merge_rate_limit): # pylint: disable=unused-argument
"""Commits RateLimitPolicy after the HTTPRoute is created"""
for policy in [rate_limit, override_merge_rate_limit]:
request.addfinalizer(policy.delete)
policy.commit()
policy.wait_for_accepted()


@pytest.mark.parametrize("rate_limit", ["gateway", "route"], indirect=True)
def test_multiple_policies_merge_override_ab(client):
"""Test RateLimitPolicy with merge overrides being ingored due to age"""
responses = client.get_many("/get", OVERRIDE_LIMIT.limit)
responses.assert_all(200)
assert client.get("/get").status_code == 429

responses = client.get_many("/anything", OVERRIDE_LIMIT.limit)
responses.assert_all(200)
assert client.get("/anything").status_code == 429
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""Test defaults policy aimed at the same resoure uses oldested policy."""

import pytest

from .conftest import OVERRIDE_LIMIT

pytestmark = [pytest.mark.kuadrant_only]


@pytest.fixture(scope="module", autouse=True)
def commit(request, route, rate_limit, override_merge_rate_limit): # pylint: disable=unused-argument
"""Commits RateLimitPolicy after the HTTPRoute is created"""
for policy in [override_merge_rate_limit, rate_limit]:
request.addfinalizer(policy.delete)
policy.commit()
policy.wait_for_accepted()


@pytest.mark.parametrize("rate_limit", ["gateway", "route"], indirect=True)
def test_multiple_policies_merge_default_ba(client):
"""Test RateLimitPolicy with merge overrides being enforced due to age"""
responses = client.get_many("/get", OVERRIDE_LIMIT.limit)
responses.assert_all(200)
assert client.get("/get").status_code == 429

responses = client.get_many("/anything", OVERRIDE_LIMIT.limit)
responses.assert_all(200)
assert client.get("/anything").status_code == 429