The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 8;

use lib 'lib';

use Ubic::Cmd;

use t::Utils;
rebuild_tfiles();

use Ubic;

local_ubic( service_dirs => [qw( t/service/freaks t/service/common )] );

my $out = '';
open my $fh, '>', \$out;
my $stdout = select $fh;

Ubic::Cmd->start('sleeping-daemon');
select $stdout;
like($out, qr/^\QStarting sleeping-daemon... started (pid \E\d+\)\n$/, 'Ubic::Cmd logged something on start');
is(Ubic->status('sleeping-daemon')->status, 'running', 'Ubic::Cmd really started service');

$out = '';
open $fh, '>', \$out;
select $fh;

Ubic::Cmd->stop('sleeping-daemon');
select $stdout;
is($out, "Stopping sleeping-daemon... stopped\n", 'Ubic::Cmd logged something on stop');
is(Ubic->status('sleeping-daemon'), 'not running', 'Ubic::Cmd really stopped service');

$out = '';
open $fh, '>', \$out;
select $fh;

eval {
    Ubic::Cmd->do_custom_command('sleeping-common', '2plus2');
};
select $stdout;
if ($@) {
    fail("do_custom_command failed: $@");
}
else {
    pass("do_custom_command is successful");
}
is($out, "Running 2plus2 for sleeping-common... ok\n", 'Ubic::Cmd logged something on custom command');


$out = '';
open $fh, '>', \$out;
select $fh;

my $results = Ubic::Cmd->start('broken');
select $stdout;
is($results->exit_code, 1, 'exit code when starting broken service');
like($out, qr{^Starting broken\.\.\. oops, this service can't stop at tfiles/service/broken line \d+\.$}, 'stdout when starting broken service');