Questions about including tests/ directory into package

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Questions about including tests/ directory into package

Sao I Kuan
Hi,

I'm newcomer to Debian packaging, and trying to add the autopkgtest
test script into python-tinyalign[1].

    [1] https://salsa.debian.org/med-team/python-tinyalign

And now I'm facing a (maybe simple) problem.

The upstream test files are located in tests/ directory, but seems
this directory is excluded during packaging.
I have no idea how to include this tests/ directory.

1. Please let me know is there any variable for including the specific
file/directory.
2. Why and when the tests/ directory excluded? I tried to find the
logic in dh-python [2], but failed.

    [2] https://salsa.debian.org/python-team/tools/dh-python

3. Is this a correct approach for including the excluded test materials?

Always appreciates.

Sincerely,

Sao I Kuan
[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Questions about including tests/ directory into package

Diane Trout
On Thu, 2020-03-19 at 15:22 +0900, Sao I Kuan wrote:

> Hi,
>
> I'm newcomer to Debian packaging, and trying to add the autopkgtest
> test script into python-tinyalign[1].
>
>     [1] https://salsa.debian.org/med-team/python-tinyalign
>
> And now I'm facing a (maybe simple) problem.
>
> The upstream test files are located in tests/ directory, but seems
> this directory is excluded during packaging.
> I have no idea how to include this tests/ directory.

The way I solved that problem in a similar package was this

Test-Command: set -e
 ; for py in $(py3versions -r 2>/dev/null)
 ; do cd tests
 ; echo "Testing with $py in $(pwd):"
 ; http_proxy= $py -m pytest -v --pyargs
 ; done
Depends: @, python3-all, python3-pytest

The goal of autopkgtests is to test the installed package, when
autopkgtest starts running it defaults to starting in the extracted
copy of the source package.

The goal is to make sure you test the copy in /usr/lib/python*/dist-
packages. So I assumed if cd-ed into the tests directory the package
source module wouldn't be available to the test runner.

I did make the assumption that none of the tests messed with the python
path  to look in the parent directory...

If that's a problem, maybe copy the contents of tests/ to
$AUTOPKGTEST_TMP and run the tests there.

Hope that helps,
Diane

Reply | Threaded
Open this post in threaded view
|

Re: Questions about including tests/ directory into package

Sao I Kuan
On Fri, Mar 20, 2020 at 2:38 AM Diane Trout <[hidden email]> wrote:

> The way I solved that problem in a similar package was this
>
> Test-Command: set -e
>  ; for py in $(py3versions -r 2>/dev/null)
>  ; do cd tests
>  ; echo "Testing with $py in $(pwd):"
>  ; http_proxy= $py -m pytest -v --pyargs
>  ; done
> Depends: @, python3-all, python3-pytest
>
> The goal of autopkgtests is to test the installed package, when
> autopkgtest starts running it defaults to starting in the extracted
> copy of the source package.
>
> The goal is to make sure you test the copy in /usr/lib/python*/dist-
> packages. So I assumed if cd-ed into the tests directory the package
> source module wouldn't be available to the test runner.
>
> I did make the assumption that none of the tests messed with the python
> path  to look in the parent directory...

Thanks, Diane.

I tried with your given example, it really helped. A lot of
appreciates. Thanks for your kind and deep explanation.

Sincerely,

Sao I Kuan
[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Questions about including tests/ directory into package

Thomas Goirand-3
In reply to this post by Sao I Kuan
On 3/19/20 7:22 AM, Sao I Kuan wrote:

> Hi,
>
> I'm newcomer to Debian packaging, and trying to add the autopkgtest
> test script into python-tinyalign[1].
>
>     [1] https://salsa.debian.org/med-team/python-tinyalign
>
> And now I'm facing a (maybe simple) problem.
>
> The upstream test files are located in tests/ directory, but seems
> this directory is excluded during packaging.
> I have no idea how to include this tests/ directory.
>
> 1. Please let me know is there any variable for including the specific
> file/directory.
> 2. Why and when the tests/ directory excluded? I tried to find the
> logic in dh-python [2], but failed.
>
>     [2] https://salsa.debian.org/python-team/tools/dh-python
>
> 3. Is this a correct approach for including the excluded test materials?
>
> Always appreciates.
>
> Sincerely,
>
> Sao I Kuan
> [hidden email]

Hi,

Ah... how much I hate python and setuptools for being so liberal and let
every developer design its own thing... we end up with no standard, one
having to read setup.py, know all the internals of setuptools, and this
thread is one more collateral of that. :/

For this specific package, what's being packaged is what's found by
setup.py. In that file, you can see:

packages=find_packages("src"),

Setuptools will only find "tinyalign" under the "src" folder, as a
python module to package, which is why that's the only thing that is
going to be packaged.

IMO, the best approach to this problem is to convince upstream to move
their tests folder into the Python package folder. Best is even to make
upstream get rid of the "src" folder, rename that one "tinyalign" and
put the tests folder in it. In other words, make upstream do:

mv src/tinyalign .
rmdir src
mv tests tinyalign
sed -i 's/packages=.*/packages=["tinyalign"],/' setup.py

Cheers,

Thomas Goirand (zigo)

Reply | Threaded
Open this post in threaded view
|

Re: Questions about including tests/ directory into package

Sandro Tosi-6
> packages=find_packages("src"),
>
> Setuptools will only find "tinyalign" under the "src" folder, as a
> python module to package, which is why that's the only thing that is
> going to be packaged.
>
> IMO, the best approach to this problem is to convince upstream to move
> their tests folder into the Python package folder. Best is even to make
> upstream get rid of the "src" folder, rename that one "tinyalign" and
> put the tests folder in it. In other words, make upstream do:

that's not correct: the "src" directory is a very well know
best-practice (you can google for it, if you need references),
intended to avoid situations where "import mymodule" will have
inconsistent results depending on where you run that command and easy
of testing.

--
Sandro "morph" Tosi
My website: http://sandrotosi.me/
Me at Debian: http://wiki.debian.org/SandroTosi
Twitter: https://twitter.com/sandrotosi