Skip to content

Commit

Permalink
ADD: Defaults and overrides: override merge on same target
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
Boomatang committed Dec 3, 2024
1 parent a8f9a59 commit 0852e07
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
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)
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

0 comments on commit 0852e07

Please sign in to comment.