File: postgres-testing.sh

package info (click to toggle)
libpgjava 42.2.5-2%2Bdeb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 8,136 kB
  • sloc: java: 57,821; xml: 1,135; sh: 307; perl: 99; makefile: 7
file content (173 lines) | stat: -rw-r--r-- 3,597 bytes parent folder | download | duplicates (2)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#! /bin/sh

# Do some "integration" testing against running PostgreSQL server.

# This file is to be sourced.

: ${PGTESTS_DATADIR=`pwd`/datadir}
: ${PGTESTS_ADMIN=`id -u -n`}
: ${PGTESTS_ADMINDB=$PGTESTS_ADMIN}
: ${PGTESTS_ADMINPASS=$PGTESTS_ADMIN}
: ${PGTESTS_PORT=54321}
: ${PGTESTS_SOCKETDIR=/tmp}
: ${PGTESTS_USERS=test:test}
: ${PGTESTS_DATABASES=test:test}

# Stop the old cluster and/or remove it's data.
: ${PGTESTS_STARTCLEANUP=:}

# Cleanup once we exit the script.
: ${PGTESTS_CLEANUP=:}

# Cleanup once we exit the script.
: ${PGTESTS_CLEANUP=:}

export PGPORT=$PGTESTS_PORT
export PGHOST=$PGTESTS_SOCKETDIR

warning ()
{
    echo >&2 " ! $*"
}


__trap_cb ()
{
    IFS=' '
    for __func in $__TRAP_ACTIONS
    do
        $__func
    done
}
trap __trap_cb EXIT


__pgtests_initdb ()
{
    initdb "$PGTESTS_DATADIR" -U "$PGTESTS_ADMIN" \
        --auth-local=peer --auth-host=md5 \
        ${PGTESTS_LOCALE+--locale="$PGTESTS_LOCALE"}
}


__pgtests_start ()
{
    pg_ctl -D "$PGTESTS_DATADIR" -l "$PGTESTS_DATADIR"/start.log start -o "-k $PGTESTS_SOCKETDIR -p $PGTESTS_PORT" -w
}


__pgtests_create_admins_db ()
{
    createdb -h "$PGTESTS_SOCKETDIR" "$PGTESTS_ADMINDB" --owner "$PGTESTS_ADMIN" -p "$PGTESTS_PORT"
}


__pgtests_passwd()
{
    psql -d postgres --set=user="$1" --set=pass="$2" -tA \
        <<<"ALTER USER :\"user\" WITH ENCRYPTED PASSWORD :'pass';"
}

pgtests_start ()
{
    unset __TRAP_ACTIONS

    if $PGTESTS_STARTCLEANUP; then
        # We don't plan to be serious here.  This pgtests_* effort is just to
        # ease _testing_ against running postgresql server without too much
        # writing.
        if test -f "$PGTESTS_DATADIR"/postmaster.pid; then
            # Give it a try.
            warning "Seems like server works, trying to stop."
            pg_ctl stop -D "$PGTESTS_DATADIR" -w
        fi

        # Cleanup testing directory
        if test -e "$PGTESTS_DATADIR"; then
            warning "Removing old data directory."
            rm -r "$PGTESTS_DATADIR"
        fi
    fi

    __pgtests_initdb && __TRAP_ACTIONS="pgtests_cleanup $__TRAP_ACTIONS"
    __pgtests_start  && __TRAP_ACTIONS="pgtests_stop $__TRAP_ACTIONS"
    __pgtests_create_admins_db

    __pgtests_passwd "$PGTESTS_ADMIN" "$PGTESTS_ADMINPASS"


    for _pgt_user in $PGTESTS_USERS
    do
        save_IFS=$IFS
        IFS=:
        _user=
        _pass=
        for _part in $_pgt_user
        do
            if test -z "$_user"; then
                _user=$_part
            else
                _pass=$_part
            fi
        done

        createuser "$_user"
        __pgtests_passwd "$_user" "$_pass"
        IFS=$save_IFS
    done


    for _pgt_db in $PGTESTS_DATABASES
    do
        save_IFS=$IFS
        IFS=:
        _db=
        _user=
        for _part in $_pgt_db
        do
            if test -z "$_user"; then
                _user=$_part
            else
                _db=$_part
            fi
        done

        createdb "$_db" --owner "$_part"

        IFS=$save_IFS
    done
}


__clean_trap_action ()
{
    __new_actions=
    for __action in $__TRAP_ACTIONS
    do
        if test "$__action" = "$1"; then
            :
        else
            __new_actions="$__action $__new_actions"
        fi
    done

    __TRAP_ACTIONS=$__new_actions
}


pgtests_cleanup ()
{
    if $PGTESTS_CLEANUP && $PGTESTS_AUTOSTOP; then
        rm -r "$PGTESTS_DATADIR"
    fi
    __clean_trap_action pgtests_cleanup
}


pgtests_stop ()
{
    if $PGTESTS_AUTOSTOP; then
        pg_ctl stop -D "$PGTESTS_DATADIR" -w
    fi
    __clean_trap_action pgtests_stop
}