python-control/Slycot

execute permission on python files in test?

repagh opened this issue · 1 comments

In the CMakeLists.txt for the tests I see:

install(FILES ${PYSOURCE}
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
                    GROUP_READ GROUP_EXECUTE
                    WORLD_READ WORLD_EXECUTE
        DESTINATION slycot/tests)

Why are these files installed with execute permission? On Linux/OSX this is not needed, is it a Windows thing, or something specific to pytest?

Many test files have a __main__ section so that one could run them directly from the command line.

~/src/Slycot/slycot/ > ./tests/test_mb.py 
......
----------------------------------------------------------------------
Ran 6 tests in 0.006s

OK

This needs to be consistent with a proper shebang in the first line and the executable bits. That is not always true right now.

Also note that when packaging a RPM and installing executable python scripts into ${python_sitearch} (e.g. /usr/lib64/python3.8/site-packages/slycot/tests/), that produces RPMlint warnings and is not considered good practice.

On my system, when running python3 setup.py build, the executable bits do not propagate from _skbuild/*/cmake-install to _skbuild/*/setuptools anyway:

~/src/Slycot/ > ls -l _skbuild/linux-x86_64-3.8/cmake-install/slycot/tests 
total 88
-rwxr-xr-x 1 greiner users     0 May  6 03:01 __init__.py
drwxr-xr-x 1 greiner users  1046 May 11 17:37 __pycache__
-rwxr-xr-x 1 greiner users  3062 May  6 03:03 test_ab08n.py
-rwxr-xr-x 1 greiner users  4091 May  6 03:03 test_ag08bd.py
-rwxr-xr-x 1 greiner users   631 May 11 14:03 test_examples.py
-rwxr-xr-x 1 greiner users  3200 May 11 14:03 test_exceptions.py
-rwxr-xr-x 1 greiner users 12932 May 11 20:28 test_mb.py
-rwxr-xr-x 1 greiner users  1912 May 11 14:03 test_mc.py
-rwxr-xr-x 1 greiner users  8712 May 11 17:20 test_sb.py
-rwxr-xr-x 1 greiner users  1531 May  6 03:03 test_sg02ad.py
-rwxr-xr-x 1 greiner users  2613 May  6 03:03 test_sg03ad.py
-rwxr-xr-x 1 greiner users  6821 May 11 14:03 test_tb05ad.py
-rwxr-xr-x 1 greiner users  8729 May  6 03:03 test_td04ad.py
-rwxr-xr-x 1 greiner users  2573 May  6 03:03 test_tg01ad.py
-rwxr-xr-x 1 greiner users  4403 May  6 03:03 test_tg01fd.py
~/src/Slycot/ > ls -l _skbuild/linux-x86_64-3.8/setuptools/lib/slycot/tests
total 88
-rw-r--r-- 1 greiner users     0 May  6 03:01 __init__.py
-rw-r--r-- 1 greiner users  3062 May  6 03:03 test_ab08n.py
-rw-r--r-- 1 greiner users  4091 May  6 03:03 test_ag08bd.py
-rw-r--r-- 1 greiner users   631 May 11 14:03 test_examples.py
-rw-r--r-- 1 greiner users  3200 May 11 14:03 test_exceptions.py
-rw-r--r-- 1 greiner users 12932 May 11 20:28 test_mb.py
-rw-r--r-- 1 greiner users  1912 May 11 14:03 test_mc.py
-rw-r--r-- 1 greiner users  8712 May 11 17:20 test_sb.py
-rw-r--r-- 1 greiner users  1531 May  6 03:03 test_sg02ad.py
-rw-r--r-- 1 greiner users  2613 May  6 03:03 test_sg03ad.py
-rw-r--r-- 1 greiner users  6821 May 11 14:03 test_tb05ad.py
-rw-r--r-- 1 greiner users  8729 May  6 03:03 test_td04ad.py
-rw-r--r-- 1 greiner users  2573 May  6 03:03 test_tg01ad.py
-rw-r--r-- 1 greiner users  4403 May  6 03:03 test_tg01fd.py

My recommendation from a linux package maintainer point of view is to remove the shebangs and executable bits of the test files. Executing them individually is still possible by calling python <testfile> or pytest -k <testspec> (the latter bypassing the main section)