Discussion:
Testsuite: autopkgtest-pkg-pybuild: weird behavior in my uploaded package
Add Reply
Andrey Rakhmatullin
2024-11-08 07:30:01 UTC
Reply
Permalink
According to pybuild-autopkgtest(1) [1], it seems that Python packages that
uses Testsuite: autopkgtest-pkg-build will "run the tests in the same way as
pybuild ... exception that tests are not run in the build directory". I have
some confusion on it with my recent uploads.
When I look at fscacher/0.4.1-1.1 upload [2], the autopkgtest failure for
this upload is weird. In [3], it looks like the tests are still to be
executed in the "build" directory.
There is no package build directory when autopkgtest runs, because
autopkgtest runs in a new separate chroot. That's what the line from the
manpage means.
Since this package is not built in autopkgtest, pytest cannot find
It's not directly related to building, it's just because your tests are in
src/fscacher/tests and so they are not copied into the test dir by
default. I don't know what's the preferred best practice for such
packages, I imagine both copying the test manually and running tests
against /usr/lib/python3/dist-packages/fscacher would work, but I don't
think either are possible with autopkgtest-pkg-build, at least if you
don't want to do extra copying not needed for build-time tests in d/rules.
In my package (python-queuelib) that has a similar layout I haven't
switched to autopkgtest-pkg-build.

(I would also expect that if a maintainer adds autopkgtests to a package
they actually run those before uploading)
--
WBR, wRAR
Roland Mas
2024-11-08 09:20:01 UTC
Reply
Permalink
Post by Andrey Rakhmatullin
According to pybuild-autopkgtest(1) [1], it seems that Python packages that
uses Testsuite: autopkgtest-pkg-build will "run the tests in the same way as
pybuild ... exception that tests are not run in the build directory". I have
some confusion on it with my recent uploads.
When I look at fscacher/0.4.1-1.1 upload [2], the autopkgtest failure for
this upload is weird. In [3], it looks like the tests are still to be
executed in the "build" directory.
There is no package build directory when autopkgtest runs, because
autopkgtest runs in a new separate chroot. That's what the line from the
manpage means.
Since this package is not built in autopkgtest, pytest cannot find
It's not directly related to building, it's just because your tests are in
src/fscacher/tests and so they are not copied into the test dir by
default. I don't know what's the preferred best practice for such
packages,
You need to list the files required for testing in
debian/pybuild.testfiles. Then both dh_auto_test and
autopkgtest-pkg-pybuild do the right thing.

Roland.
Andrey Rakhmatullin
2024-11-08 10:30:01 UTC
Reply
Permalink
You need to list the files required for testing in debian/pybuild.testfiles.
Then both dh_auto_test and autopkgtest-pkg-pybuild do the right thing.
This is the thing I didn't want to suggest, because dh_auto_test already
works.
--
WBR, wRAR
Antonio Terceiro
2024-11-11 21:40:01 UTC
Reply
Permalink
Post by Andrey Rakhmatullin
You need to list the files required for testing in debian/pybuild.testfiles.
Then both dh_auto_test and autopkgtest-pkg-pybuild do the right thing.
This is the thing I didn't want to suggest, because dh_auto_test already
works.
One issue is that the tests assume that the code to be imported is on a
parent directory, and that does not really work when running against the
installed code.

I got it to work by making these changes to the upstream tests:

----------------8<----------------8<----------------8<-----------------
--- fscacher-0.4.1.orig/src/fscacher/tests/test_cache.py
+++ fscacher-0.4.1/src/fscacher/tests/test_cache.py
@@ -8,8 +8,8 @@ import subprocess
import sys
import time
import pytest
-from .. import PersistentCache
-from ..cache import DirFingerprint, FileFingerprint
+from fscacher import PersistentCache
+from fscacher.cache import DirFingerprint, FileFingerprint

platform_system = platform.system().lower()
on_windows = platform_system == "windows"
--- fscacher-0.4.1.orig/src/fscacher/tests/test_util.py
+++ fscacher-0.4.1/src/fscacher/tests/test_util.py
@@ -1,5 +1,5 @@
import pytest
-from ..cache import xor_bytes
+from fscacher.cache import xor_bytes


@pytest.mark.parametrize(
----------------8<----------------8<----------------8<-----------------

And these changes to the Debian packaging:

----------------8<----------------8<----------------8<-----------------
diff -Nru fscacher-0.4.1/debian/control fscacher-0.4.1/debian/control
--- fscacher-0.4.1/debian/control 2024-11-08 12:47:13.000000000 -0300
+++ fscacher-0.4.1/debian/control 2024-11-11 18:13:06.000000000 -0300
@@ -11,7 +11,7 @@
python3-pytest-cov,
python3-pytest-mock,
Standards-Version: 4.6.2.0
-Testsuite: autopkgtest-pkg-python
+Testsuite: autopkgtest-pkg-pybuild
Homepage: https://github.com/con/fscacher
Rules-Requires-Root: no

diff -Nru fscacher-0.4.1/debian/pybuild.testfiles fscacher-0.4.1/debian/pybuild.testfiles
--- fscacher-0.4.1/debian/pybuild.testfiles 1969-12-31 21:00:00.000000000 -0300
+++ fscacher-0.4.1/debian/pybuild.testfiles 2024-11-11 18:14:07.000000000 -0300
@@ -0,0 +1 @@
+src/fscacher/tests
----------------8<----------------8<----------------8<-----------------
Loading...