diff --git a/gns3server/modules/port_manager.py b/gns3server/modules/port_manager.py index 4ea2cac5..26b2c990 100644 --- a/gns3server/modules/port_manager.py +++ b/gns3server/modules/port_manager.py @@ -18,6 +18,7 @@ import socket import ipaddress import asyncio +from aiohttp.web import HTTPConflict class PortManager: @@ -146,10 +147,10 @@ class PortManager: else: continue - raise Exception("Could not find a free port between {} and {} on host {}, last exception: {}".format(start_port, - end_port, - host, - last_exception)) + raise HTTPConflict(reason="Could not find a free port between {} and {} on host {}, last exception: {}".format(start_port, + end_port, + host, + last_exception)) def get_free_console_port(self): """ @@ -173,7 +174,7 @@ class PortManager: """ if port in self._used_tcp_ports: - raise Exception("TCP port already {} in use on host".format(port, self._host)) + raise HTTPConflict(reason="TCP port already {} in use on host".format(port, self._console_host)) self._used_tcp_ports.add(port) def release_console_port(self, port): diff --git a/tests/modules/test_port_manager.py b/tests/modules/test_port_manager.py new file mode 100644 index 00000000..e5a86ea8 --- /dev/null +++ b/tests/modules/test_port_manager.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2015 GNS3 Technologies Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import aiohttp +import pytest +from gns3server.modules.port_manager import PortManager + + +def test_reserve_console_port(): + pm = PortManager.instance() + pm.reserve_console_port(4242) + with pytest.raises(aiohttp.web.HTTPConflict): + pm.reserve_console_port(4242)