...
1from typing import Generator, Tuple, Union
2
3from abstract_tests import HTTP, AmbassadorTest, Node, ServiceType
4from kat.harness import Query
5
6
7class RegexRewriteForwardingTest(AmbassadorTest):
8 target: ServiceType
9
10 def init(self):
11 self.target = HTTP(name="foo")
12
13 def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
14 yield self.target, self.format(
15 r"""
16---
17apiVersion: getambassador.io/v3alpha1
18kind: Mapping
19name: regex_rewrite_mapping
20hostname: "*"
21prefix: /foo/
22service: http://{self.target.path.fqdn}
23regex_rewrite:
24 pattern: "/foo/baz"
25 substitution: "/baz/foo"
26"""
27 )
28
29 def queries(self):
30 yield Query(self.url("foo/bar"), expected=200)
31 yield Query(self.url("foo/baz"), expected=200)
32 yield Query(self.url("ffoo/"), expected=404)
33
34 def check(self):
35 assert self.results[0].backend
36 assert self.results[0].backend.request
37 assert self.results[0].backend.request.headers["x-envoy-original-path"][0] == f"/foo/bar"
38 assert self.results[0].backend.request.url.path == "/foo/bar"
39 assert self.results[1].backend
40 assert self.results[1].backend.request
41 assert self.results[1].backend.request.headers["x-envoy-original-path"][0] == f"/foo/baz"
42 assert self.results[1].backend.request.url.path == "/baz/foo"
43
44
45class RegexRewriteForwardingWithExtractAndSubstituteTest(AmbassadorTest):
46 target: ServiceType
47
48 def init(self):
49 self.target = HTTP(name="foo")
50
51 def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
52 yield self.target, self.format(
53 r"""
54---
55apiVersion: getambassador.io/v3alpha1
56kind: Mapping
57name: regex_rewrite_mapping
58hostname: "*"
59prefix: /foo/
60service: http://{self.target.path.fqdn}
61regex_rewrite:
62 pattern: "/foo/([0-9]*)/list"
63 substitution: "/bar/\\1"
64"""
65 )
66
67 def queries(self):
68 yield Query(self.url("foo/123456789/list"), expected=200)
69 yield Query(self.url("foo/987654321/list"), expected=200)
70 yield Query(self.url("fooooo/123456789/list"), expected=404)
71 yield Query(self.url("foo/"), expected=200)
72
73 def check(self):
74 assert self.results[0].backend
75 assert self.results[0].backend.request
76 assert (
77 self.results[0].backend.request.headers["x-envoy-original-path"][0]
78 == f"/foo/123456789/list"
79 )
80 assert self.results[0].backend.request.url.path == "/bar/123456789"
81 assert self.results[1].backend
82 assert self.results[1].backend.request
83 assert (
84 self.results[1].backend.request.headers["x-envoy-original-path"][0]
85 == f"/foo/987654321/list"
86 )
87 assert self.results[1].backend.request.url.path == "/bar/987654321"
View as plain text