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>