summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Raiskup <praiskup@redhat.com>2014-10-17 10:15:43 +0200
committerPavel Raiskup <praiskup@redhat.com>2014-10-17 10:15:43 +0200
commit70910323d008736eac598db5210de5fbb2b02cb0 (patch)
tree7d6762c432c8f3204baff158f0782a05e33986ca
parent157f86ed792984e2773c0e81c5831f7e9aea5c53 (diff)
downloadpostgresql-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.sh39
-rwxr-xr-xgen-data/generate121
-rw-r--r--gen-data/tasks/basic/run.sh6
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
+}