Somehow, it's worse than I thought. Turns out something in Devel::Cover is interfering with normal behavior. I get very low coverage numbers, because basically pkg_add can't even get to the end of installing a package.
I'm wondering if anyone actually manages to use Devel::Cover for non trivial real worlds problems :( On Sat, Jul 8, 2023 at 11:27 AM Marc Espie <marc.espie.open...@gmail.com> wrote: > > Contrary to the NYT profiler, which works like a charm > Devel::Cover is a tricky beast. > > Right now, I've isolated two issues: > - OpenBSD::MkTemp (subject to a separate mail) > - identity changes on the fly. Even with looseperms, Devel::Cover > doesn't cope too well with multiple processes and multiple identities > > Leading to hilarious errors like: > > http://cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64/: Devel::Cover: > Oops, it looks like something went wrong writing the coverage. > It's possible that more bad things may happen but we'll try to > carry on anyway as if nothing happened. At a minimum you'll > probably find that you are missing coverage. If you're > interested, the problem was: > > Can't open /tmp/cover_db/structure/177bda0715eb6b804bab8afc36107d32.lock: > Permission denied > > > > So I have the following fairly icky patch in my tree to be able to try > and get some coverage data and keep going > > (note that the dynamic call to OpenBSD::MkTemp in pkg_create is probably > not affected since it gets run only with DEPENDS_CACHE set) > > > I consider dpb to be somewhat hopeless for now in its standard privsep'd > mode. I've tried it, and not only does Devel::Cover break, but dpb itself > gets confused with getpwuid somehow not even finding its own parameters. > > (update-plist is going to be a bit annoying as well, but probably not too > much as identity change can be managed as long as we don't try to write > the lists) > > > Anyways, as I was saying to kn@, I want to make some kind of progress towards > figuring out pkg_* code coverage, and probably adding some regression tests. > > So, in case someone else wants to play: > > Index: OpenBSD/PackageRepository.pm > =================================================================== > RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PackageRepository.pm,v > retrieving revision 1.176 > diff -u -p -r1.176 PackageRepository.pm > --- OpenBSD/PackageRepository.pm 13 Jun 2023 09:07:17 -0000 1.176 > +++ OpenBSD/PackageRepository.pm 8 Jul 2023 09:21:42 -0000 > @@ -753,13 +753,13 @@ sub ftp_cmd($self) > sub drop_privileges_and_setup_env($self) > { > my ($uid, $gid, $user) = $self->fetch_id; > - if (defined $uid) { > - # we happen right before exec, so change id permanently > - $( = $gid; > - $) = "$gid $gid"; > - $< = $uid; > - $> = $uid; > - } > +# if (defined $uid) { > +# # we happen right before exec, so change id permanently > +# $( = $gid; > +# $) = "$gid $gid"; > +# $< = $uid; > +# $> = $uid; > +# } > # create sanitized env for ftp > my %newenv = ( > HOME => '/var/empty', > Index: OpenBSD/Temp.pm > =================================================================== > RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/Temp.pm,v > retrieving revision 1.39 > diff -u -p -r1.39 Temp.pm > --- OpenBSD/Temp.pm 13 Jun 2023 09:07:17 -0000 1.39 > +++ OpenBSD/Temp.pm 8 Jul 2023 09:21:42 -0000 > @@ -19,7 +19,7 @@ use v5.36; > > package OpenBSD::Temp; > > -use OpenBSD::MkTemp; > +use File::Temp; > use OpenBSD::Paths; > use OpenBSD::Error; > > @@ -112,7 +112,7 @@ sub permanent_file($dir, $stem) > if (defined $dir) { > $template = "$dir/$template"; > } > - if (my @l = OpenBSD::MkTemp::mkstemp($template)) { > + if (my @l = File::Temp::tempfile($template)) { > return @l; > } > ($lastname, $lasttype, $lasterror) = ($template, 'file', $!); > @@ -125,7 +125,7 @@ sub permanent_dir($dir, $stem) > if (defined $dir) { > $template = "$dir/$template"; > } > - if (my $d = OpenBSD::MkTemp::mkdtemp($template)) { > + if (my $d = File::Temp::tempdir($template)) { > return $d; > } > ($lastname, $lasttype, $lasterror) = ($template, 'dir', $!); >