11#! /usr/bin/env bash
22
33#
4- # Copyright (c) 2019-2020 , Postgres Professional
4+ # Copyright (c) 2019-2021 , Postgres Professional
55#
66
7- PG_SRC=$PWD /postgres
7+ PTRACK_SRC=${PWD} /ptrack
8+ PG_SRC=${PWD} /postgres
9+ PBK_SRC=${PWD} /pg_probackup
810status=0
911
10- # curl "https://ftp.postgresql.org/pub/source/v$PG_VERSION/postgresql-$PG_VERSION.tar.bz2" -o postgresql.tar.bz2
11- # echo "$PG_SHA256 *postgresql.tar.bz2" | sha256sum -c -
12-
13- # mkdir $PG_SRC
14-
15- # tar \
16- # --extract \
17- # --file postgresql.tar.bz2 \
18- # --directory $PG_SRC \
19- # --strip-components 1
20-
12+ # ########################################################
2113# Clone Postgres
2214echo " ############### Getting Postgres sources"
23- git clone https://github.com/postgres/postgres.git -b $PG_BRANCH -- depth=1
15+ git clone https://github.com/postgres/postgres.git -- depth=1 --branch= ${PG_BRANCH} ${PG_SRC}
2416
2517# Clone pg_probackup
2618echo " ############### Getting pg_probackup sources"
27- git clone https://github.com/postgrespro/pg_probackup.git --depth=1 -b master
28- # git clone https://github.com/ololobus/pg_probackup.git --depth=1 -b ptrack-tests
19+ git clone https://github.com/postgrespro/pg_probackup.git --depth=1 --branch=master${PBK_SRC}
2920
21+ # ########################################################
3022# Compile and install Postgres
31- cd postgres # Go to postgres dir
23+ cd ${PG_SRC} # Go to postgres dir
3224
3325echo " ############### Applying ptrack patch"
34- git apply -v -3 .. /patches/$PG_BRANCH -ptrack-core.diff
26+ git apply --verbose --3way ${PTRACK_SRC} /patches/${ PG_BRANCH} -ptrack-core.diff
3527
36- if [" $MODE " = " paranoia" ]; then
28+ if [" ${ MODE} " = " paranoia" ]; then
3729echo " ############### Paranoia mode: applying turn-off-hint-bits.diff"
38- git apply -v -3 .. /patches/turn-off-hint-bits.diff
30+ git apply --verbose --3way ${PTRACK_SRC} /patches/turn-off-hint-bits.diff
3931fi
4032
4133echo " ############### Compiling Postgres"
42- if [" $TEST_CASE " = " tap" ]&& [" $MODE " = " legacy" ]; then
43- ./configure CFLAGS=' -DEXEC_BACKEND' --disable-atomics --prefix=$PGHOME --enable-debug --enable-cassert --enable-depend --enable-tap-tests
34+ if [" ${ TEST_CASE} " = " tap" ]&& [" ${ MODE} " = " legacy" ]; then
35+ ./configure CFLAGS=' -DEXEC_BACKEND' --disable-atomics --prefix=${ PGHOME} --enable-debug --enable-cassert --enable-depend --enable-tap-tests --quiet
4436else
45- ./configure --prefix=$PGHOME --enable-debug --enable-cassert --enable-depend --enable-tap-tests
37+ ./configure --prefix=${ PGHOME} --enable-debug --enable-cassert --enable-depend --enable-tap-tests --quiet
4638fi
47- make -s -j $( nproc) install
48- make -s -j $( nproc) -C contrib/ install
39+ make --quiet --jobs= $( nproc) install
40+ make --quiet --jobs= $( nproc) --directory= contrib/ install
4941
5042# Override default Postgres instance
51- export PATH=$PGHOME /bin:$PATH
52- export LD_LIBRARY_PATH=$PGHOME /lib
43+ export PATH=${ PGHOME} /bin:${ PATH}
44+ export LD_LIBRARY_PATH=${ PGHOME} /lib
5345export PG_CONFIG=$( which pg_config)
5446
5547# Show pg_config path (just in case)
@@ -60,38 +52,26 @@ which pg_config
6052echo " ############### pg_config"
6153pg_config
6254
63- # Get amcheck if missing
64- if [! -d " contrib/amcheck" ]; then
65- echo " ############### Getting missing amcheck"
66- git clone https://github.com/petergeoghegan/amcheck.git --depth=1 contrib/amcheck
67- make USE_PGXS=1 -C contrib/amcheck install
68- fi
69-
70- # Get back to testdir
71- cd ..
72-
55+ # ########################################################
7356# Build and install ptrack extension
7457echo " ############### Compiling and installing ptrack extension"
58+ cp --recursive${PTRACK_SRC} ${PG_SRC} /contrib/ptrack
59+ make USE_PGXS=1 PG_CPPFLAGS=" -coverage" SHLIB_LINK=" -coverage" --directory=${PG_SRC} /contrib/ptrack/ install
7560
76- # XXX: Hackish way to make possible to run tap tests
77- ln -s` pwd` $PG_SRC /contrib/ptrack
78-
79- make USE_PGXS=1 PG_CPPFLAGS=" -coverage" SHLIB_LINK=" -coverage" -C$PG_SRC /contrib/ptrack/ install
80-
81- if [" $TEST_CASE " = " tap" ]; then
61+ if [" ${TEST_CASE} " = " tap" ]; then
8262
8363# Run tap tests
8464echo " ############### Running tap tests"
85- if [" $MODE " = " legacy" ]; then
65+ if [" ${ MODE} " = " legacy" ]; then
8666# There is a known issue with attaching shared memory segment using the same
8767# address each time, when EXEC_BACKEND mechanism is turned on. It happens due
8868# to the ASLR address space randomization, so we are trying to attach a segment
8969# to the already occupied location. That way we simply turning off ASLR here.
9070#
9171# Postgres comment: https://github.com/postgres/postgres/blob/5cbfce562f7cd2aab0cdc4694ce298ec3567930e/src/backend/postmaster/postmaster.c#L4929
92- setarch x86_64 --addr-no-randomize make -C postgres /contrib/ptrack check|| status=$?
72+ setarch x86_64 --addr-no-randomize make --directory= ${PG_SRC} /contrib/ptrack check|| status=$?
9373else
94- make -C postgres /contrib/ptrack check|| status=$?
74+ make --directory= ${PG_SRC} /contrib/ptrack check|| status=$?
9575fi
9676
9777else
10181
10282# Build and install pg_probackup
10383echo " ############### Compiling and installing pg_probackup"
104- cd pg_probackup # Go to pg_probackup dir
105- make USE_PGXS=1 top_srcdir=$PG_SRC install
84+ cd ${PBK_SRC} # Go to pg_probackup dir
85+ make USE_PGXS=1 top_srcdir=${ PG_SRC} install
10686
10787# Setup python environment
10888echo " ############### Setting up python env"
@@ -111,35 +91,32 @@ else
11191 pip install testgres==1.8.2
11292
11393echo " ############### Testing"
114- if [" $MODE " = " basic" ]; then
94+ export PG_PROBACKUP_PTRACK=ON
95+ if [" ${MODE} " = " basic" ]; then
11596export PG_PROBACKUP_TEST_BASIC=ON
116- elif [" $MODE " = " paranoia" ]; then
97+ elif [" ${ MODE} " = " paranoia" ]; then
11798export PG_PROBACKUP_PARANOIA=ON
11899fi
119100
120- export PG_PROBACKUP_PTRACK=ON
121- if [" $TEST_CASE " = " all" ]; then
101+ if [" ${TEST_CASE} " = " all" ]; then
122102# Run all pg_probackup ptrack tests
123- python3 -m unittest -v tests.ptrack|| status= $?
103+ PBK_TEST_CASE= tests.ptrack
124104else
125- for i in ` seq$TEST_REPEATS ` ; do
126- python3 -m unittest -v tests.ptrack.PtrackTest.$TEST_CASE || status=$?
127- done
105+ PBK_TEST_CASE=tests.ptrack.PtrackTest.${TEST_CASE}
128106fi
107+ for i in ` seq${TEST_REPEATS} ` ; do
108+ python3 -m unittest -v${PBK_TEST_CASE} || status=$?
109+ done
129110
130111# Exit virtualenv
131112 deactivate
132-
133- # Get back to testdir
134- cd ..
135-
136113fi
137114
138115# Generate *.gcov files
139- gcov$PG_SRC /contrib/ptrack/* .c$PG_SRC /contrib/ptrack/* .h
116+ gcov${ PG_SRC} /contrib/ptrack/* .c${ PG_SRC} /contrib/ptrack/* .h
140117
141118# Send coverage stats to Codecov
142119bash<( curl -s https://codecov.io/bash)
143120
144121# Something went wrong, exit with code 1
145- if [$status -ne 0 ]; then exit 1; fi
122+ if [${ status} -ne 0 ]; then exit 1; fi