ClickHouse/tests/integration/test_http_handlers_config/test.py

208 lines
12 KiB
Python
Raw Normal View History

import contextlib
import os
2020-10-02 16:54:07 +00:00
import urllib.request, urllib.parse, urllib.error
from helpers.cluster import ClickHouseCluster
class SimpleCluster:
def close(self):
self.cluster.shutdown()
def __init__(self, cluster, name, config_dir):
self.cluster = cluster
self.instance = self.add_instance(name, config_dir)
cluster.start()
def add_instance(self, name, config_dir):
script_path = os.path.dirname(os.path.realpath(__file__))
2020-04-27 23:02:58 +00:00
return self.cluster.add_instance(name, main_configs=[os.path.join(script_path, config_dir, 'config.xml')])
def test_dynamic_query_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "dynamic_handler", "test_dynamic_handler")) as cluster:
2020-10-02 16:54:07 +00:00
test_query = urllib.parse.quote_plus('SELECT * FROM system.settings WHERE name = \'max_threads\'')
assert 404 == cluster.instance.http_request('?max_threads=1', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_dynamic_handler_get?max_threads=1', method='POST',
headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_dynamic_handler_get?max_threads=1', method='GET',
headers={'XXX': 'bad'}).status_code
assert 400 == cluster.instance.http_request('test_dynamic_handler_get?max_threads=1', method='GET',
headers={'XXX': 'xxx'}).status_code
assert 200 == cluster.instance.http_request(
'test_dynamic_handler_get?max_threads=1&get_dynamic_handler_query=' + test_query,
method='GET', headers={'XXX': 'xxx'}).status_code
2020-04-27 20:51:39 +00:00
def test_predefined_query_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "predefined_handler", "test_predefined_handler")) as cluster:
assert 404 == cluster.instance.http_request('?max_threads=1', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_predefined_handler_get?max_threads=1', method='GET',
headers={'XXX': 'bad'}).status_code
assert 404 == cluster.instance.http_request('test_predefined_handler_get?max_threads=1', method='POST',
headers={'XXX': 'xxx'}).status_code
assert 500 == cluster.instance.http_request('test_predefined_handler_get?max_threads=1', method='GET',
headers={'XXX': 'xxx'}).status_code
2020-04-26 11:06:14 +00:00
2020-10-02 16:54:07 +00:00
assert b'max_threads\t1\n' == cluster.instance.http_request(
'test_predefined_handler_get?max_threads=1&setting_name=max_threads', method='GET',
headers={'XXX': 'xxx'}).content
2020-04-26 11:06:14 +00:00
2020-10-02 16:54:07 +00:00
assert b'max_threads\t1\nmax_alter_threads\t1\n' == cluster.instance.http_request(
'query_param_with_url/max_threads?max_threads=1&max_alter_threads=1',
headers={'XXX': 'max_alter_threads'}).content
2020-04-26 11:06:14 +00:00
def test_fixed_static_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "static_handler", "test_static_handler")) as cluster:
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_get_fixed_static_handler', method='GET',
headers={'XXX': 'bad'}).status_code
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('test_get_fixed_static_handler', method='POST',
headers={'XXX': 'xxx'}).status_code
2020-04-26 11:06:14 +00:00
assert 402 == cluster.instance.http_request('test_get_fixed_static_handler', method='GET',
headers={'XXX': 'xxx'}).status_code
assert 'text/html; charset=UTF-8' == \
cluster.instance.http_request('test_get_fixed_static_handler', method='GET',
headers={'XXX': 'xxx'}).headers['Content-Type']
2020-10-02 16:54:07 +00:00
assert b'Test get static handler and fix content' == cluster.instance.http_request(
'test_get_fixed_static_handler', method='GET', headers={'XXX': 'xxx'}).content
2020-04-26 11:06:14 +00:00
def test_config_static_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "static_handler", "test_static_handler")) as cluster:
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_get_config_static_handler', method='GET',
headers={'XXX': 'bad'}).status_code
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('test_get_config_static_handler', method='POST',
headers={'XXX': 'xxx'}).status_code
2020-04-26 11:06:14 +00:00
# check default status code
assert 200 == cluster.instance.http_request('test_get_config_static_handler', method='GET',
headers={'XXX': 'xxx'}).status_code
assert 'text/plain; charset=UTF-8' == \
cluster.instance.http_request('test_get_config_static_handler', method='GET',
headers={'XXX': 'xxx'}).headers['Content-Type']
2020-10-02 16:54:07 +00:00
assert b'Test get static handler and config content' == cluster.instance.http_request(
'test_get_config_static_handler', method='GET', headers={'XXX': 'xxx'}).content
2020-04-26 11:06:14 +00:00
def test_absolute_path_static_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "static_handler", "test_static_handler")) as cluster:
2020-04-26 11:06:14 +00:00
cluster.instance.exec_in_container(
['bash', '-c',
'echo "<html><body>Absolute Path File</body></html>" > /var/lib/clickhouse/user_files/absolute_path_file.html'],
2020-04-26 11:06:14 +00:00
privileged=True, user='root')
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_get_absolute_path_static_handler', method='GET',
headers={'XXX': 'bad'}).status_code
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('test_get_absolute_path_static_handler', method='POST',
headers={'XXX': 'xxx'}).status_code
2020-04-26 11:06:14 +00:00
# check default status code
assert 200 == cluster.instance.http_request('test_get_absolute_path_static_handler', method='GET',
headers={'XXX': 'xxx'}).status_code
assert 'text/html; charset=UTF-8' == \
cluster.instance.http_request('test_get_absolute_path_static_handler', method='GET',
headers={'XXX': 'xxx'}).headers['Content-Type']
2020-10-02 16:54:07 +00:00
assert b'<html><body>Absolute Path File</body></html>\n' == cluster.instance.http_request(
'test_get_absolute_path_static_handler', method='GET', headers={'XXX': 'xxx'}).content
2020-04-26 11:06:14 +00:00
def test_relative_path_static_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "static_handler", "test_static_handler")) as cluster:
2020-04-26 11:06:14 +00:00
cluster.instance.exec_in_container(
['bash', '-c',
'echo "<html><body>Relative Path File</body></html>" > /var/lib/clickhouse/user_files/relative_path_file.html'],
2020-04-26 11:06:14 +00:00
privileged=True, user='root')
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_get_relative_path_static_handler', method='GET',
headers={'XXX': 'bad'}).status_code
2020-04-26 11:06:14 +00:00
assert 404 == cluster.instance.http_request('test_get_relative_path_static_handler', method='POST',
headers={'XXX': 'xxx'}).status_code
2020-04-26 11:06:14 +00:00
# check default status code
assert 200 == cluster.instance.http_request('test_get_relative_path_static_handler', method='GET',
headers={'XXX': 'xxx'}).status_code
assert 'text/html; charset=UTF-8' == \
cluster.instance.http_request('test_get_relative_path_static_handler', method='GET',
headers={'XXX': 'xxx'}).headers['Content-Type']
2020-10-02 16:54:07 +00:00
assert b'<html><body>Relative Path File</body></html>\n' == cluster.instance.http_request(
'test_get_relative_path_static_handler', method='GET', headers={'XXX': 'xxx'}).content
2020-06-12 10:19:03 +00:00
def test_defaults_http_handlers():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "defaults_handlers", "test_defaults_handlers")) as cluster:
2020-06-12 10:19:03 +00:00
assert 200 == cluster.instance.http_request('', method='GET').status_code
2020-10-02 16:54:07 +00:00
assert b'Default server response' == cluster.instance.http_request('', method='GET').content
2020-06-12 10:19:03 +00:00
assert 200 == cluster.instance.http_request('ping', method='GET').status_code
2020-10-02 16:54:07 +00:00
assert b'Ok.\n' == cluster.instance.http_request('ping', method='GET').content
2020-06-12 10:19:03 +00:00
2020-08-14 13:16:07 +00:00
assert 200 == cluster.instance.http_request('replicas_status', method='get').status_code
2020-10-02 16:54:07 +00:00
assert b'Ok.\n' == cluster.instance.http_request('replicas_status', method='get').content
2020-08-14 13:16:07 +00:00
assert 200 == cluster.instance.http_request('replicas_status?verbose=1', method='get').status_code
2020-10-02 16:54:07 +00:00
assert b'' == cluster.instance.http_request('replicas_status?verbose=1', method='get').content
2020-06-12 10:19:03 +00:00
2020-06-15 11:33:44 +00:00
assert 200 == cluster.instance.http_request('?query=SELECT+1', method='GET').status_code
2020-10-02 16:54:07 +00:00
assert b'1\n' == cluster.instance.http_request('?query=SELECT+1', method='GET').content
2020-06-15 11:33:44 +00:00
def test_prometheus_handler():
with contextlib.closing(
SimpleCluster(ClickHouseCluster(__file__), "prometheus_handler", "test_prometheus_handler")) as cluster:
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
2020-06-12 10:19:03 +00:00
assert 404 == cluster.instance.http_request('test_prometheus', method='GET', headers={'XXX': 'bad'}).status_code
assert 404 == cluster.instance.http_request('test_prometheus', method='POST',
headers={'XXX': 'xxx'}).status_code
assert 200 == cluster.instance.http_request('test_prometheus', method='GET', headers={'XXX': 'xxx'}).status_code
2020-10-02 16:54:07 +00:00
assert b'ClickHouseProfileEvents_Query' in cluster.instance.http_request('test_prometheus', method='GET',
headers={'XXX': 'xxx'}).content
def test_replicas_status_handler():
with contextlib.closing(SimpleCluster(ClickHouseCluster(__file__), "replicas_status_handler",
"test_replicas_status_handler")) as cluster:
assert 404 == cluster.instance.http_request('', method='GET', headers={'XXX': 'xxx'}).status_code
assert 404 == cluster.instance.http_request('test_replicas_status', method='GET',
headers={'XXX': 'bad'}).status_code
assert 404 == cluster.instance.http_request('test_replicas_status', method='POST',
headers={'XXX': 'xxx'}).status_code
2020-06-12 10:19:03 +00:00
assert 200 == cluster.instance.http_request('test_replicas_status', method='GET',
headers={'XXX': 'xxx'}).status_code
2020-10-02 16:54:07 +00:00
assert b'Ok.\n' == cluster.instance.http_request('test_replicas_status', method='GET',
headers={'XXX': 'xxx'}).content