Packages
testcontainers
1.2.1
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/connection/docker_host_strategy/docker_host_from_properties.ex
# SPDX-License-Identifier: MIT
defmodule Testcontainers.Connection.DockerHostStrategy.DockerHostFromProperties do
@enforce_keys [:key]
defstruct key: nil, filename: "~/.testcontainers.properties"
defimpl Testcontainers.Connection.DockerHostStrategy do
def execute(strategy, _input) do
with {:ok, properties} <- read_property_file(expand_path(strategy.filename)),
docker_host <- Map.fetch(properties, strategy.key),
do: handle_docker_host(docker_host)
end
defp read_property_file(filepath) do
if File.exists?(filepath) do
with {:ok, content} <- File.read(filepath),
properties <- parse_properties(content) do
{:ok, properties}
else
error ->
{:error, testcontainer_host_from_properties: error}
end
else
{:error, testcontainer_host_from_properties: :file_does_not_exist}
end
end
defp parse_properties(content) do
content
|> String.split("\n")
|> Enum.map(&String.trim/1)
|> Enum.reject(&(&1 == "" or String.starts_with?(&1, "#")))
|> Enum.flat_map(&extract_key_value_pair/1)
|> Enum.into(%{})
end
defp extract_key_value_pair(line) do
case String.split(line, "=", parts: 2) do
[key, value] when is_binary(value) ->
[{String.trim(key), String.trim(value)}]
_other ->
[]
end
end
defp handle_docker_host({:ok, docker_host}) when is_binary(docker_host),
do: {:ok, docker_host}
defp handle_docker_host(:error),
do: {:error, testcontainer_host_from_properties: :property_not_found}
defp expand_path(path), do: Path.expand(path)
end
end