#!/usr/bin/perl
use strict;
use warnings;
use parent qw(Test::Class);
use Test::More;
use lib 'lib';
use t::Utils;
use Ubic::Service::Common;
sub setup :Test(setup) {
rebuild_tfiles();
}
sub common_service :Tests(7) {
my $running;
my $service = Ubic::Service::Common->new({
start => sub {
$running++;
},
stop => sub {
$running--;
},
status => sub {
if ($running) {
return 'running';
} else {
return 'not running';
}
},
name => 'some-service',
});
is($service->start, 'started', 'start works');
is($service->status, 'running', 'status after start');
is($service->stop, 'stopped', 'stop works');
is($service->status, 'not running', 'status after stop');
$service->start;
is($service->start, 'already running', 'double start');
is($service->stop, 'stopped', 'stop after double start');
is($service->stop, 'not running', 'double stop');
}
sub common_service_result_objects :Tests(7) {
my $running;
use Ubic::Result qw(result);
my $service = Ubic::Service::Common->new({
start => sub {
$running++;
return result('started', 'preved');
},
stop => sub {
$running--;
return result('stopped', 'hello');
},
status => sub {
if ($running) {
return result('running', 'hi');
} else {
return 'not running';
}
},
name => 'some-service',
});
is($service->start, 'started (preved)', 'start works');
is($service->status, 'running (hi)', 'status after start');
is($service->stop, 'stopped (hello)', 'stop works');
is($service->status, 'not running', 'status after stop');
$service->start;
is($service->start, 'already running', 'double start');
is($service->stop, 'stopped (hello)', 'stop after double start');
is($service->stop, 'not running', 'double stop');
}
sub custom_commands :Tests(2) {
my $running;
my $service = Ubic::Service::Common->new({
start => sub {
$running++;
},
stop => sub {
$running--;
},
status => sub {
if ($running) {
return 'running';
} else {
return 'not running';
}
},
name => 'some-service',
custom_commands => {
preved => sub { return 'medved' },
hitler => sub { return 'kaput' },
}
});
is_deeply([sort $service->custom_commands], [qw/ hitler preved /], 'custom_commands method works');
is_deeply(scalar($service->do_custom_command('preved')), 'medved', 'do_custom_command method works');
}
__PACKAGE__->new->runtests;