PresenceTest::testMultipleResources

Hi

This appears to be another timing dependent test.

In the test code I commented out the, oddly complex, block that tried to wait up to two seconds, and just added an explicit sleep of two seconds. See below.

The test did not pass consistently before this change. It seems to pass consistently now.

Just for the record, my development environment is as follows:

  • MacBookPro mid 2009 8GB RAM 480GB SSD.

  • VMWare Fusion running Linux running my server hosted on my laptop.

  • Running Ant build and unit tests in Eclipse Indigo.

The point of which is to say that my setup should be reasonably performant, so whichever platform these tests do run properly on would seem to be a great deal more performant than mine, or something else is at play here.

Regards

Nathan

public void testMultipleResources() throws Exception {

// Create another connection for the same user of connection 1

ConnectionConfiguration connectionConfiguration =

new ConnectionConfiguration(getHost(), getPort(), getServiceName());

XMPPConnection conn4 = new XMPPConnection(connectionConfiguration);

conn4.connect();

conn4.login(getUsername(1), getUsername(1), “Home”);

// Add a new roster entry

Roster roster = getConnection(0).getRoster();

roster.createEntry(getBareJID(1), “gato1”, null);

// // Wait up to 2 seconds

// long initial = System.currentTimeMillis();

// while (System.currentTimeMillis() - initial < 2000 && (

// !roster.getPresence(getBareJID(1)).isAvailable()))

// {

// Thread.sleep(100);

// }

Thread.sleep(2000);

// Check that a presence is returned for the new contact

Presence presence = roster.getPresence(getBareJID(1));

assertTrue(“Returned an offline Presence for an existing user”, presence.isAvailable());

presence = roster.getPresenceResource(getBareJID(1) + “/Home”);

assertTrue(“Returned an offline Presence for Home resource”, presence.isAvailable());

presence = roster.getPresenceResource(getFullJID(1));

assertTrue(“Returned an offline Presence for Smack resource”, presence.isAvailable());

Iterator presences = roster.getPresences(getBareJID(1));

assertTrue(“Returned an offline Presence for an existing user”, presence.isAvailable());

assertNotNull(“No presence was found for user1”, presences);

assertTrue(“No presence was found for user1”, presences.hasNext());

presences.next();

assertTrue(“Only one presence was found for user1”, presences.hasNext());

// User1 logs out from one resource

conn4.disconnect();

// Wait up to 1 second

Thread.sleep(700);

// Check that a presence is returned for the new contact

presence = roster.getPresence(getBareJID(1));

assertTrue(“Returned a null Presence for an existing user”, presence.isAvailable());

presence = roster.getPresenceResource(getFullJID(1));

assertTrue(“Returned a null Presence for Smack resource”, presence.isAvailable());

presence = roster.getPresenceResource(getBareJID(1) + “/Home”);

assertTrue(“Returned a Presence for no longer connected resource”, !presence.isAvailable());

presences = roster.getPresences(getBareJID(1));

assertNotNull(“No presence was found for user1”, presences);

Presence value = presences.next();

assertTrue(“No presence was found for user1”, value.isAvailable());

assertFalse(“More than one presence was found for user1”, presences.hasNext());

}