test_storage.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import os
  2. import shutil
  3. import pytest
  4. from opendevin.storage.local import LocalFileStore
  5. from opendevin.storage.memory import InMemoryFileStore
  6. @pytest.fixture
  7. def setup_env():
  8. os.makedirs('./_test_files_tmp', exist_ok=True)
  9. yield
  10. shutil.rmtree('./_test_files_tmp')
  11. def test_basic_fileops(setup_env):
  12. filename = 'test.txt'
  13. for store in [LocalFileStore('./_test_files_tmp'), InMemoryFileStore()]:
  14. store.write(filename, 'Hello, world!')
  15. assert store.read(filename) == 'Hello, world!'
  16. assert store.list('') == [filename]
  17. store.delete(filename)
  18. with pytest.raises(FileNotFoundError):
  19. store.read(filename)
  20. def test_complex_path_fileops(setup_env):
  21. filenames = ['foo.bar.baz', './foo/bar/baz', 'foo/bar/baz', '/foo/bar/baz']
  22. for store in [LocalFileStore('./_test_files_tmp'), InMemoryFileStore()]:
  23. for filename in filenames:
  24. store.write(filename, 'Hello, world!')
  25. assert store.read(filename) == 'Hello, world!'
  26. store.delete(filename)
  27. with pytest.raises(FileNotFoundError):
  28. store.read(filename)
  29. def test_list(setup_env):
  30. for store in [LocalFileStore('./_test_files_tmp'), InMemoryFileStore()]:
  31. store.write('foo.txt', 'Hello, world!')
  32. store.write('bar.txt', 'Hello, world!')
  33. store.write('baz.txt', 'Hello, world!')
  34. assert store.list('').sort() == ['foo.txt', 'bar.txt', 'baz.txt'].sort()
  35. store.delete('foo.txt')
  36. store.delete('bar.txt')
  37. store.delete('baz.txt')
  38. def test_deep_list(setup_env):
  39. for store in [LocalFileStore('./_test_files_tmp'), InMemoryFileStore()]:
  40. store.write('foo/bar/baz.txt', 'Hello, world!')
  41. store.write('foo/bar/qux.txt', 'Hello, world!')
  42. store.write('foo/bar/quux.txt', 'Hello, world!')
  43. assert store.list('') == ['foo/'], f'for class {store.__class__}'
  44. assert store.list('foo') == ['foo/bar/']
  45. assert (
  46. store.list('foo/bar').sort()
  47. == ['foo/bar/baz.txt', 'foo/bar/qux.txt', 'foo/bar/quux.txt'].sort()
  48. )
  49. store.delete('foo/bar/baz.txt')
  50. store.delete('foo/bar/qux.txt')
  51. store.delete('foo/bar/quux.txt')