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;
sub extensions {
my ($class) = @_;
my $cache = $class->request_cache;
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};
return { map { $_ => extension_info($_) } Bugzilla::Extension::loaded() };
}
sub feature {

View File

@ -125,8 +125,8 @@ sub _throw_error
{
_throw_error('code', 'template_error', $vars);
}
# If we failed processing template error, simply die
$mode = ERROR_MODE_DIE;
# If we failed processing template error, just 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
@ -161,19 +161,22 @@ sub _throw_error
print Bugzilla->cgi->header();
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.
my %error_map = %{ WS_ERROR_CODE() };
require Bugzilla::Hook;
Bugzilla::Hook::process('webservice_error_codes',
{ error_map => \%error_map });
eval
{
require Bugzilla::Hook;
Bugzilla::Hook::process('webservice_error_codes',
{ error_map => \%error_map });
};
my $code = $error_map{$error};
if (!$code) {
$code = ERROR_UNKNOWN_FATAL if $type eq 'code';
$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) };
}
else {
@ -190,7 +193,7 @@ sub _throw_error
# we die with no message. JSON::RPC checks raise_error before
# it checks $@, so it returns the proper error.
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)
@ -204,6 +207,10 @@ sub _throw_error
my $json = new JSON;
print $json->encode($err);
}
else
{
die "Fatal error: '$mode' is an unknown error reporting mode!";
}
exit;
}

View File

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

View File

@ -38,14 +38,7 @@ sub version {
sub extensions {
my $self = shift;
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 };
return { extensions => Bugzilla->extensions };
}
sub timezone {

View File

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

View File

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

View File

@ -58,7 +58,7 @@ sub bz_call_fail {
or diag("Returned: " . Dumper($call->result));
if (defined $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
&& $call->faultcode > -32000,

View File

@ -5,7 +5,7 @@
use strict;
use warnings;
use lib qw(lib);
use Test::More tests => 28;
use Test::More "no_plan";
use QA::Util;
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 $extensions = $ext_call->result->{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_result = $time_call->result;

View File

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