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

View File

@@ -78,7 +78,7 @@ sub finalise_status {
next if $status->phase eq 'check'
and $status->level eq Status->done()->level;
if ($status->level > $max_level) {
if ($status->level >= $max_level) {
$job->status( $status->status );
$job->log( $status->log );
$max_level = $status->level;

View File

@@ -27,19 +27,17 @@ sub import {
}
# now vars->{workers} is populated, we set the dispatch order
my $store = Dancer::Factory::Hook->instance();
my $workers = vars->{'workers'}->{$action} || {};
# use DDP; p vars->{'workers'};
foreach my $phase (qw/check early main user/) {
$store->install_hooks("nd2_core_${phase}");
foreach my $namespace (sort keys %{ vars->{'workers'}->{$phase} }) {
foreach my $namespace (sort keys %{ $workers->{$phase} }) {
foreach my $priority (sort {$b <=> $a}
keys %{ vars->{'workers'}->{$phase}->{$namespace} }) {
keys %{ $workers->{$phase}->{$namespace} }) {
# D::Factory::Hook::register_hook() does not work?!
hook "nd2_core_${phase}" => $_
for @{ vars->{'workers'}->{$phase}->{$namespace}->{$priority} };
for @{ $workers->{$phase}->{$namespace}->{$priority} };
}
}
}

View File

@@ -5,9 +5,11 @@ use Dancer::Plugin;
use App::Netdisco::Util::Permission qw/check_acl_no check_acl_only/;
use aliased 'App::Netdisco::Worker::Status';
use Scope::Guard 'guard';
Dancer::Factory::Hook->instance()->install_hooks("nd2_core_${_}")
for qw/check early main user/;
register 'register_worker' => sub {
my ($self, $first, $second) = plugin_args(@_);
@@ -76,7 +78,7 @@ register 'register_worker' => sub {
};
# store the built worker as Worker.pm will build the dispatch order later on
push @{ vars->{'workers'}
push @{ vars->{'workers'}->{$workerconf->{action}}
->{$workerconf->{phase}}
->{$workerconf->{namespace}}
->{$workerconf->{priority}} }, $worker;

View File

@@ -1,27 +0,0 @@
package App::Netdisco::Worker::Plugin::Test;
use Dancer ':syntax';
use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status';
register_worker({ phase => 'check', driver => 'snmp' }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (check) ran successfully.');
});
register_worker({ phase => 'check', priority => 100 }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (check 100) ran successfully.');
});
register_worker({ phase => 'check', priority => 120 }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (check 120) ran successfully.');
});
register_worker({ phase => 'check', driver => 'eapi' }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (check eapi) ran successfully.');
});
true;

View File

@@ -1,37 +0,0 @@
package App::Netdisco::Worker::Plugin::Test::Core;
use Dancer ':syntax';
use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status';
register_worker({ phase => 'early' }, sub {
my ($job, $workerconf) = @_;
return Status->error('Test (early) ran successfully.');
});
register_worker({ phase => 'early' }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (early) ran successfully.');
});
register_worker({ phase => 'main' }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (main) ran successfully (1).');
});
register_worker({ phase => 'main' }, sub {
my ($job, $workerconf) = @_;
return Status->done('Test (main) ran successfully (2).');
});
register_worker(sub {
my ($job, $workerconf) = @_;
return Status->noop('Test (user) ran successfully.');
});
register_worker(sub {
my ($job, $workerconf) = @_;
return Status->error('Test (user) ran successfully.');
});
true;