Add metadata server fixture

Create a dedicated metadata server fixture that can be used in tests
that want to bring up a metadata server during functional testing.

This also separates out metadata related variables we were setting up
in the OSAPIFixture for no good reason.

Change-Id: Id4b953634aa74f7736e494eba916fe234cc57fd4
This commit is contained in:
Sean Dague
2016-07-25 15:12:58 -04:00
parent 6cf0e9e213
commit 9326c1ed40

View File

@@ -435,16 +435,16 @@ class OSAPIFixture(fixtures.Fixture):
# host, and dynamically allocate ports
conf_overrides = {
'osapi_compute_listen': '127.0.0.1',
'metadata_listen': '127.0.0.1',
'osapi_compute_listen_port': 0,
'metadata_listen_port': 0,
'verbose': True,
'debug': True
'debug': True,
}
self.useFixture(ConfPatcher(**conf_overrides))
self.osapi = service.WSGIService("osapi_compute")
self.osapi.start()
self.addCleanup(self.osapi.stop)
self.auth_url = 'http://%(host)s:%(port)s/%(api_version)s' % ({
'host': self.osapi.host, 'port': self.osapi.port,
'api_version': self.api_version})
@@ -454,6 +454,43 @@ class OSAPIFixture(fixtures.Fixture):
'admin', 'admin', self.auth_url, self.project_id)
class OSMetadataServer(fixtures.Fixture):
"""Create an OS Metadata API server as a fixture.
This spawns an OS Metadata API server as a fixture in a new
greenthread in the current test.
TODO(sdague): ideally for testing we'd have something like the
test client which acts like requests, but connects any of the
interactions needed.
"""
def setUp(self):
super(OSMetadataServer, self).setUp()
# in order to run these in tests we need to bind only to local
# host, and dynamically allocate ports
conf_overrides = {
'metadata_listen': '127.0.0.1',
'metadata_listen_port': 0,
'verbose': True,
'debug': True
}
self.useFixture(ConfPatcher(**conf_overrides))
# NOTE(mikal): we don't have root to manipulate iptables, so just
# zero that bit out.
self.useFixture(fixtures.MonkeyPatch(
'nova.network.linux_net.IptablesManager._apply',
lambda _: None))
self.metadata = service.WSGIService("metadata")
self.metadata.start()
self.addCleanup(self.metadata.stop)
self.md_url = "http://%s:%s/" % (
conf_overrides['metadata_listen'],
self.metadata.port)
class PoisonFunctions(fixtures.Fixture):
"""Poison functions so they explode if we touch them.