class APNSRouterTestCase(unittest.TestCase): def setUp(self): settings = AutopushSettings( hostname="localhost", statsd_host=None, ) apns_config = {'cert_file': 'fake.cert', 'key_file': 'fake.key'} self.mock_apns = Mock(spec=apns.APNs) self.router = APNSRouter(settings, apns_config) self.router.apns = self.mock_apns self.notif = Notification(10, "data", dummy_chid, None, 200) self.router_data = dict(router_data=dict(token="connect_data")) def test_register(self): result = self.router.register("uaid", {"token": "connect_data"}) eq_(result, {"token": "connect_data"}) def test_register_bad(self): self.assertRaises(RouterException, self.router.register, "uaid", {}) def test_route_notification(self): d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) d.addCallback(check_results) return d def test_message_pruning(self): now = int(time.time()) self.router.messages = {now: {'token': 'dump', 'payload': {}}, now-60: {'token': 'dump', 'payload': {}}} d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) eq_(len(self.router.messages), 1) d.addCallback(check_results) return d def test_response_listener_with_success(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=0, identifier=1)) eq_(len(self.router.messages), 0) def test_response_listener_with_nonretryable_error(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=2, identifier=1)) eq_(len(self.router.messages), 1) def test_response_listener_with_retryable_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} # Mock out the _connect call to be harmless self.router._connect = Mock() self.router._error(dict(status=1, identifier=1)) eq_(len(self.router.messages), 1) assert(self.router.apns.gateway_server.send_notification.called) def test_response_listener_with_retryable_non_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=1, identifier=10)) eq_(len(self.router.messages), 1) def test_ammend(self): resp = {"key": "value"} eq_(resp, self.router.amend_msg(resp))
class APNSRouterTestCase(unittest.TestCase): def setUp(self): settings = AutopushSettings( hostname="localhost", statsd_host=None, ) apns_config = {'cert_file': 'fake.cert', 'key_file': 'fake.key'} self.mock_apns = Mock(spec=apns.APNs) self.router = APNSRouter(settings, apns_config) self.router.apns = self.mock_apns self.notif = Notification(10, "data", dummy_chid, None, 200) self.router_data = dict(router_data=dict(token="connect_data")) def test_register(self): result = self.router.register("uaid", {"token": "connect_data"}) eq_(result, {"token": "connect_data"}) def test_register_bad(self): self.assertRaises(RouterException, self.router.register, "uaid", {}) def test_route_notification(self): d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) d.addCallback(check_results) return d def test_message_pruning(self): now = int(time.time()) self.router.messages = {now: {'token': 'dump', 'payload': {}}, now-60: {'token': 'dump', 'payload': {}}} d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) eq_(len(self.router.messages), 1) d.addCallback(check_results) return d def test_response_listener_with_success(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=0, identifier=1)) eq_(len(self.router.messages), 0) def test_response_listener_with_nonretryable_error(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=2, identifier=1)) eq_(len(self.router.messages), 1) def test_response_listener_with_retryable_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} # Mock out the _connect call to be harmless self.router._connect = Mock() self.router._error(dict(status=1, identifier=1)) eq_(len(self.router.messages), 1) assert(self.router.apns.gateway_server.send_notification.called) def test_response_listener_with_retryable_non_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=1, identifier=10)) eq_(len(self.router.messages), 1) def test_ammend(self): resp = {"key": "value"} eq_(resp, self.router.amend_msg(resp)) def test_check_token(self): (t, v) = self.router.check_token("") ok_(t)
class APNSRouterTestCase(unittest.TestCase): def setUp(self): from twisted.logger import Logger settings = AutopushSettings( hostname="localhost", statsd_host=None, ) apns_config = {'cert_file': 'fake.cert', 'key_file': 'fake.key'} self.mock_apns = Mock(spec=apns.APNs) self.router = APNSRouter(settings, apns_config) self.router.apns = self.mock_apns self.router.log = Mock(spec=Logger) self.headers = {"content-encoding": "aesgcm", "encryption": "test", "encryption-key": "test"} self.notif = Notification(10, "q60d6g", dummy_chid, self.headers, 200) self.router_data = dict(router_data=dict(token="connect_data")) def test_register(self): result = self.router.register("uaid", {"token": "connect_data"}) eq_(result, {"token": "connect_data"}) def test_register_bad(self): self.assertRaises(RouterException, self.router.register, "uaid", {}) def test_route_notification(self): d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) d.addCallback(check_results) return d def test_message_pruning(self): now = int(time.time()) self.router.messages = {now: {'token': 'dump', 'payload': {}}, now-60: {'token': 'dump', 'payload': {}}} d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) eq_(len(self.router.messages), 1) payload = self.router.messages[now]['payload'] eq_(payload.alert, 'SimplePush') custom = payload.custom eq_(custom['Msg'], self.notif.data) eq_(custom['Ver'], self.notif.version) eq_(custom['Con'], 'aesgcm') eq_(custom['Enc'], 'test') eq_(custom['Enckey'], 'test') eq_(custom['Chid'], self.notif.channel_id) ok_('Cryptokey' not in custom) d.addCallback(check_results) return d def test_response_listener_with_success(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=0, identifier=1)) eq_(len(self.router.messages), 0) def test_response_listener_with_nonretryable_error(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=2, identifier=1)) eq_(len(self.router.messages), 1) def test_response_listener_with_retryable_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} # Mock out the _connect call to be harmless self.router._connect = Mock() self.router._error(dict(status=1, identifier=1)) eq_(len(self.router.messages), 1) assert(self.router.apns.gateway_server.send_notification.called) def test_response_listener_with_retryable_non_existing_message(self): self.router.messages = {1: {'token': 'dump', 'payload': {}}} self.router._error(dict(status=1, identifier=10)) eq_(len(self.router.messages), 1) def test_ammend(self): resp = {"key": "value"} eq_(resp, self.router.amend_msg(resp)) def test_check_token(self): (t, v) = self.router.check_token("") ok_(t) def test_route_crypto_key(self): headers = {"content-encoding": "aesgcm", "encryption": "test", "crypto-key": "test"} self.notif = Notification(10, "q60d6g", dummy_chid, headers, 200) now = int(time.time()) self.router.messages = {now: {'token': 'dump', 'payload': {}}, now-60: {'token': 'dump', 'payload': {}}} d = self.router.route_notification(self.notif, self.router_data) def check_results(result): ok_(isinstance(result, RouterResponse)) assert(self.mock_apns.gateway_server.send_notification.called) eq_(len(self.router.messages), 1) payload = self.router.messages[now]['payload'] eq_(payload.alert, 'SimplePush') custom = payload.custom eq_(custom['Msg'], self.notif.data) eq_(custom['Ver'], self.notif.version) eq_(custom['Con'], 'aesgcm') eq_(custom['Enc'], 'test') eq_(custom['Cryptokey'], 'test') eq_(custom['Chid'], self.notif.channel_id) ok_('Enckey' not in custom) d.addCallback(check_results) return d