#!/usr/bin/env perl
BEGIN {
unless(grep /blib/, @INC) {
chdir 't' if -d 't';
unshift @INC, '../lib' if -d '../lib';
}
}
use strict;
use Test;
use SOAP::Lite
on_fault => sub {
my $soap = shift;
my $res = shift;
ref $res ? warn(join "\n", "--- SOAP FAULT ---", $res->faultcode, $res->faultstring, '')
: warn(join "\n", "--- TRANSPORT ERROR ---", $soap->transport->status, '');
return new SOAP::SOM;
}
;
my($a, $s, $r, $serialized, $deserialized);
# ------------------------------------------------------
use SOAP::Test;
$s = SOAP::Lite->uri('http://something/somewhere')->proxy('http://services.xmethods.net/soap/servlet/rpcrouter')->on_fault(sub{});
eval { $s->transport->timeout($SOAP::Test::TIMEOUT = $SOAP::Test::TIMEOUT) };
$r = $s->test_connection;
unless (defined $r && defined $r->envelope) {
print "1..0 # Skip: ", $s->transport->status, "\n";
exit;
}
# ------------------------------------------------------
plan tests => 12;
{
# Service description (WSDL) (http://www.xmethods.net/)
print "Service description (WSDL) test(s)...\n";
$s = SOAP::Lite
-> service('http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl');
ok($s->getQuote('MSFT') > 1);
ok(SOAP::Lite
-> service('http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl')
-> getQuote('MSFT') > 1);
# WSDL with <import> element and multiple ports (non-SOAP bindings)
ok(SOAP::Lite
-> service('http://www.xmethods.net/sd/StockQuoteImport.wsdl')
-> getQuote('MSFT') > 1);
my $schema = SOAP::Schema
-> schema('http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl')
-> parse('net.xmethods.services.stockquote.StockQuoteService');
foreach (keys %{$schema->services}) {
eval { $schema->stub($_) } or die;
}
# SOAP::Schema converts
# net.xmethods.services.stockquote.StockQuoteService
# into
# net_xmethods_services_stockquote_StockQuoteService
print "Service description static stub test(s)...\n";
ok(net_xmethods_services_stockquote_StockQuoteService->getQuote('MSFT') > 1);
ok(defined net_xmethods_services_stockquote_StockQuoteService->self);
ok(net_xmethods_services_stockquote_StockQuoteService->self->call);
print "Service description static stub with import test(s)...\n";
net_xmethods_services_stockquote_StockQuoteService->import(':all');
ok(getQuote('MSFT') > 1);
ok(defined net_xmethods_services_stockquote_StockQuoteService->self);
ok(net_xmethods_services_stockquote_StockQuoteService->self->call);
# ok, now we'll test for passing SOAP::Data and SOAP::Headers as a parameters
my @params;
{
package TestStockQuoteService;
@TestStockQuoteService::ISA = 'net_xmethods_services_stockquote_StockQuoteService';
sub call { shift; @params = @_; new SOAP::SOM }
}
my @testparams = (SOAP::Data->name(param1 => 'MSFT'),
SOAP::Data->name('param2'),
SOAP::Header->name(header1 => 'value'));
TestStockQuoteService->new->getQuote(@testparams);
ok($params[1]->value->name eq 'param1');
ok($params[2]->name eq 'param2');
ok(ref $params[3] eq 'SOAP::Header' && $params[3]->name eq 'header1');
}