Subject: bug#42553: python-gevent is broken on i686-linux (tests fail)

From: Jakub Kądziołka <[email-masked]>
Date: Sun, 26 Jul 2020 20:35:03 +0200

The package python-gevent doesn't build on i686-linux, the following
test failure occurs:

  ======================================================================
  FAIL: test_unlink (gevent.tests.test__core_stat.TestCoreStat)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File "/tmp/guix-build-python-gevent-20.6.2.drv-0/gevent-20.6.2/build/lib.linux-i686-3.8/gevent/testing/errorhandler.py", line 47, in wrapper
      return method(self, *args, **kwargs)
    File "/tmp/guix-build-python-gevent-20.6.2.drv-0/gevent-20.6.2/build/lib.linux-i686-3.8/gevent/testing/errorhandler.py", line 34, in wrapper
      return method(self, *args, **kwargs)
    File "/tmp/guix-build-python-gevent-20.6.2.drv-0/gevent-20.6.2/build/lib.linux-i686-3.8/gevent/testing/testcase.py", line 182, in wrapper
      return method(self, *args, **kwargs)
    File "/tmp/guix-build-python-gevent-20.6.2.drv-0/gevent-20.6.2/build/lib.linux-i686-3.8/gevent/tests/test__core_stat.py", line 114, in test_unlink
      self._check_attr('attr', True)
    File "/tmp/guix-build-python-gevent-20.6.2.drv-0/gevent-20.6.2/build/lib.linux-i686-3.8/gevent/tests/test__core_stat.py", line 66, in _check_attr
      self.assertIsNone(x, name)
  AssertionError: os.stat_result(st_mode=997, st_ino=0, st_dev=74395714104328192, st_nlink=30000, st_uid=0, st_gid=0, st_size=6851593278123409408, st_atime=1595260873, st_mtime=0, st_ctime=-2) is not None : attr
  
  ----------------------------------------------------------------------
  Ran 48 tests in 1.238s

I have created a simple standalone script based on this test case:

import os, tempfile, gevent
fd, path = tempfile.mkstemp('.test')
os.close(fd)
hub = gevent.get_hub()
watcher = hub.loop.stat(path, interval=-1)
hub.loop.update_now()
gevent.spawn_later(0.5, os.unlink, path)
hub.wait(watcher)
print(watcher.attr)
print(watcher.prev)

After adding a (delete 'check) to python-gevent's arguments, we observe
the following:

% ./pre-inst-env guix environment --ad-hoc python python-gevent -- python3 ~/tmp/gevent-test.py
None
os.stat_result(st_mode=33152, st_ino=44162375, st_dev=2052, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1595787602, st_mtime=1595787602, st_ctime=1595787602)
% ./pre-inst-env guix environment --system=i686-linux --ad-hoc python python-gevent -- python3 ~/tmp/gevent-test.py
os.stat_result(st_mode=1000, st_ino=0, st_dev=189675956338688000, st_nlink=1000, st_uid=0, st_gid=0, st_size=6853855360088801280, st_atime=1595787555, st_mtime=0, st_ctime=-2)
os.stat_result(st_mode=33152, st_ino=2052, st_dev=2052, st_nlink=1, st_uid=1000, st_gid=1000, st_size=17592186044416, st_atime=1595787555, st_mtime=1595787555, st_ctime=0)

Namely, the i686 variant returns entirely bogus values.

I have tried reproducing this in a Guix-less environment in a Docker
container based on the i386/debian:bullseye image, but I haven't had any
luck.

Regards,
Jakub Kądziołka