| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import json
- import pytest
- from pytest import TempPathFactory
- from openhands.events import EventSource, EventStream
- from openhands.events.action import (
- NullAction,
- )
- from openhands.events.observation import NullObservation
- from openhands.storage import get_file_store
- @pytest.fixture
- def temp_dir(tmp_path_factory: TempPathFactory) -> str:
- return str(tmp_path_factory.mktemp('test_event_stream'))
- def collect_events(stream):
- return [event for event in stream.get_events()]
- def test_basic_flow(temp_dir: str):
- file_store = get_file_store('local', temp_dir)
- event_stream = EventStream('abc', file_store)
- event_stream.add_event(NullAction(), EventSource.AGENT)
- assert len(collect_events(event_stream)) == 1
- def test_stream_storage(temp_dir: str):
- file_store = get_file_store('local', temp_dir)
- event_stream = EventStream('abc', file_store)
- event_stream.add_event(NullObservation(''), EventSource.AGENT)
- assert len(collect_events(event_stream)) == 1
- content = event_stream.file_store.read('sessions/abc/events/0.json')
- assert content is not None
- data = json.loads(content)
- assert 'timestamp' in data
- del data['timestamp']
- assert data == {
- 'id': 0,
- 'source': 'agent',
- 'observation': 'null',
- 'content': '',
- 'extras': {},
- 'message': 'No observation',
- }
- def test_rehydration(temp_dir: str):
- file_store = get_file_store('local', temp_dir)
- event_stream = EventStream('abc', file_store)
- event_stream.add_event(NullObservation('obs1'), EventSource.AGENT)
- event_stream.add_event(NullObservation('obs2'), EventSource.AGENT)
- assert len(collect_events(event_stream)) == 2
- stream2 = EventStream('es2', file_store)
- assert len(collect_events(stream2)) == 0
- stream1rehydrated = EventStream('abc', file_store)
- events = collect_events(stream1rehydrated)
- assert len(events) == 2
- assert events[0].content == 'obs1'
- assert events[1].content == 'obs2'
|