summaryrefslogtreecommitdiffstats
path: root/postgresql-tests/gen-data/generate
blob: d8ead6b42c6c72bd0736ce906be65d696ee748c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash

GEN_DATADIR=/var/lib/pgsql/data
CACHEDIR=/var/cache/dbt
OUTPUTDIR="$(pwd)/results"
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="LANG=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="$OUTPUTDIR/$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"

        run_if_defined "hook_end"
    )
}

generate_tasks()
{
    find ./tasks -name run.sh | while read line; do
        single_task "$line"
    done
}

main()
{
    test "$UID" -ne 0 && die "run under 'root' user"

    test -d "$OUTPUTDIR" || die "$OUTPUTDIR does not seem to be directory"

    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