Bug 40933, попытки отладки веб-сервисов

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@772 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2010-06-01 18:15:50 +00:00
parent 3cf2a72bd6
commit 2a33402ef9
9 changed files with 37 additions and 42 deletions

View File

@ -277,22 +277,7 @@ sub template_inner {
our $extension_packages; our $extension_packages;
sub extensions { sub extensions {
my ($class) = @_; my ($class) = @_;
my $cache = $class->request_cache; return { map { $_ => extension_info($_) } Bugzilla::Extension::loaded() };
if (!$cache->{extensions}) {
# Under mod_perl, mod_perl.pl populates $extension_packages for us.
if (!$extension_packages) {
$extension_packages = Bugzilla::Extension->load_all();
}
my @extensions;
foreach my $package (@$extension_packages) {
my $extension = $package->new();
if ($extension->enabled) {
push(@extensions, $extension);
}
}
$cache->{extensions} = \@extensions;
}
return $cache->{extensions};
} }
sub feature { sub feature {

View File

@ -125,8 +125,8 @@ sub _throw_error
{ {
_throw_error('code', 'template_error', $vars); _throw_error('code', 'template_error', $vars);
} }
# If we failed processing template error, simply die # If we failed processing template error, just die
$mode = ERROR_MODE_DIE; die bless { message => ($msg ||= _error_message($type, $error, $vars)), type => $type, error => $error, vars => $vars };
} }
# Report error into [$datadir/] params.error_log if requested # Report error into [$datadir/] params.error_log if requested
@ -161,19 +161,22 @@ sub _throw_error
print Bugzilla->cgi->header(); print Bugzilla->cgi->header();
print $message; print $message;
} }
elsif ($mode == ERROR_MODE_DIE_SOAP_FAULT || Bugzilla->error_mode == ERROR_MODE_JSON_RPC) elsif ($mode == ERROR_MODE_DIE_SOAP_FAULT || $mode == ERROR_MODE_JSON_RPC)
{ {
# Clone the hash so we aren't modifying the constant. # Clone the hash so we aren't modifying the constant.
my %error_map = %{ WS_ERROR_CODE() }; my %error_map = %{ WS_ERROR_CODE() };
require Bugzilla::Hook; eval
Bugzilla::Hook::process('webservice_error_codes', {
{ error_map => \%error_map }); require Bugzilla::Hook;
Bugzilla::Hook::process('webservice_error_codes',
{ error_map => \%error_map });
};
my $code = $error_map{$error}; my $code = $error_map{$error};
if (!$code) { if (!$code) {
$code = ERROR_UNKNOWN_FATAL if $type eq 'code'; $code = ERROR_UNKNOWN_FATAL if $type eq 'code';
$code = ERROR_UNKNOWN_TRANSIENT if $type eq 'user'; $code = ERROR_UNKNOWN_TRANSIENT if $type eq 'user';
} }
if (Bugzilla->error_mode == ERROR_MODE_DIE_SOAP_FAULT) { if ($mode == ERROR_MODE_DIE_SOAP_FAULT) {
die bless { message => SOAP::Fault->faultcode($code)->faultstring($message) }; die bless { message => SOAP::Fault->faultcode($code)->faultstring($message) };
} }
else { else {
@ -190,7 +193,7 @@ sub _throw_error
# we die with no message. JSON::RPC checks raise_error before # we die with no message. JSON::RPC checks raise_error before
# it checks $@, so it returns the proper error. # it checks $@, so it returns the proper error.
die if _in_eval(); die if _in_eval();
$server->response($server->error_response_header); #$server->response($server->error_response_header); # FIXME VERY UGLY HACK
} }
} }
elsif ($mode == ERROR_MODE_AJAX) elsif ($mode == ERROR_MODE_AJAX)
@ -204,6 +207,10 @@ sub _throw_error
my $json = new JSON; my $json = new JSON;
print $json->encode($err); print $json->encode($err);
} }
else
{
die "Fatal error: '$mode' is an unknown error reporting mode!";
}
exit; exit;
} }

View File

