Refactor config management in tests

This commit is contained in:
Julien Duponchelle 2015-03-16 15:03:41 +01:00
parent e54649accd
commit bcb1ce02ab
6 changed files with 42 additions and 36 deletions

View File

@ -151,9 +151,21 @@ class Config(object):
if not self._config.has_section(section): if not self._config.has_section(section):
self._config.add_section(section) self._config.add_section(section)
for key in content: for key in content:
if isinstance(content[key], bool):
content[key] = str(content[key]).lower()
self._config.set(section, key, content[key]) self._config.set(section, key, content[key])
self._override_config[section] = content self._override_config[section] = content
def set(self, section, key, value):
"""
Set a config value.
It's not dumped on the disk.
If the section doesn't exists the section is created
"""
self.set_section_config(section, {key: value})
@staticmethod @staticmethod
def instance(files=None): def instance(files=None):
""" """

View File

@ -135,18 +135,11 @@ def run_around_tests(monkeypatch):
Config.reset() Config.reset()
config = Config.instance() config = Config.instance()
server_section = config.get_section_config("Server") config.set("Server", "project_directory", tmppath)
server_section["project_directory"] = tmppath
config.set_section_config("Server", server_section)
# Prevent exectuions of the VM if we forgot to mock something # Prevent exectuions of the VM if we forgot to mock something
vbox_section = config.get_section_config("VirtualBox") config.set("VirtualBox", "vboxmanage_path", tmppath)
vbox_section["vboxmanage_path"] = tmppath config.set("VPCS", "vpcs_path", tmppath)
config.set_section_config("VirtualBox", vbox_section)
vbox_section = config.get_section_config("VPCS")
vbox_section["vpcs_path"] = tmppath
config.set_section_config("VPCS", vbox_section)
monkeypatch.setattr("gns3server.modules.project.Project._get_default_project_directory", lambda *args: tmppath) monkeypatch.setattr("gns3server.modules.project.Project._get_default_project_directory", lambda *args: tmppath)

View File

@ -15,17 +15,16 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from configparser import ConfigParser from unittest.mock import MagicMock, patch
from unittest.mock import patch, MagicMock from gns3server.config import Config
def test_reload_accepted(server): def test_reload_accepted(server):
gns_config = MagicMock() gns_config = MagicMock()
config = ConfigParser() config = Config.instance()
config.add_section("Server")
config.set("Server", "local", "true") config.set("Server", "local", "true")
gns_config.get_section_config.return_value = config["Server"] gns_config.get_section_config.return_value = config.get_section_config("Server")
with patch("gns3server.config.Config.instance", return_value=gns_config): with patch("gns3server.config.Config.instance", return_value=gns_config):
response = server.post('/config/reload', example=True) response = server.post('/config/reload', example=True)
@ -36,13 +35,9 @@ def test_reload_accepted(server):
def test_reload_forbidden(server): def test_reload_forbidden(server):
gns_config = MagicMock() config = Config.instance()
config = ConfigParser()
config.add_section("Server")
config.set("Server", "local", "false") config.set("Server", "local", "false")
gns_config.get_section_config.return_value = config["Server"]
with patch("gns3server.config.Config.instance", return_value=gns_config): response = server.post('/config/reload')
response = server.post('/config/reload')
assert response.status == 403 assert response.status == 403

View File

@ -20,23 +20,18 @@ This test suite check /version endpoint
It's also used for unittest the HTTP implementation. It's also used for unittest the HTTP implementation.
""" """
from unittest.mock import patch, MagicMock from gns3server.config import Config
from configparser import ConfigParser
from gns3server.version import __version__ from gns3server.version import __version__
def test_version_output(server): def test_version_output(server):
gns_config = MagicMock() config = Config.instance()
config = ConfigParser()
config.add_section("Server")
config.set("Server", "local", "true") config.set("Server", "local", "true")
gns_config.get_section_config.return_value = config["Server"]
with patch("gns3server.config.Config.instance", return_value=gns_config): response = server.get('/version', example=True)
response = server.get('/version', example=True) assert response.status == 200
assert response.status == 200 assert response.json == {'local': True, 'version': __version__}
assert response.json == {'local': True, 'version': __version__}
def test_version_input(server): def test_version_input(server):

View File

@ -47,10 +47,8 @@ def test_router(project, manager):
def test_router_invalid_dynamips_path(project, manager, loop): def test_router_invalid_dynamips_path(project, manager, loop):
config = Config.instance() config = Config.instance()
dynamips_section = config.get_section_config("Dynamips") config.set("Dynamips", "dynamips_path", "/bin/test_fake")
dynamips_section["dynamips_path"] = "/bin/test_fake" config.set("Dynamips", "allocate_aux_console_ports", False)
dynamips_section["allocate_aux_console_ports"] = "false"
config.set_section_config("Dynamips", dynamips_section)
with pytest.raises(DynamipsError): with pytest.raises(DynamipsError):
router = Router("test", "00010203-0405-0607-0809-0a0b0c0d0e0e", project, manager) router = Router("test", "00010203-0405-0607-0809-0a0b0c0d0e0e", project, manager)

View File

@ -67,13 +67,26 @@ def test_get_section_config(tmpdir):
def test_set_section_config(tmpdir): def test_set_section_config(tmpdir):
config = load_config(tmpdir, {
"Server": {
"host": "127.0.0.1",
"local": "false"
}
})
assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1", "local": "false"}
config.set_section_config("Server", {"host": "192.168.1.1", "local": True})
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1", "local": "true"}
def test_set(tmpdir):
config = load_config(tmpdir, { config = load_config(tmpdir, {
"Server": { "Server": {
"host": "127.0.0.1" "host": "127.0.0.1"
} }
}) })
assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1"} assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1"}
config.set_section_config("Server", {"host": "192.168.1.1"}) config.set("Server", "host", "192.168.1.1")
assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1"} assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1"}