| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- """Browsing-related tests for the EventStreamRuntime, which connects to the ActionExecutor running in the sandbox."""
- from conftest import _close_test_runtime, _load_runtime
- from openhands.core.logger import openhands_logger as logger
- from openhands.events.action import (
- BrowseURLAction,
- CmdRunAction,
- )
- from openhands.events.observation import (
- BrowserOutputObservation,
- CmdOutputObservation,
- )
- # ============================================================================================================================
- # Browsing tests, without evaluation (poetry install --without evaluation)
- # For eval environments, tests need to run with poetry install
- # ============================================================================================================================
- PY3_FOR_TESTING = '/openhands/micromamba/bin/micromamba run -n openhands python3'
- def test_simple_browse(temp_dir, runtime_cls, run_as_openhands):
- runtime = _load_runtime(temp_dir, runtime_cls, run_as_openhands)
- # Test browse
- action_cmd = CmdRunAction(
- command=f'{PY3_FOR_TESTING} -m http.server 8000 > server.log 2>&1 &'
- )
- logger.info(action_cmd, extra={'msg_type': 'ACTION'})
- obs = runtime.run_action(action_cmd)
- logger.info(obs, extra={'msg_type': 'OBSERVATION'})
- assert isinstance(obs, CmdOutputObservation)
- assert obs.exit_code == 0
- assert '[1]' in obs.content
- action_cmd = CmdRunAction(command='sleep 3 && cat server.log')
- logger.info(action_cmd, extra={'msg_type': 'ACTION'})
- obs = runtime.run_action(action_cmd)
- logger.info(obs, extra={'msg_type': 'OBSERVATION'})
- assert obs.exit_code == 0
- action_browse = BrowseURLAction(url='http://localhost:8000')
- logger.info(action_browse, extra={'msg_type': 'ACTION'})
- obs = runtime.run_action(action_browse)
- logger.info(obs, extra={'msg_type': 'OBSERVATION'})
- assert isinstance(obs, BrowserOutputObservation)
- assert 'http://localhost:8000' in obs.url
- assert not obs.error
- assert obs.open_pages_urls == ['http://localhost:8000/']
- assert obs.active_page_index == 0
- assert obs.last_browser_action == 'goto("http://localhost:8000")'
- assert obs.last_browser_action_error == ''
- assert 'Directory listing for /' in obs.content
- assert 'server.log' in obs.content
- # clean up
- action = CmdRunAction(command='rm -rf server.log')
- logger.info(action, extra={'msg_type': 'ACTION'})
- obs = runtime.run_action(action)
- logger.info(obs, extra={'msg_type': 'OBSERVATION'})
- assert obs.exit_code == 0
- _close_test_runtime(runtime)
|