self._url_prefix = prepare_url_prefix(self.get_module_option( # type: ignore
'url_prefix', default=''))
+ bind_addr = server_addr
if server_addr in ['::', '0.0.0.0']:
server_addr = self.get_mgr_ip() # type: ignore
base_url = build_url(
port=server_port,
)
uri = f'{base_url}{self.url_prefix}/'
- return uri, (server_addr, server_port), ssl_info, config
+ return uri, (bind_addr, server_port), ssl_info, config
def await_configuration(self):
"""
import errno
import unittest
+from unittest.mock import MagicMock
from mgr_module import ERROR_MSG_EMPTY_INPUT_FILE
from .. import settings
from ..controllers.settings import Settings as SettingsController
+from ..module import CherryPyConfig
from ..settings import Settings, handle_option_command
from ..tests import ControllerTestCase, KVStoreMockMixin
self.assertEqual(str(ctx.exception),
"type object 'Options' has no attribute 'NON_EXISTENT_OPTION'")
+ def _setup_cherrypy_config(self, server_addr, server_port):
+ obj = CherryPyConfig()
+ config_map = {
+ 'server_addr': server_addr,
+ 'ssl': False,
+ 'server_port': server_port
+ }
+ obj.get_localized_module_option = MagicMock(
+ side_effect=lambda key, default=None: config_map.get(key, default))
+ obj.get_mgr_ip = MagicMock(return_value='192.168.1.10')
+ obj.get_module_option = MagicMock(return_value='')
+ obj.get_mgr_id = MagicMock(return_value='test')
+ obj.module_name = 'dashboard'
+ obj.log = MagicMock()
+ obj.update_cherrypy_config = MagicMock()
+ return obj
+
+ def test_wildcard_bind_addr_preserved(self):
+ obj = self._setup_cherrypy_config('::', 8080)
+ _, bind_addr, _, _ = obj._configure() # pylint: disable=protected-access
+ self.assertEqual(bind_addr, ('::', 8080))
+
+ def test_wildcard_bind_addr_preserved_ipv4(self):
+ obj = self._setup_cherrypy_config('0.0.0.0', 8443)
+ _, bind_addr, _, _ = obj._configure() # pylint: disable=protected-access
+ self.assertEqual(bind_addr, ('0.0.0.0', 8443))
+
class SettingsControllerTest(ControllerTestCase, KVStoreMockMixin):
@classmethod