File: z_04_presence.t

package info (click to toggle)
libanyevent-xmpp-perl 0.55-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 784 kB
  • ctags: 553
  • sloc: perl: 8,004; makefile: 13
file content (91 lines) | stat: -rw-r--r-- 2,276 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!perl

use strict;
no warnings;
use Test::More;
use AnyEvent::XMPP::TestClient;
use AnyEvent::XMPP::IM::Message;
use AnyEvent::XMPP::Util qw/bare_jid prep_bare_jid split_jid/;

my $cl =
   AnyEvent::XMPP::TestClient->new_or_exit (
      tests => 7, two_accounts => 1, finish_count => 2
   );
my $C = $cl->client;

my ($src, $dest);

my $roster_push = 0;
my $received_subscribe = 0;
my $mutual_subscribe = 0;
my $subscriptions = 0;
my $unsubscriptions = 0;

my $dest_src_subs = '';
my $src_dest_subs = '';

sub jid_user($) { my ($u) = split_jid $_[0]; $u }

$C->reg_cb (
   two_accounts_ready => sub {
      my ($C) = @_;
      $src = prep_bare_jid $cl->{jid};
      $dest = prep_bare_jid $cl->{jid2};

      $cl->{acc}->connection->get_roster ()->new_contact (
         $cl->{jid2}, undef, "friend", sub {
         my ($con, $err) = @_;
         $roster_push = 1 if $con;
         if ($con) {
            $con->send_subscribe
         }
      });
   },
   contact_request_subscribe => sub {
      my ($C, $acc, $roster, $contact) = @_;

      if ($acc->bare_jid eq $dest) {
         $received_subscribe = 1;
         $contact->send_subscribed;
         $contact->send_subscribe;

      } elsif ($acc->bare_jid eq $src) {
         $mutual_subscribe = 1;
         $contact->send_subscribed;
      }
   },
   contact_unsubscribed => sub {
      my ($C, $acc, $roster, $contact) = @_;
      $unsubscriptions++;

      if ($contact->subscription eq 'from') {
         $contact->send_unsubscribed;
      }

      $cl->finish;
   },
   contact_subscribed => sub {
      my ($C, $acc, $roster, $contact) = @_;
      $subscriptions++;

      if ($acc->bare_jid eq $src) {
         $dest_src_subs = prep_bare_jid ($contact->jid);
      } else {
         $src_dest_subs = prep_bare_jid ($contact->jid);
      }

      if ($subscriptions >= 2) {
         $contact->send_unsubscribed;
      }
   }
);

$cl->wait;

ok ($roster_push, "roster push");
ok ($received_subscribe, "received subscription request");
ok ($mutual_subscribe,   "mutual subscription ok");
is ($subscriptions, 2, "got two subscriptions");
is ($unsubscriptions, 2, "got two unsubscriptions");
is ($dest_src_subs, $dest, "destination subscribed to source");
is ($src_dest_subs, $src, "source subscribed to destination");