salt/tests/unit/modules/test_dig.py
rallytime 3273bbdab7
Merge branch '2017.7' into '2018.3'
Conflicts:
  - doc/ref/configuration/master.rst
  - doc/ref/modules/all/index.rst
  - doc/topics/grains/index.rst
  - doc/topics/releases/2016.3.4.rst
  - doc/topics/spm/spm_formula.rst
  - doc/topics/tutorials/cron.rst
  - doc/topics/tutorials/index.rst
  - doc/topics/tutorials/stormpath.rst
  - salt/engines/slack.py
  - salt/log/handlers/fluent_mod.py
  - salt/modules/cyg.py
  - salt/modules/junos.py
  - salt/modules/namecheap_dns.py
  - salt/modules/namecheap_domains.py
  - salt/modules/namecheap_ns.py
  - salt/modules/namecheap_ssl.py
  - salt/modules/namecheap_users.py
  - salt/modules/reg.py
  - salt/modules/tomcat.py
  - salt/modules/vault.py
  - salt/modules/win_file.py
  - salt/modules/zpool.py
  - salt/output/highstate.py
  - salt/renderers/pass.py
  - salt/runners/cache.py
  - salt/states/boto_apigateway.py
  - salt/states/boto_iam.py
  - salt/states/boto_route53.py
  - salt/states/msteams.py
  - salt/states/reg.py
  - salt/states/win_iis.py
  - tests/integration/modules/test_cmdmod.py
  - tests/integration/states/test_user.py
  - tests/support/helpers.py
  - tests/unit/cloud/clouds/test_openstack.py
  - tests/unit/fileserver/test_gitfs.py
  - tests/unit/modules/test_junos.py
  - tests/unit/pillar/test_git.py
  - tests/unit/states/test_win_path.py
  - tests/unit/test_pillar.py
  - tests/unit/utils/test_format_call.py
  - tests/unit/utils/test_utils.py
  - tests/unit/utils/test_warnings.py
2018-06-01 14:54:12 -04:00

191 lines
6.1 KiB
Python

# -*- coding: utf-8 -*-
'''
:codeauthor: Nicole Thomas <nicole@saltstack.com>
'''
# Import Python libs
from __future__ import absolute_import, print_function, unicode_literals
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase, skipIf
from tests.support.mock import MagicMock, patch, NO_MOCK, NO_MOCK_REASON
# Import salt libs
import salt.modules.dig as dig
_SPF_VALUES = {
'dig +short xmission.com TXT': {
'pid': 27282,
'retcode': 0,
'stderr': '',
'stdout': '"v=spf1 a mx include:_spf.xmission.com ?all"'
},
'dig +short _spf.xmission.com TXT': {
'pid': 27282,
'retcode': 0,
'stderr': '',
'stdout': '"v=spf1 a mx ip4:198.60.22.0/24 ip4:166.70.13.0/24 ~all"'
},
'dig +short xmission-redirect.com TXT': {
'pid': 27282,
'retcode': 0,
'stderr': '',
'stdout': 'v=spf1 redirect=_spf.xmission.com'
},
'dig +short foo.com TXT': {
'pid': 27282,
'retcode': 0,
'stderr': '',
'stdout': 'v=spf1 ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all'
},
}
def _spf_side_effect(key, python_shell=False):
return _SPF_VALUES.get(' '.join(key), {'pid': 27310,
'retcode': 0,
'stderr': '',
'stdout': ''})
@skipIf(NO_MOCK, NO_MOCK_REASON)
@skipIf(dig.__virtual__() is False, 'Dig must be installed')
class DigTestCase(TestCase, LoaderModuleMockMixin):
def setup_loader_modules(self):
return {dig: {}}
def test_check_ip(self):
self.assertTrue(dig.check_ip('127.0.0.1'), msg='Not a valid ip address')
def test_check_ip_ipv6(self):
self.assertTrue(
dig.check_ip('1111:2222:3333:4444:5555:6666:7777:8888'),
msg='Not a valid ip address'
)
def test_check_ip_ipv6_valid(self):
self.assertTrue(dig.check_ip('2607:fa18:0:3::4'))
def test_check_ip_neg(self):
self.assertFalse(
dig.check_ip('-127.0.0.1'),
msg="Did not detect negative value as invalid"
)
def test_check_ip_empty(self):
self.assertFalse(
dig.check_ip(''),
msg="Did not detect empty value as invalid"
)
def test_a(self):
dig_mock = MagicMock(
return_value={
'pid': 3656,
'retcode': 0,
'stderr': '',
'stdout': '74.125.193.104\n'
'74.125.193.105\n'
'74.125.193.99\n'
'74.125.193.106\n'
'74.125.193.103\n'
'74.125.193.147'
}
)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.A('www.google.com'),
['74.125.193.104',
'74.125.193.105',
'74.125.193.99',
'74.125.193.106',
'74.125.193.103',
'74.125.193.147']
)
def test_aaaa(self):
dig_mock = MagicMock(
return_value={
'pid': 25451,
'retcode': 0,
'stderr': '',
'stdout': '2607:f8b0:400f:801::1014'
}
)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.AAAA('www.google.com'),
['2607:f8b0:400f:801::1014']
)
def test_ns(self):
with patch('salt.modules.dig.A', MagicMock(return_value=['ns4.google.com.'])):
dig_mock = MagicMock(
return_value={
'pid': 26136,
'retcode': 0,
'stderr': '',
'stdout': 'ns4.google.com.'
}
)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(dig.NS('google.com'), ['ns4.google.com.'])
def test_spf(self):
dig_mock = MagicMock(side_effect=_spf_side_effect)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.SPF('foo.com'),
['216.73.93.70/31', '216.73.93.72/31']
)
def test_spf_redir(self):
'''
Test for SPF records which use the 'redirect' SPF mechanism
https://en.wikipedia.org/wiki/Sender_Policy_Framework#Mechanisms
'''
dig_mock = MagicMock(side_effect=_spf_side_effect)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.SPF('xmission-redirect.com'),
['198.60.22.0/24', '166.70.13.0/24']
)
def test_spf_include(self):
'''
Test for SPF records which use the 'include' SPF mechanism
https://en.wikipedia.org/wiki/Sender_Policy_Framework#Mechanisms
'''
dig_mock = MagicMock(side_effect=_spf_side_effect)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.SPF('xmission.com'),
['198.60.22.0/24', '166.70.13.0/24']
)
def test_mx(self):
dig_mock = MagicMock(
return_value={
'pid': 27780,
'retcode': 0,
'stderr': '',
'stdout': '10 aspmx.l.google.com.\n'
'20 alt1.aspmx.l.google.com.\n'
'40 alt3.aspmx.l.google.com.\n'
'50 alt4.aspmx.l.google.com.\n'
'30 alt2.aspmx.l.google.com.'
}
)
with patch.dict(dig.__salt__, {'cmd.run_all': dig_mock}):
self.assertEqual(
dig.MX('google.com'),
[['10', 'aspmx.l.google.com.'],
['20', 'alt1.aspmx.l.google.com.'],
['40', 'alt3.aspmx.l.google.com.'],
['50', 'alt4.aspmx.l.google.com.'],
['30', 'alt2.aspmx.l.google.com.']]
)