"""Test for service discovery module.""" from unittest import mock import pytest from owsrequest.service import discover from owsrequest.service import owsrequest_service_mapping def test_service_discovery_ignores_casing(): """Casing doesn't matter.""" for environment in ['qa', 'QA']: domain = discover('ows-analytics', environment) assert domain == ('qa', 'qa-ows-analytics.theorchard.io') domain = discover('ows-analytics', environment.upper()) assert domain == ('qa', 'qa-ows-analytics.theorchard.io') domain = discover('webservice', environment, islegacy=True) assert domain == ('qa', 'webservice.qaorch.com') for environment in ['PROD', 'prod']: domain = discover('ows-analytics', environment) assert domain == ('prod', 'prod-ows-analytics.theorchard.io') domain = discover('webservice', environment, islegacy=True) assert domain == ('prod', 'webservice.theorchard.com') domain = discover('webservice', 'test', islegacy=True) assert domain == ('qa', 'webservice.qaorch.com') domain = discover('ows-analytics', 'test') assert domain == ('qa', 'qa-ows-analytics.theorchard.io') def test_service_discovery_in_dev_with_overrides(): """Use a custom mapping in dev.""" custom_mapping = {'ows-foo': 'my-ows-foo:4567'} with mock.patch.dict(owsrequest_service_mapping, custom_mapping): # dev services not mentioned in the custom mapping default to qa domain = discover('ows-analytics', 'dev') assert domain == ('qa', 'qa-ows-analytics.theorchard.io') # dev services mentioned in the custom mapping resolve to # the specified url domain = discover('ows-foo', 'dev') assert domain == ('dev', 'my-ows-foo:4567') # The custom mapping has no effect on qa/prod service resolution assert discover('ows-foo', 'qa') == ( 'qa', 'qa-ows-foo.theorchard.io' ) assert discover('ows-foo', 'prod') == ( 'prod', 'prod-ows-foo.theorchard.io' ) @pytest.mark.parametrize('uat_env', [ pytest.param('uat', id='Typical capitalization'), pytest.param('UaT', id='environment is still case insensitive'), ]) def test_service_discovery_in_uat(uat_env): """Use a custom mapping in uat.""" custom_mapping = {'ows-foo': 'my-ows-foo:4567'} with mock.patch.dict(owsrequest_service_mapping, custom_mapping): # uat services not mentioned in the custom mapping default to qa domain = discover('ows-analytics', uat_env) assert domain == ('uat', 'uat-ows-analytics.theorchard.io') # uat services mentioned in the custom mapping resolve to # the specified url domain = discover('ows-foo', uat_env) assert domain == ('uat', 'my-ows-foo:4567')