AnsibleModule
view release on metacpan or search on metacpan
lib/Test/AnsibleModule.pm view on Meta::CPAN
package Test::AnsibleModule;
use Mojo::Base -base;
use Test::More;
use Mojo::JSON qw/decode_json encode_json/;
use Mojo::Asset::File;
use Carp qw/croak/;
use Data::Dumper qw/Dumper/;
$Data::Dumper::Sortkeys++;
has 'last_response';
has 'success';
sub fail_ok {
my $self = shift;
my $rc = $self->exec_module(@_);
$self->_test('ok', $rc, 'Returned non-zero return code');
}
sub is_response {
my $self = shift;
my $res = shift;
$self->_test('is', Dumper($self->last_response), Dumper($res), @_);
}
sub run_ok {
my $self = shift;
my $rc = $self->exec_module(@_);
$self->_test('ok', !$rc,
'Response code is success (' . $self->last_response->{msg} . ')');
}
sub exec_module {
my $self = shift;
my $module = shift;
my $args = ref $_[0] ? $_[0] : {@_};
my $file = Mojo::Asset::File->new;
$file->add_chunk(encode_json($args));
my $p;
open($p, "-|", join(" ", $module, $file->path))
// croak "Could not run module: $!";
my $response = "";
while (my $line = <$p>) {
$response .= $line;
}
my $res = decode_json($response);
$self->last_response($res);
close $p;
return $? >> 8;
}
sub _test {
my ($self, $name, @args) = @_;
local $Test::Builder::Level = $Test::Builder::Level + 2;
return $self->success(!!Test::More->can($name)->(@args));
}
1;
=head1 NAME
Test::AnsibleModule - Test your ansible modules.
=head1 SYNOPSIS
( run in 1.647 second using v1.01-cache-2.11-cpan-39bf76dae61 )