Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

prove no longer supports --verbose when running tests in parallel #105

Open
avar opened this issue Mar 1, 2021 · 1 comment
Open

prove no longer supports --verbose when running tests in parallel #105

avar opened this issue Mar 1, 2021 · 1 comment
Assignees

Comments

@avar
Copy link
Contributor

avar commented Mar 1, 2021

This is related to #85 and #101 but it's a more general issue.

Regression with using ::Env

First, there's a regression in a8fb517 (Make prove respect environmental variables #28, 2013-10-27), when we started paying attention to HARNESS_OPTIONS in prove having the options set to jN where N > 1 suppresses the --verbose output completely. E.g. (running this on the git.git test suite):

HARNESS_OPTIONS=j2 perl -I ~/g/Test-Harness/lib ~/g/Test-Harness/bin/prove --verbose t0002-gitfile.sh :: -
-verbose

ok 1 - initial setup
ok 2 - bad setup: invalid .git file format
ok 3 - bad setup: invalid .git file path
ok 4 - final setup + check rev-parse --git-dir
[...]

But before a8fb517 it would show the verbose output, curiously if you pipe it to | cat it shows up, so there's some isatty() check somewhere.

Instead it should at the very least be smart enough to figure out that your -jN setting doesn't matter in the case of a single test.

The --verbose output doesn't make much sense under -jN

When you run N tests at a time it will struggle with some ASCII-art to represent the concurrency, and then dump the non-verbose output (under --verbose !) for whatever test it happened to run last:

$ HARNESS_OPTIONS= perl -I ~/g/Test-Harness/lib ~/g/Test-Harness/bin/prove --shuffle -j8 --verbose t000*
.sh :: --verbose
===(       1;0  0/?  1/?  0/?  0/?  0/?  0/?  0/?  0/? )================ok
===(       5;0  0/?  1/?  0/?  0/?  0/?  0/?  0/?  0/? )================ok
===(      11;0  0/?  1/?  0/?  0/?  0/?  0/?  0/?  0/? )================ok
===(      29;0  0/?  0/?  0/?  10/?  3/?  0/?  1/? )====================ok
===(      34;0  0/?  0/?  0/?  11/?  3/?  0/? )=========================ok
===(      83;0  19/?  11/?  0/?  18/?  1/? )============================ok
===(     180;0  55/?  29/?  0/?  36/? )=================================ok
===(     262;1  61/?  9/?  49/? )=======================================ok
===(     497;4  266/?  28/? )===========================================ok
t0008-ignores.sh ..... 
ok 343 - beyond a symlink from subdirectory with --verbose
ok 344 - beyond a symlink from subdirectory with --verbose -n
ok 345 - beyond a symlink from subdirectory with --verbose --non-matching
ok 346 - submodule
ok 347 - submodule with -q
[...]

There's a lot more than the "ok" output under --verbose in that test, so the verbose output is being stripped. This is another case where piping it to | cat gives expected results.

Patch?

Not submitting this as a PR since I'm not familiar with the code, but this seems to fix the above issues:

diff --git a/lib/TAP/Harness.pm b/lib/TAP/Harness.pm
index a9a865d..105f846 100644
--- a/lib/TAP/Harness.pm
+++ b/lib/TAP/Harness.pm
@@ -453,6 +453,8 @@ Any keys for which the value is C<undef> will be ignored.
 
         local $default_class{formatter_class} = 'TAP::Formatter::File'
           unless -t ( $arg_for{stdout} || \*STDOUT ) && !$ENV{HARNESS_NOTTY};
