...

Text file src/github.com/datawire/ambassador/v2/python/tests/kat/t_queryparameter_routing.py

Documentation: github.com/datawire/ambassador/v2/python/tests/kat

     1from typing import Generator, Tuple, Union
     2
     3from abstract_tests import HTTP, AmbassadorTest, Node, ServiceType
     4from kat.harness import Query
     5
     6
     7class QueryParameterRoutingTest(AmbassadorTest):
     8    target1: ServiceType
     9    target2: ServiceType
    10
    11    def init(self):
    12        self.target1 = HTTP(name="target1")
    13        self.target2 = HTTP(name="target2")
    14
    15    def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
    16        yield self.target1, self.format(
    17            """
    18---
    19apiVersion: getambassador.io/v3alpha1
    20kind: Mapping
    21name:  {self.name}-target1
    22hostname: "*"
    23prefix: /target/
    24service: http://{self.target1.path.fqdn}
    25"""
    26        )
    27        yield self.target2, self.format(
    28            """
    29---
    30apiVersion: getambassador.io/v3alpha1
    31kind: Mapping
    32name:  {self.name}-target2
    33hostname: "*"
    34prefix: /target/
    35service: http://{self.target2.path.fqdn}
    36query_parameters:
    37    test_param: target2
    38"""
    39        )
    40
    41    def queries(self):
    42        yield Query(self.url("target/"), expected=200)
    43        yield Query(self.url("target/?test_param=target2"), expected=200)
    44
    45    def check(self):
    46        assert (
    47            self.results[0].backend.name == self.target1.path.k8s
    48        ), f"r0 wanted {self.target1.path.k8s} got {self.results[0].backend.name}"
    49        assert (
    50            self.results[1].backend.name == self.target2.path.k8s
    51        ), f"r1 wanted {self.target2.path.k8s} got {self.results[1].backend.name}"
    52
    53
    54class QueryParameterRoutingWithRegexTest(AmbassadorTest):
    55    target: ServiceType
    56
    57    def init(self):
    58        self.target = HTTP(name="target")
    59
    60    def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
    61        yield self.target, self.format(
    62            """
    63---
    64apiVersion: getambassador.io/v3alpha1
    65kind: Mapping
    66name:  {self.name}-target
    67hostname: "*"
    68prefix: /target/
    69service: http://{self.target.path.fqdn}
    70regex_query_parameters:
    71    test_param: "^[a-z].*"
    72"""
    73        )
    74
    75    def queries(self):
    76        yield Query(self.url("target/?test_param=hello"), expected=200)
    77
    78        # These should not match the regex and therefore not be found
    79        yield Query(self.url("target/"), expected=404)
    80        yield Query(self.url("target/?test_param=HeLlO"), expected=404)
    81
    82    def check(self):
    83        assert (
    84            self.results[0].backend.name == self.target.path.k8s
    85        ), f"r0 wanted {self.target.path.k8s} got {self.results[0].backend.name}"
    86
    87
    88class QueryParameterPresentRoutingTest(AmbassadorTest):
    89    target: ServiceType
    90
    91    def init(self):
    92        self.target = HTTP(name="target")
    93
    94    def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
    95        yield self.target, self.format(
    96            """
    97---
    98apiVersion: getambassador.io/v3alpha1
    99kind: Mapping
   100name:  {self.name}-target
   101hostname: "*"
   102prefix: /target/
   103service: http://{self.target.path.fqdn}
   104regex_query_parameters:
   105    test_param: ".*"
   106"""
   107        )
   108
   109    def queries(self):
   110        yield Query(self.url("target/?test_param=true"), expected=200)
   111        yield Query(self.url("target/"), expected=404)
   112
   113    def check(self):
   114        assert (
   115            self.results[0].backend.name == self.target.path.k8s
   116        ), f"r0 wanted {self.target.path.k8s} got {self.results[0].backend.name}"

View as plain text