def event_execute(request: Request):
    log = NarukoLogging(request)
    logger = log.get_logger(__name__)
    logger.info("START: event_execute")

    # リクエストがSNSからであるかを検証する
    use_case = ControlEventUseCase(log)
    body_data = json.loads(request.body)
    logger.info(body_data)
    use_case.verify_sns_notification(body_data)

    # SNSの種別ごとに分岐
    sns_type = body_data.get("Type")
    logger.info("Message Type is {}.".format(sns_type))
    if sns_type == "Notification":
        # 通知:アラームの内容に従って通知処理を実施する
        message = json.loads(body_data["Message"])
        event = EventRepository.get(message["id"])
        use_case.execute(event)
    elif sns_type == "SubscriptionConfirmation":

        # 購読開始:SNSトピック登録時に初期検証を実施する
        use_case.confirm_subscription(body_data)
    elif sns_type == "UnsubscribeConfirmation":
        # 購読解除:SNSトピック購読解除
        logger.info("UnsubscribeConfirmation. {}".format(body_data["Message"]))
    else:
        # 存在しない種別
        logger.warning("UnknownSnsMessageType.")
        logger.warning(body_data)

    logger.info("END: event_execute")
    return Response(status=status.HTTP_200_OK)
Exemple #2
0
    def test_verify_sns_notification_fail(self, mock_sns):
        mock_sns.verify_notification.return_value = False
        data = dict()

        with self.assertRaises(InvalidNotificationException):
            ControlEventUseCase(mock.Mock()).verify_sns_notification(data)

        mock_sns.verify_notification.assert_called_with(data)
Exemple #3
0
 def test_execute(self):
     mock_event = mock.Mock()
     ControlEventUseCase(mock.Mock()).execute(mock_event)
     mock_event.execute.assert_called_once()
Exemple #4
0
    def test_verify_sns_notification(self, mock_sns):
        mock_sns.return_value.verify_notification.return_value = True
        data = dict()
        ControlEventUseCase(mock.Mock()).verify_sns_notification(data)

        mock_sns.verify_notification.assert_called_with(data)
Exemple #5
0
    def test_confirm_subscription(self, mock_sns):
        ControlEventUseCase(mock.Mock()).confirm_subscription(
            dict(Token="token", TopicArn="topicarn"))

        mock_sns.assert_called_with(arn="topicarn")
        mock_sns.return_value.confirm_subscription.assert_called_with("token")