mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-22 05:31:41 +08:00
Update unit tests
This commit is contained in:
parent
a61ea9fe7c
commit
12f260f893
27
sql/setup/set_meta.sh
Executable file
27
sql/setup/set_meta.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# To avoid pw writing, add localhost:5432:*:postgres:test to ~/.pgpass
|
||||
set -u
|
||||
set -e
|
||||
|
||||
PWD=`pwd`
|
||||
DIR=`dirname $0`
|
||||
|
||||
POSTGRES_HOST=${POSTGRES_HOST:-localhost}
|
||||
POSTGRES_USER=${POSTGRES_USER:-postgres}
|
||||
INSTALL_DB=${INSTALL_DB:-meta}
|
||||
|
||||
if [ "$#" -ne 2 ] ; then
|
||||
echo "usage: $0 name host"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NODENAME=$1
|
||||
NODEHOST=$2
|
||||
|
||||
echo "Connecting to $POSTGRES_HOST as user $POSTGRES_USER and with db $INSTALL_DB"
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB -v ON_ERROR_STOP=1 <<EOF
|
||||
SELECT set_meta('$NODENAME' :: NAME, '$NODEHOST'::text);
|
||||
EOF
|
||||
|
||||
cd $PWD
|
11
sql/tests/unit/expected_outputs/output_0.csv
Normal file
11
sql/tests/unit/expected_outputs/output_0.csv
Normal file
@ -0,0 +1,11 @@
|
||||
time bigint; bool_1 boolean; device_id text; field_only_dev2 double precision; field_only_ref2 text; nUm_1 double precision; num_2 double precision; string_1 text; string_2 text
|
||||
1257987600000000000;f;dev1;null;one;1.5;6;const;one
|
||||
1257987600000000000;t;dev1;null;two;1.5;7;const;two
|
||||
1257897600000000000;f;dev1;null;null;1.5;5;const;five
|
||||
1257894002000000000;t;dev1;null;null;1.5;8;const;three
|
||||
1257894001000000000;t;dev1;null;null;1.5;4;const;four
|
||||
1257894000000001000;t;dev1;null;null;1.5;3;const;three
|
||||
1257894000000000000;f;dev1;null;null;1.5;2;const;two
|
||||
1257894000000000000;t;dev1;null;null;1.5;1;const;one
|
||||
1257894000000000000;t;dev2;3;null;1.5;9;const;one
|
||||
1257894000000000000;t;dev2;null;null;1.5;10;const;two
|
|
11
sql/tests/unit/expected_outputs/output_1.csv
Normal file
11
sql/tests/unit/expected_outputs/output_1.csv
Normal file
@ -0,0 +1,11 @@
|
||||
time bigint; nUm_1 double precision
|
||||
1257987600000000000;1.5
|
||||
1257987600000000000;1.5
|
||||
1257897600000000000;1.5
|
||||
1257894002000000000;1.5
|
||||
1257894001000000000;1.5
|
||||
1257894000000001000;1.5
|
||||
1257894000000000000;1.5
|
||||
1257894000000000000;1.5
|
||||
1257894000000000000;1.5
|
||||
1257894000000000000;1.5
|
|
@ -14,12 +14,13 @@ echo "Connecting to $POSTGRES_HOST as user $POSTGRES_USER"
|
||||
|
||||
NODES="Test1 test2"
|
||||
DB_SETUPDIR="../../setup"
|
||||
|
||||
METANAME="meta"
|
||||
if [ $RESET_POSTGRES_DB == "true" ]; then
|
||||
echo "Cleaning up DB"
|
||||
|
||||
$DB_SETUPDIR/setup_meta.sh
|
||||
$DB_SETUPDIR/add_cluster_user.sh postgres
|
||||
$DB_SETUPDIR/set_meta.sh $METANAME $POSTGRES_HOST
|
||||
|
||||
for node in $NODES; do
|
||||
$DB_SETUPDIR/setup_node.sh $node
|
||||
@ -46,4 +47,7 @@ for test in $tests; do
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB -v ON_ERROR_STOP=1 -f $test
|
||||
done
|
||||
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB -v ON_ERROR_STOP=1 -f ./setup/start_tests.sql
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB -v ON_ERROR_STOP=1 -f ./setup/insert_data.sql
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB -v ON_ERROR_STOP=1 -f ./setup/start_tests.sql | tee testoutputs.tmp
|
||||
|
||||
grep "Failed tests : 0." testoutputs.tmp
|
||||
|
@ -17,23 +17,26 @@ echo "Connecting to $POSTGRES_HOST as user $POSTGRES_USER and with meta db $INST
|
||||
cd $DIR
|
||||
|
||||
# Todo - read the ns and fields from the csv/tsv file
|
||||
NAMESPACE="33_testNs"
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB_META -v ON_ERROR_STOP=1 <<EOF
|
||||
SELECT add_namespace('$NAMESPACE' :: NAME);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'device_id', 'text', TRUE, TRUE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'nUm_1', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'num_2', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'bool_1', 'boolean', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'string_1', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'string_2', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'field_only_ref2', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'field_only_dev2', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
NAMESPACES="33_testNs emptyNs"
|
||||
for NAMESPACE in $NAMESPACES; do
|
||||
psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB_META -v ON_ERROR_STOP=1 <<EOF
|
||||
SELECT add_hypertable('$NAMESPACE' :: NAME, 'device_id');
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'device_id', 'text', TRUE, TRUE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'nUm_1', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'num_2', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'bool_1', 'boolean', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'string_1', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'string_2', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'field_only_ref2', 'text', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
SELECT add_field('$NAMESPACE' :: NAME, 'field_only_dev2', 'double precision', FALSE, FALSE, ARRAY ['VALUE-TIME'] :: field_index_type []);
|
||||
EOF
|
||||
|
||||
done
|
||||
|
||||
INPUT_DATA_DIR="../import_data"
|
||||
FILE_SUFFIX=".tsv"
|
||||
DATASETS=`ls $INPUT_DATA_DIR/*$FILE_SUFFIX`
|
||||
TEMPTABLENAME="copy_t"
|
||||
TEMPTABLENAME="copy_t2"
|
||||
|
||||
for DS_PATH in $DATASETS; do
|
||||
DATASET=`basename $DS_PATH $FILE_SUFFIX`
|
||||
@ -44,7 +47,7 @@ psql -U $POSTGRES_USER -h $POSTGRES_HOST -d $INSTALL_DB_MAIN -v ON_ERROR_STOP=1
|
||||
BEGIN;
|
||||
DROP TABLE IF EXISTS $TEMPTABLENAME;
|
||||
SELECT *
|
||||
FROM create_temp_copy_table_one_partition('copy_t'::text, get_partition_for_key('$PARTITION_KEY'::text, 10 :: SMALLINT), 10 :: SMALLINT);
|
||||
FROM create_temp_copy_table('$TEMPTABLENAME');
|
||||
\COPY $TEMPTABLENAME FROM '$DS_PATH';
|
||||
CREATE SCHEMA IF NOT EXISTS test_input_data;
|
||||
DROP TABLE IF EXISTS test_input_data.$DATASET;
|
||||
@ -55,5 +58,5 @@ EOF
|
||||
done
|
||||
|
||||
cd $PWD
|
||||
|
||||
|
||||
|
3
sql/tests/unit/setup/insert_data.sql
Normal file
3
sql/tests/unit/setup/insert_data.sql
Normal file
@ -0,0 +1,3 @@
|
||||
SELECT insert_data('test_input_data.batch1_dev1');
|
||||
SELECT insert_data('test_input_data.batch1_dev2');
|
||||
SELECT insert_data('test_input_data.batch2_dev1');
|
@ -3,13 +3,19 @@ CREATE SCHEMA IF NOT EXISTS test_utils;
|
||||
CREATE OR REPLACE FUNCTION test_utils.test_query(query ioql_query, expected_table_schema text, expected_table text)
|
||||
RETURNS void
|
||||
AS
|
||||
$$
|
||||
$BODY$
|
||||
DECLARE
|
||||
cursor REFCURSOR;
|
||||
expected_record record;
|
||||
returned_record record;
|
||||
BEGIN
|
||||
SELECT ioql_exec_query_record_cursor(query, 'cursor') into cursor;
|
||||
--fix the ordering for equal time items
|
||||
OPEN cursor FOR EXECUTE format(
|
||||
$$
|
||||
SELECT *
|
||||
FROM (%s) as res
|
||||
ORDER BY time DESC NULLS LAST, res
|
||||
$$, ioql_exec_query_record_sql(query));
|
||||
|
||||
FOR expected_record in EXECUTE format('SELECT * FROM %I.%I', expected_table_schema, expected_table)
|
||||
LOOP
|
||||
@ -26,15 +32,21 @@ BEGIN
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
FETCH cursor INTO returned_record;
|
||||
IF FOUND = TRUE THEN
|
||||
RAISE EXCEPTION 'Unexpected row: %v', to_jsonb(returned_record);
|
||||
EXIT;
|
||||
END IF;
|
||||
|
||||
CLOSE cursor;
|
||||
END
|
||||
$$
|
||||
$BODY$
|
||||
LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION test_utils.query_to_table(query ioql_query, output_table text)
|
||||
RETURNS boolean
|
||||
AS
|
||||
$$
|
||||
AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
prepared_query text;
|
||||
BEGIN
|
||||
@ -43,5 +55,5 @@ BEGIN
|
||||
EXECUTE format('CREATE TABLE %I AS %s WITH DATA', output_table, prepared_query);
|
||||
RETURN TRUE;
|
||||
END
|
||||
$$
|
||||
LANGUAGE plpgsql;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql;
|
||||
|
@ -7,32 +7,32 @@ message test_result;
|
||||
success boolean;
|
||||
BEGIN
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text,
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text,
|
||||
NULL::aggregate_function_type)]), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'SUM'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'SUM'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, NULL)), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'AVG'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'AVG'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, NULL)), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'MAX'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'MAX'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, NULL)), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'MIN'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'MIN'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, NULL)), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'COUNT'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'COUNT'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, NULL)), 'test_outputs', 'empty_result');
|
||||
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => '33_testNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'SUM'::aggregate_function_type)],
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name => 'emptyNs',
|
||||
select_items => ARRAY[new_select_item('nUm_1'::text, 'SUM'::aggregate_function_type)],
|
||||
aggregate => new_aggregate(2592000000000000, 'device_id')), 'test_outputs', 'empty_result');
|
||||
|
||||
SELECT assert.ok('End of test.') INTO message;
|
||||
|
17
sql/tests/unit/tests/ioql_nonexisting_ns_test.sql
Normal file
17
sql/tests/unit/tests/ioql_nonexisting_ns_test.sql
Normal file
@ -0,0 +1,17 @@
|
||||
CREATE OR REPLACE FUNCTION unit_tests.test_unknown_ns()
|
||||
RETURNS test_result
|
||||
AS
|
||||
$$
|
||||
DECLARE
|
||||
message test_result;
|
||||
success boolean;
|
||||
BEGIN
|
||||
/*
|
||||
// Causes parse error
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name=>'UNKNOWN_NS'), 'test_outputs', 'empty_result');
|
||||
*/
|
||||
SELECT assert.ok('End of test.') INTO message;
|
||||
RETURN message;
|
||||
END
|
||||
$$
|
||||
LANGUAGE plpgsql;
|
16
sql/tests/unit/tests/ioql_queries_test.sql
Normal file
16
sql/tests/unit/tests/ioql_queries_test.sql
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
CREATE OR REPLACE FUNCTION unit_tests.test_ioql_queries()
|
||||
RETURNS test_result
|
||||
AS
|
||||
$$
|
||||
DECLARE
|
||||
message test_result;
|
||||
success boolean;
|
||||
BEGIN
|
||||
PERFORM test_utils.test_query(new_ioql_query(namespace_name=>'33_testNs'), 'test_outputs', 'output_0');
|
||||
SELECT assert.ok('End of test.') INTO message;
|
||||
RETURN message;
|
||||
END
|
||||
$$
|
||||
LANGUAGE plpgsql;
|
||||
|
Loading…
x
Reference in New Issue
Block a user