Description
This has apparently been a known issue for a while, but I've narrowed down the circumstances it can happen in while working on OpenLightingProject/website#14. Warning - it's a bit involved.
When protobuf is installed from pip (i.e. pip3 install protobuf
), ClientWrapperTest fails. When protobuf is installed from the system package manager (i.e. apt-get install python3-protobuf
), the test passes. Checked with the latest commit in master (a95a6f7 currently) with Ubuntu 20.10 and Ubuntu 20.04. I haven't properly checked Fedora yet (only a cursory test while writing docs), but I suspect it will have the same issue for reasons detailed below.
Some speculation:
My first thought was an issue between Python2 packages and Python3 packages. These test systems only have Python3, so that's not it.
Further research reveals that GNOME distros (or, at least, Ubuntu and Fedora) come with gnome-online-accounts
, which itself depends on python3-protobuf
. This means that GNOME users will likely have protobuf for python already installed on their systems. If they install deps from pip (e.g. with pip3 install protobuf numpy
), pip won't install another protobuf as it sees the system version already. This also explains why the issue occurs on headless systems (i.e. Travis), as those systems won't have the preinstalled python protobuf and will install it from pip if you ask.
But what's the difference between the two sources? My instinct is that something changed in newer Protobuf releases (I know this is a regular problem here). The latest release on pip is 3.14.0. Ubuntu 20.10 will get you 3.12.3. Ubuntu 20.04 provides 3.6.1. Fedora 33 has 3.12.4. Fedora 32 has 3.11.2.
To confirm this theory, I installed protobuf 3.12.4 from pip and ran tests, which all passed. protobuf 3.13.0 also passes. This leads me to conclude something about protobuf 3.14 is causing problems. Caveat - I havn't tested any of this with Python2.
Test log:
==================================
OLA 0.10.8: ./test-suite.log
==================================
# TOTAL: 95
# PASS: 94
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
FAIL: python/ola/ClientWrapperTest.sh
=====================================
...F/usr/lib/python3.8/unittest/case.py:704: ResourceWarning: unclosed <socket.socket fd=4, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>
outcome.errors.clear()
ResourceWarning: Enable tracemalloc to get the object allocation traceback
.
======================================================================
FAIL: testEventLoop (__main__.ClientWrapperTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./python/ola/ClientWrapperTest.py", line 195, in testEventLoop
self.assertTrue(results.d_called - self.start >=
AssertionError: False is not true
----------------------------------------------------------------------
Ran 5 tests in 0.039s
FAILED (failures=1)
FAIL python/ola/ClientWrapperTest.sh (exit status: 1)