Packages
testcontainers
0.9.0
2.3.1
2.3.0
2.2.0
2.1.0
2.1.0-rc1
2.0.0
2.0.0-rc3
2.0.0-rc2
2.0.0-rc
1.14.1
1.14.0
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.0
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-beta.1
1.0.0-beta
0.9.3
0.9.2
0.9.1
0.9.0
Testcontainers is an Elixir library that supports ExUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
Current section
Files
Jump to
Current section
Files
lib/docker/exec.ex
defmodule Testcontainers.Docker.Exec do
@moduledoc false
alias Testcontainers.Docker.Connection
def inspect(exec_id, options \\ []) do
conn = Connection.get_connection(options)
case DockerEngineAPI.Api.Exec.exec_inspect(conn, exec_id) do
{:ok, %DockerEngineAPI.Model.ExecInspectResponse{} = body} ->
{:ok, parse_inspect_result(body)}
{:ok, %Tesla.Env{status: status}} ->
{:error, {:http_error, status}}
{:error, message} ->
{:error, message}
end
end
def create(container_id, command, options \\ []) do
data = %{"Cmd" => command}
conn = Connection.get_connection(options)
case DockerEngineAPI.Api.Exec.container_exec(conn, container_id, data) do
{:ok, %DockerEngineAPI.Model.IdResponse{Id: id}} -> {:ok, id}
{:ok, %Tesla.Env{status: status}} -> {:error, {:http_error, status}}
{:error, message} -> {:error, message}
end
end
def start(exec_id, options \\ []) do
conn = Connection.get_connection(options)
case DockerEngineAPI.Api.Exec.exec_start(conn, exec_id, body: %{}) do
{:ok, %Tesla.Env{status: 200}} -> :ok
{:ok, %Tesla.Env{status: status}} -> {:error, {:http_error, status}}
{:error, message} -> {:error, message}
end
end
def stdout_logs(container_id, options \\ []) do
conn = Connection.get_connection(options)
case DockerEngineAPI.Api.Container.container_logs(conn, container_id, stdout: true) do
{:ok, %Tesla.Env{body: body}} -> {:ok, body}
{:error, message} -> {:error, message}
end
end
defp parse_inspect_result(%DockerEngineAPI.Model.ExecInspectResponse{} = json) do
%{running: json."Running", exit_code: json."ExitCode"}
end
end