2011-10-20 22:44:37 +08:00
#!/bin/sh
# this script prepare database and redis instance to run accpetance test
2012-07-04 01:31:30 +08:00
#
# NOTE: assumes existance of a "template_postgis"
# NOTE2: use PG* environment variables to control who and where
2012-07-09 21:50:23 +08:00
#
# NOTE3: a side effect of the db preparation is the persistent creation
# of two database roles which will be valid for the whole cluster
# TODO: fix that
#
2012-07-04 01:31:30 +08:00
2013-12-05 18:07:12 +08:00
PREPARE_REDIS = yes
PREPARE_PGSQL = yes
while [ -n " $1 " ] ; do
if test " $1 " = "--skip-pg" ; then
PREPARE_PGSQL = no
shift; continue
elif test " $1 " = "--skip-redis" ; then
PREPARE_REDIS = no
shift; continue
fi
done
2012-07-04 01:31:30 +08:00
die( ) {
msg = $1
echo " ${ msg } " >& 2
exit 1
}
2011-10-20 22:44:37 +08:00
2013-11-11 07:50:03 +08:00
# This is where postgresql connection parameters are read from
TESTENV = ../../config/environments/test.js
if [ \! -r ${ TESTENV } ] ; then
echo " Cannot read ${ TESTENV } " >& 2
exit 1
fi
TESTUSERID = 1
TESTUSER = ` node -e " console.log(require(' ${ TESTENV } ').postgres_auth_user || '') " `
if test -z " $TESTUSER " ; then
echo " Missing postgres_auth_user from ${ TESTENV } " >& 2
exit 1
fi
TESTUSER = ` echo ${ TESTUSER } | sed " s/<%= user_id %>/ ${ TESTUSERID } / " `
TESTPASS = ` node -e " console.log(require(' ${ TESTENV } ').postgres_auth_pass || 'test') " `
# TODO: should postgres_auth_pass be optional ?
if test -z " $TESTPASS " ; then
echo " Missing postgres_auth_pass from ${ TESTENV } " >& 2
exit 1
fi
TESTPASS = ` echo ${ TESTPASS } | sed " s/<%= user_id %>/ ${ TESTUSERID } / " `
TEST_DB = " ${ TESTUSER } _db "
2013-12-05 18:07:12 +08:00
# NOTE: will be set by caller trough environment
2013-09-12 16:17:02 +08:00
if test -z " $REDIS_PORT " ; then REDIS_PORT = 6333; fi
2011-10-20 22:44:37 +08:00
2013-11-11 07:50:03 +08:00
PUBLICUSER = ` node -e " console.log(require(' ${ TESTENV } ').postgres.user || 'xxx') " `
PUBLICPASS = ` node -e " console.log(require(' ${ TESTENV } ').postgres.password || 'xxx') " `
echo " PUBLICUSER: ${ PUBLICUSER } "
echo " PUBLICPASS: ${ PUBLICPASS } "
2013-11-13 00:29:57 +08:00
echo " TESTUSER: ${ TESTUSER } "
echo " TESTPASS: ${ TESTPASS } "
2013-11-11 07:50:03 +08:00
2013-12-05 18:07:12 +08:00
if test x" $PREPARE_PGSQL " = xyes; then
echo "preparing postgres..."
dropdb " ${ TEST_DB } "
createdb -Ttemplate_postgis -EUTF8 " ${ TEST_DB } " || die "Could not create test database"
cat sql/windshaft.test.sql sql/gadm4.sql |
2016-01-29 02:44:25 +08:00
sed " s/:PUBLICUSER/ ${ PUBLICUSER } / " |
sed " s/:PUBLICPASS/ ${ PUBLICPASS } / " |
sed " s/:TESTUSER/ ${ TESTUSER } / " |
sed " s/:TESTPASS/ ${ TESTPASS } / " |
2014-03-20 00:04:06 +08:00
psql -v ON_ERROR_STOP = 1 ${ TEST_DB } || exit 1
2015-02-05 01:52:37 +08:00
2016-01-14 03:21:41 +08:00
psql -c "CREATE LANGUAGE plpythonu;" ${ TEST_DB }
2016-02-15 19:47:29 +08:00
for i in CDB_QueryStatements CDB_QueryTables CDB_CartodbfyTable CDB_TableMetadata CDB_ForeignTable CDB_UserTables CDB_ColumnNames CDB_ZoomFromScale CDB_Overviews
do
curl -L -s https://github.com/CartoDB/cartodb-postgresql/raw/master/scripts-available/$i .sql -o sql/$i .sql
cat sql/$i .sql | sed -e 's/cartodb\./public./g' -e "s/''cartodb''/''public''/g" \
| psql -v ON_ERROR_STOP = 1 ${ TEST_DB } || exit 1
done
2013-12-05 18:07:12 +08:00
fi
if test x" $PREPARE_REDIS " = xyes; then
echo "preparing redis..."
2013-12-10 01:28:49 +08:00
cat <<EOF | redis-cli -p ${RE DIS_PORT} -n 5
HMSET rails:users:localhost id ${ TESTUSERID } \
2014-08-29 22:48:28 +08:00
database_name " ${ TEST_DB } " \
2014-07-04 17:47:44 +08:00
database_host localhost \
2013-12-10 01:28:49 +08:00
map_key 1234
SADD rails:users:localhost:map_key 1235
EOF
2013-12-05 18:07:12 +08:00
2016-01-29 02:44:25 +08:00
# A user configured as with cartodb-2.5.0+
2013-12-10 01:28:49 +08:00
cat <<EOF | redis-cli -p ${RE DIS_PORT} -n 5
HMSET rails:users:cartodb250user id ${ TESTUSERID } \
database_name " ${ TEST_DB } " \
database_host "localhost" \
database_password " ${ TESTPASS } " \
map_key 4321
EOF
cat <<EOF | redis-cli -p ${RE DIS_PORT} -n 0
HSET rails:${ TEST_DB } :my_table infowindow "this, that, the other"
HSET rails:${ TEST_DB } :test_table_private_1 privacy "0"
EOF
2013-12-05 18:07:12 +08:00
fi
2012-07-10 00:56:09 +08:00
2012-12-22 00:32:00 +08:00
echo "Finished preparing data. Ready to run tests"
2015-07-08 05:46:58 +08:00
############################ WINDSHAFT TESTS ############################
echo "...Configuring Windshaft test database"
cat sql/ported/populated_places_simple_reduced.sql |
sed " s/:PUBLICUSER/ ${ PUBLICUSER } / " |
sed " s/:PUBLICPASS/ ${ PUBLICPASS } / " |
sed " s/:TESTUSER/ ${ TESTUSER } / " |
sed " s/:TESTPASS/ ${ TESTPASS } / " |
psql -v ON_ERROR_STOP = 1 ${ TEST_DB } || exit 1
echo "...Test database configuration complete"