62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
from unittest.mock import Mock, patch
|
|
|
|
|
|
class TestBrowserRuntimeCockpit:
|
|
def setup_method(self):
|
|
import tools.browser_tool as bt
|
|
self.bt = bt
|
|
self.orig_active = bt._active_sessions.copy()
|
|
self.orig_last = bt._session_last_activity.copy()
|
|
|
|
def teardown_method(self):
|
|
self.bt._active_sessions.clear()
|
|
self.bt._active_sessions.update(self.orig_active)
|
|
self.bt._session_last_activity.clear()
|
|
self.bt._session_last_activity.update(self.orig_last)
|
|
|
|
def test_runtime_status_reports_mode_and_sessions(self):
|
|
import tools.browser_tool as bt
|
|
|
|
bt._active_sessions['task-a'] = {
|
|
'session_name': 'sess-a',
|
|
'bb_session_id': 'bb_123',
|
|
'cdp_url': 'ws://browser/devtools/browser/abc',
|
|
}
|
|
bt._session_last_activity['task-a'] = 111.0
|
|
|
|
provider = Mock()
|
|
provider.provider_name.return_value = 'browserbase'
|
|
|
|
with patch('tools.browser_tool._get_cdp_override', return_value='ws://browser/devtools/browser/override'), \
|
|
patch('tools.browser_tool._get_cloud_provider', return_value=provider), \
|
|
patch('tools.browser_tool.check_browser_requirements', return_value=True), \
|
|
patch('tools.browser_tool._find_agent_browser', return_value='/usr/local/bin/agent-browser'):
|
|
status = bt.browser_runtime_status()
|
|
|
|
assert status['mode'] == 'cdp'
|
|
assert status['available'] is True
|
|
assert status['cloud_provider'] == 'browserbase'
|
|
assert status['session_count'] == 1
|
|
assert status['active_sessions'][0]['task_id'] == 'task-a'
|
|
assert status['self_healing']['orphan_reaper'] is True
|
|
|
|
def test_runtime_heal_cleans_sessions(self):
|
|
import tools.browser_tool as bt
|
|
|
|
bt._active_sessions['task-a'] = {'session_name': 'sess-a'}
|
|
bt._active_sessions['task-b'] = {'session_name': 'sess-b'}
|
|
|
|
with patch('tools.browser_tool.cleanup_all_browsers') as mock_cleanup, \
|
|
patch('tools.browser_tool._reap_orphaned_browser_sessions') as mock_reap, \
|
|
patch('tools.browser_tool.browser_runtime_status', side_effect=[
|
|
{'session_count': 2, 'mode': 'local', 'available': True},
|
|
{'session_count': 0, 'mode': 'local', 'available': True},
|
|
]):
|
|
result = bt.browser_runtime_heal()
|
|
|
|
mock_cleanup.assert_called_once_with()
|
|
mock_reap.assert_called_once_with()
|
|
assert result['success'] is True
|
|
assert result['before']['session_count'] == 2
|
|
assert result['after']['session_count'] == 0
|