salt/tests/unit/modules/test_boto_route53.py
Erik Johnson 033f34ee21
Fix failing boto/network tests
These failures were recently introduced but went undiscovered due to
some recent instability in the test suite (which has now been fixed).

This commit fixes these failing tests.
2018-01-21 17:24:11 -06:00

133 lines
4.5 KiB
Python

# -*- coding: utf-8 -*-
# import Python Libs
from __future__ import absolute_import, print_function, unicode_literals
import logging
import pkg_resources
import os.path
# Import Salt Libs
import salt.config
from salt.ext import six
import salt.loader
import salt.modules.boto_route53 as boto_route53
import salt.utils.versions
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import skipIf, TestCase
from tests.support.mock import NO_MOCK, NO_MOCK_REASON
from tests.support.paths import TESTS_DIR
# import Python Third Party Libs
# pylint: disable=import-error
try:
import boto
boto.ENDPOINTS_PATH = os.path.join(TESTS_DIR, 'unit/files/endpoints.json')
from moto import mock_route53_deprecated
HAS_MOTO = True
except ImportError:
HAS_MOTO = False
def mock_route53_deprecated(self):
'''
if the mock_route53_deprecated function is not available due to import failure
this replaces the decorated function with stub_function.
Allows boto_route53 unit tests to use the @mock_route53_deprecated decorator
without a "NameError: name 'mock_route53_deprecated' is not defined" error.
'''
def stub_function(self):
pass
return stub_function
# pylint: enable=import-error
log = logging.getLogger(__name__)
required_moto = '0.3.7'
required_moto_py3 = '1.0.1'
def _has_required_moto():
'''
Returns True or False depending on if ``moto`` is installed and at the correct version,
depending on what version of Python is running these tests.
'''
if not HAS_MOTO:
return False
else:
moto_version = salt.utils.versions.LooseVersion(pkg_resources.get_distribution('moto').version)
if moto_version < salt.utils.versions.LooseVersion(required_moto):
return False
elif six.PY3 and moto_version < salt.utils.versions.LooseVersion(required_moto_py3):
return False
return True
@skipIf(NO_MOCK, NO_MOCK_REASON)
@skipIf(HAS_MOTO is False, 'The moto module must be installed.')
@skipIf(_has_required_moto() is False, 'The moto module must be >= to {0} for '
'PY2 or {1} for PY3.'.format(required_moto, required_moto_py3))
class BotoRoute53TestCase(TestCase, LoaderModuleMockMixin):
'''
TestCase for salt.modules.boto_route53 module
'''
def setup_loader_modules(self):
self.opts = salt.config.DEFAULT_MINION_OPTS
self.opts['route53.keyid'] = 'GKTADJGHEIQSXMKKRBJ08H'
self.opts['route53.key'] = 'askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs'
utils = salt.loader.utils(self.opts)
funcs = salt.loader.minion_mods(self.opts, utils=utils, whitelist=['boto_route53', 'config'])
return {
boto_route53: {
'__opts__': self.opts,
'__utils__': utils,
'__salt__': funcs
},
}
def setUp(self):
TestCase.setUp(self)
# __virtual__ must be caller in order for _get_conn to be injected
boto_route53.__virtual__()
boto_route53.__init__(self.opts)
def tearDown(self):
del self.opts
@mock_route53_deprecated
def test_create_healthcheck(self):
'''
tests that given a valid instance id and valid ELB that
register_instances returns True.
'''
expected = {
'result': {
'CreateHealthCheckResponse': {
'HealthCheck': {
'HealthCheckConfig': {
'FailureThreshold': '3',
'IPAddress': '10.0.0.1',
'ResourcePath': '/',
'RequestInterval': '30',
'Type': 'HTTPS',
'Port': '443',
'FullyQualifiedDomainName': 'blog.saltstack.furniture',
},
'HealthCheckVersion': '1',
},
},
},
}
healthcheck = boto_route53.create_healthcheck(
'10.0.0.1',
fqdn='blog.saltstack.furniture',
hc_type='HTTPS',
port=443,
resource_path='/',
)
del healthcheck['result']['CreateHealthCheckResponse']['HealthCheck']['CallerReference']
del healthcheck['result']['CreateHealthCheckResponse']['HealthCheck']['Id']
self.assertEqual(healthcheck, expected)