test_storage.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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'], 'Expected foo, got {} for class {}'.format(
  44. store.list(''), store.__class__
  45. )
  46. assert store.list('foo') == ['foo/bar']
  47. assert (
  48. store.list('foo/bar').sort()
  49. == ['foo/bar/baz.txt', 'foo/bar/qux.txt', 'foo/bar/quux.txt'].sort()
  50. )
  51. store.delete('foo/bar/baz.txt')
  52. store.delete('foo/bar/qux.txt')
  53. store.delete('foo/bar/quux.txt')