+        local $default_class{formatter_class} = 'TAP::Formatter::File'
+          if $self->jobs > 1 && $arg_for{verbosity};
 
         while ( my ( $attr, $class ) = each %default_class ) {
             $self->$attr( $self->$attr() || $class );
@Leont
Copy link
Member

Leont commented Mar 1, 2021

Yeah, this sounds logical.

@Leont Leont self-assigned this Mar 1, 2021
avar added a commit to avar/dotfiles that referenced this issue Mar 3, 2021
See Perl-Toolchain-Gang/Test-Harness#105,
also the hardcoded numcpu I don't use anymore for boxes that don't
exist anymore.
guillemj added a commit to guillemj/dpkg that referenced this issue Jul 3, 2024
The Tap::Harness module misbehaves when enabling both parallel and
verbose mode, where the verbose output is eaten by some concurrency
statistics output, and only the last test output is emitted.

We set the formatter_class explicitly to the file formatter in case we
are running in verbose and parallel modes as a workaround.

Ref: Perl-Toolchain-Gang/Test-Harness#105
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Jul 21, 2024
dpkg (1.22.7) unstable; urgency=medium

[ Guillem Jover ]
* dpkg-buildpackage: Remove fallback handling for missing required targets.
* dpkg-buildpackage: Fix the debian/rules executable check to respect -R.
* dpkg-realpath: Rewrite in C.
* Revert "test: Pass -T+1 to xz to workaround spurious warning with xz
  5.6.0".
* dpkg-genbuildinfo: Parse Provides as virtual packages.
* dpkg: Do not run hooks or loggers with --dry-run or while unprivileged.
* dpkg-shlibdeps: Add support for new --package option.
* dpkg-buildpackage: Make newline injection during signing GnuPG specific.
  See https://dev.gnupg.org/T7106.
* dpkg-realpath: Do not allow an empty pathname argument.
* dpkg-buildpackage: Add support for building from a specified .dsc or dir.
* dpkg-buildpackage: Reference the .dsc in .buildinfo if building from one.
* Perl modules:
  - Dpkg::BuildDriver: Refactor build driver out of dpkg-buildpackage.
  - Dpkg::Vendor::Ubuntu: Use -fcf-protection=none instead of
    -fno-cf-protection. Thanks to Matthias Klose <[email protected]>.
  - Dpkg::Vendor::Debian: On native builds map *_FOR_BUILD flags to * flags.
  - Dpkg::OpenPGP::ErrorCodes: Update error codes from SOP draft version 10.
    See https://ietf.org/archive/id/draft-dkg-openpgp-stateless-cli-10.html.
  - Dpkg::Vendor::Debian: Set -Wno-error on qa=-bug-implicit-func.
  - Dpkg::Shlibs::Cppfilt: Normalize demangled symbols with llvm or C++11
    format.
  - Dpkg::Archive::Ar: New module.
  - Dpkg::Vendor::Debian: Guarantee UTF-8 locale codeset on sanitize-env.
  - Dpkg::Substvars: Add support for required substvars assigned with !=.
  - Dpkg::Source::Package: Document method additions with an object.
  - Dpkg::Source::Package::V3::Bzr: Remove unused variables.
  - Dpkg::Source::Package: Add a new get_basedirname() method.
* Make fragments:
  - Protect files against double inclusion.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Use filter instead of findstring.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Use explicit test of $(origin) instead of ?=.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Search once for parallel= in DEB_BUILD_OPTIONS.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Generate the _FOR_BUILD variant of each variable automatically.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Reduce the number of subprocesses.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Stop hard-coding dpkg_datadir.
    Thanks to Nicolas Boulenguez <[email protected]>.
* Documentation:
  - doc: Add missing full stop to end of sentence.
  - man: Document DEB_BUILD_ARCH and DEB_HOST_ARCH usage in commands.
    Prompted by Thorsten Glaser <[email protected]>.
  - man: Add new libdpkg(7) manual page.
  - man: Document DPKG_COLORS and DPKG_NLS for all perl scripts honoring
    them.
  - man: Document missing Packages front-end fields in dpkg-query(1).
  - man: Document weak checksum algorithms.
  - man: Update verify format example to also include M.
  - doc: Fix grammar for fallback.
  - doc: Fix casing after admonition.
* Code internals:
  - libdpkg: Factor out filesystem database file loading into new function.
    Based on a patch by Simon Richter <[email protected]>.
  - libcompat: Include missing <string.h> in strnlen module.
    Reported by Simon Richter <[email protected]>.
  - dpkg-buildpackage: Refactor build target hook execution.
  - libdpkg: Handle readlink() failures in file_readlink().
  - libdpkg: Change varbuf_get_str() to return "" instead of initializing it.
  - libdpkg: Rename varbuf_get_str() to varbuf_str().
  - Use varbuf_str() instead of direct access.
  - libdpkg: Always NUL terminate varbufs.
  - libdpkg: Remove varbuf_end_str() function.
  - libdpkg: Add support for DPKG_NLS environment variable.
  - libdpkg: Add new varbuf prefix and suffix handling functions.
  - libdpkg: Add new file_getcwd() function.
  - dpkg: Use a variable for each conffile pathname type.
  - src: Fix timestamp parse error reporting.
  - src: Check whether SOURCE_DATE_EPOCH is set before parsing it.
    Based on a patch by Rainer Weikusat <[email protected]>.
  - libdpkg: Add missing header includes.
  - libdpkg: Make file_slurp_fd() NUL-terminate the varbuf.
  - libdpkg: Refactor lax problem reporting into parse_lax_problem()
    function.
  - libdpkg: Turn the warning on Provides version relation into a lax error.
  - libdpkg: Make varbuf_detach() always return a string.
  - libdpkg: Factor fsys_list_parse_buffer() out of
    ensure_packagefiles_available().
  - dpkg-shlibdeps: Refactor executable CLI parsing.
  - dpkg: Refactor conffile disappearing check into a new function.
  - Merge conffile obsolete and remove-on-upgrade into a single flags member.
  - lib, src: Include missing <stdbool.h>.
    Reported by Simon Richter <[email protected]>.
  - dpkg-ar: New internal ar implementation script.
  - start-stop-daemon: Fix typos in code comments.
  - libcompat: Fix vasprintf() to error out if vsnprintf() returns >=
    INT_MAX.
  - libdpkg: Do not accept len >= INT_MAX in fd_read() and fd_write().
  - dpkg-realpath: Switch direct varbuf accesses to varbuf_str().
  - Revert "dpkg-realpath: Switch direct varbuf accesses to varbuf_str()".
    See https://bugs.debian.org/1076061.
  - dpkg-realpath: Guarantee varbufs have been allocated.
  - Check for < 0 instead of == -1 from syscall return values.
  - Check for >= 0 instead of != -1 for syscall return values.
  - dpkg: Check for < 0 instead of == -1 for conffderef() return values.
  - libdpkg: Check for limit >= 0 instead of != -1 in buffer_copy().
  - libdpkg: Check for updateslength < 0 instead of == -1 in ulist_select().
  - dselect: Use enum values instead of literal integers.
  - libdpkg: Add new execname module.
  - libdpkg: Try to print the executable name of the lock contending process.
  - perl: Use new Dpkg::Source::Package->get_basedirname() method.
* Build system:
  - Re-enable the sanitizer for functional tests in CI.
  - Add missing space before backslash line continuation character.
  - Unconditionally include <stddef.h>.
  - Do not check for memcpy(). Reported by Simon Richter <[email protected]>.
  - Do not check for functions used unconditionally.
  - Partially revert the sanitizer for some functional tests in CI.
  - Print the release version at the end of configure.
  - Add support to track release VCS commit id.
  - Pass abs_srcdir and abs_builddir to the TAP driver.
  - Rework subst handling for built or installed artifacts.
  - Workaround Tap::Harness verbose misbehavior on parallel mode.
    See Perl-Toolchain-Gang/Test-Harness#105.
  - Fix test verbose and parallel option propagation.
  - Add missing files and sort POTFILES.in.
  - Check whether HAVE_* macros for headers are defined.
  - Include a .dist-vcs-url file in the distributed tarball.
  - Do not include VCS specific files in the distributed tarball.
* Packaging:
  - Suppress start-stop-daemon compat symlink if /sbin is missing.
    Thanks to Johannes Schauer Marin Rodrigues <[email protected]>.
* Test suite:
  - Do not fail the functional test suite due to memory leaks.
  - Pass --check-level=exhaustive to cppcheck.
  - Unset DEB_BUILD_MAINT_OPTIONS in build flags tests.
  - Simplify buildflags.mk test of _MAINT_APPEND when TEST_ is empty.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Use loops instead of repetitions in mk fragment tests.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Replace double quotes with single quote in shell recipes.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Test exported variables in addition to Make variables.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Test variable override.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Test DEB_CXXFLAGS_MAINT_SET.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Add missing test for CPP build tool.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Test override of a build tool.
    Thanks to Nicolas Boulenguez <[email protected]>.
  - Refactor real and virtual package setup.
    Based on a patch by Johannes Schauer Marin Rodrigues <[email protected]>.
  - Set CC to gcc in make fragments functional tests.
  - Parametrize all Makefile fragment functional tests.
  - Clarify the Makefile fragment variable being tested via comments.
  - Add new DPKG_CHECK_DIFF macro to abstract file comparisons.
  - Only execute Dpkg::Shlibs checks on ELF platforms.
  - Unify all ar invocations into create, extract and list.
  - Refactor ar handling into m4 macros.
  - Switch ar m4 macros to use internal dpkg-ar implementation.
* Localization:
  - Update Dutch man pages translations.
    Thanks to Frans Spiesschaert <[email protected]>.
  - Update Swedish translations.
    Thanks to Peter Krefting <[email protected]>.

[ Helge Kreutzmann ]
* Localization:
  - Update German man pages translation.
  - Update German scripts translation.

[ Sven Joachim ]
* Localization:
  - Update German programs translation.
raspbian-autopush pushed a commit to raspbian-packages/dpkg that referenced this issue Jul 23, 2024
  [ Guillem Jover ]
  * dpkg-buildpackage: Remove fallback handling for missing required targets.
  * dpkg-buildpackage: Fix the debian/rules executable check to respect -R.
  * dpkg-realpath: Rewrite in C.
  * Revert "test: Pass -T+1 to xz to workaround spurious warning with xz
    5.6.0".
  * dpkg-genbuildinfo: Parse Provides as virtual packages.
  * dpkg: Do not run hooks or loggers with --dry-run or while unprivileged.
    Closes: #1071124
  * dpkg-shlibdeps: Add support for new --package option.
  * dpkg-buildpackage: Make newline injection during signing GnuPG specific.
    See https://dev.gnupg.org/T7106.
  * dpkg-realpath: Do not allow an empty pathname argument.
  * dpkg-buildpackage: Add support for building from a specified .dsc or dir.
  * dpkg-buildpackage: Reference the .dsc in .buildinfo if building from one.
    Closes: #882511
  * Perl modules:
    - Dpkg::BuildDriver: Refactor build driver out of dpkg-buildpackage.
    - Dpkg::Vendor::Ubuntu: Use -fcf-protection=none instead of
      -fno-cf-protection. Thanks to Matthias Klose <[email protected]>.
    - Dpkg::Vendor::Debian: On native builds map *_FOR_BUILD flags to * flags.
      Closes: #1072332
    - Dpkg::OpenPGP::ErrorCodes: Update error codes from SOP draft version 10.
      See https://ietf.org/archive/id/draft-dkg-openpgp-stateless-cli-10.html.
    - Dpkg::Vendor::Debian: Set -Wno-error on qa=-bug-implicit-func.
      Closes: #1075769
    - Dpkg::Shlibs::Cppfilt: Normalize demangled symbols with llvm or C++11
      format.
    - Dpkg::Archive::Ar: New module.
    - Dpkg::Vendor::Debian: Guarantee UTF-8 locale codeset on sanitize-env.
    - Dpkg::Substvars: Add support for required substvars assigned with !=.
    - Dpkg::Source::Package: Document method additions with an object.
    - Dpkg::Source::Package::V3::Bzr: Remove unused variables.
    - Dpkg::Source::Package: Add a new get_basedirname() method.
  * Make fragments:
    - Protect files against double inclusion.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Use filter instead of findstring.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Use explicit test of $(origin) instead of ?=.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Search once for parallel= in DEB_BUILD_OPTIONS.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Generate the _FOR_BUILD variant of each variable automatically.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Reduce the number of subprocesses.
      Thanks to Nicolas Boulenguez <[email protected]>. Closes: #872381
    - Stop hard-coding dpkg_datadir.
      Thanks to Nicolas Boulenguez <[email protected]>.
  * Documentation:
    - doc: Add missing full stop to end of sentence.
    - man: Document DEB_BUILD_ARCH and DEB_HOST_ARCH usage in commands.
      Prompted by Thorsten Glaser <[email protected]>.
    - man: Add new libdpkg(7) manual page.
    - man: Document DPKG_COLORS and DPKG_NLS for all perl scripts honoring
      them.
    - man: Document missing Packages front-end fields in dpkg-query(1).
    - man: Document weak checksum algorithms.
    - man: Update verify format example to also include M.
    - doc: Fix grammar for fallback.
    - doc: Fix casing after admonition.
  * Code internals:
    - libdpkg: Factor out filesystem database file loading into new function.
      Based on a patch by Simon Richter <[email protected]>.
    - libcompat: Include missing <string.h> in strnlen module.
      Reported by Simon Richter <[email protected]>.
    - dpkg-buildpackage: Refactor build target hook execution.
    - libdpkg: Handle readlink() failures in file_readlink().
    - libdpkg: Change varbuf_get_str() to return "" instead of initializing it.
    - libdpkg: Rename varbuf_get_str() to varbuf_str().
    - Use varbuf_str() instead of direct access.
    - libdpkg: Always NUL terminate varbufs.
    - libdpkg: Remove varbuf_end_str() function.
    - libdpkg: Add support for DPKG_NLS environment variable.
    - libdpkg: Add new varbuf prefix and suffix handling functions.
    - libdpkg: Add new file_getcwd() function.
    - dpkg: Use a variable for each conffile pathname type.
    - src: Fix timestamp parse error reporting. See #1069846.
    - src: Check whether SOURCE_DATE_EPOCH is set before parsing it.
      Based on a patch by Rainer Weikusat <[email protected]>.
      Closes: #1069846
    - libdpkg: Add missing header includes.
    - libdpkg: Make file_slurp_fd() NUL-terminate the varbuf.
    - libdpkg: Refactor lax problem reporting into parse_lax_problem()
      function.
    - libdpkg: Turn the warning on Provides version relation into a lax error.
      See #930317.
    - libdpkg: Make varbuf_detach() always return a string.
    - libdpkg: Factor fsys_list_parse_buffer() out of
      ensure_packagefiles_available().
    - dpkg-shlibdeps: Refactor executable CLI parsing.
    - dpkg: Refactor conffile disappearing check into a new function.
    - Merge conffile obsolete and remove-on-upgrade into a single flags member.
    - lib, src: Include missing <stdbool.h>.
      Reported by Simon Richter <[email protected]>.
    - dpkg-ar: New internal ar implementation script.
    - start-stop-daemon: Fix typos in code comments.
    - libcompat: Fix vasprintf() to error out if vsnprintf() returns >=
      INT_MAX.
    - libdpkg: Do not accept len >= INT_MAX in fd_read() and fd_write().
    - dpkg-realpath: Switch direct varbuf accesses to varbuf_str().
    - Revert "dpkg-realpath: Switch direct varbuf accesses to varbuf_str()".
      See https://bugs.debian.org/1076061.
    - dpkg-realpath: Guarantee varbufs have been allocated.
    - Check for < 0 instead of == -1 from syscall return values.
    - Check for >= 0 instead of != -1 for syscall return values.
    - dpkg: Check for < 0 instead of == -1 for conffderef() return values.
    - libdpkg: Check for limit >= 0 instead of != -1 in buffer_copy().
    - libdpkg: Check for updateslength < 0 instead of == -1 in ulist_select().
    - dselect: Use enum values instead of literal integers.
    - libdpkg: Add new execname module.
    - libdpkg: Try to print the executable name of the lock contending process.
      Closes: #1070027
    - perl: Use new Dpkg::Source::Package->get_basedirname() method.
  * Build system:
    - Re-enable the sanitizer for functional tests in CI.
    - Add missing space before backslash line continuation character.
    - Unconditionally include <stddef.h>.
    - Do not check for memcpy(). Reported by Simon Richter <[email protected]>.
    - Do not check for functions used unconditionally.
    - Partially revert the sanitizer for some functional tests in CI.
    - Print the release version at the end of configure.
    - Add support to track release VCS commit id.
    - Pass abs_srcdir and abs_builddir to the TAP driver.
    - Rework subst handling for built or installed artifacts.
    - Workaround Tap::Harness verbose misbehavior on parallel mode.
      See Perl-Toolchain-Gang/Test-Harness#105.
    - Fix test verbose and parallel option propagation.
    - Add missing files and sort POTFILES.in.
    - Check whether HAVE_* macros for headers are defined.
    - Include a .dist-vcs-url file in the distributed tarball.
    - Do not include VCS specific files in the distributed tarball.
  * Packaging:
    - Suppress start-stop-daemon compat symlink if /sbin is missing.
      Thanks to Johannes Schauer Marin Rodrigues <[email protected]>.
      Closes: #1071078
  * Test suite:
    - Do not fail the functional test suite due to memory leaks.
    - Pass --check-level=exhaustive to cppcheck.
    - Unset DEB_BUILD_MAINT_OPTIONS in build flags tests.
    - Simplify buildflags.mk test of _MAINT_APPEND when TEST_ is empty.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Use loops instead of repetitions in mk fragment tests.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Replace double quotes with single quote in shell recipes.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Test exported variables in addition to Make variables.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Test variable override.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Test DEB_CXXFLAGS_MAINT_SET.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Add missing test for CPP build tool.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Test override of a build tool.
      Thanks to Nicolas Boulenguez <[email protected]>.
    - Refactor real and virtual package setup.
      Based on a patch by Johannes Schauer Marin Rodrigues <[email protected]>.
    - Set CC to gcc in make fragments functional tests.
    - Parametrize all Makefile fragment functional tests.
    - Clarify the Makefile fragment variable being tested via comments.
    - Add new DPKG_CHECK_DIFF macro to abstract file comparisons.
    - Only execute Dpkg::Shlibs checks on ELF platforms.
    - Unify all ar invocations into create, extract and list.
    - Refactor ar handling into m4 macros.
    - Switch ar m4 macros to use internal dpkg-ar implementation.
  * Localization:
    - Update Dutch man pages translations.
      Thanks to Frans Spiesschaert <[email protected]>.
      Closes: #1070144
    - Update Swedish translations.
      Thanks to Peter Krefting <[email protected]>. Closes: #1070011

  [ Helge Kreutzmann ]
  * Localization:
    - Update German man pages translation.
    - Update German scripts translation.

  [ Sven Joachim ]
  * Localization:
    - Update German programs translation.

[dgit import package dpkg 1.22.7]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants