Update unit tests

This commit is contained in:
Olof Rensfelt 2016-11-23 17:43:56 +01:00
parent a61ea9fe7c
commit 12f260f893
10 changed files with 141 additions and 37 deletions

27
sql/setup/set_meta.sh Executable file
View 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

View 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
1 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
2 1257987600000000000 f dev1 null one 1.5 6 const one
3 1257987600000000000 t dev1 null two 1.5 7 const two
4 1257897600000000000 f dev1 null null 1.5 5 const five
5 1257894002000000000 t dev1 null null 1.5 8 const three
6 1257894001000000000 t dev1 null null 1.5 4 const four
7 1257894000000001000 t dev1 null null 1.5 3 const three
8 1257894000000000000 f dev1 null null 1.5 2 const two
9 1257894000000000000 t dev1 null null 1.5 1 const one
10 1257894000000000000 t dev2 3 null 1.5 9 const one
11 1257894000000000000 t dev2 null null 1.5 10 const two

View 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
1 time bigint nUm_1 double precision
2 1257987600000000000 1.5
3 1257987600000000000 1.5
4 1257897600000000000 1.5
5 1257894002000000000 1.5
6 1257894001000000000 1.5
7 1257894000000001000 1.5
8 1257894000000000000 1.5
9 1257894000000000000 1.5
10 1257894000000000000 1.5
11 1257894000000000000 1.5

View File

@ -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

View File

@ -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

View 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');

View File

@ -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;

View File

@ -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;

View 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;

View 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;