Cleaning up environment Preparing virtual environment /opt/tests/platypush Installing latest version of the repository Processing /opt/repos/platypush Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting alembic Using cached alembic-1.11.1-py3-none-any.whl (224 kB) Collecting bcrypt Using cached bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl (593 kB) Collecting croniter Using cached croniter-1.4.1-py2.py3-none-any.whl (19 kB) Collecting docutils Using cached docutils-0.20.1-py3-none-any.whl (572 kB) Collecting flask Using cached Flask-2.3.2-py3-none-any.whl (96 kB) Collecting frozendict Using cached frozendict-2.3.8-py311-none-any.whl (14 kB) Collecting marshmallow Using cached marshmallow-3.19.0-py3-none-any.whl (49 kB) Collecting marshmallow-dataclass Using cached marshmallow_dataclass-8.5.14-py3-none-any.whl (17 kB) Collecting python-dateutil Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) Collecting python-magic Using cached python_magic-0.4.27-py2.py3-none-any.whl (13 kB) Collecting pyyaml Using cached PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB) Collecting redis Using cached redis-4.6.0-py3-none-any.whl (241 kB) Collecting requests Using cached requests-2.31.0-py3-none-any.whl (62 kB) Collecting rsa Using cached rsa-4.9-py3-none-any.whl (34 kB) Collecting sqlalchemy Using cached SQLAlchemy-2.0.17-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB) Collecting tornado Using cached tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (426 kB) Collecting tz Using cached tz-0.2.2-py3-none-any.whl (12 kB) Collecting websocket-client Using cached websocket_client-1.6.1-py3-none-any.whl (56 kB) Collecting websockets Using cached websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (130 kB) Collecting wheel Using cached wheel-0.40.0-py3-none-any.whl (64 kB) Collecting zeroconf>=0.27.0 Using cached zeroconf-0.69.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB) Collecting ifaddr>=0.1.7 Using cached ifaddr-0.2.0-py3-none-any.whl (12 kB) Collecting Mako Using cached Mako-1.2.4-py3-none-any.whl (78 kB) Collecting typing-extensions>=4 Using cached typing_extensions-4.6.3-py3-none-any.whl (31 kB) Collecting greenlet!=0.4.17 Using cached greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (618 kB) Collecting Werkzeug>=2.3.3 Using cached Werkzeug-2.3.6-py3-none-any.whl (242 kB) Collecting Jinja2>=3.1.2 Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB) Collecting itsdangerous>=2.1.2 Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB) Collecting click>=8.1.3 Using cached click-8.1.3-py3-none-any.whl (96 kB) Collecting blinker>=1.6.2 Using cached blinker-1.6.2-py3-none-any.whl (13 kB) Collecting packaging>=17.0 Using cached packaging-23.1-py3-none-any.whl (48 kB) Collecting typing-inspect<1.0,>=0.8.0 Using cached typing_inspect-0.9.0-py3-none-any.whl (8.8 kB) Collecting six>=1.5 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting charset-normalizer<4,>=2 Using cached charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (197 kB) Collecting idna<4,>=2.5 Using cached idna-3.4-py3-none-any.whl (61 kB) Collecting urllib3<3,>=1.21.1 Using cached urllib3-2.0.3-py3-none-any.whl (123 kB) Collecting certifi>=2017.4.17 Using cached certifi-2023.5.7-py3-none-any.whl (156 kB) Collecting pyasn1>=0.1.3 Using cached pyasn1-0.5.0-py2.py3-none-any.whl (83 kB) Collecting MarkupSafe>=2.0 Using cached MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28 kB) Collecting mypy-extensions>=0.3.0 Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB) Building wheels for collected packages: platypush Building wheel for platypush (pyproject.toml): started Building wheel for platypush (pyproject.toml): finished with status 'done' Created wheel for platypush: filename=platypush-0.24.5-py3-none-any.whl size=12351330 sha256=f9e5a34f7c107c33a2df16d5909de3fdaf0bde9c3fbea0813c5dedbad3d21cd0 Stored in directory: /tmp/pip-ephem-wheel-cache-kp1944i7/wheels/42/1d/bf/803d5484ee28b063303f453518026c82838f79ddc9dc77b6d2 Successfully built platypush Installing collected packages: tz, ifaddr, zeroconf, wheel, websockets, websocket-client, urllib3, typing-extensions, tornado, six, redis, pyyaml, python-magic, pyasn1, packaging, mypy-extensions, MarkupSafe, itsdangerous, idna, greenlet, frozendict, docutils, click, charset-normalizer, certifi, blinker, bcrypt, Werkzeug, typing-inspect, sqlalchemy, rsa, requests, python-dateutil, marshmallow, Mako, Jinja2, marshmallow-dataclass, flask, croniter, alembic, platypush Successfully installed Jinja2-3.1.2 Mako-1.2.4 MarkupSafe-2.1.3 Werkzeug-2.3.6 alembic-1.11.1 bcrypt-4.0.1 blinker-1.6.2 certifi-2023.5.7 charset-normalizer-3.1.0 click-8.1.3 croniter-1.4.1 docutils-0.20.1 flask-2.3.2 frozendict-2.3.8 greenlet-2.0.2 idna-3.4 ifaddr-0.2.0 itsdangerous-2.1.2 marshmallow-3.19.0 marshmallow-dataclass-8.5.14 mypy-extensions-1.0.0 packaging-23.1 platypush-0.24.5 pyasn1-0.5.0 python-dateutil-2.8.2 python-magic-0.4.27 pyyaml-6.0 redis-4.6.0 requests-2.31.0 rsa-4.9 six-1.16.0 sqlalchemy-2.0.17 tornado-6.3.2 typing-extensions-4.6.3 typing-inspect-0.9.0 tz-0.2.2 urllib3-2.0.3 websocket-client-1.6.1 websockets-11.0.3 wheel-0.40.0 zeroconf-0.69.0 /opt/tests/platypush Running tests here 1 ============================= test session starts ============================== platform linux -- Python 3.11.3, pytest-7.3.2, pluggy-1.0.0 rootdir: /opt/repos/platypush configfile: pyproject.toml plugins: regressions-2.4.2, datadir-1.4.1 collected 13 items tests/test_cron.py F [ 7%] tests/test_event_parse.py ..... [ 46%] tests/test_http.py ..... [ 84%] tests/test_procedure.py .. [100%] =================================== FAILURES =================================== _____________________________ test_cron_execution ______________________________ def test_cron_execution(): """ Test that the cronjob in ``../etc/scripts/test_cron.py`` runs successfully. """ > _test_cron_queue('cron_test') tests/test_cron.py:25: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expected_msg = 'cron_test' def _test_cron_queue(expected_msg: str): msg = None test_start = time.time() while time.time() - test_start <= test_timeout and msg != expected_msg: try: msg = cron_queue.get(block=True, timeout=test_timeout) except queue.Empty: break > assert msg == expected_msg, 'The expected cronjob has not been executed' E AssertionError: The expected cronjob has not been executed E assert None == 'cron_test' tests/test_cron.py:18: AssertionError ---------------------------- Captured stdout setup ----------------------------- INFO:root:Starting Platypush test service INFO:root:Sleeping 5 seconds while waiting for the daemon to start up INFO:platypush:---- Starting platypush v.0.50.0 INFO:platypush:backend:redis:Initialized Redis backend on queue platypush_bus_mq with arguments {} INFO:platypush:backend:http:Starting local web server on port 8123 with 1 service workers INFO:platypush: * Serving Flask app 'platypush' INFO:platypush: * Debug mode: on WARNING:utils:Could not initialize plugin variable ERROR:utils:(sqlite3.OperationalError) no such table: variable [SQL: SELECT variable.id AS variable_id, entity.id AS entity_id, entity.external_id AS entity_external_id, entity.name AS entity_name, entity.description AS entity_description, entity.type AS entity_type, entity.plugin AS entity_plugin, entity.parent_id AS entity_parent_id, entity.data AS entity_data, entity.meta AS entity_meta, entity.is_read_only AS entity_is_read_only, entity.is_write_only AS entity_is_write_only, entity.is_query_disabled AS entity_is_query_disabled, entity.is_configuration AS entity_is_configuration, entity.external_url AS entity_external_url, entity.image_url AS entity_image_url, entity.created_at AS entity_created_at, entity.updated_at AS entity_updated_at, variable.value AS variable_value FROM entity JOIN variable ON entity.id = variable.id] (Background on this error at: https://sqlalche.me/e/14/e3q8) Traceback (most recent call last): File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context self.dialect.do_execute( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlite3.OperationalError: no such table: variable The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/repos/platypush/platypush/utils/__init__.py", line 560, in get_enabled_plugins plugin = get_plugin(name) ^^^^^^^^^^^^^^^^ File "/opt/repos/platypush/platypush/context/__init__.py", line 181, in get_plugin _ctx.plugins[name] = plugin_class(**plugin_conf) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/repos/platypush/platypush/plugins/variable/__init__.py", line 27, in __init__ str(var.name): var.value for var in session.query(Variable).all() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2772, in all return self._iter().all() ^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2915, in _iter result = self.session.execute( ^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1714, in execute result = conn._execute_20(statement, params or {}, execution_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement ret = self._execute_context( ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context self._handle_dbapi_exception( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception util.raise_( File "/usr/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 210, in raise_ raise exception File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context self.dialect.do_execute( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: variable [SQL: SELECT variable.id AS variable_id, entity.id AS entity_id, entity.external_id AS entity_external_id, entity.name AS entity_name, entity.description AS entity_description, entity.type AS entity_type, entity.plugin AS entity_plugin, entity.parent_id AS entity_parent_id, entity.data AS entity_data, entity.meta AS entity_meta, entity.is_read_only AS entity_is_read_only, entity.is_write_only AS entity_is_write_only, entity.is_query_disabled AS entity_is_query_disabled, entity.is_configuration AS entity_is_configuration, entity.external_url AS entity_external_url, entity.image_url AS entity_image_url, entity.created_at AS entity_created_at, entity.updated_at AS entity_updated_at, variable.value AS variable_value FROM entity JOIN variable ON entity.id = variable.id] (Background on this error at: https://sqlalche.me/e/14/e3q8) INFO:platypush.entities._base:Running database migrations WARNING:platypush:backend:http:Could not register the Zeroconf service ERROR:platypush:backend:http: Traceback (most recent call last): File "/opt/repos/platypush/platypush/backend/http/__init__.py", line 311, in _register_service self.register_service(port=self.port) File "/opt/repos/platypush/platypush/backend/__init__.py", line 382, in register_service self.zeroconf.register_service(self.zeroconf_info) File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 581, in register_service run_coro_with_timeout( File "/usr/lib/python3.11/site-packages/zeroconf/_utils/asyncio.py", line 82, in run_coro_with_timeout return asyncio.run_coroutine_threadsafe(aw, loop).result( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/_base.py", line 456, in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result raise self._exception File "/usr/lib/python3.11/site-packages/zeroconf/_utils/asyncio.py", line 66, in await_awaitable task = await aw ^^^^^^^^ File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 609, in async_register_service await self.async_check_service(info, allow_name_change, cooperating_responders) File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 769, in async_check_service raise NonUniqueNameException zeroconf._exceptions.NonUniqueNameException INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:8123 * Running on http://172.105.246.212:8123 INFO:werkzeug:Press CTRL+C to quit ------------------------------ Captured log setup ------------------------------ INFO root:conftest.py:30 Starting Platypush test service INFO root:conftest.py:35 Sleeping 5 seconds while waiting for the daemon to start up INFO platypush:__init__.py:258 ---- Starting platypush v.0.50.0 INFO platypush:backend:redis:__init__.py:85 Initialized Redis backend on queue platypush_bus_mq with arguments {} WARNING utils:__init__.py:564 Could not initialize plugin variable ERROR utils:__init__.py:565 (sqlite3.OperationalError) no such table: variable [SQL: SELECT variable.id AS variable_id, entity.id AS entity_id, entity.external_id AS entity_external_id, entity.name AS entity_name, entity.description AS entity_description, entity.type AS entity_type, entity.plugin AS entity_plugin, entity.parent_id AS entity_parent_id, entity.data AS entity_data, entity.meta AS entity_meta, entity.is_read_only AS entity_is_read_only, entity.is_write_only AS entity_is_write_only, entity.is_query_disabled AS entity_is_query_disabled, entity.is_configuration AS entity_is_configuration, entity.external_url AS entity_external_url, entity.image_url AS entity_image_url, entity.created_at AS entity_created_at, entity.updated_at AS entity_updated_at, variable.value AS variable_value FROM entity JOIN variable ON entity.id = variable.id] (Background on this error at: https://sqlalche.me/e/14/e3q8) Traceback (most recent call last): File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context self.dialect.do_execute( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlite3.OperationalError: no such table: variable The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/repos/platypush/platypush/utils/__init__.py", line 560, in get_enabled_plugins plugin = get_plugin(name) ^^^^^^^^^^^^^^^^ File "/opt/repos/platypush/platypush/context/__init__.py", line 181, in get_plugin _ctx.plugins[name] = plugin_class(**plugin_conf) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/repos/platypush/platypush/plugins/variable/__init__.py", line 27, in __init__ str(var.name): var.value for var in session.query(Variable).all() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2772, in all return self._iter().all() ^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2915, in _iter result = self.session.execute( ^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1714, in execute result = conn._execute_20(statement, params or {}, execution_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement ret = self._execute_context( ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context self._handle_dbapi_exception( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception util.raise_( File "/usr/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 210, in raise_ raise exception File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context self.dialect.do_execute( File "/usr/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: variable [SQL: SELECT variable.id AS variable_id, entity.id AS entity_id, entity.external_id AS entity_external_id, entity.name AS entity_name, entity.description AS entity_description, entity.type AS entity_type, entity.plugin AS entity_plugin, entity.parent_id AS entity_parent_id, entity.data AS entity_data, entity.meta AS entity_meta, entity.is_read_only AS entity_is_read_only, entity.is_write_only AS entity_is_write_only, entity.is_query_disabled AS entity_is_query_disabled, entity.is_configuration AS entity_is_configuration, entity.external_url AS entity_external_url, entity.image_url AS entity_image_url, entity.created_at AS entity_created_at, entity.updated_at AS entity_updated_at, variable.value AS variable_value FROM entity JOIN variable ON entity.id = variable.id] (Background on this error at: https://sqlalche.me/e/14/e3q8) INFO platypush.entities._base:_base.py:331 Running database migrations WARNING platypush:backend:http:__init__.py:313 Could not register the Zeroconf service ERROR platypush:backend:http:__init__.py:314 Traceback (most recent call last): File "/opt/repos/platypush/platypush/backend/http/__init__.py", line 311, in _register_service self.register_service(port=self.port) File "/opt/repos/platypush/platypush/backend/__init__.py", line 382, in register_service self.zeroconf.register_service(self.zeroconf_info) File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 581, in register_service run_coro_with_timeout( File "/usr/lib/python3.11/site-packages/zeroconf/_utils/asyncio.py", line 82, in run_coro_with_timeout return asyncio.run_coroutine_threadsafe(aw, loop).result( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/_base.py", line 456, in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result raise self._exception File "/usr/lib/python3.11/site-packages/zeroconf/_utils/asyncio.py", line 66, in await_awaitable task = await aw ^^^^^^^^ File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 609, in async_register_service await self.async_check_service(info, allow_name_change, cooperating_responders) File "/usr/lib/python3.11/site-packages/zeroconf/_core.py", line 769, in async_check_service raise NonUniqueNameException zeroconf._exceptions.NonUniqueNameException ----------------------------- Captured stdout call ----------------------------- INFO:platypush:cron:Cron scheduler initialized with 2 jobs INFO:platypush:cron:Running cron scheduler INFO:EntitiesEngine:Started entities engine INFO:platypush:Received ApplicationStartedEvent: {"type": "event", "target": "gitter", "origin": "gitter", "id": "f9aa00a449d8ce47b0ab23809aa00f65", "_timestamp": 1687911933.0838406, "args": {"type": "platypush.message.event.application.ApplicationStartedEvent"}} INFO:platypush:cron:System clock drift detected: 1.049460 secs. Synchronizing the cronjobs ----------------------------- Captured stderr call ----------------------------- INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. ------------------------------ Captured log call ------------------------------- INFO platypush:cron:scheduler.py:155 Cron scheduler initialized with 2 jobs INFO platypush:cron:scheduler.py:203 Running cron scheduler INFO EntitiesEngine:__init__.py:103 Started entities engine INFO platypush:__init__.py:115 Received ApplicationStartedEvent: {"type": "event", "target": "gitter", "origin": "gitter", "id": "f9aa00a449d8ce47b0ab23809aa00f65", "_timestamp": 1687911933.0838406, "args": {"type": "platypush.message.event.application.ApplicationStartedEvent"}} INFO platypush:cron:scheduler.py:223 System clock drift detected: 1.049460 secs. Synchronizing the cronjobs =========================== short test summary info ============================ FAILED tests/test_cron.py::test_cron_execution - AssertionError: The expected... ======================== 1 failed, 12 passed in 51.29s ========================= here 2 here 3 FAILED tests/test_cron.py::test_cron_execution - AssertionError: The expected... here 5 Cleaning up environment here 6 Status: FAILED here 7