summaryrefslogtreecommitdiffhomepage
path: root/test/test_settings.py
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2023-03-21 19:20:23 +0000
committerAndrei Zeliankou <zelenkov@nginx.com>2023-03-21 19:20:23 +0000
commitb24257c8f6348619595d4ad615a7edc7f565b592 (patch)
tree1e5268d970713f633652be0320793c40f06c64b3 /test/test_settings.py
parent0ebce31c9287cb97b626d61b62e83681b2864fe8 (diff)
downloadunit-b24257c8f6348619595d4ad615a7edc7f565b592.tar.gz
unit-b24257c8f6348619595d4ad615a7edc7f565b592.tar.bz2
Tests: added tests for the "log_route" option.
Diffstat (limited to 'test/test_settings.py')
-rw-r--r--test/test_settings.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/test/test_settings.py b/test/test_settings.py
index 3ddc608a..21ab22d9 100644
--- a/test/test_settings.py
+++ b/test/test_settings.py
@@ -393,3 +393,157 @@ Connection: close
assert bool(resp), 'response from application 4'
assert resp['status'] == 200, 'status 4'
assert resp['body'] == body, 'body 4'
+
+ def test_settings_log_route(self):
+ def count_fallbacks():
+ return len(self.findall(r'"fallback" taken'))
+
+ def check_record(template):
+ assert self.search_in_log(template) is not None
+
+ def check_no_record(template):
+ assert self.search_in_log(template) is None
+
+ def template_req_line(url):
+ return rf'\[notice\].*http request line "GET {url} HTTP/1\.1"'
+
+ def template_selected(route):
+ return rf'\[notice\].*"{route}" selected'
+
+ def template_discarded(route):
+ return rf'\[info\].*"{route}" discarded'
+
+ def wait_for_request_log(status, uri, route):
+ assert self.get(url=uri)['status'] == status
+ assert self.wait_for_record(template_req_line(uri)) is not None
+ assert self.wait_for_record(template_selected(route)) is not None
+
+ # routes array
+
+ assert 'success' in self.conf(
+ {
+ "listeners": {"*:7080": {"pass": "routes"}},
+ "routes": [
+ {
+ "match": {
+ "uri": "/zero",
+ },
+ "action": {"return": 200},
+ },
+ {
+ "action": {"return": 201},
+ },
+ ],
+ "applications": {},
+ "settings": {"http": {"log_route": True}},
+ }
+ )
+
+ wait_for_request_log(200, '/zero', 'routes/0')
+ check_no_record(r'discarded')
+
+ wait_for_request_log(201, '/one', 'routes/1')
+ check_record(template_discarded('routes/0'))
+
+ # routes object
+
+ assert 'success' in self.conf(
+ {
+ "listeners": {"*:7080": {"pass": "routes/main"}},
+ "routes": {
+ "main": [
+ {
+ "match": {
+ "uri": "/named_route",
+ },
+ "action": {"return": 200},
+ },
+ {
+ "action": {"return": 201},
+ },
+ ]
+ },
+ "applications": {},
+ "settings": {"http": {"log_route": True}},
+ }
+ )
+
+ wait_for_request_log(200, '/named_route', 'routes/main/0')
+ check_no_record(template_discarded('routes/main'))
+
+ wait_for_request_log(201, '/unnamed_route', 'routes/main/1')
+ check_record(template_discarded('routes/main/0'))
+
+ # routes sequence
+
+ assert 'success' in self.conf(
+ {
+ "listeners": {"*:7080": {"pass": "routes/first"}},
+ "routes": {
+ "first": [
+ {
+ "action": {"pass": "routes/second"},
+ },
+ ],
+ "second": [
+ {
+ "action": {"return": 200},
+ },
+ ],
+ },
+ "applications": {},
+ "settings": {"http": {"log_route": True}},
+ }
+ )
+
+ wait_for_request_log(200, '/sequence', 'routes/second/0')
+ check_record(template_selected('routes/first/0'))
+
+ # fallback
+
+ assert 'success' in self.conf(
+ {
+ "listeners": {"*:7080": {"pass": "routes/fall"}},
+ "routes": {
+ "fall": [
+ {
+ "action": {
+ "share": "/blah",
+ "fallback": {"pass": "routes/fall2"},
+ },
+ },
+ ],
+ "fall2": [
+ {
+ "action": {"return": 200},
+ },
+ ],
+ },
+ "applications": {},
+ "settings": {"http": {"log_route": True}},
+ }
+ )
+
+ wait_for_request_log(200, '/', 'routes/fall2/0')
+ assert count_fallbacks() == 1
+ check_record(template_selected('routes/fall/0'))
+
+ assert self.head()['status'] == 200
+ assert count_fallbacks() == 2
+
+ # disable log
+
+ assert 'success' in self.conf({"log_route": False}, 'settings/http')
+
+ url = '/disable_logging'
+ assert self.get(url=url)['status'] == 200
+
+ time.sleep(1)
+
+ check_no_record(template_req_line(url))
+
+ # total
+
+ assert len(self.findall(r'\[notice\].*http request line')) == 7
+ assert len(self.findall(r'\[notice\].*selected')) == 10
+ assert len(self.findall(r'\[info\].*discarded')) == 2