async def async_setup_platform(opp, config, async_add_entities, discovery_info=None): """Set up the Version sensor platform.""" beta = config.get(CONF_BETA) image = config.get(CONF_IMAGE) name = config.get(CONF_NAME) source = config.get(CONF_SOURCE) session = async_get_clientsession(opp) channel = OpVersionChannel.BETA if beta else OpVersionChannel.STABLE if source == "pypi": haversion = VersionData( OpVersion(session, source=OpVersionSource.PYPI, channel=channel)) elif source in ["oppio", "supervisor"]: haversion = VersionData( OpVersion( session, source=OpVersionSource.SUPERVISOR, channel=channel, image=image, )) elif source in ["docker", "container"]: if image is not None and image != DEFAULT_IMAGE: image = f"{image}-openpeerpower" haversion = VersionData( OpVersion(session, source=OpVersionSource.CONTAINER, channel=channel, image=image)) elif source == "opio": haversion = VersionData(OpVersion(session, source=OpVersionSource.OPIO)) else: haversion = VersionData( OpVersion(session, source=OpVersionSource.LOCAL)) if not name: if source == DEFAULT_SOURCE: name = DEFAULT_NAME_LOCAL else: name = DEFAULT_NAME_LATEST async_add_entities([VersionSensor(haversion, name)], True)
async def test_fetch_exception(): opversion = OpVersion() async def mocked_fetch_ImportError(_args): raise ImportError async def mocked_fetch_ModuleNotFoundError(_args): raise ModuleNotFoundError async def mocked_fetch_gaierror(_args): raise gaierror async def mocked_fetch_ClientError(_args): raise ClientError with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch_ImportError): with pytest.raises(OpVersionFetchException): await opversion.get_version() with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch_ModuleNotFoundError): with pytest.raises(OpVersionFetchException): await opversion.get_version() with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch_gaierror): with pytest.raises(OpVersionFetchException): await opversion.get_version() with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch_ClientError): with pytest.raises(OpVersionFetchException): await opversion.get_version()
async def test_beta_version_beta_week_pagination(aresponses): """Test container beta during beta week.""" aresponses.add( "registry.hub.docker.com", "/v2/repositories/openpeerpower/openpeerpower/tags", "get", aresponses.Response( text=fixture("container/beta_week_page1", False), status=200, headers=HEADERS, ), ) aresponses.add( "registry.hub.docker.com", "/v2/repositories/openpeerpower/openpeerpower/tags/page2", "get", aresponses.Response( text=fixture("container/beta_week_page2", False), status=200, headers=HEADERS, ), ) async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.CONTAINER, channel=OpVersionChannel.BETA, ) await opversion.get_version() assert opversion.version == BETA_VERSION_BETA_WEEK
async def test_local(): """Test ha.io/version.json stable.""" with patch.dict( "sys.modules", {"openpeerpower.const": MagicMock(__version__=STABLE_VERSION)} ): async with aiohttp.ClientSession() as session: opversion = OpVersion(session=session, source=OpVersionSource.LOCAL) await opversion.get_version() assert opversion.version == STABLE_VERSION
async def test_timeout_exception(): async def mocked_fetch_TimeoutError(_args): raise asyncio.TimeoutError with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch_TimeoutError): opversion = OpVersion() with pytest.raises(OpVersionFetchException): await opversion.get_version()
async def test_stable_version(OpVersion): """Test container stable.""" with patch( "pyopversion.container.OpVersionContainer.data", fixture("container/default"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion(session=session, source=OpVersionSource.CONTAINER) await opversion.get_version() assert opversion.version == STABLE_VERSION
async def test_stable_version_beta_week(OpVersion): """Test container stable during beta week.""" with patch( "pyopversion.container.OpVersionContainer.data", fixture("container/beta_week"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.CONTAINER, ) await opversion.get_version() assert opversion.version == STABLE_VERSION_BETA_WEEK
async def test_stable_version(OpVersion): """Test pypi stable.""" with patch( "pyopversion.pypi.OpVersionPypi.data", fixture("pypi/default"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.PYPI, ) await opversion.get_version() assert opversion.version == STABLE_VERSION
async def test_dev_version(OpVersion): """Test container dev.""" with patch( "pyopversion.container.OpVersionContainer.data", fixture("container/default"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.CONTAINER, channel=OpVersionChannel.DEV, ) await opversion.get_version() assert opversion.version == DEV_VERSION
async def test_stable_version(aresponses): """Test Oppio stable.""" aresponses.add( "version.openpeerpower.io", "/stable.json", "get", aresponses.Response( text=fixture("supervisor/default", False), status=200, headers=HEADERS ), ) async with aiohttp.ClientSession() as session: opversion = OpVersion(session=session, source=OpVersionSource.SUPERVISOR) await opversion.get_version() assert opversion.version == STABLE_VERSION
async def test_beta_version(OpVersion): """Test pypi beta.""" with patch( "pyopversion.pypi.OpVersionPypi.data", fixture("pypi/beta"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.PYPI, channel=OpVersionChannel.BETA, ) await opversion.get_version() assert opversion.version == BETA_VERSION
async def test_beta_version(OpVersion): """Test container beta.""" with patch( "pyopversion.container.OpVersionContainer.data", fixture("container/beta_week"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.CONTAINER, channel=OpVersionChannel.BETA, ) await opversion.get_version() assert opversion.version == BETA_VERSION
async def test_beta_version(OpVersion): """Test Oppio beta.""" with patch( "pyopversion.supervisor.OpVersionSupervisor.data", fixture("supervisor/default"), ): async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.SUPERVISOR, channel=OpVersionChannel.BETA, board="test", image="test", ) await opversion.get_version() assert opversion.version == STABLE_VERSION
async def test_stable_version_beta_week(aresponses): """Test pypi stable during beta week.""" aresponses.add( "pypi.org", "/pypi/openpeerpower/json", "get", aresponses.Response(text=fixture("pypi/beta", False), status=200, headers=HEADERS), ) async with aiohttp.ClientSession() as session: opversion = OpVersion( session=session, source=OpVersionSource.PYPI, ) await opversion.get_version() assert opversion.version == STABLE_VERSION_BETA_WEEK
async def test_parse_exception(): opversion = OpVersion() async def mocked_fetch(_args): pass def mocked_parse_KeyError(_args): raise KeyError def mocked_parse_TypeError(_args): raise TypeError with patch("pyopversion.local.OpVersionLocal.fetch", mocked_fetch): with patch("pyopversion.local.OpVersionLocal.parse", mocked_parse_KeyError): with pytest.raises(OpVersionParseException): await opversion.get_version() with patch("pyopversion.local.OpVersionLocal.parse", mocked_parse_TypeError): with pytest.raises(OpVersionParseException): await opversion.get_version()
async def test_input_exception(OpVersion): with pytest.raises(OpVersionInputException): OpVersion(source=OpVersionSource.SUPERVISOR)
async def test_input_exception(OpVersion): with pytest.raises(OpVersionInputException): OpVersion(source=OpVersionSource.CONTAINER)