-
- Notifications
You must be signed in to change notification settings - Fork 361
Open
Description
I'm finding that when systemctl is-enabled is used for a non-existent service and the target has an exit code of 4 (such as on an Ubuntu 24 target), an exception is raised.
pytest script
(venv) $ cat service-test.py def test_faux_service(host): assert not host.service('foo').is_enabled (venv) $ Ubuntu 24
(venv) $ pytest --hosts ubuntu24 service-test.py ==================================================================================== test session starts ===================================================================================== platform linux -- Python 3.11.0rc1, pytest-8.3.5, pluggy-1.5.0 rootdir: /home/jpfuntne/sto/issues/CL9-746 plugins: testinfra-10.2.2 collected 1 item service-test.py F [100%] ========================================================================================== FAILURES ========================================================================================== ___________________________________________________________________________ test_faux_service[paramiko://ubuntu24] ___________________________________________________________________________ host = <testinfra.host.Host paramiko://ubuntu24> def test_faux_service(host): > assert not host.service('foo').is_enabled service-test.py:2: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ venv/lib/python3.11/site-packages/testinfra/modules/service.py:197: in is_enabled cmd = self.run_test("systemctl is-enabled %s", self.name) venv/lib/python3.11/site-packages/testinfra/modules/base.py:40: in run_test return cls._host.run_test(*args, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <testinfra.host.Host paramiko://ubuntu24>, command = 'systemctl is-enabled %s', args = ('foo',), kwargs = {} def run_test( self, command: str, *args: str, **kwargs: Any ) -> testinfra.backend.base.CommandResult: """Run command and check it return an exit status of 0 or 1 :raises: AssertionError """ > return self.run_expect([0, 1], command, *args, **kwargs) E AssertionError: Unexpected exit code 4 for CommandResult(backend=<testinfra.backend.paramiko.ParamikoBackend object at 0x7f4b7768b490>, exit_status=4, command=b'systemctl is-enabled foo', _stdout=b'not-found\n', _stderr=b'') E assert 4 in [0, 1] E + where 4 = CommandResult(backend=<testinfra.backend.paramiko.ParamikoBackend object at 0x7f4b7768b490>, exit_status=4, command=b'systemctl is-enabled foo', _stdout=b'not-found\n', _stderr=b'').rc venv/lib/python3.11/site-packages/testinfra/host.py:120: AssertionError ====================================================================================== warnings summary ====================================================================================== service-test.py::test_faux_service[paramiko://ubuntu24] /home/jpfuntne/sto/issues/CL9-746/venv/lib/python3.11/site-packages/paramiko/client.py:889: UserWarning: Unknown ssh-ed25519 host key for 34.74.229.204: b'96b278a4e66eefe2941f43fa809646db' warnings.warn( -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================================================================================== short test summary info =================================================================================== FAILED service-test.py::test_faux_service[paramiko://ubuntu24] - AssertionError: Unexpected exit code 4 for CommandResult(backend=<testinfra.backend.paramiko.ParamikoBackend object at 0x7f4b7768b490>, exit_status=4, command=b'systemctl is-enabled foo... ================================================================================ 1 failed, 1 warning in 1.46s ================================================================================ (venv) $ ssh ubuntu24 'systemctl is-enabled foo; echo $?' not-found 4 (venv) $ ssh ubuntu24 cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.2 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.2 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=noble LOGO=ubuntu-logo (venv) $ Ubuntu 22
This is not a problem on Ubuntu 22 which has an exit code of 1 in the same scenario:
(venv) $ pytest --hosts ubuntu22 service-test.py ==================================================================================== test session starts ===================================================================================== platform linux -- Python 3.11.0rc1, pytest-8.3.5, pluggy-1.5.0 rootdir: /home/jpfuntne/sto/issues/CL9-746 plugins: testinfra-10.2.2 collected 1 item service-test.py . [100%] ====================================================================================== warnings summary ====================================================================================== service-test.py::test_faux_service[paramiko://ubuntu22] /home/jpfuntne/sto/issues/CL9-746/venv/lib/python3.11/site-packages/paramiko/client.py:889: UserWarning: Unknown ssh-ed25519 host key for 35.185.104.216: b'232b368a904a128f57b7601d1faeb172' warnings.warn( -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================================================================================ 1 passed, 1 warning in 1.48s ================================================================================ (venv) $ ssh ubuntu22 'systemctl is-enabled foo; echo $?' 1 Failed to get unit file state for foo.service: No such file or directory (venv) $ ssh ubuntu22 cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.5 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.5 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy (venv) $ This is similar to #748 which I hoped would be fixed by #773 but it was not.
Python packages
(venv) $ pip list Package Version ---------------- ------- bcrypt 4.3.0 cffi 1.17.1 cryptography 44.0.2 iniconfig 2.1.0 packaging 24.2 paramiko 3.5.1 pip 22.0.2 pluggy 1.5.0 pycparser 2.22 PyNaCl 1.5.0 pytest 8.3.5 pytest-testinfra 10.2.2 setuptools 59.6.0 (venv) $ Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels