Files
browser-use__browser-use/tests/ci/test_tunnel.py

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