mirror of
https://github.com/browser-use/browser-use.git
synced 2026-09-14 19:59:47 +08:00
69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
"""Tests for tunnel module - cloudflared binary management."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from browser_use.skill_cli.tunnel import TunnelManager, get_tunnel_manager
|
|
|
|
|
|
@pytest.fixture
|
|
def tunnel_manager():
|
|
"""Create a fresh TunnelManager instance for testing."""
|
|
return TunnelManager()
|
|
|
|
|
|
def test_tunnel_manager_system_cloudflared(tunnel_manager):
|
|
"""Test that system cloudflared is found."""
|
|
with patch('shutil.which', return_value='/usr/local/bin/cloudflared'):
|
|
binary_path = tunnel_manager.get_binary_path()
|
|
assert binary_path == '/usr/local/bin/cloudflared'
|
|
|
|
|
|
def test_tunnel_manager_caches_result(tunnel_manager):
|
|
"""Test that binary path is cached after first call."""
|
|
with patch('shutil.which', return_value='/usr/local/bin/cloudflared'):
|
|
path1 = tunnel_manager.get_binary_path()
|
|
# Reset shutil.which to ensure it's not called again
|
|
with patch('shutil.which', side_effect=Exception('Should be cached')):
|
|
path2 = tunnel_manager.get_binary_path()
|
|
assert path1 == path2
|
|
|
|
|
|
def test_tunnel_manager_not_installed(tunnel_manager):
|
|
"""Test that RuntimeError is raised when cloudflared not found."""
|
|
with patch('shutil.which', return_value=None):
|
|
with pytest.raises(RuntimeError) as exc_info:
|
|
tunnel_manager.get_binary_path()
|
|
assert 'cloudflared not installed' in str(exc_info.value)
|
|
|
|
|
|
def test_tunnel_manager_status_installed(tunnel_manager):
|
|
"""Test get_status returns correct info when cloudflared installed."""
|
|
with patch('shutil.which', return_value='/usr/local/bin/cloudflared'):
|
|
status = tunnel_manager.get_status()
|
|
assert status['available'] is True
|
|
assert status['source'] == 'system'
|
|
assert status['path'] == '/usr/local/bin/cloudflared'
|
|
|
|
|
|
def test_tunnel_manager_status_not_installed(tunnel_manager):
|
|
"""Test get_status when cloudflared not installed."""
|
|
with patch('shutil.which', return_value=None):
|
|
status = tunnel_manager.get_status()
|
|
assert status['available'] is False
|
|
assert status['source'] is None
|
|
assert 'not installed' in status['note']
|
|
|
|
|
|
def test_get_tunnel_manager_singleton():
|
|
"""Test that get_tunnel_manager returns a singleton."""
|
|
# Reset the global singleton
|
|
import browser_use.skill_cli.tunnel as tunnel_module
|
|
|
|
tunnel_module._tunnel_manager = None
|
|
|
|
mgr1 = get_tunnel_manager()
|
|
mgr2 = get_tunnel_manager()
|
|
assert mgr1 is mgr2
|