Thread: how to use valgrind for TAP tests
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
"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 "$@"
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
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
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