Thread: how to use valgrind for TAP tests

how to use valgrind for TAP tests

From
"osumi.takamichi@fujitsu.com"
Date:
Hello, hackers


I have a question about how to execute valgrind with TAP tests
in order to check some patches in the community.
My main interest is testing src/test/subscription now but
is there any general way to do it ?

The documentation [1] says
"It's important to realize that the TAP tests will start test server(s) even when you say make installcheck".
Then, when I executed postgres that is launched by valgrind, it didn't react to the test execution of "make
installcheck".

In other words, I can execute make installcheck without starting up my instance,
because TAP tests create their own servers
at least in terms of the case of my interested test, src/test/subscription.

[1] - https://www.postgresql.org/docs/13/regress-tap.html

Could someone give me an advice ?

Best Regards,
    Takamichi Osumi



Re: how to use valgrind for TAP tests

From
Tom Lane
Date:
"osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com> writes:
> I have a question about how to execute valgrind with TAP tests
> in order to check some patches in the community.
> My main interest is testing src/test/subscription now but
> is there any general way to do it ?

The standard solution is

(1) Build normally (well, with -DUSE_VALGRIND)
(2) Move the postgres executable aside, say
    mv src/backend/postgres src/backend/postgres.orig
(3) Replace the executable with a wrapper script that invokes
    valgrind on the original executable
(4) Now you can run "make check" with a valgrind'ed server,
    as well as things that depend on "make check", such as TAP tests

The script I use for (3) is attached; adjust paths and options to taste.

            regards, tom lane

#!/bin/sh

# Use this script as a wrapper to run PG under valgrind in "make check"
# scenarios.  Rename the built postgres executable to postgres.orig
# and then copy this script to $PGBLDROOT/src/backend/postgres.

# Note: a disadvantage of this approach is that the backend will see
# $PGBLDROOT/src/backend/ as its my_exec_path, hence will not pick up
# anything in the temp install dir, but will go to the configured install
# dir.  Must "make install" extensions and other stuff to work properly.

exec valgrind \
    --quiet \
    --suppressions=$PGSRCROOT/src/tools/valgrind.supp \
    --suppressions=$HOME/misc/my-valgrind.supp \
    --time-stamp=yes --error-exitcode=128 --trace-children=yes \
    --log-file=$HOME/valgrind-logs/%p.log $PMVALGRIND \
    $PGBLDROOT/src/backend/postgres.orig "$@"

Re: how to use valgrind for TAP tests

From
Alexander Lakhin
Date:
Hello,

18.12.2020 19:02, Tom Lane wrote:
> "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com> writes:
>> I have a question about how to execute valgrind with TAP tests
>> in order to check some patches in the community.
>> My main interest is testing src/test/subscription now but
>> is there any general way to do it ?
> The standard solution is
>
> (1) Build normally (well, with -DUSE_VALGRIND)
> (2) Move the postgres executable aside, say
>     mv src/backend/postgres src/backend/postgres.orig
> (3) Replace the executable with a wrapper script that invokes
>     valgrind on the original executable
> (4) Now you can run "make check" with a valgrind'ed server,
>     as well as things that depend on "make check", such as TAP tests
>
> The script I use for (3) is attached; adjust paths and options to taste.
I use the attached patch for this purpose, that slightly simplifies
things and covers all the other binaries:
git apply .../install-vrunner.patch
CPPFLAGS="-DUSE_VALGRIND -Og" ./configure --enable-tap-tests
--enable-debug --enable-cassert && make && make check
`make check-world` is possible too, with
src/bin/pg_ctl/t/001_start_stop.pl disabled (removed).

Best regards,
Alexander

Attachment

RE: how to use valgrind for TAP tests

From
"osumi.takamichi@fujitsu.com"
Date:
Hello

On Saturday, December 19, 2020 1:03 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com> writes:
> > I have a question about how to execute valgrind with TAP tests in
> > order to check some patches in the community.
> > My main interest is testing src/test/subscription now but is there any
> > general way to do it ?
>
> The standard solution is
>
> (1) Build normally (well, with -DUSE_VALGRIND)
> (2) Move the postgres executable aside, say
>     mv src/backend/postgres src/backend/postgres.orig
> (3) Replace the executable with a wrapper script that invokes
>     valgrind on the original executable
> (4) Now you can run "make check" with a valgrind'ed server,
>     as well as things that depend on "make check", such as TAP tests
>
> The script I use for (3) is attached; adjust paths and options to taste.
Thank you so much.
I couldn't come up with the idea to prepare a wrapper script.
This worked successfully.


Best,
    Takamichi Osumi



RE: how to use valgrind for TAP tests

From
"osumi.takamichi@fujitsu.com"
Date:
Hi, Alexander

On Sunday, December 20, 2020 5:00 PM Alexander Lakhin wrote:
> > "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com> writes:
> >> I have a question about how to execute valgrind with TAP tests in
> >> order to check some patches in the community.
> >> My main interest is testing src/test/subscription now but is there
> >> any general way to do it ?
> > The standard solution is
> >
> > (1) Build normally (well, with -DUSE_VALGRIND)
> > (2) Move the postgres executable aside, say
> >     mv src/backend/postgres src/backend/postgres.orig
> > (3) Replace the executable with a wrapper script that invokes
> >     valgrind on the original executable
> > (4) Now you can run "make check" with a valgrind'ed server,
> >     as well as things that depend on "make check", such as TAP tests
> >
> > The script I use for (3) is attached; adjust paths and options to taste.
> I use the attached patch for this purpose, that slightly simplifies things and
> covers all the other binaries:
> git apply .../install-vrunner.patch
> CPPFLAGS="-DUSE_VALGRIND -Og" ./configure --enable-tap-tests
> --enable-debug --enable-cassert && make && make check `make
> check-world` is possible too, with src/bin/pg_ctl/t/001_start_stop.pl
> disabled (removed).
Thank you for giving me a fruitful advice !
When I encounter another needs, I'll apply this method as well.


Best Regards,
    Takamichi Osumi