##! perl -d # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..3\n"; } END {print "not ok 1\n" unless $loaded;} use XML::Parser::Expat; use SOAP::EnvelopeMaker; use SOAP::Transport::HTTP::CGI; use SOAP::Parser; use SOAP::Struct; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): # # test 2 - try to make a SOAP request to soapl.develop.com # # sub test2() { my $soap_perl_server = 'soapl.develop.com'; my $test_endpoint_for_mod_perl = '/soap?class=SPTest'; my $test_endpoint_for_cgi = '/cgi-bin/soap.pl?class=SPTest'; print qq[ This test sends a live SOAP call to $soap_perl_server, adding two numbers. If you're not connected to the Internet, please skip this step. ]; my $skip_test = ExtUtils::MakeMaker::prompt('Do you want me to skip this test?', 'no'); return 1 if $skip_test =~ /^\s*y/i; print "Testing your connection by pinging $soap_perl_server...\n"; # # first verify that we're connected to the internet # eval { use Net::Ping; }; if ($@) { print "\n\nCouldn't load the Net::Ping module to test your connection.\n"; my $skip_test = ExtUtils::MakeMaker::prompt('Do you want me to skip this test?', 'yes'); return 1 if $skip_test =~ /^\s*y/i; print "\nOk, we'll barge on anyway :-)\n"; } else { my $icmp = Net::Ping->new('icmp', 5); unless ($icmp->ping($soap_perl_server)) { print "\n\nCouldn't ping $soap_perl_server, so I'll skip this test.\n"; return 1; } } print "\nOk, I can ping $soap_perl_server.\n"; print "\nMaking a SOAP call to $soap_perl_server: add()...\n"; eval { # print "\n\nCalling the CGI version of the server 5 times:\n"; # for (my $i = 0; $i < 5; ++$i) { # make_call($soap_perl_server, 80, $test_endpoint_for_cgi); # } print "\n\nCalling the mod_perl version of the server 5 times:\n"; for ($i = 0; $i < 5; ++$i) { make_call($soap_perl_server, 80, $test_endpoint_for_mod_perl); } }; if ($@) { print $@; return; } print "Success!\n"; 1; } sub make_call { use SOAP::EnvelopeMaker; my ($host, $port, $endpoint) = @_; my $method_uri = "urn:soap-perl-test"; my $method_name = "add"; my $soap_request = ''; my $em = SOAP::EnvelopeMaker->new(\$soap_request); my $a = 3; my $b = 4; my $expected_result = $a + $b; my $request_body = SOAP::Struct->new(a => $a, b => $b); $em->set_body($method_uri, $method_name, 0, $request_body); use SOAP::Transport::HTTP::Client; my $soap_on_http = SOAP::Transport::HTTP::Client->new(); my $soap_response = $soap_on_http->send_receive($host, $port, $endpoint, $method_uri, $method_name, $soap_request); use SOAP::Parser; my $soap_parser = SOAP::Parser->new(); $soap_parser->parsestring($soap_response); $response_body = $soap_parser->get_body(); if (exists $response_body->{return}) { my $c = $response_body->{return}; unless ($c == $expected_result) { die "Hmm. My math must be getting bad. I expected to get $expected_result, and instead, got $c" } print "$a + $b = $c\n"; } else { my $faultcode = $response_body->{faultcode}; my $faultstring = $response_body->{faultstring}; my $detail = $response_body->{detail}; die <<"END_MSG"; Whoops, something bad happened: faultcode = $faultcode faultstring = $faultstring detail = $detail END_MSG } } use ExtUtils::MakeMaker qw(prompt); unless (test2()) { print 'not ' } print "ok test 2\n";