Exemplo n.º 1
0
    def test_message_type_is_b_sent_email(self, broadcast_email_mock, broadcast_sms_mock, broadcast_call_mock):
        """Message type: broadcast. Ensure server will sent email with method is email"""
        from sosbeacon.event.message import broadcast_to_method

        broadcast_to_method(self.event.key, self.message_broadcast.key, 900, "*****@*****.**")
        self.assertEqual(1, broadcast_email_mock.call_count)
        self.assertEqual(0, broadcast_sms_mock.call_count)
        self.assertEqual(0, broadcast_call_mock.call_count)
Exemplo n.º 2
0
    def test_message_type_is_ec_sent_sms(self, broadcast_email_mock, broadcast_sms_mock, broadcast_call_mock):
        """Message type: 'ec' - email call. Ensure server will make a call with method is phone"""
        from sosbeacon.event.contact_marker import ContactMarker
        from sosbeacon.event.message import broadcast_to_method

        broadcast_to_method(self.event.key, self.message_call.key, 900, "84973796065")
        self.assertEqual(0, broadcast_email_mock.call_count)
        self.assertEqual(0, broadcast_sms_mock.call_count)
        self.assertEqual(1, broadcast_call_mock.call_count)
Exemplo n.º 3
0
    def test_message_type_is_em_sent_email(self, broadcast_email_mock, broadcast_sms_mock, broadcast_call_mock):
        """Message type: 'em' - emergency. Ensure server will sent email with method is email"""
        from sosbeacon.event.contact_marker import ContactMarker
        from sosbeacon.event.message import broadcast_to_method

        broadcast_to_method(self.event.key, self.message_emergency.key, 900, "*****@*****.**")
        self.assertEqual(1, broadcast_email_mock.call_count)
        self.assertEqual(0, broadcast_sms_mock.call_count)
        self.assertEqual(0, broadcast_call_mock.call_count)
Exemplo n.º 4
0
    def post(self):
        from sosbeacon.event.event import EVENT_STATUS_CLOSED

        event_urlsafe = self.request.get('event')
        user_urlsafe = self.request.get('user')
        message_urlsafe = self.request.get('message')
        method = self.request.get('method')

        if not event_urlsafe:
            logging.error('No event key given.')
            return

        # TODO: Use event id rather than key here for namespacing purposes?
        event_key = ndb.Key(urlsafe=event_urlsafe)
        event = event_key.get()

        if not event:
            logging.error('Event %s not found!', event_key)
            error = 'Event %s not found!' % event_key
            create_error_log(error, 'ERR')
            return

        if event.status == EVENT_STATUS_CLOSED:
            logging.error('Event %s closed!', event_key)
            error = 'Event %s not found!' % event_key
            create_error_log(error, 'ERR')
            return

        user_key = ndb.Key(urlsafe = user_urlsafe)
        user = user_key.get()

        if not user:
            logging.error('User %s not found!', user_key)
            error = 'User %s not found!' % user_key
            create_error_log(error, 'ERR')
            return

        message_key = ndb.Key(urlsafe = message_urlsafe)
        message = message_key.get()

        if not message:
            logging.error('Message %s not found!', message_key)
            error = 'Message %s not found!' % message_key
            create_error_log(error, 'ERR')
            return

        broadcast_to_method(event_key, message_key, user_key.id(), method)
Exemplo n.º 5
0
    def post(self):
        from google.appengine.api import namespace_manager

        event_urlsafe = self.request.get('event')
        if not event_urlsafe:
            logging.error('No event key given.')
            return

        # TODO: Use event id rather than key here for namespacing purposes?
        event_key = ndb.Key(urlsafe=event_urlsafe)
        event = event_key.get()
        if not event:
            logging.error('Event %s not found!', event_key)
            return

        if event.status == EVENT_STATUS_CLOSED:
            logging.error('Event %s closed!', event_key)
            return

        message_urlsafe = self.request.get('message')
        if not message_urlsafe:
            logging.error('No message key given.')
            return

        # TODO: Use message id rather than key here for namespacing purposes?
        message_key = ndb.Key(urlsafe=message_urlsafe)

        # TODO: Check namespace here.
        current_namespae = unicode(namespace_manager.get_namespace())
        if message_key.namespace() != current_namespae:
            logging.error('Message %s not in namespace %s!',
                          message_key, current_namespae)
            return

        message = message_key.get()
        if not message:
            logging.error('Message %s not found!', message_key)
            return

        # We don't want to send the wrong message to the wrong groups.
        if message.event != event.key:
            logging.error('Message %s not belong to Event %s!',
                          message_key, event_key)
            return

        if message.message_type == 'c' :
            logging.error('Message %s is not a broadcast!', message_key)
            return

        short_id = self.request.get('short_id')
        if not short_id:
            logging.error('No short_id given.')
            return
        short_id = int(short_id)

        method = self.request.get('method')
        if not method:
            logging.error('No method given.')
            return

        retry_count = int(
            self.request.headers.get('X-AppEngine-TaskRetryCount', 0))
        exec_count = int(
            self.request.headers.get('X-AppEngine-ExecutionCount', 0))

        if exec_count > 5 or retry_count > 10:
            logging.error('Too many failures sending to %s, aborting.', method)
            return

        broadcast_to_method(event_key, message_key, short_id, method)