diff options
author | Pavel Raiskup <praiskup@redhat.com> | 2014-10-17 10:15:43 +0200 |
---|---|---|
committer | Pavel Raiskup <praiskup@redhat.com> | 2014-10-17 10:15:43 +0200 |
commit | 70910323d008736eac598db5210de5fbb2b02cb0 (patch) | |
tree | 7d6762c432c8f3204baff158f0782a05e33986ca | |
parent | 157f86ed792984e2773c0e81c5831f7e9aea5c53 (diff) | |
download | postgresql-setup-tests-70910323d008736eac598db5210de5fbb2b02cb0.tar.gz postgresql-setup-tests-70910323d008736eac598db5210de5fbb2b02cb0.tar.xz postgresql-setup-tests-70910323d008736eac598db5210de5fbb2b02cb0.zip |
gen-data: add infrastructure for data generation
Add also first task 'basic' which generates simple 'pagila'
database.
* generate: New file.
* databases/pagila.sh: New database file.
* tasks/basic/run.sh: New task file.
-rw-r--r-- | gen-data/databases/pagila.sh | 39 | ||||
-rwxr-xr-x | gen-data/generate | 121 | ||||
-rw-r--r-- | gen-data/tasks/basic/run.sh | 6 |
3 files changed, 166 insertions, 0 deletions
diff --git a/gen-data/databases/pagila.sh b/gen-data/databases/pagila.sh new file mode 100644 index 0000000..a01d818 --- /dev/null +++ b/gen-data/databases/pagila.sh @@ -0,0 +1,39 @@ +create_pagila() +( + testit() + { + debug "testing database" + + local cmd="psql -tA -d pagila -c \"select city from city where city = 'Banjul';\"" + + out="$(admin_cmd "$cmd")" + test "$out" = Banjul || return 1 + test "$(wc -l < pagila_init.log)" -gt 335 || return 1 + + test "$({ grep ERROR | wc -l ; } < pagila_init.log)" -lt 2 + } + + debug "creating DB pagilla" + INDENT="$INDENT " + + pagila="pagila-0.10.1" + pagila_tarball="$pagila.zip" + pagila_link="http://pgfoundry.org/frs/download.php/1719/$pagila_tarball" + + cached_download $pagila_link + + debug "unzipping tarball" + unzip $pagila_tarball &>/dev/null || die "can not unzip pagila" + + pushd $pagila >/dev/null || die "can not switch directory" + admin_cmd "createdb pagila --owner postgres" || die "can't create db" + { su - postgres -c 'psql -d pagila' < pagila-schema.sql \ + && su - postgres -c 'psql -d pagila' < pagila-data.sql + } &>pagila_init.log || die "can not initialize pagila" + + cp pagila_init.log /tmp + + testit || die "can not test" + + popd >/dev/null || die "can't go back" +) diff --git a/gen-data/generate b/gen-data/generate new file mode 100755 index 0000000..bf9cce3 --- /dev/null +++ b/gen-data/generate @@ -0,0 +1,121 @@ +#!/bin/bash + +GEN_DATADIR=/var/lib/pgsql/data +CACHEDIR=/var/cache/dbt +SRCDIR="$(pwd)" +DEBUG=1 +CHECK_LOCALE=1 + +printline() { echo "$INDENT$@" ; } + +die() { printline " ERROR $@" ; exit 1 ; } + +info() { printline " * $@"; } + +debug() { test $DEBUG -eq 1 && printline " ~ $@"; } + +admin_cmd() +{ + su - postgres -c "$@" || die "can not execute '$@'" +} + +cached_download() +{ + local link=$1 + local bn="$(basename "$1")" + local file="$CACHEDIR/$bn" + + if test ! -d "$CACHEDIR"; then + mkdir -p "$CACHEDIR" || die "can't create cachedir" + fi + + test -e "$file" && cp "$file" ./ && return + + { wget "$link" && cp "$bn" "$CACHEDIR" ; } \ + || die "can't download" +} + +is_defined_f() +{ + declare -f "$1" >/dev/null +} + +run_if_defined() +{ + is_defined_f "$1" || return 0 + "$1" +} + +locale_prereq() +{ + local default_locale="en_US.UTF-8" + local current_locale="$(cat /etc/locale.conf)" + test "$current_locale" = "$default_locale" \ + || die "bad locale $current_locale, should be $default_locale" +} + +single_task() +{ + local task="$1" + + info "running task $task" + INDENT=" " + + ( + . "$SRCDIR/databases/pagila.sh" || die "pagila incl fail" + . "$SRCDIR/$task" || die "include fail" + + run_if_defined "hook_start" + + test "$CHECK_LOCALE" -eq 1 && locale_prereq + + debug "initializing database" + postgresql-setup initdb &>/dev/null || die "can not initdb" + + debug "starting server" + service postgresql start &>/dev/null || die "can't start postgresql" + + tmpdir=$(mktemp -d /tmp/dbt-XXXXXX) || die "can not create temp directory" + + debug "working in $tmpdir" + pushd "$tmpdir" >/dev/null || die "can switch to $tmpdir" + + run || die "fail" + + popd >/dev/null || die "can not switch back" + + debug "stopping server" + service postgresql stop &>/dev/null || die "can't stop postgresql" + + tarball="$(pwd)/$task_name.tar.gz" + tar -czf "$tarball" -C /var/lib/pgsql/ data + info "result tarball $tarball" + rm -rf "$tmpdir" + + debug "data removal" + rm -rf "$GEN_DATADIR" + ) +} + +generate_tasks() +{ + single_task tasks/basic/run.sh +} + +main() +{ + test "$UID" -ne 0 && die "run under 'root' user" + + service postgresql status &>/dev/null + test $? -ne 3 && die "stop the postgresql server" + + local dbdir="$GEN_DATADIR" + test -e "$dbdir" && die "the '$dbdir' should not exist" + + { rpm -qa postgresql && rpm -qa postgresql-server ; } &>/dev/null \ + || die "PostgreSQL not installed" + + generate_tasks +} + +main diff --git a/gen-data/tasks/basic/run.sh b/gen-data/tasks/basic/run.sh new file mode 100644 index 0000000..0118ad3 --- /dev/null +++ b/gen-data/tasks/basic/run.sh @@ -0,0 +1,6 @@ +export task_name="basic" + +run() +{ + create_pagila +} |