KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jivesoftware > smackx > packet > RosterExchangeTest


1 /*
2  * Created on 01/08/2003
3  *
4  */

5 package org.jivesoftware.smackx.packet;
6
7 import java.util.Iterator JavaDoc;
8
9 import org.jivesoftware.smack.*;
10 import org.jivesoftware.smack.filter.*;
11 import org.jivesoftware.smack.packet.*;
12 import org.jivesoftware.smack.test.SmackTestCase;
13 import org.jivesoftware.smackx.*;
14
15 /**
16  *
17  * Test the Roster Exchange extension using the low level API
18  *
19  * @author Gaston Dombiak
20  */

21 public class RosterExchangeTest extends SmackTestCase {
22
23     /**
24      * Constructor for RosterExchangeTest.
25      * @param arg0
26      */

27     public RosterExchangeTest(String JavaDoc arg0) {
28         super(arg0);
29     }
30
31     /**
32      * Low level API test.
33      * This is a simple test to use with a XMPP client and check if the client receives the message
34      * 1. User_1 will send his/her roster entries to user_2
35      */

36     public void testSendRosterEntries() {
37         // Create a chat for each connection
38
Chat chat1 = getConnection(0).createChat(getBareJID(1));
39
40         // Create the message to send with the roster
41
Message msg = chat1.createMessage();
42         msg.setSubject("Any subject you want");
43         msg.setBody("This message contains roster items.");
44         // Create a RosterExchange Package and add it to the message
45
assertTrue("Roster has no entries", getConnection(0).getRoster().getEntryCount() > 0);
46         RosterExchange rosterExchange = new RosterExchange(getConnection(0).getRoster());
47         msg.addExtension(rosterExchange);
48
49         // Send the message that contains the roster
50
try {
51             chat1.sendMessage(msg);
52         } catch (Exception JavaDoc e) {
53             fail("An error occured sending the message with the roster");
54         }
55     }
56
57     /**
58     * Low level API test.
59     * 1. User_1 will send his/her roster entries to user_2
60     * 2. User_2 will receive the entries and iterate over them to check if everything is fine
61     * 3. User_1 will wait several seconds for an ACK from user_2, if none is received then something is wrong
62     */

63     public void testSendAndReceiveRosterEntries() {
64         // Create a chat for each connection
65
Chat chat1 = getConnection(0).createChat(getBareJID(1));
66         final Chat chat2 = new Chat(getConnection(1), getBareJID(0), chat1.getThreadID());
67
68         // Create a Listener that listens for Messages with the extension "jabber:x:roster"
69
// This listener will listen on the conn2 and answer an ACK if everything is ok
70
PacketFilter packetFilter = new PacketExtensionFilter("x", "jabber:x:roster");
71         PacketListener packetListener = new PacketListener() {
72             public void processPacket(Packet packet) {
73                 Message message = (Message) packet;
74                 assertNotNull("Body is null", message.getBody());
75                 try {
76                     RosterExchange rosterExchange =
77                         (RosterExchange) message.getExtension("x", "jabber:x:roster");
78                     assertNotNull("Message without extension \"jabber:x:roster\"", rosterExchange);
79                     assertTrue(
80                         "Roster without entries",
81                         rosterExchange.getRosterEntries().hasNext());
82                     for (Iterator JavaDoc it = rosterExchange.getRosterEntries(); it.hasNext();) {
83                         RemoteRosterEntry remoteRosterEntry = (RemoteRosterEntry) it.next();
84                     }
85                 } catch (ClassCastException JavaDoc e) {
86                     fail("ClassCastException - Most probable cause is that smack providers is misconfigured");
87                 }
88                 try {
89                     chat2.sendMessage("ok");
90                 } catch (Exception JavaDoc e) {
91                     fail("An error occured sending ack " + e.getMessage());
92                 }
93             }
94         };
95         getConnection(1).addPacketListener(packetListener, packetFilter);
96
97         // Create the message to send with the roster
98
Message msg = chat1.createMessage();
99         msg.setSubject("Any subject you want");
100         msg.setBody("This message contains roster items.");
101         // Create a RosterExchange Package and add it to the message
102
assertTrue("Roster has no entries", getConnection(0).getRoster().getEntryCount() > 0);
103         RosterExchange rosterExchange = new RosterExchange(getConnection(0).getRoster());
104         msg.addExtension(rosterExchange);
105
106         // Send the message that contains the roster
107
try {
108             chat1.sendMessage(msg);
109         } catch (Exception JavaDoc e) {
110             fail("An error occured sending the message with the roster");
111         }
112         // Wait for 2 seconds for a reply
113
msg = chat1.nextMessage(2000);
114         assertNotNull("No reply received", msg);
115     }
116
117     /**
118      * Low level API test.
119      * 1. User_1 will send his/her roster entries to user_2
120      * 2. User_2 will automatically add the entries that receives to his/her roster in the corresponding group
121      * 3. User_1 will wait several seconds for an ACK from user_2, if none is received then something is wrong
122      */

123     public void testSendAndAcceptRosterEntries() {
124         // Create a chat for each connection
125
Chat chat1 = getConnection(0).createChat(getBareJID(1));
126         final Chat chat2 = new Chat(getConnection(1), getBareJID(0), chat1.getThreadID());
127
128         // Create a Listener that listens for Messages with the extension "jabber:x:roster"
129
// This listener will listen on the conn2, save the roster entries and answer an ACK if everything is ok
130
PacketFilter packetFilter = new PacketExtensionFilter("x", "jabber:x:roster");
131         PacketListener packetListener = new PacketListener() {
132             public void processPacket(Packet packet) {
133                 Message message = (Message) packet;
134                 assertNotNull("Body is null", message.getBody());
135                 try {
136                     RosterExchange rosterExchange =
137                         (RosterExchange) message.getExtension("x", "jabber:x:roster");
138                     assertNotNull("Message without extension \"jabber:x:roster\"", rosterExchange);
139                     assertTrue(
140                         "Roster without entries",
141                         rosterExchange.getRosterEntries().hasNext());
142                     // Add the roster entries to user2's roster
143
for (Iterator JavaDoc it = rosterExchange.getRosterEntries(); it.hasNext();) {
144                         RemoteRosterEntry remoteRosterEntry = (RemoteRosterEntry) it.next();
145                         getConnection(1).getRoster().createEntry(
146                             remoteRosterEntry.getUser(),
147                             remoteRosterEntry.getName(),
148                             remoteRosterEntry.getGroupArrayNames());
149                     }
150                 } catch (ClassCastException JavaDoc e) {
151                     fail("ClassCastException - Most probable cause is that smack providers is misconfigured");
152                 } catch (Exception JavaDoc e) {
153                     fail(e.toString());
154                 }
155                 try {
156                     chat2.sendMessage("ok");
157                 } catch (Exception JavaDoc e) {
158                     fail("An error occured sending ack " + e.getMessage());
159                 }
160             }
161         };
162         getConnection(1).addPacketListener(packetListener, packetFilter);
163
164         // Create the message to send with the roster
165
Message msg = chat1.createMessage();
166         msg.setSubject("Any subject you want");
167         msg.setBody("This message contains roster items.");
168         // Create a RosterExchange Package and add it to the message
169
assertTrue("Roster has no entries", getConnection(0).getRoster().getEntryCount() > 0);
170         RosterExchange rosterExchange = new RosterExchange(getConnection(0).getRoster());
171         msg.addExtension(rosterExchange);
172
173         // Send the message that contains the roster
174
try {
175             chat1.sendMessage(msg);
176         } catch (Exception JavaDoc e) {
177             fail("An error occured sending the message with the roster");
178         }
179         // Wait for 10 seconds for a reply
180
msg = chat1.nextMessage(5000);
181         assertNotNull("No reply received", msg);
182         try {
183             Thread.sleep(200);
184         } catch (Exception JavaDoc e) {
185         }
186         assertTrue("Roster2 has no entries", getConnection(1).getRoster().getEntryCount() > 0);
187     }
188
189     protected void setUp() throws Exception JavaDoc {
190         super.setUp();
191         try {
192             getConnection(0).getRoster().createEntry(
193                 getBareJID(2),
194                 "gato5",
195                 new String JavaDoc[] { "Friends, Coworker" });
196             getConnection(0).getRoster().createEntry(getBareJID(3), "gato6", null);
197             Thread.sleep(300);
198
199         } catch (Exception JavaDoc e) {
200             fail(e.getMessage());
201         }
202     }
203
204     protected int getMaxConnections() {
205         return 4;
206     }
207
208 }
209
Popular Tags