forked from Archives/langchain
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""Test the docker wrapper utility."""
|
|
|
|
import pytest
|
|
from langchain.utilities.docker import DockerWrapper, gvisor_runtime_available
|
|
from unittest.mock import MagicMock
|
|
import subprocess
|
|
|
|
|
|
def docker_installed() -> bool:
|
|
"""Checks if docker is installed locally."""
|
|
try:
|
|
subprocess.run(['which', 'docker',], check=True)
|
|
except subprocess.CalledProcessError:
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
@pytest.mark.skipif(not docker_installed(), reason="docker not installed")
|
|
class TestDockerUtility:
|
|
|
|
def test_command_default_image(self) -> None:
|
|
"""Test running a command with the default alpine image."""
|
|
docker = DockerWrapper()
|
|
output = docker.run('cat /etc/os-release')
|
|
assert output.find(b'alpine')
|
|
|
|
def test_inner_failing_command(self) -> None:
|
|
"""Test inner command with non zero exit"""
|
|
docker = DockerWrapper()
|
|
output = docker.run('ls /inner-failing-command')
|
|
assert str(output).startswith("STDERR")
|
|
|
|
def test_entrypoint_failure(self) -> None:
|
|
"""Test inner command with non zero exit"""
|
|
docker = DockerWrapper()
|
|
output = docker.run('todo handle APIError')
|
|
assert output == 'ERROR'
|
|
|
|
def test_check_gvisor_runtime(self) -> None:
|
|
"""test gVisor runtime verification using a mock docker client"""
|
|
mock_client = MagicMock()
|
|
mock_client.info.return_value = {'Runtimes': {'runsc': {'path': 'runsc'}}}
|
|
assert gvisor_runtime_available(mock_client)
|
|
mock_client.info.return_value = {'Runtimes': {'runc': {'path': 'runc'}}}
|
|
assert not gvisor_runtime_available(mock_client)
|