Example #1
0
def test_mx_lookup():
    # query against live DNS server:
    answer = dnsq.mx_hosts_for('gmail.com')[0]
    ok_('google.com' in answer)

    with patch.object(dnsq, '_get_default_resolver') as get_resolver:
        r = Mock()
        get_resolver.return_value = r

        # makes a fake MX reply
        def fake_mx(name):
            class FakeEntry(object):
                @property
                def preference(self): return 1

                @property
                def exchange(self):
                    class Value(object):
                        def to_text(self): return name

                    return Value()

            return FakeEntry()

        # test MX timeout failure:
        with patch.object(r, 'query', Mock(side_effect=dns.exception.Timeout)):
            eq_([], dnsq.mx_hosts_for('host.com'))

        # test querying an invalid domain:
        with patch.object(r, 'query',
                          Mock(side_effect=dns.resolver.NXDOMAIN())):
            eq_([], dnsq.mx_hosts_for('invalid-siteeeee.com'))

        # test querying a domain without MX:
        with patch.object(r, 'query',
                          Mock(side_effect=dns.resolver.NoAnswer())):
            eq_(['host.com'], dnsq.mx_hosts_for('host.com'))

        # test querying a domain with MX:
        with patch.object(r, 'query') as query_mock:
            query_mock.return_value = [fake_mx('mx.host.com.'),
                                       fake_mx('mx2.host.com.')]
            eq_(set(['mx.host.com', 'mx2.host.com']),
                set(dnsq.mx_hosts_for('host.com')))

        # test failure:
        with patch.object(r, 'query', Mock(side_effect=Exception('bam!'))):
            assert_raises(Exception, dnsq.mx_hosts_for, 'host.com')

        # test dns failure
        with patch.object(dnsq, '_exec_query') as exec_query:
            exec_query.side_effect = dns.exception.Timeout
            assert_raises(Exception, dnsq.mx_hosts_for, 'host.com')
Example #2
0
 def __getitem__(self, key):
     try:
         # dnsq accepts native python strs (bytes in python 2, unicode in python 3)
         if isinstance('', unicode) and isinstance(key, str):
             key = key.decode('iso-8859-1')
         return dnsq.mx_hosts_for(key)
     except:
         return []
Example #3
0
 def __getitem__(self, key):
     try:
         return dnsq.mx_hosts_for(key)
     except:
         return []
Example #4
0
 def __getitem__(self, key):
     try:
         return dnsq.mx_hosts_for(key)
     except:
         return []