Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

194 lines (143 sloc) 4.747 kb
#!/usr/bin/perl
# Test the serialization of XML structures to filehandles
use strict;
use vars qw($dir $vol $fh $file $tmpfile $md5_able $faux_req $faux_res $ofh
$data);
use RPC::XML ':all';
use Test::More tests => 20;
use File::Spec;
# We'll be using the <nil /> extension here:
$RPC::XML::ALLOW_NIL = 1;
($vol, $dir, undef) = File::Spec->splitpath(File::Spec->rel2abs($0));
$dir = File::Spec->catpath($vol, $dir, '');
$file = File::Spec->catfile($dir, 'svsm_text.gif');
$tmpfile = File::Spec->catfile($dir, "__tmp__${$}__");
END
{
# Make sure we don't leave any droppings...
if (-f $tmpfile)
{
unlink $tmpfile;
}
}
if (! (open $fh, '<', $file))
{
die "Could not open $file for reading: $!";
}
$faux_req = RPC::XML::request->new(
'test',
RPC_STRING 'string',
RPC_INT 10,
RPC_I4 20,
RPC_I8 4294967296,
RPC_DOUBLE 0.5,
RPC_BOOLEAN 1,
RPC_DATETIME_ISO8601 time2iso8601(),
[ qw(a b c) ],
{ one => 2 },
RPC_NIL,
RPC_BASE64 $fh
);
# This is a good place to test the length() method, while we're at it
is(length($faux_req->as_string), $faux_req->length, 'Testing length() method');
if (! (open $ofh, '+>', $tmpfile))
{
die "Could not open $tmpfile for read/write: $!";
}
select $ofh; $| = 1; select STDOUT;
$faux_req->serialize($ofh);
ok(1, 'serialize method did not croak'); # Just happy we made it this far.
is(-s $ofh, length($faux_req->as_string), 'File size is correct');
seek $ofh, 0, 0;
$data = '';
read $ofh, $data, -s $ofh;
is($data, $faux_req->as_string, 'File content is correct');
# Done with these for now
close $fh;
close $ofh;
unlink $tmpfile;
# We'll be doing this next set twice, as RPC::XML::response::serialize has a
# slightly different code-path for faults and all other responses.
if (! (open $ofh, '+>', $tmpfile))
{
die "Could not open $tmpfile for read/write: $!";
}
select $ofh; $| = 1; select STDOUT;
$faux_res = RPC::XML::response->new(RPC::XML::fault->new(1, 'test'));
is(length($faux_res->as_string), $faux_res->length,
'length() in fault response');
$faux_res->serialize($ofh);
# Again, this means that all the triggered calls managed to not die
ok(1, 'serialize method did not croak');
is(-s $ofh, length($faux_res->as_string), 'Fault-response file size OK');
seek $ofh, 0, 0;
$data = '';
read $ofh, $data, -s $ofh;
is($data, $faux_res->as_string, 'Fault-response content is correct');
close $ofh;
unlink $tmpfile;
# Round two, with normal response (not fault)
if (! (open $ofh, '+>', $tmpfile))
{
die "Could not open $tmpfile for read/write: $!";
}
select $ofh; $| = 1; select STDOUT;
$faux_res = RPC::XML::response->new('test');
is(length($faux_res->as_string), $faux_res->length,
'length() in normal response');
$faux_res->serialize($ofh);
# Again, this means that all the triggered calls managed to not die
ok(1, 'serialize method did not croak');
is(-s $ofh, length($faux_res->as_string), 'Normal response file size OK');
seek $ofh, 0, 0;
$data = '';
read $ofh, $data, -s $ofh;
is($data, $faux_res->as_string, 'Normal response content OK');
close $ofh;
unlink $tmpfile;
# Test some extra code-paths in the base64 logic:
# Route 1: In-memory content
if (! (open $ofh, '+>', $tmpfile))
{
die "Could not open $tmpfile for read/write: $!";
}
select $ofh; $| = 1; select STDOUT;
$faux_res = RPC::XML::response->new(RPC::XML::base64->new('a simple string'));
is(length($faux_res->as_string), $faux_res->length,
'length() in normal response');
$faux_res->serialize($ofh);
# Again, this means that all the triggered calls managed to not die
ok(1, 'serialize method did not croak');
is(-s $ofh, length($faux_res->as_string), 'Normal response file size OK');
seek $ofh, 0, 0;
$data = '';
read $ofh, $data, -s $ofh;
is($data, $faux_res->as_string, 'Normal response content OK');
close $ofh;
unlink $tmpfile;
# Route 2: Spool from a file that is already encoded
if (! (open $ofh, '+>', $tmpfile))
{
die "Could not open $tmpfile for read/write: $!";
}
select $ofh; $| = 1; select STDOUT;
$file = File::Spec->catfile($dir, 'svsm_text.b64');
if (! (open $fh, '<', $file))
{
die "Could not open $file for reading: $!";
}
$faux_res = RPC::XML::response->new(RPC::XML::base64->new($fh, 'encoded'));
is(length($faux_res->as_string), $faux_res->length,
'length() in normal response');
$faux_res->serialize($ofh);
# Again, this means that all the triggered calls managed to not die
ok(1, 'serialize method did not croak');
is(-s $ofh, length($faux_res->as_string), 'Normal response file size OK');
seek $ofh, 0, 0;
$data = '';
read $ofh, $data, -s $ofh;
is($data, $faux_res->as_string, 'Normal response content OK');
close $fh;
close $ofh;
unlink $tmpfile;
exit;
Jump to Line
Something went wrong with that request. Please try again.