"""Browser-address hints for the service launcher.""" from contextlib import redirect_stdout from io import StringIO import unittest from unittest.mock import patch from scripts.start_service import access_urls, print_access_urls class StartServiceAddressTests(unittest.TestCase): def test_wildcard_bind_becomes_loopback_and_lan_urls(self): with patch('scripts.start_service.socket.gethostname', return_value='server'), \ patch('scripts.start_service.socket.gethostbyname_ex', return_value=('server', [], ['127.0.0.1', '169.254.2.3', '192.168.2.49'])): self.assertEqual(access_urls('0.0.0.0', 8000), [ 'http://127.0.0.1:8000/', 'http://192.168.2.49:8000/']) def test_specific_bind_is_the_browser_url(self): self.assertEqual(access_urls('127.0.0.1', 8123), ['http://127.0.0.1:8123/']) def test_resolution_failure_still_prints_working_local_url(self): with patch('scripts.start_service.socket.gethostbyname_ex', side_effect=OSError): output = StringIO() with redirect_stdout(output): print_access_urls('0.0.0.0', 8000) self.assertIn('本机访问: http://127.0.0.1:8000/', output.getvalue()) self.assertIn('0.0.0.0 仅用于服务监听', output.getvalue()) if __name__ == '__main__': unittest.main()