Bug 40933, попытки отладки веб-сервисов
git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@772 6955db30-a419-402b-8a0d-67ecbb4d7f56master
parent
3cf2a72bd6
commit
2a33402ef9
17
Bugzilla.pm
17
Bugzilla.pm
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
#LWP-Cookies-1.0
|
|
|
@ -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();
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 %]
|
||||||
|
|
Loading…
Reference in New Issue