mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 10:11:29 +08:00
The info gotten from uname is difficult to work with, so read the os name from /etc/os-release if it's available.
126 lines
7.2 KiB
PL/PgSQL
126 lines
7.2 KiB
PL/PgSQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_status(int) RETURNS JSONB
|
|
AS :MODULE_PATHNAME, 'ts_test_status' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_status_ssl(int) RETURNS JSONB
|
|
AS :MODULE_PATHNAME, 'ts_test_status_ssl' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_status_mock(text) RETURNS JSONB
|
|
AS :MODULE_PATHNAME, 'ts_test_status_mock' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_validate_server_version(response text)
|
|
RETURNS TEXT
|
|
AS :MODULE_PATHNAME, 'ts_test_validate_server_version' LANGUAGE C IMMUTABLE PARALLEL SAFE;
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_telemetry_main_conn(text, text)
|
|
RETURNS BOOLEAN AS :MODULE_PATHNAME, 'ts_test_telemetry_main_conn' LANGUAGE C IMMUTABLE PARALLEL SAFE;
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.test_telemetry(host text = NULL, servname text = NULL, port int = NULL) RETURNS JSONB AS :MODULE_PATHNAME, 'ts_test_telemetry' LANGUAGE C IMMUTABLE PARALLEL SAFE;
|
|
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
|
|
SELECT _timescaledb_internal.test_status_ssl(200);
|
|
SELECT _timescaledb_internal.test_status_ssl(201);
|
|
\set ON_ERROR_STOP 0
|
|
SELECT _timescaledb_internal.test_status_ssl(304);
|
|
SELECT _timescaledb_internal.test_status_ssl(400);
|
|
SELECT _timescaledb_internal.test_status_ssl(401);
|
|
SELECT _timescaledb_internal.test_status_ssl(404);
|
|
SELECT _timescaledb_internal.test_status_ssl(500);
|
|
SELECT _timescaledb_internal.test_status_ssl(503);
|
|
\set ON_ERROR_STOP 1
|
|
SELECT _timescaledb_internal.test_status(200);
|
|
SELECT _timescaledb_internal.test_status(201);
|
|
\set ON_ERROR_STOP 0
|
|
SELECT _timescaledb_internal.test_status(304);
|
|
SELECT _timescaledb_internal.test_status(400);
|
|
SELECT _timescaledb_internal.test_status(401);
|
|
SELECT _timescaledb_internal.test_status(404);
|
|
SELECT _timescaledb_internal.test_status(500);
|
|
SELECT _timescaledb_internal.test_status(503);
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- This function runs the test 5 times, because each time the internal C function is choosing a random length to send from the server on each socket read. We hit many cases this way.
|
|
CREATE OR REPLACE FUNCTION mocker(TEXT) RETURNS SETOF TEXT AS
|
|
$BODY$
|
|
DECLARE
|
|
r TEXT;
|
|
BEGIN
|
|
FOR i in 1..5 LOOP
|
|
SELECT _timescaledb_internal.test_status_mock($1) INTO r;
|
|
RETURN NEXT r;
|
|
END LOOP;
|
|
RETURN;
|
|
END
|
|
$BODY$
|
|
LANGUAGE 'plpgsql';
|
|
|
|
select * from mocker(
|
|
E'HTTP/1.1 200 OK\r\n'
|
|
'Content-Type: application/json; charset=utf-8\r\n'
|
|
'Date: Thu, 12 Jul 2018 18:33:04 GMT\r\n'
|
|
'ETag: W/\"e-upYEWCL+q6R/++2nWHz5b76hBgo\"\r\n'
|
|
'Server: nginx\r\n'
|
|
'Vary: Accept-Encoding\r\n'
|
|
'Content-Length: 14\r\n'
|
|
'Connection: Close\r\n\r\n'
|
|
'{\"status\":200}');
|
|
select * from mocker(
|
|
E'HTTP/1.1 201 OK\r\n'
|
|
'Content-Type: application/json; charset=utf-8\r\n'
|
|
'Vary: Accept-Encoding\r\n'
|
|
'Content-Length: 14\r\n'
|
|
'Connection: Close\r\n\r\n'
|
|
'{\"status\":201}');
|
|
|
|
\set ON_ERROR_STOP 0
|
|
\set test_string 'HTTP/1.1 404 Not Found\r\nContent-Length: 14\r\nConnection: Close\r\n\r\n{\"status\":404}';
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
\set test_string 'Content-Length: 14\r\nConnection: Close\r\n\r\n{\"status\":404}';
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
\set test_string 'HTTP/1.1 404 Not Found\r\nContent-Length: 14\r\nConnection: Close\r\n{\"status\":404}';
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
SELECT _timescaledb_internal.test_status_mock(:'test_string');
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- Test parsing version response
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"status": "200", "current_timescaledb_version": "10.1.0"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "10.1"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "10"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "9.2.0"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "9.1.2"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0"}');
|
|
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0-rc1"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0-rc2"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0-rc1"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0-alpha"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "123456789"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "!@#$%"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": ""}');
|
|
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": " 10 "}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "a"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "a.b.c"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "10.1.1a"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "10.1.1+rc1"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "10.1.1.1"}');
|
|
SELECT * FROM _timescaledb_internal.test_validate_server_version('{"current_timescaledb_version": "1.0.0-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"}');
|
|
SET timescaledb.telemetry_level=basic;
|
|
-- Connect to a bogus host and path to test error handling in telemetry_main()
|
|
SELECT _timescaledb_internal.test_telemetry_main_conn('noservice.timescale.com', 'path');
|
|
SET timescaledb.telemetry_level=off;
|
|
|
|
|
|
SELECT * FROM json_object_keys(get_telemetry_report()::json) AS key
|
|
WHERE key != 'os_name_pretty';
|