From 898891677f6eac36d0d566c5bc8f9d3ca1e27ec6 Mon Sep 17 00:00:00 2001 From: Alexander Bokovoy Date: May 08 2020 06:35:01 +0000 Subject: Add pytest.skip_if_container() Reviewed-By: Christian Heimes --- diff --git a/ipaplatform/osinfo.py b/ipaplatform/osinfo.py index af65922..bfb2d62 100644 --- a/ipaplatform/osinfo.py +++ b/ipaplatform/osinfo.py @@ -71,7 +71,7 @@ def _parse_osrelease(filename='/etc/os-release'): class OSInfo(Mapping): - __slots__ = ('_info', '_platform') + __slots__ = ('_info', '_platform', '_container') bsd_family = ( 'freebsd', @@ -95,6 +95,7 @@ class OSInfo(Mapping): raise ValueError("Unsupported platform: {}".format(sys.platform)) self._info = info self._platform = None + self._container = None def _handle_linux(self): """Detect Linux distribution from /etc/os-release @@ -208,6 +209,17 @@ class OSInfo(Mapping): raise ImportError('No ipaplatform available for "{}"'.format( ', '.join(self.platform_ids))) + @property + def container(self): + if self._container is not None: + return self._container + from ipaplatform.tasks import tasks + try: + self._container = tasks.detect_container() + except NotImplementedError: + raise NotImplementedError( + 'Platform does not support detecting containers') + return self._container osinfo = OSInfo() ipaplatform.NAME = osinfo.platform diff --git a/ipatests/conftest.py b/ipatests/conftest.py index df52cc3..6171efb 100644 --- a/ipatests/conftest.py +++ b/ipatests/conftest.py @@ -47,6 +47,8 @@ MARKERS = [ 'needs_ipaapi: Test needs IPA API', ('skip_if_platform(platform, reason): Skip test on platform ' '(ID and ID_LIKE)'), + ('skip_if_container(type, reason): Skip test on container ' + '("any" or specific type)'), ] @@ -158,6 +160,15 @@ def pytest_runtest_setup(item): reason = mark.kwargs["reason"] if platform in osinfo.platform_ids: pytest.skip(f"Skip test on platform {platform}: {reason}") + for mark in item.iter_markers(name="skip_if_container"): + container = mark.kwargs.get("container") + if container is None: + container = mark.args[0] + reason = mark.kwargs["reason"] + if osinfo.container is not None: + if container in ('any', osinfo.container): + pytest.skip( + f"Skip test on '{container}' container type: {reason}") @pytest.fixture