test_start_service.py 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. """Browser-address hints for the service launcher."""
  2. from contextlib import redirect_stdout
  3. from io import StringIO
  4. import unittest
  5. from unittest.mock import patch
  6. from scripts.start_service import access_urls, print_access_urls
  7. class StartServiceAddressTests(unittest.TestCase):
  8. def test_wildcard_bind_becomes_loopback_and_lan_urls(self):
  9. with patch('scripts.start_service.socket.gethostname', return_value='server'), \
  10. patch('scripts.start_service.socket.gethostbyname_ex',
  11. return_value=('server', [], ['127.0.0.1', '169.254.2.3', '192.168.2.49'])):
  12. self.assertEqual(access_urls('0.0.0.0', 8000), [
  13. 'http://127.0.0.1:8000/', 'http://192.168.2.49:8000/'])
  14. def test_specific_bind_is_the_browser_url(self):
  15. self.assertEqual(access_urls('127.0.0.1', 8123), ['http://127.0.0.1:8123/'])
  16. def test_resolution_failure_still_prints_working_local_url(self):
  17. with patch('scripts.start_service.socket.gethostbyname_ex', side_effect=OSError):
  18. output = StringIO()
  19. with redirect_stdout(output):
  20. print_access_urls('0.0.0.0', 8000)
  21. self.assertIn('本机访问: http://127.0.0.1:8000/', output.getvalue())
  22. self.assertIn('0.0.0.0 仅用于服务监听', output.getvalue())
  23. if __name__ == '__main__':
  24. unittest.main()