test_image_agnostic_util.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from unittest.mock import MagicMock, patch
  2. from opendevin.runtime.utils.image_agnostic import (
  3. _get_new_image_name,
  4. generate_dockerfile,
  5. get_od_sandbox_image,
  6. )
  7. def test_generate_dockerfile():
  8. base_image = 'debian:11'
  9. dockerfile_content = generate_dockerfile(base_image)
  10. assert base_image in dockerfile_content
  11. assert (
  12. 'RUN apt update && apt install -y openssh-server wget sudo'
  13. in dockerfile_content
  14. )
  15. def test_get_new_image_name_legacy():
  16. # test non-eventstream runtime (sandbox-based)
  17. base_image = 'debian:11'
  18. new_image_name = _get_new_image_name(base_image)
  19. assert new_image_name == 'od_sandbox:debian__11'
  20. base_image = 'ubuntu:22.04'
  21. new_image_name = _get_new_image_name(base_image)
  22. assert new_image_name == 'od_sandbox:ubuntu__22.04'
  23. base_image = 'ubuntu'
  24. new_image_name = _get_new_image_name(base_image)
  25. assert new_image_name == 'od_sandbox:ubuntu__latest'
  26. @patch('opendevin.runtime.utils.image_agnostic._build_sandbox_image')
  27. @patch('opendevin.runtime.utils.image_agnostic.docker.DockerClient')
  28. def test_get_od_sandbox_image(mock_docker_client, mock_build_sandbox_image):
  29. base_image = 'debian:11'
  30. mock_docker_client.images.list.return_value = [
  31. MagicMock(tags=['od_sandbox:debian__11'])
  32. ]
  33. image_name = get_od_sandbox_image(base_image, mock_docker_client)
  34. assert image_name == 'od_sandbox:debian__11'
  35. mock_docker_client.images.list.return_value = []
  36. image_name = get_od_sandbox_image(base_image, mock_docker_client)
  37. assert image_name == 'od_sandbox:debian__11'
  38. mock_build_sandbox_image.assert_called_once_with(
  39. base_image, 'od_sandbox:debian__11', mock_docker_client
  40. )