test_event_stream.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import json
  2. import pytest
  3. from opendevin.events import EventSource, EventStream
  4. from opendevin.events.action import NullAction
  5. from opendevin.events.observation import NullObservation
  6. @pytest.fixture
  7. def event_stream():
  8. event_stream = EventStream('abc')
  9. yield event_stream
  10. # clear after each test
  11. event_stream.clear()
  12. def collect_events(stream):
  13. return [event for event in stream.get_events()]
  14. def test_basic_flow(event_stream: EventStream):
  15. event_stream.add_event(NullAction(), EventSource.AGENT)
  16. assert len(collect_events(event_stream)) == 1
  17. def test_stream_storage(event_stream: EventStream):
  18. event_stream.add_event(NullObservation(''), EventSource.AGENT)
  19. assert len(collect_events(event_stream)) == 1
  20. content = event_stream._file_store.read('sessions/abc/events/0.json')
  21. assert content is not None
  22. data = json.loads(content)
  23. assert 'timestamp' in data
  24. del data['timestamp']
  25. assert data == {
  26. 'id': 0,
  27. 'source': 'agent',
  28. 'observation': 'null',
  29. 'content': '',
  30. 'extras': {},
  31. 'message': 'No observation',
  32. }
  33. def test_rehydration(event_stream: EventStream):
  34. event_stream.add_event(NullObservation('obs1'), EventSource.AGENT)
  35. event_stream.add_event(NullObservation('obs2'), EventSource.AGENT)
  36. assert len(collect_events(event_stream)) == 2
  37. stream2 = EventStream('es2')
  38. assert len(collect_events(stream2)) == 0
  39. stream1rehydrated = EventStream('abc')
  40. events = collect_events(stream1rehydrated)
  41. assert len(events) == 2
  42. assert events[0].content == 'obs1'
  43. assert events[1].content == 'obs2'