Exemple #1
0
    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": "*****@*****.**",
            },
        )
Exemple #2
0
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