@ -2404,7 +2404,7 @@ sub _not_in_search_results
sub LookupNamedQuery sub LookupNamedQuery
{ {
my ($name, $sharer_id, $query_type, $throw_error) = @_; my ($name, $sharer_id, $query_type, $throw_error) = @_;
$throw_error = 1 unless defined $throw_error; $throw_error = THROW_ERROR unless defined $throw_error;
Bugzilla->login(LOGIN_REQUIRED); Bugzilla->login(LOGIN_REQUIRED);
@ -2412,11 +2412,18 @@ sub LookupNamedQuery
my $query = Bugzilla::Search::Saved->$constructor( my $query = Bugzilla::Search::Saved->$constructor(
{ user => $sharer_id, name => $name }); { user => $sharer_id, name => $name });
return $query if (!$query and !$throw_error); if (!$query ||
defined $query_type && $query->type != $query_type)
if (defined $query_type and $query->type != $query_type) { {
ThrowUserError("missing_query", { queryname => $name, if ($throw_error)
sharer_id => $sharer_id }); {
ThrowUserError("missing_query", { queryname => $name,
sharer_id => $sharer_id });
}
else
{
return undef;
}
} }
$query->url $query->url

View File

@ -38,14 +38,7 @@ sub version {
sub extensions { sub extensions {
my $self = shift; my $self = shift;
return { extensions => Bugzilla->extensions };
my %retval;
foreach my $extension (@{ Bugzilla->extensions }) {
my $version = $extension->VERSION || 0;
my $name = $extension->NAME;
$retval{$name}->{version} = $self->type('string', $version);
}
return { extensions => \%retval };
} }
sub timezone { sub timezone {

View File

@ -1 +0,0 @@
#LWP-Cookies-1.0

View File

@ -35,7 +35,10 @@ BEGIN {
use Bugzilla::WebService::Server::JSONRPC; use Bugzilla::WebService::Server::JSONRPC;
Bugzilla->usage_mode(USAGE_MODE_JSON); Bugzilla->usage_mode(USAGE_MODE_JSON);
Bugzilla->error_mode(ERROR_MODE_JSON_RPC);
local @INC = (bz_locations()->{extensionsdir}, @INC); local @INC = (bz_locations()->{extensionsdir}, @INC);
my $server = new Bugzilla::WebService::Server::JSONRPC; my $server = new Bugzilla::WebService::Server::JSONRPC;
$Bugzilla::Error::IN_EVAL++;
$server->dispatch(WS_DISPATCH)->handle(); $server->dispatch(WS_DISPATCH)->handle();

View File

@ -58,7 +58,7 @@ sub bz_call_fail {
or diag("Returned: " . Dumper($call->result)); or diag("Returned: " . Dumper($call->result));
if (defined $faultstring) { if (defined $faultstring) {
cmp_ok(trim($call->faultstring), '=~', $faultstring, cmp_ok(trim($call->faultstring), '=~', $faultstring,
$self->TYPE . ": Got correct fault for $method"); $self->TYPE . ": Got correct fault for $method"); #or pause();
} }
ok($call->faultcode && $call->faultcode < 32000 ok($call->faultcode && $call->faultcode < 32000
&& $call->faultcode > -32000, && $call->faultcode > -32000,

View File

@ -5,7 +5,7 @@
use strict; use strict;
use warnings; use warnings;
use lib qw(lib); use lib qw(lib);
use Test::More tests => 28; use Test::More "no_plan";
use QA::Util; use QA::Util;
my ($xmlrpc, $jsonrpc, $config) = get_rpc_clients(); my ($xmlrpc, $jsonrpc, $config) = get_rpc_clients();
@ -21,7 +21,7 @@ foreach my $rpc ($jsonrpc, $xmlrpc) {
my $ext_call = $rpc->bz_call_success('Bugzilla.extensions'); my $ext_call = $rpc->bz_call_success('Bugzilla.extensions');
my $extensions = $ext_call->result->{extensions}; my $extensions = $ext_call->result->{extensions};
isa_ok($extensions, 'HASH', 'extensions'); isa_ok($extensions, 'HASH', 'extensions');
is(scalar keys %$extensions, 0, 'No extensions returned'); #is(scalar keys %$extensions, 0, 'No extensions returned');
my $time_call = $rpc->bz_call_success('Bugzilla.time'); my $time_call = $rpc->bz_call_success('Bugzilla.time');
my $time_result = $time_call->result; my $time_result = $time_call->result;

View File

@ -15,6 +15,7 @@
[%# We only want HTML error messages for ERROR_MODE_WEBPAGE %] [%# We only want HTML error messages for ERROR_MODE_WEBPAGE %]
[% USE Bugzilla %] [% USE Bugzilla %]
[% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %] [% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %]
[% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %] [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %]
[% error_message FILTER none %] [% error_message FILTER none %]