NAME

Test::PostgreSQL::Docker - A Postgresql mock server for testing perl programs

SYNOPSIS

use Test::More;
use Test::PostgreSQL::Docker;

# 1. create a instance of Test::PostgreSQL::Docker with postgres:12-alpine image
my $server = Test::PostgreSQL::Docker->new(tag => '12-alpine');

# 2. create/run a container
$server->run();

# 3. puke initialization data into postgresql on a container
$server->run_psql_scripts("/path/to/fixture.sql");

# 4. get a Database Handler(a DBI::db object) from mock server object
my $dbh = $server->dbh();

# (or call steps of 2 to 4 as method-chain)
my $dbh = $server->run->run_psql_scripts("/path/to/fixture.sql")->dbh;

# 5. query to database
my $sth = $dbh->prepare("SELECT * FROM Users WHERE id=?");
$sth->execute(1);

# 6. put your own test code below
my $row $sth->fetchrow_hashref();
is $row->{name}, "ytnobody";

done_testing;

DESCRIPTION

Test::PostgreSQL::Docker run the postgres container on the Docker, for testing your perl programs.

**NOTE** Maybe this module doesn't work on the Windows, because this module uses some backticks for use the Docker.

METHODS

new

$server = Test::PostgreSQL::Docker->new(%opt)
pgname (str)

A distribution name. Default is postgres.

tag (str)

A tag of the PostgreSQL. Default is latest.

oid (str)

An uniqe id. Default is the object memory addres.

dbowner (str)

Default is postgres.

password (str)

Default is postgres.

dbname (str)

Default is test.

run

$server = $server->run(%opt)

1. Check image with docker pull.

2. docker run

3. connect database

skip_pull (bool)

Skip image check. Default is true.

skip_connect (bool)

Skip connect database. Default is false.

oid

$oid = $server->oid()

Return an unique id.

container_name

$container_name = $server->container_name()

Return the docker container name sprintf('%s-%s-%s', $pgname, $tag, $oid).

image_name

$image_name = $server->image_name()

Return the docker image name.

dsn

$dsn = $server->dsn(%opt)

port

$port = $server->port()

Return a PostgreSQL server port.

dbh

$dbh = $server->dbh()

psql_args

$psql_args = $server->psql_args()
$psql_args = $server->psql_args($args)

Arguments to psql in run_psql and run_psql_scripts. Default is sprintf('-h %s -p %s -U %s -d %s', $self-{host}, 5432, $self->{dbowner}, $self->{dbname})>.

run_psql

$server = $server->run_psql(@args)

$server->run_psql('-c', q|"INSERT INTO foo (bar) VALUES ('baz')"|);

run_psql_scripts

$server = $server->run_psql_scripts($path)

REQUIREMENT

Docker

This module uses the Docker as ephemeral environment.

LICENSE

Copyright (C) Satoshi Azuma.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Satoshi Azuma <ytnobody@gmail.com>

SEE ALSO

https://hub.docker.com/_/postgres