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