Use TEST-NET-1 for unit tests, not 127.0.0.1
Currently if http requests are not correctly mocked, behaviour of the unit tests will depend on what happens to be running on localhost. Jobs like gate-os-collect-config-python27-ubuntu-xenial are currently broken because discover requests are being made to localhost and something has change in the environment to cause test failure. This change does the following: - replace unit tests addresses from 127.0.0.1 to 192.0.2.1 (TEST-NET-1) - fix mocking of tests which now stall because 192.0.2.1 isn't accessable - change the mocking approach to keystoneclient.discover.Discover to a simple stub class Change-Id: I6d9450d6854b9f50dac0f55f54f1ea1d579a27ac
This commit is contained in:
parent
2980adb21d
commit
61ff6aaec7
|
@ -44,9 +44,11 @@ name = 'heat'
|
||||||
class Collector(object):
|
class Collector(object):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
keystoneclient=keystoneclient,
|
keystoneclient=keystoneclient,
|
||||||
heatclient=heatclient):
|
heatclient=heatclient,
|
||||||
|
discover_class=None):
|
||||||
self.keystoneclient = keystoneclient
|
self.keystoneclient = keystoneclient
|
||||||
self.heatclient = heatclient
|
self.heatclient = heatclient
|
||||||
|
self.discover_class = discover_class
|
||||||
|
|
||||||
def collect(self):
|
def collect(self):
|
||||||
if CONF.heat.auth_url is None:
|
if CONF.heat.auth_url is None:
|
||||||
|
@ -74,7 +76,8 @@ class Collector(object):
|
||||||
user_id=CONF.heat.user_id,
|
user_id=CONF.heat.user_id,
|
||||||
password=CONF.heat.password,
|
password=CONF.heat.password,
|
||||||
project_id=CONF.heat.project_id,
|
project_id=CONF.heat.project_id,
|
||||||
keystoneclient=self.keystoneclient).client
|
keystoneclient=self.keystoneclient,
|
||||||
|
discover_class=self.discover_class).client
|
||||||
endpoint = ks.service_catalog.url_for(
|
endpoint = ks.service_catalog.url_for(
|
||||||
service_type='orchestration', endpoint_type='publicURL')
|
service_type='orchestration', endpoint_type='publicURL')
|
||||||
logger.debug('Fetching metadata from %s' % endpoint)
|
logger.debug('Fetching metadata from %s' % endpoint)
|
||||||
|
|
|
@ -41,7 +41,7 @@ class Keystone(object):
|
||||||
in subsequent invocations of os-collect-config.
|
in subsequent invocations of os-collect-config.
|
||||||
'''
|
'''
|
||||||
def __init__(self, auth_url, user_id, password, project_id,
|
def __init__(self, auth_url, user_id, password, project_id,
|
||||||
keystoneclient=None):
|
keystoneclient=None, discover_class=None):
|
||||||
'''Initialize Keystone wrapper.
|
'''Initialize Keystone wrapper.
|
||||||
|
|
||||||
@param string auth_url auth_url for keystoneclient
|
@param string auth_url auth_url for keystoneclient
|
||||||
|
@ -49,15 +49,18 @@ class Keystone(object):
|
||||||
@param string project_id project_id for keystoneclient
|
@param string project_id project_id for keystoneclient
|
||||||
@param object keystoneclient optional keystoneclient implementation.
|
@param object keystoneclient optional keystoneclient implementation.
|
||||||
Uses keystoneclient.v3 if unspecified.
|
Uses keystoneclient.v3 if unspecified.
|
||||||
|
@param object discover_class optional keystoneclient.discover.Discover
|
||||||
|
class.
|
||||||
'''
|
'''
|
||||||
self.keystoneclient = keystoneclient or ks_keystoneclient
|
self.keystoneclient = keystoneclient or ks_keystoneclient
|
||||||
|
self.discover_class = discover_class or ks_discover.Discover
|
||||||
self.user_id = user_id
|
self.user_id = user_id
|
||||||
self.password = password
|
self.password = password
|
||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
self._client = None
|
self._client = None
|
||||||
try:
|
try:
|
||||||
auth_url_noneversion = auth_url.replace('/v2.0', '/')
|
auth_url_noneversion = auth_url.replace('/v2.0', '/')
|
||||||
discover = ks_discover.Discover(auth_url=auth_url_noneversion)
|
discover = self.discover_class(auth_url=auth_url_noneversion)
|
||||||
v3_auth_url = discover.url_for('3.0')
|
v3_auth_url = discover.url_for('3.0')
|
||||||
if v3_auth_url:
|
if v3_auth_url:
|
||||||
self.auth_url = v3_auth_url
|
self.auth_url = v3_auth_url
|
||||||
|
|
|
@ -154,7 +154,7 @@ class FakeReqSession(object):
|
||||||
class FakeRequests(object):
|
class FakeRequests(object):
|
||||||
exceptions = requests.exceptions
|
exceptions = requests.exceptions
|
||||||
|
|
||||||
def __init__(self, testcase, expected_netloc='127.0.0.1:8000'):
|
def __init__(self, testcase, expected_netloc='192.0.2.1:8000'):
|
||||||
self._test = testcase
|
self._test = testcase
|
||||||
self._expected_netloc = expected_netloc
|
self._expected_netloc = expected_netloc
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ class TestCfnBase(testtools.TestCase):
|
||||||
self.log = self.useFixture(fixtures.FakeLogger())
|
self.log = self.useFixture(fixtures.FakeLogger())
|
||||||
self.useFixture(fixtures.NestedTempfile())
|
self.useFixture(fixtures.NestedTempfile())
|
||||||
self.hint_file = tempfile.NamedTemporaryFile()
|
self.hint_file = tempfile.NamedTemporaryFile()
|
||||||
self.hint_file.write(u'http://127.0.0.1:8000'.encode('utf-8'))
|
self.hint_file.write(u'http://192.0.2.1:8000'.encode('utf-8'))
|
||||||
self.hint_file.flush()
|
self.hint_file.flush()
|
||||||
self.addCleanup(self.hint_file.close)
|
self.addCleanup(self.hint_file.close)
|
||||||
collect.setup_conf()
|
collect.setup_conf()
|
||||||
|
|
|
@ -22,8 +22,6 @@ import tempfile
|
||||||
|
|
||||||
import extras
|
import extras
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneclient import discover as ks_discover
|
|
||||||
import mock
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
import testtools
|
import testtools
|
||||||
from testtools import matchers
|
from testtools import matchers
|
||||||
|
@ -74,12 +72,14 @@ class TestCollect(testtools.TestCase):
|
||||||
'cfn': {'requests_impl': test_cfn.FakeRequests(self)},
|
'cfn': {'requests_impl': test_cfn.FakeRequests(self)},
|
||||||
'heat': {
|
'heat': {
|
||||||
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
||||||
'heatclient': test_heat.FakeHeatClient(self)
|
'heatclient': test_heat.FakeHeatClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
'request': {'requests_impl': test_request.FakeRequests},
|
'request': {'requests_impl': test_request.FakeRequests},
|
||||||
'zaqar': {
|
'zaqar': {
|
||||||
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
||||||
'zaqarclient': test_zaqar.FakeZaqarClient(self)
|
'zaqarclient': test_zaqar.FakeZaqarClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return collect.__main__(args=fake_args,
|
return collect.__main__(args=fake_args,
|
||||||
|
@ -111,7 +111,7 @@ class TestCollect(testtools.TestCase):
|
||||||
'--config-file',
|
'--config-file',
|
||||||
'/dev/null',
|
'/dev/null',
|
||||||
'--cfn-metadata-url',
|
'--cfn-metadata-url',
|
||||||
'http://127.0.0.1:8000/v1/',
|
'http://192.0.2.1:8000/v1/',
|
||||||
'--cfn-stack-name',
|
'--cfn-stack-name',
|
||||||
'foo',
|
'foo',
|
||||||
'--cfn-path',
|
'--cfn-path',
|
||||||
|
@ -129,7 +129,7 @@ class TestCollect(testtools.TestCase):
|
||||||
'--heat-project-id',
|
'--heat-project-id',
|
||||||
'9f6b09df-4d7f-4a33-8ec3-9924d8f46f10',
|
'9f6b09df-4d7f-4a33-8ec3-9924d8f46f10',
|
||||||
'--heat-auth-url',
|
'--heat-auth-url',
|
||||||
'http://127.0.0.1:5000/v3',
|
'http://192.0.2.1:5000/v3',
|
||||||
'--heat-stack-id',
|
'--heat-stack-id',
|
||||||
'a/c482680f-7238-403d-8f76-36acf0c8e0aa',
|
'a/c482680f-7238-403d-8f76-36acf0c8e0aa',
|
||||||
'--heat-resource-name',
|
'--heat-resource-name',
|
||||||
|
@ -225,7 +225,7 @@ class TestCollect(testtools.TestCase):
|
||||||
'--config-file',
|
'--config-file',
|
||||||
'/dev/null',
|
'/dev/null',
|
||||||
'--cfn-metadata-url',
|
'--cfn-metadata-url',
|
||||||
'http://127.0.0.1:8000/v1/',
|
'http://192.0.2.1:8000/v1/',
|
||||||
'--cfn-stack-name',
|
'--cfn-stack-name',
|
||||||
'foo',
|
'foo',
|
||||||
'--cfn-path',
|
'--cfn-path',
|
||||||
|
@ -275,7 +275,7 @@ class TestCollect(testtools.TestCase):
|
||||||
'--config-file', '/dev/null',
|
'--config-file', '/dev/null',
|
||||||
'--print',
|
'--print',
|
||||||
'--cfn-metadata-url',
|
'--cfn-metadata-url',
|
||||||
'http://127.0.0.1:8000/v1/',
|
'http://192.0.2.1:8000/v1/',
|
||||||
'--cfn-stack-name',
|
'--cfn-stack-name',
|
||||||
'foo',
|
'foo',
|
||||||
'--cfn-path',
|
'--cfn-path',
|
||||||
|
@ -343,44 +343,42 @@ class TestCollectAll(testtools.TestCase):
|
||||||
|
|
||||||
cfg.CONF.cachedir = self.cache_dir.path
|
cfg.CONF.cachedir = self.cache_dir.path
|
||||||
cfg.CONF.backup_cachedir = self.backup_cache_dir.path
|
cfg.CONF.backup_cachedir = self.backup_cache_dir.path
|
||||||
cfg.CONF.cfn.metadata_url = 'http://127.0.0.1:8000/v1/'
|
cfg.CONF.cfn.metadata_url = 'http://192.0.2.1:8000/v1/'
|
||||||
cfg.CONF.cfn.stack_name = 'foo'
|
cfg.CONF.cfn.stack_name = 'foo'
|
||||||
cfg.CONF.cfn.path = ['foo.Metadata']
|
cfg.CONF.cfn.path = ['foo.Metadata']
|
||||||
cfg.CONF.cfn.access_key_id = '0123456789ABCDEF'
|
cfg.CONF.cfn.access_key_id = '0123456789ABCDEF'
|
||||||
cfg.CONF.cfn.secret_access_key = 'FEDCBA9876543210'
|
cfg.CONF.cfn.secret_access_key = 'FEDCBA9876543210'
|
||||||
cfg.CONF.heat_local.path = [_setup_heat_local_metadata(self)]
|
cfg.CONF.heat_local.path = [_setup_heat_local_metadata(self)]
|
||||||
cfg.CONF.heat.auth_url = 'http://127.0.0.1:5000/v3'
|
cfg.CONF.heat.auth_url = 'http://192.0.2.1:5000/v3'
|
||||||
cfg.CONF.heat.user_id = '0123456789ABCDEF'
|
cfg.CONF.heat.user_id = '0123456789ABCDEF'
|
||||||
cfg.CONF.heat.password = 'FEDCBA9876543210'
|
cfg.CONF.heat.password = 'FEDCBA9876543210'
|
||||||
cfg.CONF.heat.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
cfg.CONF.heat.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
||||||
cfg.CONF.heat.stack_id = 'a/c482680f-7238-403d-8f76-36acf0c8e0aa'
|
cfg.CONF.heat.stack_id = 'a/c482680f-7238-403d-8f76-36acf0c8e0aa'
|
||||||
cfg.CONF.heat.resource_name = 'server'
|
cfg.CONF.heat.resource_name = 'server'
|
||||||
cfg.CONF.local.path = [_setup_local_metadata(self)]
|
cfg.CONF.local.path = [_setup_local_metadata(self)]
|
||||||
cfg.CONF.request.metadata_url = 'http://127.0.0.1:8000/my_metadata/'
|
cfg.CONF.request.metadata_url = 'http://192.0.2.1:8000/my_metadata/'
|
||||||
cfg.CONF.zaqar.auth_url = 'http://127.0.0.1:5000/v3'
|
cfg.CONF.zaqar.auth_url = 'http://192.0.2.1:5000/v3'
|
||||||
cfg.CONF.zaqar.user_id = '0123456789ABCDEF'
|
cfg.CONF.zaqar.user_id = '0123456789ABCDEF'
|
||||||
cfg.CONF.zaqar.password = 'FEDCBA9876543210'
|
cfg.CONF.zaqar.password = 'FEDCBA9876543210'
|
||||||
cfg.CONF.zaqar.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
cfg.CONF.zaqar.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
||||||
cfg.CONF.zaqar.queue_id = '4f3f46d3-09f1-42a7-8c13-f91a5457192c'
|
cfg.CONF.zaqar.queue_id = '4f3f46d3-09f1-42a7-8c13-f91a5457192c'
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def _call_collect_all(self, store, collector_kwargs_map=None,
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
collectors=None):
|
||||||
def _call_collect_all(self, mock_url_for, mock___init__, store,
|
|
||||||
collector_kwargs_map=None, collectors=None):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = cfg.CONF.heat.auth_url
|
|
||||||
if collector_kwargs_map is None:
|
if collector_kwargs_map is None:
|
||||||
collector_kwargs_map = {
|
collector_kwargs_map = {
|
||||||
'ec2': {'requests_impl': test_ec2.FakeRequests},
|
'ec2': {'requests_impl': test_ec2.FakeRequests},
|
||||||
'cfn': {'requests_impl': test_cfn.FakeRequests(self)},
|
'cfn': {'requests_impl': test_cfn.FakeRequests(self)},
|
||||||
'heat': {
|
'heat': {
|
||||||
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
||||||
'heatclient': test_heat.FakeHeatClient(self)
|
'heatclient': test_heat.FakeHeatClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
'request': {'requests_impl': test_request.FakeRequests},
|
'request': {'requests_impl': test_request.FakeRequests},
|
||||||
'zaqar': {
|
'zaqar': {
|
||||||
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
||||||
'zaqarclient': test_zaqar.FakeZaqarClient(self)
|
'zaqarclient': test_zaqar.FakeZaqarClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if collectors is None:
|
if collectors is None:
|
||||||
|
@ -413,12 +411,14 @@ class TestCollectAll(testtools.TestCase):
|
||||||
'requests_impl': test_cfn.FakeRequestsSoftwareConfig(self)},
|
'requests_impl': test_cfn.FakeRequestsSoftwareConfig(self)},
|
||||||
'heat': {
|
'heat': {
|
||||||
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
||||||
'heatclient': test_heat.FakeHeatClient(self)
|
'heatclient': test_heat.FakeHeatClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
'request': {'requests_impl': test_request.FakeRequests},
|
'request': {'requests_impl': test_request.FakeRequests},
|
||||||
'zaqar': {
|
'zaqar': {
|
||||||
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
||||||
'zaqarclient': test_zaqar.FakeZaqarClient(self)
|
'zaqarclient': test_zaqar.FakeZaqarClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
expected_changed = set((
|
expected_changed = set((
|
||||||
|
@ -456,12 +456,14 @@ class TestCollectAll(testtools.TestCase):
|
||||||
'requests_impl': test_cfn.FakeRequestsSoftwareConfig(self)},
|
'requests_impl': test_cfn.FakeRequestsSoftwareConfig(self)},
|
||||||
'heat': {
|
'heat': {
|
||||||
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
'keystoneclient': test_heat.FakeKeystoneClient(self),
|
||||||
'heatclient': test_heat.FakeHeatClient(self)
|
'heatclient': test_heat.FakeHeatClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
'request': {'requests_impl': test_request.FakeRequests},
|
'request': {'requests_impl': test_request.FakeRequests},
|
||||||
'zaqar': {
|
'zaqar': {
|
||||||
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
'keystoneclient': test_zaqar.FakeKeystoneClient(self),
|
||||||
'zaqarclient': test_zaqar.FakeZaqarClient(self)
|
'zaqarclient': test_zaqar.FakeZaqarClient(self),
|
||||||
|
'discover_class': test_heat.FakeKeystoneDiscover
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
(changed_keys, paths) = self._call_collect_all(
|
(changed_keys, paths) = self._call_collect_all(
|
||||||
|
@ -493,7 +495,8 @@ class TestCollectAll(testtools.TestCase):
|
||||||
'cfn': {'requests_impl': test_cfn.FakeRequests(self)}
|
'cfn': {'requests_impl': test_cfn.FakeRequests(self)}
|
||||||
}
|
}
|
||||||
(changed_keys, content) = self._call_collect_all(
|
(changed_keys, content) = self._call_collect_all(
|
||||||
store=False, collector_kwargs_map=collector_kwargs_map)
|
store=False, collector_kwargs_map=collector_kwargs_map,
|
||||||
|
collectors=['ec2', 'cfn'])
|
||||||
self.assertEqual(set(), changed_keys)
|
self.assertEqual(set(), changed_keys)
|
||||||
self.assertThat(content, matchers.IsInstance(dict))
|
self.assertThat(content, matchers.IsInstance(dict))
|
||||||
self.assertNotIn('ec2', content)
|
self.assertNotIn('ec2', content)
|
||||||
|
|
|
@ -13,9 +13,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneclient import discover as ks_discover
|
|
||||||
from keystoneclient import exceptions as ks_exc
|
from keystoneclient import exceptions as ks_exc
|
||||||
import mock
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
import testtools
|
import testtools
|
||||||
from testtools import matchers
|
from testtools import matchers
|
||||||
|
@ -64,6 +62,15 @@ SOFTWARE_CONFIG_IMPOSTER_DATA = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class FakeKeystoneDiscover(object):
|
||||||
|
|
||||||
|
def __init__(self, auth_url):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def url_for(self, version):
|
||||||
|
return 'http://192.0.2.1:5000/v3'
|
||||||
|
|
||||||
|
|
||||||
class FakeKeystoneClient(object):
|
class FakeKeystoneClient(object):
|
||||||
|
|
||||||
def __init__(self, testcase, configs=None):
|
def __init__(self, testcase, configs=None):
|
||||||
|
@ -84,7 +91,7 @@ class FakeKeystoneClient(object):
|
||||||
def url_for(self, service_type, endpoint_type):
|
def url_for(self, service_type, endpoint_type):
|
||||||
self._test.assertEqual('orchestration', service_type)
|
self._test.assertEqual('orchestration', service_type)
|
||||||
self._test.assertEqual('publicURL', endpoint_type)
|
self._test.assertEqual('publicURL', endpoint_type)
|
||||||
return 'http://127.0.0.1:8004/v1'
|
return 'http://192.0.2.1:8004/v1'
|
||||||
|
|
||||||
def get_auth_ref(self):
|
def get_auth_ref(self):
|
||||||
return 'this is an auth_ref'
|
return 'this is an auth_ref'
|
||||||
|
@ -103,7 +110,7 @@ class FakeHeatClient(object):
|
||||||
|
|
||||||
def Client(self, version, endpoint, token):
|
def Client(self, version, endpoint, token):
|
||||||
self._test.assertEqual('1', version)
|
self._test.assertEqual('1', version)
|
||||||
self._test.assertEqual('http://127.0.0.1:8004/v1', endpoint)
|
self._test.assertEqual('http://192.0.2.1:8004/v1', endpoint)
|
||||||
self._test.assertEqual('atoken', token)
|
self._test.assertEqual('atoken', token)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -125,7 +132,7 @@ class TestHeatBase(testtools.TestCase):
|
||||||
self.log = self.useFixture(fixtures.FakeLogger())
|
self.log = self.useFixture(fixtures.FakeLogger())
|
||||||
self.useFixture(fixtures.NestedTempfile())
|
self.useFixture(fixtures.NestedTempfile())
|
||||||
collect.setup_conf()
|
collect.setup_conf()
|
||||||
cfg.CONF.heat.auth_url = 'http://127.0.0.1:5000/v3'
|
cfg.CONF.heat.auth_url = 'http://192.0.2.1:5000/v3'
|
||||||
cfg.CONF.heat.user_id = '0123456789ABCDEF'
|
cfg.CONF.heat.user_id = '0123456789ABCDEF'
|
||||||
cfg.CONF.heat.password = 'FEDCBA9876543210'
|
cfg.CONF.heat.password = 'FEDCBA9876543210'
|
||||||
cfg.CONF.heat.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
cfg.CONF.heat.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
||||||
|
@ -134,13 +141,10 @@ class TestHeatBase(testtools.TestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestHeat(TestHeatBase):
|
class TestHeat(TestHeatBase):
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_collect_heat(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_collect_heat(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = cfg.CONF.heat.auth_url
|
|
||||||
heat_md = heat.Collector(keystoneclient=FakeKeystoneClient(self),
|
heat_md = heat.Collector(keystoneclient=FakeKeystoneClient(self),
|
||||||
heatclient=FakeHeatClient(self)).collect()
|
heatclient=FakeHeatClient(self),
|
||||||
|
discover_class=FakeKeystoneDiscover).collect()
|
||||||
self.assertThat(heat_md, matchers.IsInstance(list))
|
self.assertThat(heat_md, matchers.IsInstance(list))
|
||||||
self.assertEqual('heat', heat_md[0][0])
|
self.assertEqual('heat', heat_md[0][0])
|
||||||
heat_md = heat_md[0][1]
|
heat_md = heat_md[0][1]
|
||||||
|
@ -153,16 +157,13 @@ class TestHeat(TestHeatBase):
|
||||||
# level setting for urllib3.connectionpool.
|
# level setting for urllib3.connectionpool.
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
self.log.output == '' or
|
self.log.output == '' or
|
||||||
self.log.output == 'Starting new HTTP connection (1): 127.0.0.1\n')
|
self.log.output == 'Starting new HTTP connection (1): 192.0.2.1\n')
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_collect_heat_fail(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_collect_heat_fail(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = cfg.CONF.heat.auth_url
|
|
||||||
heat_collect = heat.Collector(
|
heat_collect = heat.Collector(
|
||||||
keystoneclient=FakeFailKeystoneClient(self),
|
keystoneclient=FakeFailKeystoneClient(self),
|
||||||
heatclient=FakeHeatClient(self))
|
heatclient=FakeHeatClient(self),
|
||||||
|
discover_class=FakeKeystoneDiscover)
|
||||||
self.assertRaises(exc.HeatMetadataNotAvailable, heat_collect.collect)
|
self.assertRaises(exc.HeatMetadataNotAvailable, heat_collect.collect)
|
||||||
self.assertIn('Forbidden', self.log.output)
|
self.assertIn('Forbidden', self.log.output)
|
||||||
|
|
||||||
|
@ -204,14 +205,11 @@ class TestHeat(TestHeatBase):
|
||||||
|
|
||||||
|
|
||||||
class TestHeatSoftwareConfig(TestHeatBase):
|
class TestHeatSoftwareConfig(TestHeatBase):
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_collect_heat(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_collect_heat(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = cfg.CONF.heat.auth_url
|
|
||||||
heat_md = heat.Collector(
|
heat_md = heat.Collector(
|
||||||
keystoneclient=FakeKeystoneClient(self),
|
keystoneclient=FakeKeystoneClient(self),
|
||||||
heatclient=FakeHeatClientSoftwareConfig(self)).collect()
|
heatclient=FakeHeatClientSoftwareConfig(self),
|
||||||
|
discover_class=FakeKeystoneDiscover).collect()
|
||||||
self.assertThat(heat_md, matchers.IsInstance(list))
|
self.assertThat(heat_md, matchers.IsInstance(list))
|
||||||
self.assertEqual(2, len(heat_md))
|
self.assertEqual(2, len(heat_md))
|
||||||
self.assertEqual('heat', heat_md[0][0])
|
self.assertEqual('heat', heat_md[0][0])
|
||||||
|
|
|
@ -15,9 +15,7 @@
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneclient import discover as ks_discover
|
|
||||||
from keystoneclient import exceptions as ks_exc
|
from keystoneclient import exceptions as ks_exc
|
||||||
import mock
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
|
@ -26,21 +24,22 @@ from os_collect_config import keystone
|
||||||
from os_collect_config.tests import test_heat
|
from os_collect_config.tests import test_heat
|
||||||
|
|
||||||
|
|
||||||
class FakeKeystoneClient(object):
|
class FakeKeystoneDiscoverNone(test_heat.FakeKeystoneDiscover):
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def Client(self, *args, **kwargs):
|
def url_for(self, version):
|
||||||
return self
|
return None
|
||||||
|
|
||||||
@property
|
|
||||||
def service_catalog(self):
|
|
||||||
return {}
|
|
||||||
|
|
||||||
|
|
||||||
class FakeFailGetAuthRef(FakeKeystoneClient):
|
class FakeKeystoneDiscoverError(test_heat.FakeKeystoneDiscover):
|
||||||
def get_auth_ref(self):
|
|
||||||
raise ks_exc.AuthorizationFailed('Should not be called')
|
def url_for(self, version):
|
||||||
|
raise ks_exc.DiscoveryFailure()
|
||||||
|
|
||||||
|
|
||||||
|
class FakeKeystoneDiscoverBase(test_heat.FakeKeystoneDiscover):
|
||||||
|
|
||||||
|
def url_for(self, version):
|
||||||
|
return 'http://192.0.2.1:5000/'
|
||||||
|
|
||||||
|
|
||||||
class KeystoneTest(testtools.TestCase):
|
class KeystoneTest(testtools.TestCase):
|
||||||
|
@ -52,51 +51,38 @@ class KeystoneTest(testtools.TestCase):
|
||||||
self.cachedir = tempfile.mkdtemp()
|
self.cachedir = tempfile.mkdtemp()
|
||||||
cfg.CONF.set_override('cache_dir', self.cachedir, group='keystone')
|
cfg.CONF.set_override('cache_dir', self.cachedir, group='keystone')
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_discover_fail(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_discover_fail(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.side_effect = ks_exc.DiscoveryFailure()
|
|
||||||
ks = keystone.Keystone(
|
ks = keystone.Keystone(
|
||||||
'http://server.test:5000/v2.0', 'auser', 'apassword', 'aproject',
|
'http://192.0.2.1:5000/v2.0', 'auser', 'apassword', 'aproject',
|
||||||
test_heat.FakeKeystoneClient(self))
|
test_heat.FakeKeystoneClient(self),
|
||||||
self.assertEqual(ks.auth_url, 'http://server.test:5000/v3')
|
FakeKeystoneDiscoverError)
|
||||||
|
self.assertEqual(ks.auth_url, 'http://192.0.2.1:5000/v3')
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_discover_v3_unsupported(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_discover_v3_unsupported(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = None
|
|
||||||
ks = keystone.Keystone(
|
ks = keystone.Keystone(
|
||||||
'http://server.test:5000/v2.0', 'auser', 'apassword', 'aproject',
|
'http://192.0.2.1:5000/v2.0', 'auser', 'apassword', 'aproject',
|
||||||
test_heat.FakeKeystoneClient(self))
|
test_heat.FakeKeystoneClient(self),
|
||||||
self.assertEqual(ks.auth_url, 'http://server.test:5000/v2.0')
|
FakeKeystoneDiscoverNone)
|
||||||
mock___init__.assert_called_with(auth_url='http://server.test:5000/')
|
self.assertEqual(ks.auth_url, 'http://192.0.2.1:5000/v2.0')
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def test_cache_is_created(self):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def test_cache_is_created(self, mock_url_for, mock___init__):
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = 'http://server.test:5000/'
|
|
||||||
ks = keystone.Keystone(
|
ks = keystone.Keystone(
|
||||||
'http://server.test:5000/', 'auser', 'apassword', 'aproject',
|
'http://192.0.2.1:5000/', 'auser', 'apassword', 'aproject',
|
||||||
test_heat.FakeKeystoneClient(self))
|
test_heat.FakeKeystoneClient(self),
|
||||||
|
test_heat.FakeKeystoneDiscover)
|
||||||
self.assertIsNotNone(ks.cache)
|
self.assertIsNotNone(ks.cache)
|
||||||
|
|
||||||
@mock.patch.object(ks_discover.Discover, '__init__')
|
def _make_ks(self, client):
|
||||||
@mock.patch.object(ks_discover.Discover, 'url_for')
|
|
||||||
def _make_ks(self, client, mock_url_for, mock___init__):
|
|
||||||
class Configs(object):
|
class Configs(object):
|
||||||
auth_url = 'http://server.test:5000/'
|
auth_url = 'http://192.0.2.1:5000/'
|
||||||
user_id = 'auser'
|
user_id = 'auser'
|
||||||
password = 'apassword'
|
password = 'apassword'
|
||||||
project_id = 'aproject'
|
project_id = 'aproject'
|
||||||
|
|
||||||
mock___init__.return_value = None
|
|
||||||
mock_url_for.return_value = Configs.auth_url
|
|
||||||
return keystone.Keystone(
|
return keystone.Keystone(
|
||||||
'http://server.test:5000/', 'auser', 'apassword', 'aproject',
|
'http://192.0.2.1:5000/', 'auser', 'apassword', 'aproject',
|
||||||
client(self, Configs))
|
client(self, Configs),
|
||||||
|
FakeKeystoneDiscoverBase)
|
||||||
|
|
||||||
def test_cache_auth_ref(self):
|
def test_cache_auth_ref(self):
|
||||||
ks = self._make_ks(test_heat.FakeKeystoneClient)
|
ks = self._make_ks(test_heat.FakeKeystoneClient)
|
||||||
|
@ -113,13 +99,3 @@ class KeystoneTest(testtools.TestCase):
|
||||||
self.assertTrue(False, 'auth_ref should have failed.')
|
self.assertTrue(False, 'auth_ref should have failed.')
|
||||||
except ks_exc.AuthorizationFailure:
|
except ks_exc.AuthorizationFailure:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_service_catalog(self):
|
|
||||||
ks = self._make_ks(FakeKeystoneClient)
|
|
||||||
service_catalog = ks.service_catalog
|
|
||||||
ks2 = self._make_ks(FakeKeystoneClient)
|
|
||||||
service_catalog2 = ks2.service_catalog
|
|
||||||
self.assertEqual(service_catalog, service_catalog2)
|
|
||||||
ks2.invalidate_auth_ref()
|
|
||||||
service_catalog3 = ks.service_catalog
|
|
||||||
self.assertEqual(service_catalog, service_catalog3)
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ class TestRequestBase(testtools.TestCase):
|
||||||
super(TestRequestBase, self).setUp()
|
super(TestRequestBase, self).setUp()
|
||||||
self.log = self.useFixture(fixtures.FakeLogger())
|
self.log = self.useFixture(fixtures.FakeLogger())
|
||||||
collect.setup_conf()
|
collect.setup_conf()
|
||||||
cfg.CONF.request.metadata_url = 'http://127.0.0.1:8000/my_metadata'
|
cfg.CONF.request.metadata_url = 'http://192.0.2.1:8000/my_metadata'
|
||||||
|
|
||||||
|
|
||||||
class TestRequest(TestRequestBase):
|
class TestRequest(TestRequestBase):
|
||||||
|
|
|
@ -31,7 +31,7 @@ class FakeKeystoneClient(test_heat.FakeKeystoneClient):
|
||||||
def url_for(self, service_type, endpoint_type):
|
def url_for(self, service_type, endpoint_type):
|
||||||
self._test.assertEqual('messaging', service_type)
|
self._test.assertEqual('messaging', service_type)
|
||||||
self._test.assertEqual('publicURL', endpoint_type)
|
self._test.assertEqual('publicURL', endpoint_type)
|
||||||
return 'http://127.0.0.1:8888/'
|
return 'http://192.0.2.1:8888/'
|
||||||
|
|
||||||
|
|
||||||
class FakeZaqarClient(object):
|
class FakeZaqarClient(object):
|
||||||
|
@ -41,7 +41,7 @@ class FakeZaqarClient(object):
|
||||||
|
|
||||||
def Client(self, endpoint, conf, version):
|
def Client(self, endpoint, conf, version):
|
||||||
self._test.assertEqual(1.1, version)
|
self._test.assertEqual(1.1, version)
|
||||||
self._test.assertEqual('http://127.0.0.1:8888/', endpoint)
|
self._test.assertEqual('http://192.0.2.1:8888/', endpoint)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def queue(self, queue_id):
|
def queue(self, queue_id):
|
||||||
|
@ -64,7 +64,7 @@ class FakeZaqarClientSoftwareConfig(object):
|
||||||
|
|
||||||
def Client(self, endpoint, conf, version):
|
def Client(self, endpoint, conf, version):
|
||||||
self._test.assertEqual(1.1, version)
|
self._test.assertEqual(1.1, version)
|
||||||
self._test.assertEqual('http://127.0.0.1:8888/', endpoint)
|
self._test.assertEqual('http://192.0.2.1:8888/', endpoint)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def queue(self, queue_id):
|
def queue(self, queue_id):
|
||||||
|
@ -87,7 +87,7 @@ class TestZaqar(testtools.TestCase):
|
||||||
self.log = self.useFixture(fixtures.FakeLogger())
|
self.log = self.useFixture(fixtures.FakeLogger())
|
||||||
self.useFixture(fixtures.NestedTempfile())
|
self.useFixture(fixtures.NestedTempfile())
|
||||||
collect.setup_conf()
|
collect.setup_conf()
|
||||||
cfg.CONF.zaqar.auth_url = 'http://127.0.0.1:5000/v3'
|
cfg.CONF.zaqar.auth_url = 'http://192.0.2.1:5000/v3'
|
||||||
cfg.CONF.zaqar.user_id = '0123456789ABCDEF'
|
cfg.CONF.zaqar.user_id = '0123456789ABCDEF'
|
||||||
cfg.CONF.zaqar.password = 'FEDCBA9876543210'
|
cfg.CONF.zaqar.password = 'FEDCBA9876543210'
|
||||||
cfg.CONF.zaqar.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
cfg.CONF.zaqar.project_id = '9f6b09df-4d7f-4a33-8ec3-9924d8f46f10'
|
||||||
|
@ -100,7 +100,8 @@ class TestZaqar(testtools.TestCase):
|
||||||
mock_url_for.return_value = cfg.CONF.zaqar.auth_url
|
mock_url_for.return_value = cfg.CONF.zaqar.auth_url
|
||||||
zaqar_md = zaqar.Collector(
|
zaqar_md = zaqar.Collector(
|
||||||
keystoneclient=FakeKeystoneClient(self, cfg.CONF.zaqar),
|
keystoneclient=FakeKeystoneClient(self, cfg.CONF.zaqar),
|
||||||
zaqarclient=FakeZaqarClient(self)).collect()
|
zaqarclient=FakeZaqarClient(self),
|
||||||
|
discover_class=test_heat.FakeKeystoneDiscover).collect()
|
||||||
self.assertThat(zaqar_md, matchers.IsInstance(list))
|
self.assertThat(zaqar_md, matchers.IsInstance(list))
|
||||||
self.assertEqual('zaqar', zaqar_md[0][0])
|
self.assertEqual('zaqar', zaqar_md[0][0])
|
||||||
zaqar_md = zaqar_md[0][1]
|
zaqar_md = zaqar_md[0][1]
|
||||||
|
@ -116,7 +117,8 @@ class TestZaqar(testtools.TestCase):
|
||||||
mock_url_for.return_value = cfg.CONF.zaqar.auth_url
|
mock_url_for.return_value = cfg.CONF.zaqar.auth_url
|
||||||
zaqar_md = zaqar.Collector(
|
zaqar_md = zaqar.Collector(
|
||||||
keystoneclient=FakeKeystoneClient(self, cfg.CONF.zaqar),
|
keystoneclient=FakeKeystoneClient(self, cfg.CONF.zaqar),
|
||||||
zaqarclient=FakeZaqarClientSoftwareConfig(self)).collect()
|
zaqarclient=FakeZaqarClientSoftwareConfig(self),
|
||||||
|
discover_class=test_heat.FakeKeystoneDiscover).collect()
|
||||||
self.assertThat(zaqar_md, matchers.IsInstance(list))
|
self.assertThat(zaqar_md, matchers.IsInstance(list))
|
||||||
self.assertEqual('zaqar', zaqar_md[0][0])
|
self.assertEqual('zaqar', zaqar_md[0][0])
|
||||||
self.assertEqual(2, len(zaqar_md))
|
self.assertEqual(2, len(zaqar_md))
|
||||||
|
@ -135,7 +137,8 @@ class TestZaqar(testtools.TestCase):
|
||||||
zaqar_collect = zaqar.Collector(
|
zaqar_collect = zaqar.Collector(
|
||||||
keystoneclient=test_heat.FakeFailKeystoneClient(
|
keystoneclient=test_heat.FakeFailKeystoneClient(
|
||||||
self, cfg.CONF.zaqar),
|
self, cfg.CONF.zaqar),
|
||||||
zaqarclient=FakeZaqarClient(self))
|
zaqarclient=FakeZaqarClient(self),
|
||||||
|
discover_class=test_heat.FakeKeystoneDiscover)
|
||||||
self.assertRaises(exc.ZaqarMetadataNotAvailable, zaqar_collect.collect)
|
self.assertRaises(exc.ZaqarMetadataNotAvailable, zaqar_collect.collect)
|
||||||
self.assertIn('Forbidden', self.log.output)
|
self.assertIn('Forbidden', self.log.output)
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,11 @@ name = 'zaqar'
|
||||||
class Collector(object):
|
class Collector(object):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
keystoneclient=keystoneclient,
|
keystoneclient=keystoneclient,
|
||||||
zaqarclient=zaqarclient):
|
zaqarclient=zaqarclient,
|
||||||
|
discover_class=None):
|
||||||
self.keystoneclient = keystoneclient
|
self.keystoneclient = keystoneclient
|
||||||
self.zaqarclient = zaqarclient
|
self.zaqarclient = zaqarclient
|
||||||
|
self.discover_class = discover_class
|
||||||
|
|
||||||
def collect(self):
|
def collect(self):
|
||||||
if CONF.zaqar.auth_url is None:
|
if CONF.zaqar.auth_url is None:
|
||||||
|
@ -70,7 +72,8 @@ class Collector(object):
|
||||||
user_id=CONF.zaqar.user_id,
|
user_id=CONF.zaqar.user_id,
|
||||||
password=CONF.zaqar.password,
|
password=CONF.zaqar.password,
|
||||||
project_id=CONF.zaqar.project_id,
|
project_id=CONF.zaqar.project_id,
|
||||||
keystoneclient=self.keystoneclient).client
|
keystoneclient=self.keystoneclient,
|
||||||
|
discover_class=self.discover_class).client
|
||||||
endpoint = ks.service_catalog.url_for(
|
endpoint = ks.service_catalog.url_for(
|
||||||
service_type='messaging', endpoint_type='publicURL')
|
service_type='messaging', endpoint_type='publicURL')
|
||||||
logger.debug('Fetching metadata from %s' % endpoint)
|
logger.debug('Fetching metadata from %s' % endpoint)
|
||||||
|
|
Loading…
Reference in New Issue