From 6256cdf7926fe984926305ecdb0ed2a3c115bcf6 Mon Sep 17 00:00:00 2001 From: Richard Baker Date: Tue, 26 Jan 2021 11:11:44 +0000 Subject: [PATCH] Add proxy client for o2 cell croadcasting o2 use One-2-many CBC so we can use the O2M/CAP client. Once differences between CBCs have been worked out we can consolidate O2M clients to reduce duplication. Signed-off-by: Richard Baker --- app/clients/cbc_proxy.py | 60 +++++++++++++++++++++++++++++ app/config.py | 2 +- tests/app/clients/test_cbc_proxy.py | 36 ++++++++--------- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/app/clients/cbc_proxy.py b/app/clients/cbc_proxy.py index 487afcde4..03aebe393 100644 --- a/app/clients/cbc_proxy.py +++ b/app/clients/cbc_proxy.py @@ -46,6 +46,7 @@ class CBCProxyClient: 'canary': CBCProxyCanary, BroadcastProvider.EE: CBCProxyEE, BroadcastProvider.THREE: CBCProxyThree, + BroadcastProvider.O2: CBCProxyO2, BroadcastProvider.VODAFONE: CBCProxyVodafone, } return proxy_classes[provider](self._lambda_client) @@ -291,6 +292,65 @@ class CBCProxyThree(CBCProxyClientBase): } self._invoke_lambda_with_failover(payload=payload) +class CBCProxyO2(CBCProxyClientBase): + lambda_name = 'o2-1-proxy' + failover_lambda_name = 'o2-2-proxy' + + LANGUAGE_ENGLISH = 'en-GB' + LANGUAGE_WELSH = 'cy-GB' + + def send_link_test( + self, + identifier, + sequential_number=None, + ): + """ + link test - open up a connection to a specific provider, and send them an xml payload with a of + test. + """ + payload = { + 'message_type': 'test', + 'identifier': identifier, + 'message_format': 'cap' + } + + self._invoke_lambda_with_failover(payload=payload) + + def create_and_send_broadcast( + self, identifier, headline, description, areas, sent, expires, message_number=None + ): + payload = { + 'message_type': 'alert', + 'identifier': identifier, + 'message_format': 'cap', + 'headline': headline, + 'description': description, + 'areas': areas, + 'sent': sent, + 'expires': expires, + 'language': self.infer_language_from(description), + } + self._invoke_lambda_with_failover(payload=payload) + + def cancel_broadcast( + self, + identifier, previous_provider_messages, + sent, message_number=None + ): + payload = { + 'message_type': 'cancel', + 'identifier': identifier, + 'message_format': 'cap', + "references": [ + { + "message_id": str(message.id), + "sent": message.created_at.strftime(DATETIME_FORMAT) + } for message in previous_provider_messages + ], + 'sent': sent, + } + self._invoke_lambda_with_failover(payload=payload) + class CBCProxyVodafone(CBCProxyClientBase): lambda_name = 'vodafone-1-proxy' diff --git a/app/config.py b/app/config.py index 02d58b7e1..4bf384fe3 100644 --- a/app/config.py +++ b/app/config.py @@ -380,7 +380,7 @@ class Config(object): CBC_PROXY_ENABLED = bool(CBC_PROXY_AWS_ACCESS_KEY_ID) - ENABLED_CBCS = {BroadcastProvider.EE, BroadcastProvider.THREE, BroadcastProvider.VODAFONE} + ENABLED_CBCS = {BroadcastProvider.EE, BroadcastProvider.THREE, BroadcastProvider.O2, BroadcastProvider.VODAFONE} ###################### diff --git a/tests/app/clients/test_cbc_proxy.py b/tests/app/clients/test_cbc_proxy.py index 3570a86e7..64c62df4a 100644 --- a/tests/app/clients/test_cbc_proxy.py +++ b/tests/app/clients/test_cbc_proxy.py @@ -7,7 +7,7 @@ from unittest.mock import Mock, call import pytest from app.clients.cbc_proxy import ( - CBCProxyClient, CBCProxyException, CBCProxyEE, CBCProxyCanary, CBCProxyVodafone, CBCProxyThree + CBCProxyClient, CBCProxyException, CBCProxyEE, CBCProxyCanary, CBCProxyVodafone, CBCProxyThree, CBCProxyO2 ) from app.utils import DATETIME_FORMAT @@ -39,12 +39,6 @@ def cbc_proxy_client(client, mocker): def cbc_proxy_ee(cbc_proxy_client): return cbc_proxy_client.get_proxy('ee') - -@pytest.fixture -def cbc_proxy_three(cbc_proxy_client): - return cbc_proxy_client.get_proxy('three') - - @pytest.fixture def cbc_proxy_vodafone(cbc_proxy_client): return cbc_proxy_client.get_proxy('vodafone') @@ -53,6 +47,7 @@ def cbc_proxy_vodafone(cbc_proxy_client): @pytest.mark.parametrize('provider_name, expected_provider_class', [ ('ee', CBCProxyEE), ('three', CBCProxyThree), + ('o2', CBCProxyO2), ('vodafone', CBCProxyVodafone), ('canary', CBCProxyCanary), ]) @@ -83,16 +78,15 @@ def test_cbc_proxy_lambda_client_has_correct_keys(cbc_proxy_ee): ('my-description', 'en-GB'), ('mŷ-description', 'cy-GB'), )) -@pytest.mark.parametrize('cbc', ['bt-ee', 'three']) +@pytest.mark.parametrize('cbc', ['bt-ee', 'three', 'o2']) def test_cbc_proxy_one_2_many_create_and_send_invokes_function( mocker, - cbc_proxy_ee, - cbc_proxy_three, + cbc_proxy_client, description, cbc, expected_language, ): - cbc_proxy = cbc_proxy_ee if cbc == 'bt-ee' else cbc_proxy_three + cbc_proxy = cbc_proxy_client.get_proxy('ee') if cbc == 'bt-ee' else cbc_proxy_client.get_proxy(cbc) identifier = 'my-identifier' headline = 'my-headline' @@ -141,9 +135,9 @@ def test_cbc_proxy_one_2_many_create_and_send_invokes_function( assert payload['language'] == expected_language -@pytest.mark.parametrize('cbc', ['bt-ee', 'three']) -def test_cbc_proxy_one_2_many_cancel_invokes_function(mocker, cbc_proxy_ee, cbc_proxy_three, cbc): - cbc_proxy = cbc_proxy_ee if cbc == 'bt-ee' else cbc_proxy_three +@pytest.mark.parametrize('cbc', ['bt-ee', 'three', 'o2']) +def test_cbc_proxy_one_2_many_cancel_invokes_function(mocker, cbc_proxy_client, cbc): + cbc_proxy = cbc_proxy_client.get_proxy('ee') if cbc == 'bt-ee' else cbc_proxy_client.get_proxy(cbc) identifier = 'my-identifier' MockProviderMessage = namedtuple( @@ -316,7 +310,7 @@ def test_cbc_proxy_vodafone_cancel_invokes_function(mocker, cbc_proxy_vodafone): assert payload['sent'] == sent -@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three']) +@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three', 'o2']) def test_cbc_proxy_will_failover_to_second_lambda_if_function_error( mocker, cbc_proxy_client, @@ -368,7 +362,7 @@ def test_cbc_proxy_will_failover_to_second_lambda_if_function_error( ] -@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three']) +@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three', 'o2']) def test_cbc_proxy_will_failover_to_second_lambda_if_invoke_error( mocker, cbc_proxy_client, @@ -415,7 +409,7 @@ def test_cbc_proxy_will_failover_to_second_lambda_if_invoke_error( ] -@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three']) +@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three', 'o2']) def test_cbc_proxy_create_and_send_tries_failover_lambda_on_invoke_error_and_raises_if_both_invoke_error( mocker, cbc_proxy_client, cbc ): @@ -458,7 +452,7 @@ def test_cbc_proxy_create_and_send_tries_failover_lambda_on_invoke_error_and_rai ] -@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three']) +@pytest.mark.parametrize('cbc', ['bt-ee', 'vodafone', 'three', 'o2']) def test_cbc_proxy_create_and_send_tries_failover_lambda_on_function_error_and_raises_if_both_function_error( mocker, cbc_proxy_client, cbc ): @@ -538,9 +532,9 @@ def test_cbc_proxy_send_canary_invokes_function(mocker, cbc_proxy_client): assert payload['identifier'] == identifier -@pytest.mark.parametrize('cbc', ['bt-ee', 'three']) -def test_cbc_proxy_one_2_many_send_link_test_invokes_function(mocker, cbc_proxy_ee, cbc_proxy_three, cbc): - cbc_proxy = cbc_proxy_ee if cbc == 'bt-ee' else cbc_proxy_three +@pytest.mark.parametrize('cbc', ['bt-ee', 'three', 'o2']) +def test_cbc_proxy_one_2_many_send_link_test_invokes_function(mocker, cbc_proxy_client, cbc): + cbc_proxy = cbc_proxy_client.get_proxy('ee') if cbc == 'bt-ee' else cbc_proxy_client.get_proxy(cbc) identifier = str(uuid.uuid4())