X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FBackgroundJob%2FSelfTest.pm;h=b715f9e07d11605b554888dde60a0cd2d17caf66;hb=a27846ef2756ed0f59c29d256a5d43d6caaf0b58;hp=241a9952eae2ddcaefba2b2324797196cc95ac8f;hpb=f7d51d3e6c5e9b16f688e2e9417f54aee64ed23a;p=kivitendo-erp.git diff --git a/SL/BackgroundJob/SelfTest.pm b/SL/BackgroundJob/SelfTest.pm index 241a9952e..b715f9e07 100644 --- a/SL/BackgroundJob/SelfTest.pm +++ b/SL/BackgroundJob/SelfTest.pm @@ -11,7 +11,10 @@ use Sys::Hostname; use FindBin; use SL::DB::AuthUser; +use SL::DB::Default; use SL::Common; +use SL::Locale::String qw(t8); +use Carp; use Rose::Object::MakeMethods::Generic ( array => [ @@ -23,7 +26,7 @@ use Rose::Object::MakeMethods::Generic ( 'add_full_diag' => { interface => 'add', hash_key => 'full_diag' }, ], scalar => [ - qw(diag tester config aggreg), + qw(diag tester config aggreg module_nr), ], ); @@ -37,6 +40,7 @@ sub setup { $self->config($::lx_office_conf{self_test} || {}); $self->tester(Test::Builder->new); + $self->tester->reset; # stupid Test::Builder mplementation uses class variables $self->aggreg(TAP::Parser::Aggregator->new); $self->modules(split /\s+/, $self->config->{modules}); @@ -59,11 +63,13 @@ sub run { $self->aggreg->failed, $self->aggreg->todo_passed, ); - - if (!$self->aggreg->all_passed || $self->config->{send_email_on_success}) { + # if (!$self->aggreg->all_passed || $self->config->{send_email_on_success}) { + # all_passed is not set or calculated (anymore). it is safe to check only for probs or errors + if ($self->aggreg->failed || $self->config->{send_email_on_success}) { $self->_send_email; } + croak t8("Unsuccessfully executed:" . join ("\n", $self->errors)) if $self->errors; return 1; } @@ -82,6 +88,9 @@ sub run_module { $module =~ s/[^\w:]//g; $module = "SL::BackgroundJob::SelfTest::$module"; + # increase module nr + $self->module_nr(($self->module_nr || 0) + 1); + # try to load module; (my $file = $module) =~ s|::|/|g; eval { @@ -90,15 +99,14 @@ sub run_module { } or $self->add_errors($::locale->text('Could not load class #1 (#2): "#3"', $module, $file, $@)) && return; eval { - my $worker = $module->new; - $worker->tester($self->tester); - - $worker->run; - 1; + $self->tester->subtest($module => sub { + $module->new->run; + }); + 1 } or $self->add_errors($::locale->text('Could not load class #1, #2', $module, $@)) && return; $self->add_full_diag($output); - $self->{diag_per_module}{$module} = $output; + $self->{diag_per_module}{$self->module_nr . ': ' . $module} = $output; my $parser = TAP::Parser->new({ tap => $output}); $parser->run; @@ -122,20 +130,21 @@ sub _send_email { my ($output, $content_type) = $self->_prepare_report; - my $mail = Mailer->new(charset => $::locale->is_utf8 ? 'UTF-8' : Common->DEFAULT_CHARSET ); + my $mail = Mailer->new; $mail->{from} = $self->config->{email_from}; $mail->{to} = $email; $mail->{subject} = $self->config->{email_subject}; $mail->{content_type} = $content_type; $mail->{message} = $$output; - $mail->send; + my $err = $mail->send; + $self->add_errors('Mailer error #1', $err) if $err; + } sub _prepare_report { my ($self) = @_; - my $user = $self->_email_user; my $template = Template->new({ 'INTERPOLATE' => 0, 'EVAL_PERL' => 0, 'ABSOLUTE' => 1, @@ -144,15 +153,17 @@ sub _prepare_report { return unless $template; my $email_template = $self->config->{email_template}; - my $filename = $email_template || ( ($user->get_config_value('templates') || "templates/mails") . "/self_test/status_mail.txt" ); + my $filename = $email_template || ( (SL::DB::Default->get->templates || "templates/mails") . "/self_test/status_mail.txt" ); my $content_type = $filename =~ m/.html$/ ? 'text/html' : 'text/plain'; my %params = ( SELF => $self, host => hostname, - database => $::myconfig{dbname}, + database => $::auth->client->{dbname}, + client => $::auth->client->{name}, path => $FindBin::Bin, + errors => $self->errors, ); my $output; @@ -173,21 +184,11 @@ __END__ =head1 NAME -SL::BackgroundJob::TelfTests - pluggable self testing +SL::BackgroundJob::SelfTest - pluggable self testing =head1 SYNOPSIS - use SL::BackgroundJob::SelfTests; - SL::BackgroundJob::SelfTests->new->run;; - -=head1 DESCRIPTION - - - -=head1 FUNCTIONS - -=head1 BUGS - -=head1 AUTHOR + use SL::BackgroundJob::SelfTest; + SL::BackgroundJob::SelfTest->new->run;; =cut