...
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 self.results[0].backend
47 assert (
48 self.results[0].backend.name == self.target1.path.k8s
49 ), f"r0 wanted {self.target1.path.k8s} got {self.results[0].backend.name}"
50 assert self.results[1].backend
51 assert (
52 self.results[1].backend.name == self.target2.path.k8s
53 ), f"r1 wanted {self.target2.path.k8s} got {self.results[1].backend.name}"
54
55
56class QueryParameterRoutingWithRegexTest(AmbassadorTest):
57 target: ServiceType
58
59 def init(self):
60 self.target = HTTP(name="target")
61
62 def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
63 yield self.target, self.format(
64 """
65---
66apiVersion: getambassador.io/v3alpha1
67kind: Mapping
68name: {self.name}-target
69hostname: "*"
70prefix: /target/
71service: http://{self.target.path.fqdn}
72regex_query_parameters:
73 test_param: "^[a-z].*"
74"""
75 )
76
77 def queries(self):
78 yield Query(self.url("target/?test_param=hello"), expected=200)
79
80 # These should not match the regex and therefore not be found
81 yield Query(self.url("target/"), expected=404)
82 yield Query(self.url("target/?test_param=HeLlO"), expected=404)
83
84 def check(self):
85 assert self.results[0].backend
86 assert (
87 self.results[0].backend.name == self.target.path.k8s
88 ), f"r0 wanted {self.target.path.k8s} got {self.results[0].backend.name}"
89
90
91class QueryParameterPresentRoutingTest(AmbassadorTest):
92 target: ServiceType
93
94 def init(self):
95 self.target = HTTP(name="target")
96
97 def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
98 yield self.target, self.format(
99 """
100---
101apiVersion: getambassador.io/v3alpha1
102kind: Mapping
103name: {self.name}-target
104hostname: "*"
105prefix: /target/
106service: http://{self.target.path.fqdn}
107regex_query_parameters:
108 test_param: ".*"
109"""
110 )
111
112 def queries(self):
113 yield Query(self.url("target/?test_param=true"), expected=200)
114 yield Query(self.url("target/"), expected=404)
115
116 def check(self):
117 assert self.results[0].backend
118 assert (
119 self.results[0].backend.name == self.target.path.k8s
120 ), f"r0 wanted {self.target.path.k8s} got {self.results[0].backend.name}"
View as plain text