From 4c4e595e037799b52255131dfa3e888053fe869d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Mond=C3=A9jar=20Rubio?= Date: Tue, 11 Jan 2022 11:03:19 +0100 Subject: [PATCH] Refactor tests to make scripts POSIX compliant --- Makefile | 4 +- test/extension/test.sh | 288 +++++++++------------------------ test/helpers.sh | 170 +++++++++++++++++++ test/organization/test.sh | 280 ++++++++++---------------------- util/create_from_unpackaged.sh | 2 +- 5 files changed, 329 insertions(+), 415 deletions(-) create mode 100644 test/helpers.sh diff --git a/Makefile b/Makefile index 4678955d..cde58616 100644 --- a/Makefile +++ b/Makefile @@ -209,10 +209,10 @@ legacy_regress: $(REGRESS_OLD) Makefile done test_organization: - bash test/organization/test.sh + sh test/organization/test.sh test_extension_new: - bash test/extension/test.sh + sh test/extension/test.sh legacy_tests: legacy_regress $(EXTENSION)--unpackaged--$(EXTVERSION).sql diff --git a/test/extension/test.sh b/test/extension/test.sh index aab19f3b..cd736d33 100755 --- a/test/extension/test.sh +++ b/test/extension/test.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh # # Tests for the extension since version 0.5.0. They don't replace SQL based ones, for now need to run both @@ -6,181 +6,86 @@ # It is expected that you run this script as a PostgreSQL superuser, for example: # -# PGUSER=postgres bash ./test.sh +# PGUSER=postgres ./test.sh # DATABASE=test_extension -CMD='echo psql' CMD=psql -SED=sed OK=0 PARTIALOK=0 -function reset_default_database() { - DATABASE=test_extension -} - -function set_failed() { - OK=1 - PARTIALOK=1 -} +# Load common test helpers +TESTSPATH="$( cd -- "$(dirname "$(dirname "$0")")" >/dev/null 2>&1 ; pwd -P )" +. "${TESTSPATH}/helpers.sh" - -function clear_partial_result() { - PARTIALOK=0 +reset_default_database() { + DATABASE=test_extension } - -function sql() { - local ROLE - local QUERY - if [[ $# -ge 2 ]] +sql() { + sql_ROLE="" + if [ $# -ge 2 ] then - ROLE="$1" - QUERY="$2" + sql_ROLE="$1" + sql_QUERY="$2" else - QUERY="$1" + sql_QUERY="$1" fi - if [ -n "${ROLE}" ]; then - log_debug "Executing query '${QUERY}' as '${ROLE}' in '${DATABASE}'" - RESULT=`${CMD} -U "${ROLE}" ${DATABASE} -c "${QUERY}" -A -t` + if [ -n "${sql_ROLE}" ]; then + log_debug "Executing query '${sql_QUERY}' as '${sql_ROLE}' in '${DATABASE}'" + sql_RESULT=$(${CMD} -U "${sql_ROLE}" ${DATABASE} -c "${sql_QUERY}" -A -t) else - log_debug "Executing query '${QUERY}' in '${DATABASE}'" - RESULT=`${CMD} ${DATABASE} -c "${QUERY}" -A -t` + log_debug "Executing query '${sql_QUERY}' in '${DATABASE}'" + sql_RESULT=$(${CMD} ${DATABASE} -c "${sql_QUERY}" -A -t) fi - CODERESULT=$? + sql_CODERESULT=$? - echo ${RESULT} - echo + printf "%s\n\n" "${sql_RESULT}" - if [[ ${CODERESULT} -ne 0 ]] + if [ ${sql_CODERESULT} -ne 0 ] then - echo -n "FAILED TO EXECUTE QUERY: " - log_warning "${QUERY}" - if [[ "$3" != "fails" ]] + printf "FAILED TO EXECUTE QUERY: " + log_warning "${sql_QUERY}" + if [ "$3" != "fails" ] then - log_error "${QUERY}" + log_error "${sql_QUERY}" set_failed fi else - if [[ "$3" == "fails" ]] + if [ "$3" = "fails" ] then - log_error "QUERY: '${QUERY}' was expected to fail and it did not fail" + log_error "QUERY: '${sql_QUERY}' was expected to fail and it did not fail" set_failed fi fi - if [[ "$3" == "should" ]] + if [ "$3" = "should" ] then - if [[ "${RESULT}" != "$4" ]] + if [ "${sql_RESULT}" != "$4" ] then - log_error "QUERY '${QUERY}' expected result '${4}' but got '${RESULT}'" + log_error "QUERY '${sql_QUERY}' expected result '${4}' but got '${sql_RESULT}'" set_failed fi fi - if [[ "$3" == "should-not" ]] + if [ "$3" = "should-not" ] then - if [[ "${RESULT}" == "$4" ]] + if [ "${sql_RESULT}" = "$4" ] then - log_error "QUERY '${QUERY}' did not expect '${RESULT}'" + log_error "QUERY '${sql_QUERY}' did not expect '${sql_RESULT}'" set_failed fi fi -} - - -function log_info() -{ - echo - echo - echo - _log "1;34m" "$1" -} - -function log_error() { - _log "1;31m" "$1" -} - -function log_debug() { - _log "1;32m" "> $1" -} - -function log_warning() { - _log "0;33m" "$1" -} - -function _log() { - echo -e "\033[$1$2\033[0m" -} - -# '############################ HELPERS #############################' -function create_role_and_schema() { - local ROLE=$1 - sql "CREATE ROLE ${ROLE} LOGIN;" - sql "GRANT CONNECT ON DATABASE \"${DATABASE}\" TO ${ROLE};" - sql "CREATE SCHEMA ${ROLE} AUTHORIZATION ${ROLE};" - sql "GRANT USAGE ON SCHEMA cartodb TO ${ROLE};" - sql "SELECT cartodb.CDB_Organization_Create_Member('${ROLE}');" - sql "ALTER ROLE ${ROLE} SET search_path TO ${ROLE},cartodb,public;" -} - - -function drop_role_and_schema() { - local ROLE=$1 - sql "REVOKE USAGE ON SCHEMA cartodb FROM ${ROLE};" - sql "DROP SCHEMA \"${ROLE}\" CASCADE;" - sql "REVOKE CONNECT ON DATABASE \"${DATABASE}\" FROM \"${ROLE}\";" - sql "DROP ROLE \"${ROLE}\";" -} - - -function create_table() { - if [[ $# -ne 2 ]] - then - log_error "create_table requires two arguments: role and table_name" - exit 1 - fi - local ROLE="$1" - local TABLENAME="$2" - sql ${ROLE} "CREATE TABLE ${ROLE}.${TABLENAME} ( a int );" -} - - -function create_raster_table() { - if [[ $# -ne 2 ]] - then - log_error "create_raster_table requires two arguments: role and table_name" - exit 1 - fi - local RASTER_COL="the_raster_webmercator" - local ROLE="$1" - local TABLENAME="$2" - local OVERVIEW_TABLENAME="o_2_${TABLENAME}" - sql ${ROLE} "CREATE TABLE ${ROLE}.${TABLENAME} (rid serial PRIMARY KEY, ${RASTER_COL} raster);" - sql ${ROLE} "CREATE TABLE ${ROLE}.${OVERVIEW_TABLENAME} (rid serial PRIMARY KEY, ${RASTER_COL} raster);" - - sql ${ROLE} "SELECT AddOverviewConstraints('${ROLE}','${OVERVIEW_TABLENAME}','${RASTER_COL}','${ROLE}','${TABLENAME}','${RASTER_COL}',2);" + unset sql_ROLE + unset sql_QUERY + unset sql_RESULT + unset sql_CODERESULT } -function drop_raster_table() { - if [[ $# -ne 2 ]] - then - log_error "drop_raster_table requires two arguments: role and table_name" - exit 1 - fi - local ROLE="$1" - local TABLENAME="$2" - local OVERVIEW_TABLENAME="o_2_${TABLENAME}" - - sql ${ROLE} "DROP TABLE ${ROLE}.${OVERVIEW_TABLENAME};" - sql ${ROLE} "DROP TABLE ${ROLE}.${TABLENAME};" -} - -function setup_database() { +setup_database() { ${CMD} -c "CREATE DATABASE ${DATABASE}" sql "CREATE EXTENSION postgis;" sql postgres "DO @@ -195,7 +100,7 @@ END ${CMD} -c "ALTER DATABASE ${DATABASE} SET search_path = public, cartodb;" } -function setup() { +setup() { setup_database log_info "############################# SETUP #############################" @@ -212,10 +117,11 @@ function setup() { } -function tear_down_database() { +tear_down_database() { ${CMD} -c "DROP DATABASE ${DATABASE}" } -function tear_down() { + +tear_down() { reset_default_database log_info "########################### USER TEAR DOWN ###########################" @@ -241,52 +147,8 @@ function tear_down() { } -function run_tests() { - local FAILED_TESTS=() - - local TESTS - if [[ $# -ge 1 ]] - then - if [[ $# -eq 1 ]] - then - TESTS=`cat $0 | grep -o "$1[^\(]*"` - else - TESTS="$@" - fi - else - TESTS=`cat $0 | perl -n -e'/function (test.*)\(\)/ && print "$1\n"'` - fi - setup - for t in ${TESTS} - do - echo "####################################################################" - echo "#" - echo "# Running: ${t}" - echo "#" - echo "####################################################################" - - clear_partial_result - eval ${t} - if [[ ${PARTIALOK} -ne 0 ]] - then - FAILED_TESTS+=(${t}) - fi - done - tear_down - if [[ ${OK} -ne 0 ]] - then - echo - log_error "The following tests are failing:" - printf -- '\t%s\n' "${FAILED_TESTS[@]}" - fi -} - - -#################################################### TESTS GO HERE #################################################### - - # Tests quota checking taking into account both geom and raster tables -function test_quota_for_each_user() { +test_quota_for_each_user() { # Normal tables add 4096 bytes # Raster tables no longer add anything so also count as 4096 @@ -312,7 +174,7 @@ function test_quota_for_each_user() { sql cdb_testmember_2 "SELECT cartodb.CDB_UserDataSize('cdb_testmember_2'::TEXT);" should 4096 } -function test_cdb_tablemetadatatouch() { +test_cdb_tablemetadatatouch() { sql postgres "CREATE TABLE touch_example (a int)" sql postgres "SELECT updated_at FROM CDB_TableMetadata WHERE tabname = 'touch_example'::regclass;" should '' sql postgres "SELECT CDB_TableMetadataTouch('touch_example');" @@ -331,7 +193,7 @@ function test_cdb_tablemetadatatouch() { # Works with OID sql postgres "SELECT tabname from CDB_TableMetadata;" should 'touch_example' sql postgres "SELECT count(*) from CDB_TableMetadata;" should 1 - TABLE_OID=`${CMD} -U postgres ${DATABASE} -c "SELECT attrelid FROM pg_attribute WHERE attrelid = 'touch_example'::regclass limit 1;" -A -t` + TABLE_OID=$(${CMD} -U postgres ${DATABASE} -c "SELECT attrelid FROM pg_attribute WHERE attrelid = 'touch_example'::regclass limit 1;" -A -t) # quoted OID works sql postgres "SELECT CDB_TableMetadataTouch('${TABLE_OID}');" @@ -347,11 +209,11 @@ function test_cdb_tablemetadatatouch() { sql postgres 'DROP TABLE touch_example;' } -function test_cdb_tablemetadatatouch_fails_for_unexistent_table() { +test_cdb_tablemetadatatouch_fails_for_unexistent_table() { sql cdb_testmember_1 "SELECT CDB_TableMetadataTouch('unexistent_example');" fails } -function test_cdb_tablemetadatatouch_fails_from_user_without_permission() { +test_cdb_tablemetadatatouch_fails_from_user_without_permission() { sql postgres "CREATE TABLE touch_example (a int);" sql postgres "SELECT CDB_TableMetadataTouch('touch_example');" @@ -366,7 +228,7 @@ function test_cdb_tablemetadatatouch_fails_from_user_without_permission() { sql postgres 'DROP TABLE touch_example;' } -function test_cdb_tablemetadatatouch_fully_qualifies_names() { +test_cdb_tablemetadatatouch_fully_qualifies_names() { sql postgres "CREATE TABLE touch_invalidations (table_name text);" sql postgres "create or replace function cartodb.cdb_invalidate_varnish(table_name text) returns void as \$\$ begin insert into public.touch_invalidations select table_name; end; \$\$ language 'plpgsql';" @@ -401,7 +263,7 @@ function test_cdb_tablemetadatatouch_fully_qualifies_names() { sql postgres 'DROP TABLE touch_invalidations' } -function test_cdb_tablemetadata_text() { +test_cdb_tablemetadata_text() { #create and touch tables sql postgres "CREATE TABLE touch_ex_a (id int);" @@ -412,26 +274,26 @@ function test_cdb_tablemetadata_text() { sql postgres "SELECT CDB_TableMetadataTouch('touch_ex_c');" #ensure there is 1 record per table - QUERY="SELECT COUNT(1) FROM (SELECT 1 FROM cdb_tablemetadata_text " - QUERY+="GROUP BY tabname HAVING COUNT(1) > 1) s;" - sql postgres "$QUERY" should "0" + test_cdb_tablemetadata_text_QUERY="SELECT COUNT(1) FROM (SELECT 1 FROM cdb_tablemetadata_text + GROUP BY tabname HAVING COUNT(1) > 1) s;" + sql postgres "$test_cdb_tablemetadata_text_QUERY" should "0" #ensure timestamps are distinct and properly ordered - QUERY="SELECT (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_a')" - QUERY+=" < (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_b');" - sql postgres "$QUERY" should "t" - QUERY="SELECT (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_b')" - QUERY+=" < (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_c');" - sql postgres "$QUERY" should "t" + test_cdb_tablemetadata_text_QUERY="SELECT (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_a') + < (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_b');" + sql postgres "$test_cdb_tablemetadata_text_QUERY" should "t" + test_cdb_tablemetadata_text_QUERY="SELECT (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_b') + < (SELECT updated_at FROM CDB_TableMetadata_Text WHERE tabname='public.touch_ex_c');" + sql postgres "$test_cdb_tablemetadata_text_QUERY" should "t" #cleanup sql postgres "DROP TABLE touch_ex_a;" sql postgres "DROP TABLE touch_ex_b;" sql postgres "DROP TABLE touch_ex_c;" - + unset test_cdb_tablemetadata_text_QUERY } -function test_cdb_column_names() { +test_cdb_column_names() { sql cdb_testmember_1 'CREATE TABLE cdb_testmember_1.table_cnames(c int, a int, r int, t int, o int);' sql cdb_testmember_2 'CREATE TABLE cdb_testmember_2.table_cnames(d int, b int);' @@ -451,7 +313,7 @@ function test_cdb_column_names() { sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.table_cnames' } -function test_cdb_column_type() { +test_cdb_column_type() { sql cdb_testmember_1 'CREATE TABLE cdb_testmember_1.table_ctype(c int, a int, r int, t int, o int);' sql cdb_testmember_2 'CREATE TABLE cdb_testmember_2.table_ctype(c text, a text, r text, t text, o text);' @@ -465,7 +327,7 @@ function test_cdb_column_type() { sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.table_ctype' } -function test_cdb_querytables_schema_and_table_names_with_dots() { +test_cdb_querytables_schema_and_table_names_with_dots() { sql postgres 'CREATE SCHEMA "foo.bar";' sql postgres 'CREATE TABLE "foo.bar"."c.a.r.t.o.d.b" (a int);' sql postgres 'INSERT INTO "foo.bar"."c.a.r.t.o.d.b" values (1);' @@ -478,7 +340,7 @@ function test_cdb_querytables_schema_and_table_names_with_dots() { sql postgres 'DROP SCHEMA "foo.bar";' } -function test_cdb_querytables_table_name_with_dots() { +test_cdb_querytables_table_name_with_dots() { sql postgres 'CREATE TABLE "w.a.d.u.s" (a int);'; sql postgres 'SELECT CDB_QueryTablesText($q$select * from "w.a.d.u.s"$q$);' should '{"public.\"w.a.d.u.s\""}' @@ -487,7 +349,7 @@ function test_cdb_querytables_table_name_with_dots() { sql postgres 'DROP TABLE "w.a.d.u.s";'; } -function test_cdb_querytables_happy_cases() { +test_cdb_querytables_happy_cases() { sql postgres 'CREATE TABLE wadus (a int);'; sql postgres 'CREATE TABLE "FOOBAR" (a int);'; sql postgres 'CREATE SCHEMA foo;' @@ -508,7 +370,7 @@ function test_cdb_querytables_happy_cases() { sql postgres 'DROP SCHEMA foo;' } -function test_foreign_tables() { +test_foreign_tables() { DATABASE=fdw_target setup_database DATABASE=fdw_target sql postgres "DO @@ -542,7 +404,7 @@ END # Add PGPORT to conf if it is set PORT_SPEC="" - if [[ "$PGPORT" != "" ]] ; then + if [ "$PGPORT" != "" ]; then PORT_SPEC=", \"port\": \"$PGPORT\"" fi sql postgres "SELECT cartodb.CDB_Conf_SetConf('fdws', '{\"test_fdw\": {\"server\": {\"host\": \"localhost\", \"dbname\": \"fdw_target\" $PORT_SPEC }, @@ -571,10 +433,10 @@ test_fdw|foo|test_fdw" sql postgres 'CREATE TABLE local (b int);' sql postgres 'INSERT INTO local (b) VALUES (43);' sql postgres "SELECT cdb_tablemetadatatouch('public.local'::regclass);" - local query='$query$ SELECT * FROM test_fdw.foo, local $query$::text' - sql postgres "SELECT dbname, schema_name, table_name FROM cartodb.CDB_QueryTables_Updated_At(${query}) ORDER BY dbname;" should 'fdw_target|test_fdw|foo + test_foreign_tables_QUERY='$query$ SELECT * FROM test_fdw.foo, local $query$::text' + sql postgres "SELECT dbname, schema_name, table_name FROM cartodb.CDB_QueryTables_Updated_At(${test_foreign_tables_QUERY}) ORDER BY dbname;" should 'fdw_target|test_fdw|foo test_extension|public|local' - sql postgres "SELECT table_name FROM cartodb.CDB_QueryTables_Updated_At(${query}) order by updated_at;" should 'foo + sql postgres "SELECT table_name FROM cartodb.CDB_QueryTables_Updated_At(${test_foreign_tables_QUERY}) order by updated_at;" should 'foo local' # Check function CDB_Last_Updated_Time @@ -585,8 +447,8 @@ local' sql postgres 'CREATE TABLE "local-table-with-dashes" (c int)'; sql postgres 'INSERT INTO "local-table-with-dashes" (c) VALUES (44)'; sql postgres "SELECT cdb_tablemetadatatouch('public.local-table-with-dashes'::regclass);" - query='$query$ SELECT * FROM test_fdw.foo, local, public."local-table-with-dashes" $query$::text' - sql postgres "SELECT dbname, schema_name, table_name FROM cartodb.CDB_QueryTables_Updated_At(${query}) ORDER BY dbname, schema_name, table_name;" should 'fdw_target|test_fdw|foo + test_foreign_tables_QUERY='$query$ SELECT * FROM test_fdw.foo, local, public."local-table-with-dashes" $query$::text' + sql postgres "SELECT dbname, schema_name, table_name FROM cartodb.CDB_QueryTables_Updated_At(${test_foreign_tables_QUERY}) ORDER BY dbname, schema_name, table_name;" should 'fdw_target|test_fdw|foo test_extension|public|local test_extension|public|"local-table-with-dashes"' @@ -609,17 +471,17 @@ test_extension|public|"local-table-with-dashes"' sql postgres "select pg_terminate_backend(pid) from pg_stat_activity where datname='fdw_target';" DATABASE=fdw_target tear_down_database reset_default_database + + unset test_foreign_tables_QUERY } -function test_cdb_catalog_basic_node() { +test_cdb_catalog_basic_node() { DEF="'{\"type\":\"buffer\",\"source\":\"b2db66bc7ac02e135fd20bbfef0fdd81b2d15fad\",\"radio\":10000}'" sql postgres "INSERT INTO cartodb.cdb_analysis_catalog (node_id, analysis_def) VALUES ('1bbc4c41ea7c9d3a7dc1509727f698b7', ${DEF}::json)" sql postgres "SELECT status from cartodb.cdb_analysis_catalog where node_id = '1bbc4c41ea7c9d3a7dc1509727f698b7'" should 'pending' sql postgres "DELETE FROM cartodb.cdb_analysis_catalog" } -#################################################### TESTS END HERE #################################################### - -run_tests $@ +run_tests "$@" exit ${OK} diff --git a/test/helpers.sh b/test/helpers.sh new file mode 100644 index 00000000..f8268bd4 --- /dev/null +++ b/test/helpers.sh @@ -0,0 +1,170 @@ +#!/usr/bin/env sh + +set_failed() { + OK=1 + PARTIALOK=1 +} + + +clear_partial_result() { + PARTIALOK=0 +} + +log_info() +{ + printf "\n\n\n" + _log "1;34m" "$1" +} + +log_error() { + _log "1;31m" "$1" +} + +log_debug() { + _log "1;32m" "> $1" +} + +log_warning() { + _log "0;33m" "$1" +} + +_log() { + printf "\033[$1%s\033[0m\n" "$2" +} + + +create_role_and_schema() { + create_role_and_schema_ROLE="$1" + sql "CREATE ROLE ${create_role_and_schema_ROLE} LOGIN;" + sql "GRANT CONNECT ON DATABASE \"${DATABASE}\" TO ${create_role_and_schema_ROLE};" + sql "CREATE SCHEMA ${create_role_and_schema_ROLE} AUTHORIZATION ${create_role_and_schema_ROLE};" + sql "GRANT USAGE ON SCHEMA cartodb TO ${create_role_and_schema_ROLE};" + sql "SELECT cartodb.CDB_Organization_Create_Member('${create_role_and_schema_ROLE}');" + sql "ALTER ROLE ${create_role_and_schema_ROLE} SET search_path TO ${create_role_and_schema_ROLE},cartodb,public;" + unset create_role_and_schema_ROLE +} + + +drop_role_and_schema() { + drop_role_and_schema_ROLE="$1" + sql "REVOKE USAGE ON SCHEMA cartodb FROM ${drop_role_and_schema_ROLE};" + sql "DROP SCHEMA \"${drop_role_and_schema_ROLE}\" CASCADE;" + sql "REVOKE CONNECT ON DATABASE \"${DATABASE}\" FROM \"${drop_role_and_schema_ROLE}\";" + sql "DROP ROLE \"${drop_role_and_schema_ROLE}\";" + unset drop_role_and_schema_ROLE +} + + +create_table() { + if [ $# -ne 2 ] + then + log_error "create_table requires two arguments: role and table_name" + exit 1 + fi + + create_table_ROLE="$1" + create_table_TABLENAME="$2" + + sql "${create_table_ROLE}" "CREATE TABLE ${create_table_ROLE}.${create_table_TABLENAME} ( a int );" + + unset create_table_ROLE + unset create_table_TABLENAME +} + + +create_raster_table() { + if [ $# -ne 2 ] + then + log_error "create_raster_table requires two arguments: role and table_name" + exit 1 + fi + + create_raster_table_RASTER_COL="the_raster_webmercator" + create_raster_table_ROLE="$1" + create_raster_table_TABLENAME="$2" + create_raster_table_OVERVIEW_TABLENAME="o_2_${create_raster_table_TABLENAME}" + + sql "${create_raster_table_ROLE}" "CREATE TABLE ${create_raster_table_ROLE}.${create_raster_table_TABLENAME} (rid serial PRIMARY KEY, ${create_raster_table_RASTER_COL} raster);" + + sql "${create_raster_table_ROLE}" "CREATE TABLE ${create_raster_table_ROLE}.${create_raster_table_OVERVIEW_TABLENAME} (rid serial PRIMARY KEY, ${create_raster_table_RASTER_COL} raster);" + + sql "${create_raster_table_ROLE}" "SELECT AddOverviewConstraints('${create_raster_table_ROLE}','${create_raster_table_OVERVIEW_TABLENAME}','${create_raster_table_RASTER_COL}','${create_raster_table_ROLE}','${create_raster_table_TABLENAME}','${create_raster_table_RASTER_COL}',2);" + + unset create_raster_table_RASTER_COL + unset create_raster_table_ROLE + unset create_raster_table_TABLENAME + unset create_raster_table_OVERVIEW_TABLENAME +} + +drop_raster_table() { + if [ $# -ne 2 ] + then + log_error "drop_raster_table requires two arguments: role and table_name" + exit 1 + fi + + drop_raster_table_ROLE="$1" + drop_raster_table_TABLENAME="$2" + drop_raster_table_OVERVIEW_TABLENAME="o_2_${drop_raster_table_TABLENAME}" + + sql "${drop_raster_table_ROLE}" "DROP TABLE ${drop_raster_table_ROLE}.${drop_raster_table_OVERVIEW_TABLENAME};" + sql "${drop_raster_table_ROLE}" "DROP TABLE ${drop_raster_table_ROLE}.${drop_raster_table_TABLENAME};" + + unset drop_raster_table_ROLE + unset drop_raster_table_TABLENAME + unset drop_raster_table_OVERVIEW_TABLENAME +} + +truncate_table() { + if [ $# -ne 2 ] + then + log_error "truncate_table requires two arguments: role and table_name" + exit 1 + fi + truncate_table_ROLE="$1" + truncate_table_TABLENAME="$2" + sql ${truncate_table_ROLE} "TRUNCATE TABLE ${truncate_table_ROLE}.${truncate_table_TABLENAME};" + unset truncate_table_ROLE + unset truncate_table_TABLENAME +} + +run_tests() { + run_tests_FAILED_TESTS="" + if [ $# -ge 1 ] + then + if [ $# -eq 1 ] + then + run_tests_TESTS=$(< "$0" grep -o "$1[^\(]*") + else + run_tests_TESTS=$@ + fi + else + run_tests_TESTS=$(< "$0" perl -n -e'/^(test.*)\(\)/ && print "$1\n"') + fi + setup + for t in ${run_tests_TESTS} + do + printf "####################################################################\n" + printf "#\n" + printf "# Running: %s\n" "${t}" + printf "#\n" + printf "####################################################################\n" + + clear_partial_result + eval "${t}" + if [ ${PARTIALOK} -ne 0 ] + then + run_tests_FAILED_TESTS="${run_tests_FAILED_TESTS}\n\t${t}" + fi + done + tear_down + if [ ${OK} -ne 0 ] + then + printf "\n" + log_error "The following tests are failing:" + printf '%s\n' "$(printf "${run_tests_FAILED_TESTS}" | tail +2)" + fi + + unset run_tests_FAILED_TESTS + unset run_tests_TESTS +} diff --git a/test/organization/test.sh b/test/organization/test.sh index 9d3c5de2..8c15def1 100644 --- a/test/organization/test.sh +++ b/test/organization/test.sh @@ -1,179 +1,105 @@ -#!/bin/sh +#!/usr/bin/env sh # # It is expected that you run this script # as a PostgreSQL superuser, for example: # -# PGUSER=postgres bash ./test.sh +# PGUSER=postgres ./test.sh # DATABASE=test_organizations CMD=psql -SED=sed OK=0 PARTIALOK=0 -function set_failed() { - OK=1 - PARTIALOK=1 -} - - -function clear_partial_result() { - PARTIALOK=0 -} +# Load common test helpers +TESTSPATH="$( cd -- "$(dirname "$(dirname "$0")")" >/dev/null 2>&1 ; pwd -P )" +. "${TESTSPATH}/helpers.sh" -function sql() { - local ROLE - local QUERY - ERROR_OUTPUT_FILE='/tmp/test_error.log' - if [[ $# -ge 2 ]] +sql() { + sql_ROLE="" + sql_ERROR_OUTPUT_FILE='/tmp/test_error.log' + if [ $# -ge 2 ] then - ROLE="$1" - QUERY="$2" + sql_ROLE="$1" + sql_QUERY="$2" else - QUERY="$1" + sql_QUERY="$1" fi - if [ -n "${ROLE}" ]; then - log_debug "Executing query '${QUERY}' as ${ROLE}" - RESULT=`${CMD} -U "${ROLE}" ${DATABASE} -c "${QUERY}" -A -t 2>"${ERROR_OUTPUT_FILE}"` + if [ -n "${sql_ROLE}" ]; then + log_debug "Executing query '${sql_QUERY}' as ${sql_ROLE}" + sql_RESULT=`${CMD} -U "${sql_ROLE}" ${DATABASE} -c "${sql_QUERY}" -A -t 2>"${sql_ERROR_OUTPUT_FILE}"` else - log_debug "Executing query '${QUERY}'" - RESULT=`${CMD} ${DATABASE} -c "${QUERY}" -A -t 2>"${ERROR_OUTPUT_FILE}"` + log_debug "Executing query '${sql_QUERY}'" + sql_RESULT=`${CMD} ${DATABASE} -c "${sql_QUERY}" -A -t 2>"${sql_ERROR_OUTPUT_FILE}"` fi - CODERESULT=$? - ERROR_OUTPUT=`cat "${ERROR_OUTPUT_FILE}"` - rm ${ERROR_OUTPUT_FILE} + sql_CODERESULT=$? + sql_ERROR_OUTPUT=$(cat "${sql_ERROR_OUTPUT_FILE}") + rm ${sql_ERROR_OUTPUT_FILE} - echo -n "> Code Result: " - echo -n ${CODERESULT} - echo -n "; Result: " - echo -n ${RESULT} - echo -n "; Error output: " - echo -n ${ERROR_OUTPUT} + printf "> Code Result: %s; Result: %s; Error output: %s" \ + "${sql_CODERESULT}" "${sql_RESULT}" "${sql_ERROR_OUTPUT}" # Some warnings should actually be failures - if [[ ${CODERESULT} == "0" ]] + if [ ${sql_CODERESULT} = "0" ] then - case "${ERROR_OUTPUT}" in + case "${sql_ERROR_OUTPUT}" in WARNING:*no*privileges*were*granted*for*) - echo -n "FAILED BECAUSE OF PRIVILEGES GRANTING WARNING" - CODERESULT=1 + printf "FAILED BECAUSE OF PRIVILEGES GRANTING WARNING" + sql_CODERESULT=1 ;; WARNING:*no*privileges*could*be*revoked*for*) - echo -n "FAILED BECAUSE OF PRIVILEGES REVOKING WARNING" - CODERESULT=1 + printf "FAILED BECAUSE OF PRIVILEGES REVOKING WARNING" + sql_CODERESULT=1 ;; *) ;; esac - echo -n "; Code result after warnings: " - echo -n ${CODERESULT} + printf "; Code result after warnings: %s" "${sql_CODERESULT}" fi - echo + printf "\n\n" - if [[ ${CODERESULT} -ne 0 ]] + if [ ${sql_CODERESULT} -ne 0 ] then - echo -n "FAILED TO EXECUTE QUERY: " - log_warning "${QUERY}" - if [[ "$3" != "fails" ]] + printf "FAILED TO EXECUTE QUERY: " + log_warning "${sql_QUERY}" + if [ "$3" != "fails" ] then - log_error "${QUERY}" + log_error "${sql_QUERY}" set_failed fi else - if [[ "$3" == "fails" ]] + if [ "$3" = "fails" ] then - log_error "QUERY: '${QUERY}' was expected to fail and it did not fail" + log_error "QUERY: '${sql_QUERY}' was expected to fail and it did not fail" set_failed fi fi - if [[ "$3" == "should" ]] + if [ "$3" = "should" ] then - if [[ "${RESULT}" != "$4" ]] + if [ "${sql_RESULT}" != "$4" ] then - log_error "QUERY '${QUERY}' expected result '${4}' but got '${RESULT}'" + log_error "QUERY '${sql_QUERY}' expected result '${4}' but got '${sql_RESULT}'" set_failed fi fi -} - - -function log_info() -{ - echo - echo - echo - _log "1;34m" "$1" -} - -function log_error() { - _log "1;31m" "$1" -} - -function log_debug() { - _log "1;32m" "> $1" -} -function log_warning() { - _log "0;33m" "$1" -} - -function _log() { - echo -e "\033[$1$2\033[0m" -} - -# '############################ HELPERS #############################' -function create_role_and_schema() { - local ROLE=$1 - sql "CREATE ROLE ${ROLE} LOGIN;" - sql "GRANT CONNECT ON DATABASE \"${DATABASE}\" TO ${ROLE};" - sql "CREATE SCHEMA ${ROLE} AUTHORIZATION ${ROLE};" - sql "SELECT cartodb.CDB_Organization_Create_Member('${ROLE}')" - sql "ALTER ROLE ${ROLE} SET search_path TO ${ROLE},cartodb,public;" -} - - -function drop_role_and_schema() { - local ROLE=$1 - sql "DROP SCHEMA \"${ROLE}\";" - sql "REVOKE CONNECT ON DATABASE \"${DATABASE}\" FROM \"${ROLE}\";" - sql "DROP ROLE \"${ROLE}\";" -} - - -function create_table() { - if [[ $# -ne 2 ]] - then - log_error "create_table requires two arguments: role and table_name" - exit 1 - fi - local ROLE="$1" - local TABLENAME="$2" - sql ${ROLE} "CREATE TABLE ${ROLE}.${TABLENAME} ( a int );" + unset sql_ROLE + unset sql_QUERY + unset sql_ERROR_OUTPUT + unset sql_ERROR_OUTPUT_FILE + unset sql_CODERESULT + unset sql_RESULT } -function truncate_table() { - if [[ $# -ne 2 ]] - then - log_error "truncate_table requires two arguments: role and table_name" - exit 1 - fi - local ROLE="$1" - local TABLENAME="$2" - sql ${ROLE} "TRUNCATE TABLE ${ROLE}.${TABLENAME};" -} - - -function setup() { +setup() { ${CMD} -c "CREATE DATABASE ${DATABASE}" ${CMD} -c "ALTER DATABASE ${DATABASE} SET search_path = public, cartodb;" sql "CREATE EXTENSION cartodb CASCADE;" ${CMD} -c "ALTER DATABASE ${DATABASE} SET search_path = public, cartodb;" - log_info "############################# SETUP #############################" create_role_and_schema cdb_org_admin sql "SELECT cartodb.CDB_Organization_AddAdmin('cdb_org_admin');" @@ -205,7 +131,7 @@ END } -function tear_down() { +tear_down() { log_info "########################### USER TEAR DOWN ###########################" sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2');" sql cdb_testmember_2 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_2', 'bar', 'cdb_testmember_1');" @@ -239,56 +165,16 @@ function tear_down() { ${CMD} -c "DROP DATABASE ${DATABASE}" } -function run_tests() { - local FAILED_TESTS=() - local TESTS - if [[ $# -ge 1 ]] - then - TESTS="$@" - else - TESTS=`cat $0 | perl -n -e'/function (test.*)\(\)/ && print "$1\n"'` - fi - - setup - for t in ${TESTS} - do - echo "####################################################################" - echo "#" - echo "# Running: ${t}" - echo "#" - echo "####################################################################" - clear_partial_result - log_info "############################# TESTS #############################" - eval ${t} - if [[ ${PARTIALOK} -ne 0 ]] - then - FAILED_TESTS+=(${t}) - fi - done - tear_down - - if [[ ${OK} -ne 0 ]] - then - echo - log_error "The following tests are failing:" - printf -- '\t%s\n' "${FAILED_TESTS[@]}" - fi -} - - - -#################################################### TESTS GO HERE #################################################### - -function test_member_2_cannot_read_without_permission() { +test_member_2_cannot_read_without_permission() { sql cdb_testmember_2 'SELECT count(*) FROM cdb_testmember_1.foo;' fails } -function test_member_1_cannot_grant_read_permission_to_other_schema_than_its_one() { +test_member_1_cannot_grant_read_permission_to_other_schema_than_its_one() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Permission('cdb_testmember_2', 'foo', 'cdb_testmember_2')" fails } -function test_member_1_grants_read_permission_and_member_2_can_read() { +test_member_1_grants_read_permission_and_member_2_can_read() { sql cdb_testmember_1 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9);' sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" sql cdb_testmember_2 'SELECT count(*) FROM cdb_testmember_1.foo;' should 5 @@ -299,12 +185,12 @@ function test_member_1_grants_read_permission_and_member_2_can_read() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" } -function test_member_2_cannot_add_table_to_member_1_schema_after_table_permission_added() { +test_member_2_cannot_add_table_to_member_1_schema_after_table_permission_added() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" sql cdb_testmember_2 "CREATE TABLE cdb_testmember_1.bar ( a int );" fails } -function test_grant_read_permission_between_two_members() { +test_grant_read_permission_between_two_members() { sql cdb_testmember_1 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9);' sql cdb_testmember_2 'INSERT INTO cdb_testmember_2.bar VALUES (5), (6), (7), (8), (9);' sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" @@ -319,15 +205,15 @@ function test_grant_read_permission_between_two_members() { sql cdb_testmember_2 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_2', 'bar', 'cdb_testmember_1')" } -function test_member_2_cannot_write_to_member_1_table() { +test_member_2_cannot_write_to_member_1_table() { sql cdb_testmember_2 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9);' fails } -function test_member_1_cannot_grant_read_write_permission_to_other_schema_than_its_one() { +test_member_1_cannot_grant_read_write_permission_to_other_schema_than_its_one() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Write_Permission('cdb_testmember_2', 'foo', 'cdb_testmember_2')" fails } -function test_member_2_can_write_to_member_1_table_after_write_permission_is_added() { +test_member_2_can_write_to_member_1_table_after_write_permission_is_added() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Write_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" sql cdb_testmember_2 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9);' sql cdb_testmember_1 'SELECT count(*) FROM cdb_testmember_1.foo;' should 5 @@ -341,7 +227,7 @@ function test_member_2_can_write_to_member_1_table_after_write_permission_is_add sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" } -function test_member_2_can_write_to_member_1_table_and_sequence_after_write_permission_is_added() { +test_member_2_can_write_to_member_1_table_and_sequence_after_write_permission_is_added() { sql cdb_testmember_1 "ALTER TABLE cdb_testmember_1.foo ADD cartodb_id SERIAL NOT NULL UNIQUE;" sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Write_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" @@ -359,7 +245,7 @@ function test_member_2_can_write_to_member_1_table_and_sequence_after_write_perm sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" } -function test_member_2_can_write_to_member_1_table_with_non_sequence_cartodb_id_after_write_permission_is_added() { +test_member_2_can_write_to_member_1_table_with_non_sequence_cartodb_id_after_write_permission_is_added() { sql cdb_testmember_1 "ALTER TABLE cdb_testmember_1.foo ADD cartodb_id INTEGER;" sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Write_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" @@ -377,7 +263,7 @@ function test_member_2_can_write_to_member_1_table_with_non_sequence_cartodb_id_ sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" } -function test_member_1_removes_access_and_member_2_can_no_longer_query_the_table() { +test_member_1_removes_access_and_member_2_can_no_longer_query_the_table() { sql cdb_testmember_1 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9), (10);' sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" sql cdb_testmember_2 'SELECT count(*) FROM cdb_testmember_1.foo;' should 6 @@ -388,7 +274,7 @@ function test_member_1_removes_access_and_member_2_can_no_longer_query_the_table truncate_table cdb_testmember_1 foo } -function test_member_1_removes_access_and_member_2_can_no_longer_write_to_the_table() { +test_member_1_removes_access_and_member_2_can_no_longer_write_to_the_table() { sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Add_Table_Read_Write_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" sql cdb_testmember_2 'INSERT INTO cdb_testmember_1.foo VALUES (5), (6), (7), (8), (9);' sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2')" @@ -398,7 +284,7 @@ function test_member_1_removes_access_and_member_2_can_no_longer_write_to_the_ta truncate_table cdb_testmember_1 foo } -function test_giving_permissions_to_two_tables_and_removing_from_first_table_should_not_remove_from_second() { +test_giving_permissions_to_two_tables_and_removing_from_first_table_should_not_remove_from_second() { #### test setup # create an extra table for cdb_testmember_1 create_table cdb_testmember_1 foo_2 @@ -427,7 +313,7 @@ function test_giving_permissions_to_two_tables_and_removing_from_first_table_sho sql cdb_testmember_1 'DROP TABLE cdb_testmember_1.foo_2;' } -function test_cdb_org_member_role_allows_reading_to_all_users_without_explicit_permission() { +test_cdb_org_member_role_allows_reading_to_all_users_without_explicit_permission() { sql cdb_testmember_1 'INSERT INTO cdb_testmember_1.foo VALUES (1), (2), (3), (4);' sql cdb_testmember_2 'SELECT count(*) FROM cdb_testmember_1.foo;' fails @@ -439,7 +325,7 @@ function test_cdb_org_member_role_allows_reading_to_all_users_without_explicit_p truncate_table cdb_testmember_1 foo } -function test_user_can_read_when_it_has_permission_after_organization_permission_is_removed() { +test_user_can_read_when_it_has_permission_after_organization_permission_is_removed() { create_role_and_schema cdb_testmember_3 sql cdb_testmember_1 'INSERT INTO cdb_testmember_1.foo VALUES (1), (2), (3), (4);' @@ -464,23 +350,23 @@ function test_user_can_read_when_it_has_permission_after_organization_permission drop_role_and_schema cdb_testmember_3 } -function test_cdb_querytables_returns_schema_and_table_name() { +test_cdb_querytables_returns_schema_and_table_name() { sql cdb_testmember_1 "select * from CDB_QueryTables('select * from foo');" should "{cdb_testmember_1.foo}" } -function test_cdb_querytables_works_with_parentheses() { +test_cdb_querytables_works_with_parentheses() { sql cdb_testmember_1 "select * from CDB_QueryTables('(select * from foo)');" should "{cdb_testmember_1.foo}" } -function test_cdb_querytables_returns_schema_and_table_name_for_several_schemas() { +test_cdb_querytables_returns_schema_and_table_name_for_several_schemas() { sql postgres "select * from CDB_QueryTables('select * from cdb_testmember_1.foo, cdb_testmember_2.bar');" should "{cdb_testmember_1.foo,cdb_testmember_2.bar}" } -function test_cdb_querytables_does_not_return_functions_as_part_of_the_resultset() { +test_cdb_querytables_does_not_return_functions_as_part_of_the_resultset() { sql postgres "select * from CDB_QueryTables('select * from cdb_testmember_1.foo, cdb_testmember_2.bar, plainto_tsquery(''foo'')');" should "{cdb_testmember_1.foo,cdb_testmember_2.bar}" } -function test_cdb_usertables_should_work_with_orgusers() { +test_cdb_usertables_should_work_with_orgusers() { # This test validates the changes proposed in https://github.com/CartoDB/cartodb/pull/5021 @@ -520,7 +406,7 @@ function test_cdb_usertables_should_work_with_orgusers() { sql cdb_testmember_1 "DROP TABLE test_perms_priv" } -function test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should_remove_it() { +test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should_remove_it() { create_table cdb_testmember_2 shared_with_group sql cdb_testmember_1 'SELECT count(*) FROM cdb_testmember_2.shared_with_group;' fails @@ -535,7 +421,7 @@ function test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' } -function test_CDB_Group_Table_GrantReadWrite_should_grant_insert_and_RevokeAll_should_remove_it() { +test_CDB_Group_Table_GrantReadWrite_should_grant_insert_and_RevokeAll_should_remove_it() { create_table cdb_testmember_2 shared_with_group sql cdb_testmember_1 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' fails @@ -550,7 +436,7 @@ function test_CDB_Group_Table_GrantReadWrite_should_grant_insert_and_RevokeAll_s sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' } -function test_group_management_functions_cant_be_used_by_normal_members() { +test_group_management_functions_cant_be_used_by_normal_members() { sql cdb_testmember_1 "SELECT cartodb.CDB_Group_CreateGroup('group_x_1');" fails sql cdb_testmember_1 "SELECT cartodb.CDB_Group_RenameGroup('group_a', 'group_x_2');" fails sql cdb_testmember_1 "SELECT cartodb.CDB_Group_DropGroup('group_a');" fails @@ -558,7 +444,7 @@ function test_group_management_functions_cant_be_used_by_normal_members() { sql cdb_testmember_1 "SELECT cartodb.CDB_Group_RemoveUsers('group_a', ARRAY['cdb_testmember_1']);" fails } -function test_group_permission_functions_cant_be_used_by_normal_members() { +test_group_permission_functions_cant_be_used_by_normal_members() { create_table cdb_testmember_2 shared_with_group sql cdb_testmember_1 "select cartoDB.CDB_Group_Table_GrantRead('group_a', 'cdb_testmember_2', 'shared_with_group');" fails @@ -573,7 +459,7 @@ function test_group_permission_functions_cant_be_used_by_normal_members() { sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' } -function test_group_management_functions_can_be_used_by_org_admin() { +test_group_management_functions_can_be_used_by_org_admin() { sql cdb_org_admin "SELECT cartodb.CDB_Group_CreateGroup('group_x_tmp');" sql cdb_org_admin "SELECT cartodb.CDB_Group_RenameGroup('group_x_tmp', 'group_x');" sql cdb_org_admin "SELECT cartodb.CDB_Group_AddUsers('group_x', ARRAY['cdb_testmember_1', 'cdb_testmember_2']);" @@ -582,7 +468,7 @@ function test_group_management_functions_can_be_used_by_org_admin() { sql "SELECT cartodb.CDB_Group_DropGroup('group_x');" } -function test_org_admin_cant_grant_permissions_on_tables_he_does_not_own() { +test_org_admin_cant_grant_permissions_on_tables_he_does_not_own() { create_table cdb_testmember_2 shared_with_group sql cdb_org_admin "select cartoDB.CDB_Group_Table_GrantRead('group_a', 'cdb_testmember_2', 'shared_with_group');" fails @@ -597,17 +483,17 @@ function test_org_admin_cant_grant_permissions_on_tables_he_does_not_own() { sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' } -function test_valid_group_names() { - sql postgres "select cartodb._CDB_Group_GroupRole('group_1$_a');" - sql postgres "select cartodb._CDB_Group_GroupRole('GROUP_1$_A');" - sql postgres "select cartodb._CDB_Group_GroupRole('_group_1$_a');" +test_valid_group_names() { + sql postgres "select cartodb._CDB_Group_GroupRole('group_1\$_a');" + sql postgres "select cartodb._CDB_Group_GroupRole('GROUP_1\$_A');" + sql postgres "select cartodb._CDB_Group_GroupRole('_group_1\$_a');" } -function test_administrator_name_generation() { +test_administrator_name_generation() { sql postgres "select cartodb._CDB_Organization_Admin_Role_Name();" } -function test_conf() { +test_conf() { sql postgres "SELECT cartodb.CDB_Conf_GetConf('test_conf')" should '' sql postgres "SELECT cartodb.CDB_Conf_GetConf('test_conf_2')" should '' @@ -622,10 +508,6 @@ function test_conf() { sql postgres "SELECT cartodb.CDB_Conf_GetConf('test_conf_2')" should '' } -#################################################### TESTS END HERE #################################################### - - - -run_tests $@ +run_tests "$@" exit ${OK} diff --git a/util/create_from_unpackaged.sh b/util/create_from_unpackaged.sh index b8abe449..55dedb6c 100755 --- a/util/create_from_unpackaged.sh +++ b/util/create_from_unpackaged.sh @@ -4,7 +4,7 @@ ver=$1 input=cartodb--${ver}.sql output=cartodb--unpackaged--${ver}.sql -echo "-- Script generated by $0 on `date`" > ${output} +echo "-- Script generated by $0 on $(date)" > ${output} # Migrate CDB functions from public schema to cartodb schema cat ${input} |