some reengineering to support proper testing

This commit is contained in:
Oliver Gorwits
2017-11-12 00:14:21 +00:00
parent c5f138fe62
commit 2de36c69ba
8 changed files with 110 additions and 73 deletions

67
xt/30-backend-workers.t Normal file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env perl
use strict; use warnings FATAL => 'all';
use Test::More 0.88;
use lib 'xt/lib';
use App::Netdisco;
use App::Netdisco::Backend::Job;
use Try::Tiny;
use Dancer qw/:moose :script !pass/;
# configure logging to force console output
my $CONFIG = config();
$CONFIG->{logger} = 'console';
$CONFIG->{log} = 'error';
Dancer::Logger->init('console', $CONFIG);
{
package MyWorker;
use Moo;
with 'App::Netdisco::Worker::Runner';
}
# TESTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
my $j1 = do_job('TestOne');
is($j1->status, 'done', 'status is done');
is($j1->log, 'OK: SNMP driver is successful.',
'workers are run in decreasing priority until done');
my $j2 = do_job('TestTwo');
is($j2->status, 'done', 'status is done');
is($j2->log, 'OK: CLI driver is successful.',
'lower priority driver not run if higher is successful');
# TESTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
done_testing;
sub do_job {
my $pkg = shift;
# include local plugins
config->{'extra_worker_plugins'} = ["X::${pkg}"];
# clear out any previous installed hooks
Dancer::Factory::Hook->init( Dancer::Factory::Hook->instance() );
my $job = App::Netdisco::Backend::Job->new({
job => 0,
action => lc($pkg),
});
try {
#info sprintf 'test: started at %s', scalar localtime;
MyWorker->new()->run($job);
#info sprintf 'test: %s: %s', $job->status, $job->log;
}
catch {
$job->status('error');
$job->log("error running job: $_");
};
return $job;
}

View File

@@ -0,0 +1,17 @@
package App::NetdiscoX::Worker::Plugin::TestOne;
use Dancer ':syntax';
use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status';
# info 'test: workers are run in decreasing priority until done';
register_worker({ phase => 'main', driver => 'cli' }, sub {
return Status->noop('NOT OK: CLI driver is not the winner here.');
});
register_worker({ phase => 'main', driver => 'snmp' }, sub {
return Status->done('OK: SNMP driver is successful.');
});
true;

View File

@@ -0,0 +1,17 @@
package App::NetdiscoX::Worker::Plugin::TestTwo;
use Dancer ':syntax';
use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status';
# info 'test: lower priority driver not run if higher is successful';
register_worker({ phase => 'main', driver => 'snmp' }, sub {
return Status->done('NOT OK: SNMP driver should NOT be run.');
});
register_worker({ phase => 'main', driver => 'cli' }, sub {
return Status->done('OK: CLI driver is successful.');
});
true;