Files
zulip/tools/generate-fixtures
Tim Abbott 3c31f9a2e3 Drop database users prior to DROP/CREATE database.
This fixes an annoying issue where one tries to rebuild the database,
and it fails due to there being existing connections.

The one thing that is potentially scary about this implementation is
that it means it's now a lot easier to accidentally drop your
production database by running the wrong script; might be worth adding
a "--force" flag controlling this behavior or something.

Thanks to Nemanja Stanarevic and Neeraj Wahi for prototypes of this
implementation!  They did most of the work and testing for this.
2015-11-01 18:11:39 -08:00

51 lines
2.1 KiB
Bash
Executable File

#!/bin/bash -e
function migration_status {
./manage.py migrate --list --settings=zproject.test_settings | sed 's/*/ /' > "$1"
}
template_grep_error_code=$(echo "SELECT 1 from pg_database WHERE datname='zulip_test_template';" | python manage.py dbshell --settings=zproject.test_settings | grep -q "1 row"; echo $?)
if [ "$template_grep_error_code" == "0" ]; then
migration_status zerver/fixtures/available-migrations
if [ -e zerver/fixtures/migration-status ] &&
cmp -s zerver/fixtures/available-migrations zerver/fixtures/migration-status &&
[ "$1" != "--force" ]; then
"$(dirname "$0")/../scripts/setup/terminate-psql-sessions" zulip zulip_test zulip_test_base zulip_test_template
psql -h localhost postgres zulip_test << EOF
DROP DATABASE IF EXISTS zulip_test;
CREATE DATABASE zulip_test TEMPLATE zulip_test_template;
EOF
sh "$(dirname "$0")/../scripts/setup/flush-memcached"
exit 0
fi
fi
mkdir -p zerver/fixtures
"$(dirname "$0")/../scripts/setup/terminate-psql-sessions" zulip zulip_test zulip_test_base zulip_test_template
psql -h localhost postgres zulip_test <<EOF
DROP DATABASE IF EXISTS zulip_test;
CREATE DATABASE zulip_test TEMPLATE zulip_test_base;
EOF
sh "$(dirname "$0")/../scripts/setup/flush-memcached"
python manage.py migrate --noinput --settings=zproject.test_settings
migration_status "zerver/fixtures/migration-status"
# This next line can be simplified to "-n0" once we fix our app (and tests) with 0 messages.
python manage.py populate_db --settings=zproject.test_settings --test-suite -n30 \
--threads=1 --huddles=0 --personals=0 --percent-huddles=0 --percent-personals=0
python manage.py dumpdata --settings=zproject.test_settings \
zerver.UserProfile zerver.Stream zerver.Recipient \
zerver.Subscription zerver.Message zerver.Huddle zerver.Realm \
zerver.UserMessage zerver.Client \
zerver.DefaultStream > zerver/fixtures/messages.json
# create pristine template database, for fast fixture restoration after tests are run.
psql -h localhost postgres zulip_test << EOF
DROP DATABASE IF EXISTS zulip_test_template;
CREATE DATABASE zulip_test_template TEMPLATE zulip_test;
EOF