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,48 +52,37 @@ 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- mkdir$PG_SRC /contrib/ptrack
78- cp* $PG_SRC /contrib/ptrack/
79- cp -R t$PG_SRC /contrib/ptrack/
80-
81- make USE_PGXS=1 PG_CPPFLAGS=" -coverage" SHLIB_LINK=" -coverage" -C$PG_SRC /contrib/ptrack/ install
82-
83- if [" $TEST_CASE " = " tap" ]; then
61+ if [" ${TEST_CASE} " = " tap" ]; then
8462
8563# Run tap tests
8664echo " ############### Running tap tests"
87- if [" $MODE " = " legacy" ]; then
65+ if [" ${ MODE} " = " legacy" ]; then
8866# There is a known issue with attaching shared memory segment using the same
8967# address each time, when EXEC_BACKEND mechanism is turned on. It happens due
9068# to the ASLR address space randomization, so we are trying to attach a segment
9169# to the already occupied location. That way we simply turning off ASLR here.
9270#
9371# Postgres comment: https://github.com/postgres/postgres/blob/5cbfce562f7cd2aab0cdc4694ce298ec3567930e/src/backend/postmaster/postmaster.c#L4929
94- 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=$?
9573else
96- make -C postgres /contrib/ptrack check|| status=$?
74+ make --directory= ${PG_SRC} /contrib/ptrack check|| status=$?
9775fi
9876
9977else
78+ # Set kernel params (used for debugging -- probackup tests)
79+ echo " ############### setting kernel params"
80+ sudo sh -c' echo 0 > /proc/sys/kernel/yama/ptrace_scope'
10081
10182# Build and install pg_probackup
10283echo " ############### Compiling and installing pg_probackup"
103- cd pg_probackup # Go to pg_probackup dir
104- 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
10586
10687# Setup python environment
10788echo " ############### Setting up python env"
@@ -110,35 +91,36 @@ else
11091 pip install testgres==1.8.2
11192
11293echo " ############### Testing"
113- if [" $MODE " = " basic" ]; then
94+ export PG_PROBACKUP_PTRACK=ON
95+ if [" ${MODE} " = " basic" ]; then
11496export PG_PROBACKUP_TEST_BASIC=ON
115- elif [" $MODE " = " paranoia" ]; then
97+ elif [" ${ MODE} " = " paranoia" ]; then
11698export PG_PROBACKUP_PARANOIA=ON
11799fi
118100
119- export PG_PROBACKUP_PTRACK=ON
120- if [" $TEST_CASE " = " all" ]; then
101+ if [" ${TEST_CASE} " = " all" ]; then
121102# Run all pg_probackup ptrack tests
122- python3 -m unittest -v tests.ptrack|| status= $?
103+ PBK_TEST_CASE= tests.ptrack
123104else
124- for i in ` seq$TEST_REPEATS ` ; do
125- python3 -m unittest -v tests.ptrack.PtrackTest.$TEST_CASE || status=$?
126- done
105+ PBK_TEST_CASE=tests.ptrack.PtrackTest.${TEST_CASE}
127106fi
107+ for i in ` seq${TEST_REPEATS} ` ; do
108+ python3 -m unittest -v${PBK_TEST_CASE} || status=$?
109+ done
128110
129111# Exit virtualenv
130112 deactivate
131-
132- # Get back to testdir
133- cd ..
134-
135113fi
136114
115+ # ########################################################
116+ # codecov
117+ echo " ############### Codecov"
118+ cd ${PTRACK_SRC}
137119# Generate *.gcov files
138- gcov$PG_SRC /contrib/ptrack/* .c$PG_SRC /contrib/ptrack/* .h
120+ gcov${ PG_SRC} /contrib/ptrack/* .c${ PG_SRC} /contrib/ptrack/* .h
139121
140122# Send coverage stats to Codecov
141123bash<( curl -s https://codecov.io/bash)
142124
143125# Something went wrong, exit with code 1
144- if [$status -ne 0 ]; then exit 1; fi
126+ if [${ status} -ne 0 ]; then exit 1; fi