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