test_event_stream.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. def collect_events(stream):
  7. return [event for event in stream.get_events()]
  8. @pytest.mark.asyncio
  9. async def test_basic_flow():
  10. stream = EventStream('abc')
  11. await stream.add_event(NullAction(), EventSource.AGENT)
  12. assert len(collect_events(stream)) == 1
  13. @pytest.mark.asyncio
  14. async def test_stream_storage():
  15. stream = EventStream('def')
  16. await stream.add_event(NullObservation(''), EventSource.AGENT)
  17. assert len(collect_events(stream)) == 1
  18. content = stream._file_store.read('sessions/def/events/0.json')
  19. assert content is not None
  20. data = json.loads(content)
  21. assert 'timestamp' in data
  22. del data['timestamp']
  23. assert data == {
  24. 'id': 0,
  25. 'source': 'agent',
  26. 'observation': 'null',
  27. 'content': '',
  28. 'extras': {},
  29. 'message': 'No observation',
  30. }
  31. @pytest.mark.asyncio
  32. async def test_rehydration():
  33. stream1 = EventStream('es1')
  34. await stream1.add_event(NullObservation('obs1'), EventSource.AGENT)
  35. await stream1.add_event(NullObservation('obs2'), EventSource.AGENT)
  36. assert len(collect_events(stream1)) == 2
  37. stream2 = EventStream('es2')
  38. assert len(collect_events(stream2)) == 0
  39. stream1rehydrated = EventStream('es1')
  40. events = collect_events(stream1rehydrated)
  41. assert len(events) == 2
  42. assert events[0].content == 'obs1'
  43. assert events[1].content == 'obs2'