10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2004, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <iostream> 29cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include <sstream> 30cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include <string> 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "buzz/chatroommodule.h" 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "buzz/constants.h" 33cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "buzz/xmlelement.h" 34cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "buzz/xmppengine.h" 35cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "common/common.h" 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "engine/util_unittest.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "test/unittest-inl.h" 38cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "test/unittest.h" 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TEST_OK(x) TEST_EQ((x),XMPP_RETURN_OK) 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TEST_BADARGUMENT(x) TEST_EQ((x),XMPP_RETURN_BADARGUMENT) 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace buzz { 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MultiUserChatModuleTest; 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic void 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgWriteEnteredStatus(std::ostream& os, XmppChatroomEnteredStatus status) { 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org switch(status) { 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_SUCCESS: 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"success"; 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_NICKNAME_CONFLICT: 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(nickname conflict)"; 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_PASSWORD_REQUIRED: 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(password required)"; 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_PASSWORD_INCORRECT: 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(password incorrect)"; 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_NOT_A_MEMBER: 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(not a member)"; 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_MEMBER_BANNED: 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(member banned)"; 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_MAX_USERS: 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(max users)"; 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_ROOM_LOCKED: 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(room locked)"; 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_ENTERED_FAILURE_UNSPECIFIED: 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"failure(unspecified)"; 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org default: 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"unknown"; 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic void 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgWriteExitedStatus(std::ostream& os, XmppChatroomExitedStatus status) { 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org switch (status) { 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_REQUESTED: 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"requested"; 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_BANNED: 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"banned"; 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_KICKED: 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"kicked"; 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_NOT_A_MEMBER: 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"not member"; 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_SYSTEM_SHUTDOWN: 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"system shutdown"; 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case XMPP_CHATROOM_EXITED_UNSPECIFIED: 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"unspecified"; 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org default: 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org os<<"unknown"; 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//! This session handler saves all calls to a string. These are events and 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//! data delivered form the engine to application code. 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass XmppTestChatroomHandler : public XmppChatroomHandler { 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgpublic: 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppTestChatroomHandler() {} 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~XmppTestChatroomHandler() {} 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void ChatroomEnteredStatus(XmppChatroomModule* room, 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppChatroomEnteredStatus status) { 1192a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED(room); 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ <<"[ChatroomEnteredStatus status: "; 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WriteEnteredStatus(ss_, status); 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ <<"]"; 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void ChatroomExitedStatus(XmppChatroomModule* room, 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppChatroomExitedStatus status) { 1282a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED(room); 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ <<"[ChatroomExitedStatus status: "; 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WriteExitedStatus(ss_, status); 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ <<"]"; 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void MemberEntered(XmppChatroomModule* room, 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const XmppChatroomMember* entered_member) { 1362a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED(room); 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ << "[MemberEntered " << entered_member->member_jid().Str() << "]"; 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void MemberExited(XmppChatroomModule* room, 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const XmppChatroomMember* exited_member) { 1422a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED(room); 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ << "[MemberExited " << exited_member->member_jid().Str() << "]"; 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void MemberChanged(XmppChatroomModule* room, 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const XmppChatroomMember* changed_member) { 1482a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED(room); 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_ << "[MemberChanged " << changed_member->member_jid().Str() << "]"; 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void MessageReceived(XmppChatroomModule* room, const XmlElement& message) { 1532a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org RTC_UNUSED2(room, message); 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string Str() { 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ss_.str(); 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string StrClear() { 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result = ss_.str(); 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_.str(""); 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprivate: 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::stringstream ss_; 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//! This is the class that holds all of the unit test code for the 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org//! roster module 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass XmppChatroomModuleTest : public UnitTest { 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgpublic: 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppChatroomModuleTest() {} 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestEnterExitChatroom() { 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::stringstream dump; 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Configure the engine 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org scoped_ptr<XmppEngine> engine(XmppEngine::Create()); 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppTestHandler handler(engine.get()); 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Configure the module and handler 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org scoped_ptr<XmppChatroomModule> chatroom(XmppChatroomModule::Create()); 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Configure the module handler 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->RegisterEngine(engine.get()); 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up callbacks 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org engine->SetOutputHandler(&handler); 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org engine->AddStanzaHandler(&handler); 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org engine->SetSessionHandler(&handler); 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up minimal login info 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org engine->SetUser(Jid("david@my-server")); 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org engine->SetPassword("david"); 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Do the whole login handshake 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RunLogin(this, engine.get(), &handler); 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ("", handler.OutputActivity()); 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Get the chatroom and set the handler 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org XmppTestChatroomHandler chatroom_handler; 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->set_chatroom_handler(static_cast<XmppChatroomHandler*>(&chatroom_handler)); 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // try to enter the chatroom 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_NOT_IN_ROOM); 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->set_nickname("thirdwitch"); 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->set_chatroom_jid(Jid("darkcave@my-server")); 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->RequestEnterChatroom("", XMPP_CONNECTION_STATUS_UNKNOWN, "en"); 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), ""); 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(handler.OutputActivity(), 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<presence to=\"darkcave@my-server/thirdwitch\">" 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<muc:x xmlns:muc=\"http://jabber.org/protocol/muc\"/>" 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"); 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_REQUESTED_ENTER); 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // simulate the server and test the client 2200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string input; 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/firstwitch\" to=\"david@my-server\">" 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"owner\" role=\"participant\"/>" 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), ""); 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_REQUESTED_ENTER); 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/secondwitch\" to=\"david@my-server\">" 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"member\" role=\"participant\"/>" 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), ""); 2370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_REQUESTED_ENTER); 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/thirdwitch\" to=\"david@my-server\">" 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"member\" role=\"participant\"/>" 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "[ChatroomEnteredStatus status: success]"); 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_IN_ROOM); 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // simulate somebody else entering the room after we entered 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/fourthwitch\" to=\"david@my-server\">" 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"member\" role=\"participant\"/>" 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), "[MemberEntered darkcave@my-server/fourthwitch]"); 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_IN_ROOM); 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // simulate somebody else leaving the room after we entered 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/secondwitch\" to=\"david@my-server\" type=\"unavailable\">" 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"member\" role=\"participant\"/>" 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), "[MemberExited darkcave@my-server/secondwitch]"); 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_IN_ROOM); 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // try to leave the room 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org chatroom->RequestExitChatroom(); 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), ""); 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(handler.OutputActivity(), 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<presence to=\"darkcave@my-server/thirdwitch\" type=\"unavailable\"/>"); 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_REQUESTED_EXIT); 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // simulate the server and test the client 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org input = "<presence from=\"darkcave@my-server/thirdwitch\" to=\"david@my-server\" type=\"unavailable\">" 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<x xmlns=\"http://jabber.org/protocol/muc#user\">" 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item affiliation=\"member\" role=\"participant\"/>" 2800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</x>" 2810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</presence>"; 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_OK(engine->HandleInput(input.c_str(), input.length())); 2830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom_handler.StrClear(), 2840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "[ChatroomExitedStatus status: requested]"); 2850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_EQ(chatroom->state(), XMPP_CHATROOM_STATE_NOT_IN_ROOM); 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// A global function that creates the test suite for this set of tests. 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTestBase* ChatroomModuleTest_Create() { 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSuite* suite = new TestSuite("ChatroomModuleTest"); 2930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ADD_TEST(suite, XmppChatroomModuleTest, TestEnterExitChatroom); 2940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return suite; 2950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 298