def test_internet_message_headers(self): # Message headers are read-only, and an integration test is difficult because we can't reliably AND quickly # generate emails that pass through some relay server that adds headers. Create a unit test instead. payload = b"""\ <?xml version="1.0" encoding="utf-8"?> <Envelope xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <t:InternetMessageHeaders> <t:InternetMessageHeader HeaderName="Received">from foo by bar</t:InternetMessageHeader> <t:InternetMessageHeader HeaderName="DKIM-Signature">Hello from DKIM</t:InternetMessageHeader> <t:InternetMessageHeader HeaderName="MIME-Version">1.0</t:InternetMessageHeader> <t:InternetMessageHeader HeaderName="X-Mailer">Contoso Mail</t:InternetMessageHeader> <t:InternetMessageHeader HeaderName="Return-Path">[email protected]</t:InternetMessageHeader> </t:InternetMessageHeaders> </Envelope>""" headers_elem = to_xml(payload).find(f"{{{TNS}}}InternetMessageHeaders") headers = {} for elem in headers_elem.findall(f"{{{TNS}}}InternetMessageHeader"): header = MessageHeader.from_xml(elem=elem, account=None) headers[header.name] = header.value self.assertDictEqual( headers, { "Received": "from foo by bar", "DKIM-Signature": "Hello from DKIM", "MIME-Version": "1.0", "X-Mailer": "Contoso Mail", "Return-Path": "*****@*****.**", }, )
def test_metrics(): metrics.stats.update(default_metrics) bad_message = Message(headers=None, sender=Mailbox(email_address='')) relay(bad_message, None) assert metrics.stats['message_ignore_count'] == 1 metrics.stats.update(default_metrics) bad_message = Message( headers=[MessageHeader(name='X-Autoreply', value='yes')], sender=Mailbox(email_address='')) relay(bad_message, None) assert metrics.stats['message_ignore_count'] == 1 fake_iris_client = IrisClient('http://localhost') good_message = Message(headers=[], sender=Mailbox(email_address=''), text_body='') with requests_mock.mock() as m: m.post('http://localhost/v0/response/email') metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_success_count'] == 1 assert metrics.stats['incident_created_count'] == 0 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', headers={'X-IRIS-INCIDENT': '1234'}) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_success_count'] == 1 assert metrics.stats['incident_created_count'] == 1 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', status_code=500) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_failure_count'] == 1 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', status_code=400) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['malformed_message_count'] == 1