You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.5 KiB
81 lines
1.5 KiB
#!/usr/bin/perl
|
|
|
|
=head1 NAME
|
|
|
|
running-processes - check running processes
|
|
|
|
=head2 SYNOPSIS
|
|
|
|
cat >> test-server.yaml << __YAML_END__
|
|
running-processes:
|
|
should-run:
|
|
- dhclient3
|
|
- /usr/sbin/sshd
|
|
- /usr/sbin/cron
|
|
__YAML_END__
|
|
|
|
|
|
=cut
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Test::More;
|
|
use Test::Differences;
|
|
use List::MoreUtils 'any';
|
|
use Carp::Clan 'croak';
|
|
use FindBin '$Bin';
|
|
use YAML::Syck 'LoadFile';
|
|
|
|
eval "use Proc::ProcessTable";
|
|
plan 'skip_all' => "need Proc::ProcessTable to run processes tests" if $@;
|
|
|
|
my $config = LoadFile($Bin.'/test-server.yaml');
|
|
plan 'skip_all' => "no configuration sections for 'running-processes'"
|
|
if (not $config or not $config->{'running-processes'});
|
|
|
|
|
|
exit main();
|
|
|
|
sub main {
|
|
plan 'tests' => 1;
|
|
|
|
my $process_table = Proc::ProcessTable->new;
|
|
|
|
SKIP: {
|
|
skip 'no should-run section, not checking running processes', 1
|
|
if ref $config->{'running-processes'}->{'should-run'} ne 'ARRAY';
|
|
my @should_run = @{$config->{'running-processes'}->{'should-run'}};
|
|
eq_or_diff(
|
|
[ map { $process_table->is_running($_) ? $_ : undef } @should_run ],
|
|
[ @should_run ],
|
|
'check if all processes are running',
|
|
);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
sub Proc::ProcessTable::is_running {
|
|
my $self = shift;
|
|
my $process_string = shift;
|
|
|
|
croak 'pass process name'
|
|
if not defined $process_string;
|
|
|
|
return any { $_->cmndline =~ $process_string } @{$self->table};
|
|
}
|
|
|
|
|
|
__END__
|
|
|
|
=head1 NOTE
|
|
|
|
Process listing depends on L<Proc::ProcessTable>.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Jozef Kutej
|
|
|
|
=cut
|