Skip to content

Commit

Permalink
Extend tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
felixfontein committed Jan 29, 2023
1 parent 9539daa commit ef89a1e
Show file tree
Hide file tree
Showing 2 changed files with 496 additions and 0 deletions.
159 changes: 159 additions & 0 deletions tests/unit/plugins/modules/test_nameserver_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,162 @@ def test_single_ips(self):
'1:2::3',
'3.3.3.3',
]

def test_timeout(self):
fake_query = MagicMock()
fake_query.question = 'Doctor Who?'
resolver = mock_resolver(['1.1.1.1'], {})
udp_sequence = [
{
'query_target': dns.name.from_unicode(u'com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'result': create_mock_response(dns.rcode.NOERROR, answer=[dns.rrset.from_rdata(
'com',
3600,
dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'ns.com'),
)]),
},
{
'query_target': dns.name.from_unicode(u'example.com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'result': create_mock_response(dns.rcode.NOERROR, answer=[dns.rrset.from_rdata(
'example.com',
3600,
dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, 'ns.example.com'),
)]),
},
{
'query_target': dns.name.from_unicode(u'www.example.com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'raise': dns.exception.Timeout(timeout=9),
},
{
'query_target': dns.name.from_unicode(u'www.example.com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'result': create_mock_response(dns.rcode.NOERROR, authority=[dns.rrset.from_rdata(
'www.example.com',
3600,
dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, 'ns.example.com. ns.example.com. 12345 7200 120 2419200 10800'),
)]),
},
{
'query_target': dns.name.from_unicode(u'mail.example.com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'raise': dns.exception.Timeout(timeout=9),
},
{
'query_target': dns.name.from_unicode(u'mail.example.com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 9,
},
'raise': dns.exception.Timeout(timeout=9),
},
]
with patch('dns.resolver.get_default_resolver', resolver):
with patch('dns.resolver.Resolver', resolver):
with patch('dns.query.udp', mock_query_udp(udp_sequence)):
with pytest.raises(AnsibleFailJson) as exc:
set_module_args({
'name': ['www.example.com', 'mail.example.com'],
'query_timeout': 9,
'query_retry': 1,
})
nameserver_info.main()

print(exc.value.args[0])
assert exc.value.args[0]['msg'] in (
'Unexpected DNS error: The DNS operation timed out after 9 seconds',
'Unexpected DNS error: The DNS operation timed out after 9.000 seconds',
)
assert len(exc.value.args[0]['results']) == 2
assert exc.value.args[0]['results'][0]['name'] == 'www.example.com'
assert exc.value.args[0]['results'][0]['nameservers'] == ['ns.example.com']
assert exc.value.args[0]['results'][1]['name'] == 'mail.example.com'
assert 'nameservers' not in exc.value.args[0]['results'][1]

def test_nxdomain(self):
resolver = mock_resolver(['1.1.1.1'], {})
udp_sequence = [
{
'query_target': dns.name.from_unicode(u'com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 10,
},
'result': create_mock_response(dns.rcode.NXDOMAIN),
},
{
'query_target': dns.name.from_unicode(u'com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 10,
},
'result': create_mock_response(dns.rcode.NXDOMAIN),
},
]
with patch('dns.resolver.get_default_resolver', resolver):
with patch('dns.resolver.Resolver', resolver):
with patch('dns.query.udp', mock_query_udp(udp_sequence)):
with pytest.raises(AnsibleFailJson) as exc:
set_module_args({
'name': ['www.example.com'],
})
nameserver_info.main()

print(exc.value.args[0])
assert exc.value.args[0]['msg'] == 'Unexpected DNS error: The DNS query name does not exist: com.'
assert len(exc.value.args[0]['results']) == 1
assert exc.value.args[0]['results'][0]['name'] == 'www.example.com'
assert 'nameservers' not in exc.value.args[0]['results'][0]

def test_servfail(self):
resolver = mock_resolver(['1.1.1.1'], {})
udp_sequence = [
{
'query_target': dns.name.from_unicode(u'com'),
'query_type': dns.rdatatype.NS,
'nameserver': '1.1.1.1',
'kwargs': {
'timeout': 10,
},
'result': create_mock_response(dns.rcode.SERVFAIL),
},
]
with patch('dns.resolver.get_default_resolver', resolver):
with patch('dns.resolver.Resolver', resolver):
with patch('dns.query.udp', mock_query_udp(udp_sequence)):
with pytest.raises(AnsibleFailJson) as exc:
set_module_args({
'name': ['www.example.com'],
})
nameserver_info.main()

print(exc.value.args[0])
assert exc.value.args[0]['msg'] == 'Unexpected resolving error: Error SERVFAIL while querying 1.1.1.1 with query get NS for "com."'
assert len(exc.value.args[0]['results']) == 1
assert exc.value.args[0]['results'][0]['name'] == 'www.example.com'
assert 'nameservers' not in exc.value.args[0]['results'][0]
Loading

0 comments on commit ef89a1e

Please sign in to comment.