Move ConfigDict and ConfigFileFixture to neutron.tests.common
This change moves ConfigDict[1] and ConfigFileFixture[1] in order to use them in fullstack and functional tests (in a follow-up change). [1] neutron.tests.fullstack.resources.config Related-bug: #1497027 Change-Id: I16157b0b739c9e620f23c984187b492bf5af2e60
This commit is contained in:
parent
aa1c040a20
commit
739dc16fe7
|
@ -0,0 +1,69 @@
|
||||||
|
# Copyright 2015 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
import fixtures
|
||||||
|
import six
|
||||||
|
|
||||||
|
from neutron.tests import base
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigDict(base.AttributeDict):
|
||||||
|
def update(self, other):
|
||||||
|
self.convert_to_attr_dict(other)
|
||||||
|
super(ConfigDict, self).update(other)
|
||||||
|
|
||||||
|
def convert_to_attr_dict(self, other):
|
||||||
|
"""Convert nested dicts to AttributeDict.
|
||||||
|
|
||||||
|
:param other: dictionary to be directly modified.
|
||||||
|
"""
|
||||||
|
for key, value in six.iteritems(other):
|
||||||
|
if isinstance(value, dict):
|
||||||
|
if not isinstance(value, base.AttributeDict):
|
||||||
|
other[key] = base.AttributeDict(value)
|
||||||
|
self.convert_to_attr_dict(value)
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigFileFixture(fixtures.Fixture):
|
||||||
|
"""A fixture that knows how to translate configurations to files.
|
||||||
|
|
||||||
|
:param base_filename: the filename to use on disk.
|
||||||
|
:param config: a ConfigDict instance.
|
||||||
|
:param temp_dir: an existing temporary directory to use for storage.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, base_filename, config, temp_dir):
|
||||||
|
super(ConfigFileFixture, self).__init__()
|
||||||
|
self.base_filename = base_filename
|
||||||
|
self.config = config
|
||||||
|
self.temp_dir = temp_dir
|
||||||
|
|
||||||
|
def _setUp(self):
|
||||||
|
config_parser = self.dict_to_config_parser(self.config)
|
||||||
|
# Need to randomly generate a unique folder to put the file in
|
||||||
|
self.filename = os.path.join(self.temp_dir, self.base_filename)
|
||||||
|
with open(self.filename, 'w') as f:
|
||||||
|
config_parser.write(f)
|
||||||
|
f.flush()
|
||||||
|
|
||||||
|
def dict_to_config_parser(self, config_dict):
|
||||||
|
config_parser = six.moves.configparser.SafeConfigParser()
|
||||||
|
for section, section_dict in six.iteritems(config_dict):
|
||||||
|
if section != 'DEFAULT':
|
||||||
|
config_parser.add_section(section)
|
||||||
|
for option, value in six.iteritems(section_dict):
|
||||||
|
config_parser.set(section, option, value)
|
||||||
|
return config_parser
|
|
@ -12,67 +12,17 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import os.path
|
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import six
|
|
||||||
|
|
||||||
from neutron.common import constants
|
from neutron.common import constants
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
|
from neutron.tests.common import config_fixtures
|
||||||
from neutron.tests.common import helpers as c_helpers
|
from neutron.tests.common import helpers as c_helpers
|
||||||
from neutron.tests.common import net_helpers
|
from neutron.tests.common import net_helpers
|
||||||
|
|
||||||
|
|
||||||
class ConfigDict(base.AttributeDict):
|
|
||||||
def update(self, other):
|
|
||||||
self.convert_to_attr_dict(other)
|
|
||||||
super(ConfigDict, self).update(other)
|
|
||||||
|
|
||||||
def convert_to_attr_dict(self, other):
|
|
||||||
"""Convert nested dicts to AttributeDict.
|
|
||||||
|
|
||||||
:param other: dictionary to be directly modified.
|
|
||||||
"""
|
|
||||||
for key, value in six.iteritems(other):
|
|
||||||
if isinstance(value, dict):
|
|
||||||
if not isinstance(value, base.AttributeDict):
|
|
||||||
other[key] = base.AttributeDict(value)
|
|
||||||
self.convert_to_attr_dict(value)
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigFileFixture(fixtures.Fixture):
|
|
||||||
"""A fixture that knows how to translate configurations to files.
|
|
||||||
|
|
||||||
:param base_filename: the filename to use on disk.
|
|
||||||
:param config: a ConfigDict instance.
|
|
||||||
:param temp_dir: an existing temporary directory to use for storage.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, base_filename, config, temp_dir):
|
|
||||||
super(ConfigFileFixture, self).__init__()
|
|
||||||
self.base_filename = base_filename
|
|
||||||
self.config = config
|
|
||||||
self.temp_dir = temp_dir
|
|
||||||
|
|
||||||
def _setUp(self):
|
|
||||||
config_parser = self.dict_to_config_parser(self.config)
|
|
||||||
# Need to randomly generate a unique folder to put the file in
|
|
||||||
self.filename = os.path.join(self.temp_dir, self.base_filename)
|
|
||||||
with open(self.filename, 'w') as f:
|
|
||||||
config_parser.write(f)
|
|
||||||
f.flush()
|
|
||||||
|
|
||||||
def dict_to_config_parser(self, config_dict):
|
|
||||||
config_parser = six.moves.configparser.SafeConfigParser()
|
|
||||||
for section, section_dict in six.iteritems(config_dict):
|
|
||||||
if section != 'DEFAULT':
|
|
||||||
config_parser.add_section(section)
|
|
||||||
for option, value in six.iteritems(section_dict):
|
|
||||||
config_parser.set(section, option, value)
|
|
||||||
return config_parser
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigFixture(fixtures.Fixture):
|
class ConfigFixture(fixtures.Fixture):
|
||||||
"""A fixture that holds an actual Neutron configuration.
|
"""A fixture that holds an actual Neutron configuration.
|
||||||
|
|
||||||
|
@ -83,14 +33,14 @@ class ConfigFixture(fixtures.Fixture):
|
||||||
"""
|
"""
|
||||||
def __init__(self, env_desc, host_desc, temp_dir, base_filename):
|
def __init__(self, env_desc, host_desc, temp_dir, base_filename):
|
||||||
super(ConfigFixture, self).__init__()
|
super(ConfigFixture, self).__init__()
|
||||||
self.config = ConfigDict()
|
self.config = config_fixtures.ConfigDict()
|
||||||
self.env_desc = env_desc
|
self.env_desc = env_desc
|
||||||
self.host_desc = host_desc
|
self.host_desc = host_desc
|
||||||
self.temp_dir = temp_dir
|
self.temp_dir = temp_dir
|
||||||
self.base_filename = base_filename
|
self.base_filename = base_filename
|
||||||
|
|
||||||
def _setUp(self):
|
def _setUp(self):
|
||||||
cfg_fixture = ConfigFileFixture(
|
cfg_fixture = config_fixtures.ConfigFileFixture(
|
||||||
self.base_filename, self.config, self.temp_dir)
|
self.base_filename, self.config, self.temp_dir)
|
||||||
self.useFixture(cfg_fixture)
|
self.useFixture(cfg_fixture)
|
||||||
self.filename = cfg_fixture.filename
|
self.filename = cfg_fixture.filename
|
||||||
|
|
Loading…
Reference in New Issue