Martin,
Thank you for your thoughtful reply. Your email ended up in my spam
folder so I did not see it until now.
I am new to autopkgtest, and feel like I got things working with CI
testing in a convoluted way, that there is probably a cleaner
solution. I looked through everything I could find on Debian, Ubuntu,
and your blog page to sort out an ideal way of using autopkgtest, and
do not think I am there yet...I think there still is some
clarification that could be added to the autopkgtest tutorial.
I DO want to have test scripts in the source tree that are written in
a general enough way to run on more than Debian and even more than
GNU/Linux, rather than writing custom test scripts for debian/tests if
possible. That was part of my motivation. My "make installcheck"
target works on many systems, but with Debian I had to avoid using it.
My "test/test-all" script works when invoked by "make installcheck",
when invoked in the source tree directly, and (now) when invoked from
the Debian CI test infrastructure.
This, for example, is my debian/tests/control file for my utfcheck package:[1]
Test-Command: cd test && progloc=`which utfcheck` &&
utfcheck_bindir=`dirname $progloc` ./test-all
I did that because it was only clear that I could find my program in
$PATH, not that I could count on it being available in /usr/bin as per
the FHS. I thought it might be possible that CI testing could use an
intermediate location in a way I did not know.
My test scripts then invoke "${utfcheck_bindir}/utfcheck"; see for example [2].
If I could just change the control file to be
Test-Command: make installcheck
That certainly would be simpler and more straightforward, but the test
environment would at least need $prefix to be set to override the
/usr/local default. As a not-quite-ideal alternative,
Test-Command: cd test && utfcheck_bindir=/usr/bin ./test-all
would at least be simpler; I just did not know from the autopkgtest
tutorial if it was possible.
That utfcheck package has a Debian bug filed against it. I want to
fix the bug, but I also am hoping to improve some other things related
to Debian packaging when I do. CI testing is one such thing.
On Sun, Aug 19, 2018 at 1:52 PM Martin Pitt <[email protected]> wrote:
>
> Hello Paul,
>
> Paul Hardy [2018-08-19 7:44 -0700]:
>> ...
> > By defining a few environment variables (like setting bindir to
> > /usr/bin), it will be more straightforward for people running
> > autopkgtest with Autotools to use a default "make installcheck"
> > target.
>
> Maybe, but I still don't believe this actually makes sense:
>
> * Defining random variables with generic names like $bindir might also
> influence other tests or packages, which makes them work differently than
> they would in a normal OS install.
My thinking was to confine such environment variables to the GNU
standard directory variables; see [3] in the automake manual.
Note that the default value for $prefix with automake is usually
/usr/local. With a Debian build, $prefix is set to /usr for final
installation of course. It was at least $prefix that I was hoping to
have defined in the environment; everything else could fall into place
from that.
> * autopkgtest is meant to be neutral to the test frame work that you use, as
> there are literally hundreds of them. There is no way it could maintain
> support for these.
And regretfully I do not know enough about that to understand the
implications, so I had to ask.
> * This is too magic. Test commands should be very explicit and allow the
> developer to reproduce them step by step in a shell.
>
> * For even `make` to work, you need at least a configured tree, and thus all
> the build dependencies, and most likely even need to build the package.
> autopkgtests should generally avoid that.
>
> * I don't believe that setting static values for these variables even works
> for all automake projects. If they would, why are they even variables?
Most automake projects might not even implement an "installcheck"
target; it is not mandatory (neither is even a "check" target). For
those that do, they would likely be working from the $prefix tree to
locate installed files. I would rather not change the
prefix=/usr/local default, because I would like test scripts and such
work as expected on non-Debian systems also.
> > If we can expect that autopkgtest uses package executables in
> > /usr/bin, package data files in /usr/share/<package>, likewise with
> > other FHS directories, could you update the tutorial page to mention
> > that? Right now there is just an implication on that page from the
> > sample script that the binary executable will be in a directory in
> > $PATH.
>
> Right, as Debian policy mandates that user-executable programs should be in
> $PATH. So it's generally preferrable to call programs in $PATH without an
> explicit path, to make sure they are actually in the correct place.
> But note that there's also e. g. /sbin, or you might want to test a
> Python module, or even the validity of a documentation package.
Okay, so our tests can assume that installed package data files, for
example, are in /usr/share/package. That is something I wanted to
determine for another package I have not yet uploaded, because of
course data files will not be in the $PATH variable. Can you mention
that in the tutorial?
As someone else who filed a bug mentioned, these things are probably
obvious to the autopkgtest team, but they are ambiguities for a
someone trying to use autopkgtest for the first time.
I think adding just a little more about the runtime environment
someone can expect would make it easier for people to get their CI
scripts working on the first attempt.
Thanks,
Paul Hardy
[1]https://sources.debian.org/src/utfcheck/1.1-2/debian/tests/control/
[2]https://sources.debian.org/src/utfcheck/1.1-2/test/test-ascii/
[3]https://www.gnu.org/software/automake/manual/html_node/Standard-Directory-Variables.html