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')
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 []
def __getitem__(self, key): try: return dnsq.mx_hosts_for(key) except: return []