Exemplo n.º 1
0
 def test_xml_dates_unable_to_parse(self):
     test_cases = [
         ('P', isoerror.ISO8601Error),
         ('PT15.S', isoerror.ISO8601Error),
         ('1Y2M', isoerror.ISO8601Error)
     ]
     for xml_date, expected_exception in test_cases:
         description = 'Test {} is unable to be parsed to seconds correctly'.format(xml_date)
         with self.subTest(description):
             with self.assertRaises(expected_exception):
                 DateUtilities.convert_xml_date_time_format_to_seconds(xml_date)
    async def handle_outbound_message(self, from_asid: Optional[str],
                                      message_id: str, correlation_id: str, interaction_details: dict,
                                      payload: str,
                                      wdo: Optional[wd.WorkDescription]) \
            -> Tuple[int, str, Optional[wd.WorkDescription]]:

        logger.info('Entered async reliable workflow to handle outbound message')
        wdo = await self._create_new_work_description_if_required(message_id, wdo, self.workflow_name)
        logger.audit('Outbound {WorkflowName} workflow invoked.', fparams={'WorkflowName': self.workflow_name})

        try:
            details = await self._lookup_endpoint_details(interaction_details)
            url = details[self.ENDPOINT_URL]
            to_party_key = details[self.ENDPOINT_PARTY_KEY]
            cpa_id = details[self.ENDPOINT_CPA_ID]
        except Exception:
            await wdo.set_outbound_status(wd.MessageStatus.OUTBOUND_MESSAGE_PREPARATION_FAILED)
            return 500, 'Error obtaining outbound URL', None

        reliability_details = await self._lookup_reliability_details(interaction_details)
        retry_interval_xml_datetime = reliability_details[common_asynchronous.MHS_RETRY_INTERVAL]
        try:
            retry_interval = DateUtilities.convert_xml_date_time_format_to_seconds(retry_interval_xml_datetime)
        except isoerror.ISO8601Error:
            await wdo.set_outbound_status(wd.MessageStatus.OUTBOUND_MESSAGE_PREPARATION_FAILED)
            return 500, 'Error when converting retry interval: {} to seconds'.format(retry_interval_xml_datetime), None

        error, http_headers, message = await self._serialize_outbound_message(message_id, correlation_id,
                                                                              interaction_details,
                                                                              payload, wdo, to_party_key, cpa_id)
        if error:
            return error[0], error[1], None

        return await self._make_outbound_request_with_retries_and_handle_response(url, http_headers, message, wdo,
                                                                                  reliability_details, retry_interval)
Exemplo n.º 3
0
 def test_utc_now(self):
     past = datetime.now(tz=timezone(timedelta()))  # another way to create a UTC (+00:00) timestamp
     time.sleep(0.1)
     present = DateUtilities.utc_now()
     time.sleep(0.1)
     future = datetime.now(tz=timezone(timedelta()))
     self.assertTrue(past < present)
     self.assertTrue(present < future)
     self.assertEqual(timezone.utc, present.tzinfo, 'datetime from utc_now() should be UTC')
 def test_xml_dates_parsed_successfully(self):
     test_cases = [('P1DT2H', 93600), ('PT20M', 1200), ('PT1M30.5S', 90.5),
                   ('PT10S', 10), ('PT1M', 60), ('PT20S', 20),
                   ('PT4M', 240), ('PT1H', 3600)]
     for xml_date, expected_seconds in test_cases:
         description = 'Test {} is parsed to seconds correctly'.format(
             xml_date)
         with self.subTest(description):
             actual_seconds = DateUtilities.convert_xml_date_time_format_to_seconds(
                 xml_date)
             self.assertEqual(
                 expected_seconds, actual_seconds,
                 'Should have parsed to expected number of seconds')