1#!perl 2 3use strict; 4no warnings; 5use Test::More; 6use Net::XMPP2; 7use Net::XMPP2::TestClient; 8use Net::XMPP2::IM::Message; 9use Net::XMPP2::Util qw/bare_jid/; 10 11my $cl = 12 Net::XMPP2::TestClient->new_or_exit (tests => 4, two_accounts => 1, finish_count => 2); 13my $C = $cl->client; 14my $vers = $cl->instance_ext ('Net::XMPP2::Ext::Version'); 15 16$vers->set_os ('GNU/Virtual 0.23 x86_128'); 17 18my $recv_error; 19my $recv_error_2; 20my $recv_vers_error = ''; 21my $recv_vers; 22 23my $dest; 24 25$C->reg_cb ( 26 two_accounts_ready => sub { 27 my ($C, $acc, $jid1, $jid2) = @_; 28 my $con = $C->get_account ($jid1)->connection; 29 30 $dest = $jid2; 31 32 $vers->request_version ($con, $jid2, sub { 33 my ($version, $error) = @_; 34 35 if ($error) { 36 $recv_error = $error; 37 38 } else { 39 $recv_vers = 40 sprintf "(%s) %s/%s/%s", 41 $version->{jid}, $version->{name}, $version->{version}, $version->{os}; 42 } 43 $cl->finish; 44 }); 45 46 $con->send_iq ('get', { 47 defns => 'broken:iq:request', 48 node => { ns => 'broken:iq:request', name => 'query' } 49 }, sub { 50 my ($n, $e) = @_; 51 $recv_error_2 = $e; 52 $cl->finish; 53 }, to => $jid2); 54 } 55); 56 57$cl->wait; 58 59ok ((not defined $recv_error), 'no service unavailable error on first request'); 60is ($recv_error_2->condition (), 'service-unavailable', 'service unavailable error for second request'); 61is ($recv_vers_error , '' , 'no software version error'); 62is ($recv_vers, 63 "($dest) Net::XMPP2/$Net::XMPP2::VERSION/GNU/Virtual 0.23 x86_128", 64 'software version reply'); 65