...
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.request.headers["x-envoy-original-path"][0] == f"/foo/bar"
36 assert self.results[0].backend.request.url.path == "/foo/bar"
37 assert self.results[1].backend.request.headers["x-envoy-original-path"][0] == f"/foo/baz"
38 assert self.results[1].backend.request.url.path == "/baz/foo"
39
40
41class RegexRewriteForwardingWithExtractAndSubstituteTest(AmbassadorTest):
42 target: ServiceType
43
44 def init(self):
45 self.target = HTTP(name="foo")
46
47 def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
48 yield self.target, self.format(
49 r"""
50---
51apiVersion: getambassador.io/v3alpha1
52kind: Mapping
53name: regex_rewrite_mapping
54hostname: "*"
55prefix: /foo/
56service: http://{self.target.path.fqdn}
57regex_rewrite:
58 pattern: "/foo/([0-9]*)/list"
59 substitution: "/bar/\\1"
60"""
61 )
62
63 def queries(self):
64 yield Query(self.url("foo/123456789/list"), expected=200)
65 yield Query(self.url("foo/987654321/list"), expected=200)
66 yield Query(self.url("fooooo/123456789/list"), expected=404)
67 yield Query(self.url("foo/"), expected=200)
68
69 def check(self):
70 assert (
71 self.results[0].backend.request.headers["x-envoy-original-path"][0]
72 == f"/foo/123456789/list"
73 )
74 assert self.results[0].backend.request.url.path == "/bar/123456789"
75 assert (
76 self.results[1].backend.request.headers["x-envoy-original-path"][0]
77 == f"/foo/987654321/list"
78 )
79 assert self.results[1].backend.request.url.path == "/bar/987654321"
View as plain text