[U-Boot] [PATCHv2 10/13] test/py: Rework test.py to be a different kind of wrapper

Stephen Warren
2019-10-23T17:29:41Z

On 10/23/19 11:12 AM, Tom Rini wrote:
> On Wed, Oct 23, 2019 at 11:03:38AM -0600, Stephen Warren wrote:
>> On 10/23/19 10:58 AM, Tom Rini wrote:
>>> On Wed, Oct 23, 2019 at 10:55:57AM -0600, Stephen Warren wrote:
>>>> On 10/22/19 9:20 PM, Tom Rini wrote:
>>>>> Now that we have moved to being based on pytest for python3 we need to
>>>>> make our test.py wrapper more robust in terms of only calling python3
>>>>> rather than possibly finding and using python2. To do this, change from
>>>>> execvp()'ing pytest to invoking the package itself via python. In the
>>>>> event that pytest is unavailable we still get a user-friendly error:
>>>>
>>>> I guess if this works, it's fine. But I think it'd work just as well to
>>>> simply s/py.test/py.test-3/ in the existing code?
>>>
>>> We can't because pip only provides "py.test" / "pytest" binaries.
>>
>> Hmm. It sucks that virtualenv does things differently to Ubuntu packaging
>> then. That means this series will probably break my test system, which
>> doesn't use virtualenv. I guess I'll apply it and see.
>
> This should be what works everywhere tho. Instead of hoping that
> "py.test" will be the right python version we tell python3 to use the
> pytest module it has. So if you have system python3-pytest, that works,
> if you (python3) pip install pytest locally, that works and if you
> virtualenv + python3 + pip install pytest, that works.

On Ubuntu 16.04, with everything installed from Ubuntu packages rather
than using virtualenv, I get this:

> + ./src/u-boot/test/py/test.py --bd sandbox --build-dir /var/lib/jenkins/workspace/u-boot-github_swarren_u-boot-tegra_dev-test-py/U_BOOT_BOARD/sandbox/build/u-boot/sandbox -k 'not sleep'
> Traceback (most recent call last):
> File "./src/u-boot/test/py/test.py", line 20, in <module>
> sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 542, in load_entry_point
> return get_distribution(dist).load_entry_point(group, name)
> File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2568, in load_entry_point
> raise ImportError("Entry point %r not found" % ((group, name),))
> ImportError: Entry point ('console_scripts', 'pytest') not found

> [swarren at swarren-lx1 u-boot]$ dpkg -l|grep py|grep test
> ii python-pytest 2.8.7-4
> ii python3-pytest 2.8.7-4

I guess that's much older than the pytest in requirements.txt (5.2.1!!).
While I think we can require a newish version of Python (3.5) since
that's widely available on supported OSs, I don't think we want to force
people to have a very new version of all the packages (which supported
distros don't package yet), or change they way they run pytest (by
requiring use of a virtualenv and requirements.txt) since that mechanism
isn't supported on old branches of U-Boot, which will then require all
kinds of special cases in scripts that invoke the U-Boot test system.