...
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