...
1import logging
2
3import pytest
4
5logging.basicConfig(
6 level=logging.INFO,
7 format="%(asctime)s test %(levelname)s: %(message)s",
8 datefmt="%Y-%m-%d %H:%M:%S",
9)
10
11logger = logging.getLogger("ambassador")
12
13from ambassador import IR, Config, EnvoyConfig
14from ambassador.fetch import ResourceFetcher
15from ambassador.utils import NullSecretHandler
16from tests.utils import default_listener_manifests
17
18
19def _get_envoy_config(yaml):
20 aconf = Config()
21 fetcher = ResourceFetcher(logger, aconf)
22 fetcher.parse_yaml(default_listener_manifests() + yaml, k8s=True)
23
24 aconf.load_all(fetcher.sorted())
25
26 secret_handler = NullSecretHandler(logger, None, None, "0")
27
28 ir = IR(aconf, file_checker=lambda path: True, secret_handler=secret_handler)
29
30 assert ir
31
32 return EnvoyConfig.generate(ir)
33
34
35@pytest.mark.compilertest
36def test_set_max_request_header():
37 yaml = """
38---
39apiVersion: getambassador.io/v3alpha1
40kind: Module
41metadata:
42 name: ambassador
43 namespace: default
44spec:
45 config:
46 max_request_headers_kb: 96
47---
48apiVersion: getambassador.io/v3alpha1
49kind: Mapping
50metadata:
51 name: ambassador
52 namespace: default
53spec:
54 hostname: "*"
55 prefix: /test/
56 service: test:9999
57"""
58 econf = _get_envoy_config(yaml)
59 expected = 96
60 key_found = False
61
62 conf = econf.as_dict()
63
64 for listener in conf["static_resources"]["listeners"]:
65 for filter_chain in listener["filter_chains"]:
66 for f in filter_chain["filters"]:
67 max_req_headers = f["typed_config"].get("max_request_headers_kb", None)
68 assert (
69 max_req_headers is not None
70 ), f"max_request_headers_kb not found on typed_config: {f['typed_config']}"
71
72 print(f"Found max_req_headers = {max_req_headers}")
73 key_found = True
74 assert expected == int(
75 max_req_headers
76 ), "max_request_headers_kb must equal the value set on the ambassador Module"
77 assert key_found, "max_request_headers_kb must be found in the envoy config"
78
79
80@pytest.mark.compilertest
81def test_set_max_request_header_v3():
82 yaml = """
83---
84apiVersion: getambassador.io/v3alpha1
85kind: Module
86metadata:
87 name: ambassador
88 namespace: default
89spec:
90 config:
91 max_request_headers_kb: 96
92---
93apiVersion: getambassador.io/v3alpha1
94kind: Mapping
95metadata:
96 name: ambassador
97 namespace: default
98spec:
99 hostname: "*"
100 prefix: /test/
101 service: test:9999
102"""
103 econf = _get_envoy_config(yaml)
104 expected = 96
105 key_found = False
106
107 conf = econf.as_dict()
108
109 for listener in conf["static_resources"]["listeners"]:
110 for filter_chain in listener["filter_chains"]:
111 for f in filter_chain["filters"]:
112 max_req_headers = f["typed_config"].get("max_request_headers_kb", None)
113 assert (
114 max_req_headers is not None
115 ), f"max_request_headers_kb not found on typed_config: {f['typed_config']}"
116
117 print(f"Found max_req_headers = {max_req_headers}")
118 key_found = True
119 assert expected == int(
120 max_req_headers
121 ), "max_request_headers_kb must equal the value set on the ambassador Module"
122 assert key_found, "max_request_headers_kb must be found in the envoy config"
View as plain text