complete OperationSetMultiUserChat and ChatRoom tests

cusax-fix
Symphorien Wanko 17 years ago
parent 40b06b34b7
commit 40f01c424c

@ -829,7 +829,11 @@ public void banned(String participant, String actor, String reason)
if(member == null)
return;
String participantName = StringUtils.parseResource(participant);
members.remove(participantName);
banList.put(participant, member);
fireMemberRoleEvent(member, member.getRole(),

@ -36,7 +36,7 @@ public class TestOperationSetMultiUserChat2
/**
* Provides constants and some utilities method.
*/
private JabberSlickFixture fixture = new JabberSlickFixture();
private final JabberSlickFixture fixture = new JabberSlickFixture();
private OperationSetMultiUserChat opSetMUC1;
@ -240,22 +240,18 @@ public static Test suite()
suite.addTest(
new TestOperationSetMultiUserChat2("testNickName"));
// following test are not yet commplete
suite.addTest(
new TestOperationSetMultiUserChat2("testRoomSubject"));
//
//
// suite.addTest(
// new TestOperationSetMultiUserChat2("testConferenceChat"));
//
//
// suite.addTest(
// new TestOperationSetMultiUserChat2("testMemberBan"));
//
//
// suite.addTest(
// new TestOperationSetMultiUserChat2("testMemberKick"));
suite.addTest(
new TestOperationSetMultiUserChat2("testConferenceChat"));
suite.addTest(
new TestOperationSetMultiUserChat2("testMemberBan"));
suite.addTest(
new TestOperationSetMultiUserChat2("testMemberKick"));
return suite;
}
@ -832,8 +828,6 @@ public void testConferenceChat()
throws OperationFailedException,
OperationNotSupportedException
{
if (true) // just to avoid the not reacheable statement when compiling
throw new OperationNotSupportedException("not yet implemented");
String testRoomName = testRoomBaseName + roomID++;
// we create the test room
@ -864,22 +858,38 @@ public void testConferenceChat()
opSet2RoomCollector.waitForEvent(10000);
// does every member received the message
assertEquals("user1 didn't received the message"
assertEquals("user1 didn't received an event for message delivery "
, 1, opSet1RoomCollector.collectedEvents.size());
assertEquals("user1 didn't received the message"
assertEquals("user2 didn't received the message"
, 1, opSet2RoomCollector.collectedEvents.size());
ChatRoomMessageDeliveredEvent deliveryEvent =
(ChatRoomMessageDeliveredEvent)
opSet1RoomCollector.collectedEvents.get(0);
assertEquals("message type is not CONVERSATION_MESSAGE_DELIVERED"
, ChatRoomMessageDeliveredEvent.CONVERSATION_MESSAGE_DELIVERED
, deliveryEvent.getEventType());
assertSame("the message has been delivered to another room instance"
, opSet1Room, deliveryEvent.getSourceChatRoom());
assertEquals(
"delivered message differ from sent message"
, message1, deliveryEvent.getMessage().getContent());
// what happened on user2 side
ChatRoomMessageReceivedEvent messageEvent =
(ChatRoomMessageReceivedEvent)
opSet2RoomCollector.collectedEvents.get(0);
assertSame("the message comes from another room instance"
, opSet2Room, messageEvent.getSourceChatRoom());
assertEquals("message type is not CONVERSATION_MESSAGE_RECEIVED"
, ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED
, messageEvent.getEventType());
assertSame("the message comes from another room instance"
, opSet2Room, messageEvent.getSourceChatRoom());
ChatRoomMember member = messageEvent.getSourceChatRoomMember();
assertEquals("message comes from an unexpected user"
@ -888,78 +898,16 @@ public void testConferenceChat()
assertEquals(
"received message differ from sent message"
, message1, messageEvent.getMessage().getContent());
// for the sender side, thereis two events, the message delivery one
// and the message reception itself
if (opSet1RoomCollector.collectedEvents.size() != 2)
{
opSet1RoomCollector.waitForEvent(10000);
}
assertEquals(
"message sender missed either the message delivery " +
"or the reception event"
, 2, opSet1RoomCollector.collectedEvents.size());
ChatRoomMessageDeliveredEvent deliveryEvent;
ChatRoomMessageReceivedEvent receptionEvent;
// since we dont know which message has been received first, we have
// to check
if (opSet1RoomCollector.collectedEvents.get(0)
instanceof ChatRoomMessageDeliveredEvent)
{
deliveryEvent = (ChatRoomMessageDeliveredEvent)
opSet1RoomCollector.collectedEvents.get(0);
receptionEvent = (ChatRoomMessageReceivedEvent)
opSet1RoomCollector.collectedEvents.get(1);
}
else
{
receptionEvent = (ChatRoomMessageReceivedEvent)
opSet1RoomCollector.collectedEvents.get(0);
deliveryEvent = (ChatRoomMessageDeliveredEvent)
opSet1RoomCollector.collectedEvents.get(1);
}
// looking the receptionEvent
assertSame("the message comes from another room instance"
, opSet1Room, receptionEvent.getSourceChatRoom());
assertEquals("message type is not CONVERSATION_MESSAGE_RECEIVED"
, ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED
, messageEvent.getEventType());
member = receptionEvent.getSourceChatRoomMember();
assertEquals("message comes from an unexpected user"
, opSet1Room.getUserNickname(), member.getName());
assertEquals("received message differ from sent message"
, message1, receptionEvent.getMessage().getContent());
// and now check consistency between the delivery event and the
// reception eveynt
assertSame("delivery event and reception event source rooms differ"
, deliveryEvent.getSourceChatRoom()
, receptionEvent.getSourceChatRoom());
assertSame("delivery event and reception event message content"
, deliveryEvent.getMessage().getContent()
, receptionEvent.getMessage().getContent());
}
/**
* Here we test conference messagin : sending, receiving messages and
* corresponding events.
* In <tt>testMemberBan</tt>, a member joins, then he is banned
* and try to join again
*/
public void testMemberBan()
throws OperationFailedException,
OperationNotSupportedException
{
if (true) // just to avoid the not reacheable statement when compiling
throw new OperationNotSupportedException("not yet implemented");
String testRoomName = testRoomBaseName + roomID++;
// we create the test room
@ -967,20 +915,73 @@ public void testMemberBan()
opSetMUC1.createChatRoom(testRoomName, null);
opSet1Room.join();
MUCEventCollector opSet1RoomCollector =
new MUCEventCollector(
opSet1Room, MUCEventCollector.EVENT_PRESENCE);
ChatRoom opSet2Room = opSetMUC2.findRoom(testRoomName);
opSet2Room.join();
opSet1RoomCollector.waitForEvent(10000);
assertTrue("user2 not on member list after join"
, nameIsOnMemberList(fixture.userID2, opSet1Room.getMembers()));
List<ChatRoomMember> members = opSet1Room.getMembers();
ChatRoomMember memberToBan = null;
for (ChatRoomMember member : members)
if (member.getContactAddress().equals(fixture.userID2))
{
memberToBan = member;
break;
}
if (memberToBan == null)
throw new IllegalStateException("member to ban not found");
opSet1RoomCollector =
new MUCEventCollector(
opSet1Room, MUCEventCollector.EVENT_ROLE);
assertTrue("user2 not in a room he joined "
, opSet2Room.isJoined());
opSet1Room.banParticipant(memberToBan, "testMemberBan");
opSet1RoomCollector.waitForEvent(10000);
assertEquals("user1 didnt received an event for user2 ban"
, 1, opSet1RoomCollector.collectedEvents.size());
assertFalse("user2 still on member list after ban"
, nameIsOnMemberList(fixture.userID2, opSet1Room.getMembers()));
assertFalse("user2 still in a room after been banned"
, opSet2Room.isJoined());
try
{
opSet2Room.join();
}
catch (Exception ex)
{
// user2 has not been only kicked but banned so
// he must not be able to join
}
assertFalse("user2 just joined a room where he is banned"
, opSet2Room.isJoined());
}
/**
* Here we test conference messagin : sending, receiving messages and
* corresponding events.
* In <tt>testMemberKick</tt>, a member joins, then he is banned
* and try to join again
*/
public void testMemberKick()
throws OperationFailedException,
OperationNotSupportedException
{
if (true) // just to avoid the not reacheable statement when compiling
throw new OperationNotSupportedException("not yet implemented");
String testRoomName = testRoomBaseName + roomID++;
// we create the test room
@ -988,8 +989,72 @@ public void testMemberKick()
opSetMUC1.createChatRoom(testRoomName, null);
opSet1Room.join();
MUCEventCollector opSet1RoomCollector =
new MUCEventCollector(
opSet1Room, MUCEventCollector.EVENT_PRESENCE);
ChatRoom opSet2Room = opSetMUC2.findRoom(testRoomName);
opSet2Room.join();
opSet1RoomCollector.waitForEvent(10000);
assertTrue("user2 not on member list after join"
, nameIsOnMemberList(fixture.userID2, opSet1Room.getMembers()));
List<ChatRoomMember> members = opSet1Room.getMembers();
ChatRoomMember memberToKick = null;
for (ChatRoomMember member : members)
if (member.getContactAddress().equals(fixture.userID2))
{
memberToKick = member;
break;
}
if (memberToKick == null)
throw new IllegalStateException("member to kick not found");
opSet1RoomCollector =
new MUCEventCollector(
opSet1Room, MUCEventCollector.EVENT_PRESENCE);
assertTrue("user2 not in a room he joined "
, opSet2Room.isJoined());
opSet1Room.kickParticipant(memberToKick, "testMemberKick");
opSet1RoomCollector.waitForEvent(10000);
assertEquals("user1 didnt received an event for user2 kick"
, 1, opSet1RoomCollector.collectedEvents.size());
ChatRoomMemberPresenceChangeEvent changeEvent =
(ChatRoomMemberPresenceChangeEvent)
opSet1RoomCollector.collectedEvents.get(0);
assertEquals("the event received by user1 is not "
, ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED
, changeEvent.getEventType());
assertEquals("the kicked member is not the one expected"
, memberToKick.getContactAddress()
, changeEvent.getChatRoomMember().getContactAddress());
assertFalse("user2 still on member list after ban"
, nameIsOnMemberList(fixture.userID2, opSet1Room.getMembers()));
assertFalse("user2 still in a room after been kicked"
, opSet2Room.isJoined());
// contrary to a ban, an user can join after been kicked
opSet2Room.join();
assertTrue("user2 can't join after been kicked "
, opSet2Room.isJoined());
opSet1RoomCollector.waitForEvent(10000);
assertTrue("user2 not on list when joining after a kick"
, nameIsOnMemberList(fixture.userID2, opSet1Room.getMembers()));
}
/**
@ -1002,7 +1067,9 @@ class MUCEventCollector
ChatRoomMemberPresenceListener,
ChatRoomMessageListener,
ChatRoomMemberPropertyChangeListener,
ChatRoomPropertyChangeListener
ChatRoomPropertyChangeListener,
ChatRoomMemberRoleListener,
ChatRoomLocalUserRoleListener
{
private final ArrayList collectedEvents = new ArrayList();
@ -1020,6 +1087,8 @@ class MUCEventCollector
private static final int EVENT_PROPERTY = 4;
private static final int EVENT_ROLE = 5;
/**
* Creates an event collector to listen for specific events from
* the given opSet
@ -1064,6 +1133,10 @@ public MUCEventCollector(ChatRoom room, int eventType)
room.addMemberPropertyChangeListener(this);
room.addPropertyChangeListener(this);
break;
case EVENT_ROLE:
room.addMemberRoleListener(this);
room.addLocalUserRoleListener(this);
break;
default:
throw new IllegalArgumentException(
"invalid event category " + eventType);
@ -1185,5 +1258,17 @@ public void chatRoomPropertyChangeFailed(
{
collectEvent(evt);
}
public void memberRoleChanged(
ChatRoomMemberRoleChangeEvent evt)
{
collectEvent(evt);
}
public void localUserRoleChanged(
ChatRoomLocalUserRoleChangeEvent evt)
{
collectEvent(evt);
}
}
}

Loading…
Cancel
Save