...
1import logging
2from dataclasses import dataclass
3from typing import Optional
4
5from tests.utils import (
6 Compile,
7 default_http3_listener_manifest,
8 default_listener_manifests,
9 default_tcp_listener_manifest,
10 default_udp_listener_manifest,
11 logger,
12)
13
14
15def http3_quick_start_manifests():
16 return default_listener_manifests() + default_http3_listener_manifest()
17
18
19class TestIR:
20 def test_http3_enabled(self, caplog):
21 caplog.set_level(logging.WARNING, logger="ambassador")
22
23 @dataclass
24 class TestCase:
25 name: str
26 inputYaml: str
27 expected: dict[str, bool]
28 expectedLog: Optional[str] = None
29
30 testcases = [
31 TestCase(
32 "quick-start",
33 default_listener_manifests(),
34 {"tcp-0.0.0.0-8080": False, "tcp-0.0.0.0-8443": False},
35 ),
36 TestCase(
37 "quick-start-with_http3",
38 http3_quick_start_manifests(),
39 {"tcp-0.0.0.0-8080": False, "tcp-0.0.0.0-8443": True, "udp-0.0.0.0-8443": True},
40 ),
41 TestCase("http3-only", default_http3_listener_manifest(), {"udp-0.0.0.0-8443": True}),
42 TestCase("raw-udp", default_udp_listener_manifest(), {}),
43 TestCase("raw-tcp", default_tcp_listener_manifest(), {"tcp-0.0.0.0-8443": False}),
44 ]
45
46 for case in testcases:
47 compiled_ir = Compile(logger, case.inputYaml, k8s=True)
48 result_ir = compiled_ir["ir"]
49
50 listeners = result_ir.listeners
51
52 assert len(case.expected.items()) == len(listeners)
53
54 for listener_id, http3_enabled in case.expected.items():
55 listener = listeners.get(listener_id, None)
56 assert listener is not None
57 assert listener.http3_enabled == http3_enabled
58
59 if case.expectedLog != None:
60 assert case.expectedLog in caplog.text
View as plain text