SOAP-Lite
view release on metacpan or search on metacpan
lib/SOAP/Test.pm view on Meta::CPAN
$self->{_num};
}
# ======================================================================
package SOAP::Test::Server;
use strict;
use Test;
use SOAP::Lite;
sub run_for {
my $proxy = shift or die "Proxy/endpoint is not specified";
# ------------------------------------------------------
my $s = SOAP::Lite->uri('http://something/somewhere')->proxy($proxy)->on_fault(sub{});
eval { $s->transport->timeout($SOAP::Test::TIMEOUT) };
my $r = $s->test_connection;
unless (defined $r && defined $r->envelope) {
print "1..0 # Skip: ", $s->transport->status, "\n";
exit;
}
# ------------------------------------------------------
plan tests => 53;
eval q!use SOAP::Lite on_fault => sub{ref $_[1] ? $_[1] : new SOAP::SOM}; 1! or die;
print STDERR "Perl SOAP server test(s)...\n";
$s = SOAP::Lite
-> uri('urn:/My/Examples')
-> proxy($proxy);
ok($s->getStateName(1)->result eq 'Alabama');
ok($s->getStateNames(1,4,6,13)->result =~ /^Alabama\s+Arkansas\s+Colorado\s+Illinois\s*$/);
$r = $s->getStateList([1,2,3,4])->result;
ok(ref $r && $r->[0] eq 'Alabama');
$r = $s->getStateStruct({item1 => 1, item2 => 4})->result;
ok(ref $r && $r->{item2} eq 'Arkansas');
print $s->transport->status, "\n";
{
my $autoresult = $s->autoresult;
$s->autoresult(1);
ok($s->getStateName(1) eq 'Alabama');
$s->autoresult($autoresult);
}
print STDERR "Autobinding of output parameters test(s)...\n";
$s->uri('urn:/My/Parameters');
my $param1 = 10;
my $param2 = SOAP::Data->name('myparam' => 12);
my $result = $s->autobind($param1, $param2)->result;
ok($result == $param1 && $param2->value == 24);
print STDERR "Header manipulation test(s)...\n";
$a = $s->addheader(2, SOAP::Header->name(my => 123));
ok(ref $a->header && $a->header->{my} eq '123123');
ok($a->headers eq '123123');
print STDERR "Echo untyped data test(s)...\n";
$a = $s->echotwo(11, 12);
ok($a->result == 11);
print STDERR "mustUnderstand test(s)...\n";
$s->echo(SOAP::Header->name(somethingelse => 123)
->mustUnderstand(1));
ok($s->call->faultstring =~ /[Hh]eader has mustUnderstand attribute/);
if ($proxy =~ /^http/) {
ok($s->transport->status =~ /^500/);
} else {
skip('No Status checks for non http protocols on server side' => undef);
}
$s->echo(SOAP::Header->name(somethingelse => 123)
->mustUnderstand(1)
->actor('http://notme/'));
ok(!defined $s->call->fault);
print STDERR "dispatch_from test(s)...\n";
eval "use SOAP::Lite
uri => 'http://my.own.site.com/My/Examples',
dispatch_from => ['A', 'B'],
proxy => '$proxy',
; 1" or die;
eval { C->c };
ok($@ =~ /Can't locate object method "c"/);
eval { A->a };
ok(!$@ && SOAP::Lite->self->call->faultstring =~ /Failed to access class \(A\)/);
eval "use SOAP::Lite
dispatch_from => 'A',
uri => 'http://my.own.site.com/My/Examples',
proxy => '$proxy',
; 1" or die;
eval { A->a };
ok(!$@ && SOAP::Lite->self->call->faultstring =~ /Failed to access class \(A\)/);
print STDERR "Object autobinding and SOAP:: prefix test(s)...\n";
eval "use SOAP::Lite +autodispatch =>
uri => 'urn:', proxy => '$proxy'; 1" or die;
ok(SOAP::Lite->autodispatched);
eval { SOAP->new(1) };
ok($@ =~ /^URI is not specified/);
eval "use SOAP::Lite +autodispatch =>
uri => 'urn:/A/B', proxy => '$proxy'; 1" or die;
# should call My::PingPong, not A::B
my $p = My::PingPong->SOAP::new(10);
ok(ref $p && $p->SOAP::next+1 == $p->value);
# forget everything
SOAP::Lite->self(undef);
$s = SOAP::Lite
-> uri('urn:/My/PingPong')
-> proxy($proxy)
;
# should return object EXACTLY as after My::PingPong->SOAP::new(10)
$p = $s->SOAP::new(10);
ok(ref $p && $s->SOAP::next($p)+1 == $p->value);
print STDERR "VersionMismatch test(s)...\n";
{
local $SOAP::Constants::NS_ENV = 'http://schemas.xmlsoap.org/new/envelope/';
my $s = SOAP::Lite
( run in 1.640 second using v1.01-cache-2.11-cpan-39bf76dae61 )