Packages
testcontainers
0.9.2
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/container/postgres_container.ex
# SPDX-License-Identifier: MIT
# Original by: Marco Dallagiacoma @ 2023 in https://github.com/dallagi/excontainers
# Modified by: Jarl André Hübenthal @ 2023
defmodule Testcontainers.Container.PostgresContainer do
@moduledoc """
Functions to build and interact with PostgreSql containers.
"""
alias Testcontainers.Container
alias Testcontainers.WaitStrategy.CommandWaitStrategy
@postgres_port 5432
@doc """
Builds a PostgreSql container.
Uses PostgreSql 13.1 by default, but a custom image can also be set.
## Options
- `username` sets the username for the user
- `password` sets the password for the user
- `database` sets the name of the database
"""
def new(image \\ "postgres:13.1", opts \\ []) do
username = Keyword.get(opts, :username, "test")
database = Keyword.get(opts, :database, "test")
password = Keyword.get(opts, :password, "test")
Container.new(
image,
exposed_ports: [@postgres_port],
environment: %{
POSTGRES_USER: username,
POSTGRES_PASSWORD: password,
POSTGRES_DB: database
}
)
|> Container.with_waiting_strategy(wait_strategy(username, database))
end
@doc """
Returns the port on the _host machine_ where the MySql container is listening.
"""
def port(%Container{} = container), do: Container.mapped_port(container, @postgres_port)
@doc """
Returns the connection parameters to connect to the database from the _host machine_.
"""
def connection_parameters(%Container{} = container) do
[
hostname: "localhost",
port: port(container),
username: container.environment[:POSTGRES_USER],
password: container.environment[:POSTGRES_PASSWORD],
database: container.environment[:POSTGRES_DB]
]
end
defp wait_strategy(username, database) do
CommandWaitStrategy.new(
["sh", "-c", "pg_isready -U #{username} -d #{database} -h localhost"],
10000
)
end
end