Changeset - e1c00a8a105d
[Not reviewed]
0 2 0
HanzZ - 12 years ago 2013-01-11 22:31:19
hanzz.k@gmail.com
Added test for disconnecting one resource in server mode
2 files changed with 25 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/tests/usermanager.cpp
Show inline comments
 
@@ -31,12 +31,14 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
	CPPUNIT_TEST(handleProbePresence);
 
	CPPUNIT_TEST(disconnectUser);
 
	CPPUNIT_TEST(disconnectUserBouncer);
 
	CPPUNIT_TEST_SUITE_END();
 

	
 
	public:
 
		Swift::Presence::ref changedPresence;
 

	
 
		void setUp (void) {
 
			setMeUp();
 
		}
 

	
 
		void tearDown (void) {
 
			tearMeDown();
 
@@ -162,26 +164,49 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		dynamic_cast<Swift::ServerStanzaChannel *>(component->getStanzaChannel())->onPresenceReceived(response);
 
		loop->processEvents();
 

	
 
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
 
	}
 

	
 
	void handleUserPresenceChanged(User *user, Swift::Presence::ref presence) {
 
		changedPresence = presence;
 
	}
 

	
 
	void connectTwoResources() {
 
		connectUser();
 
		add2Buddies();
 
		connectSecondResource();
 

	
 
		User *user = userManager->getUser("user@localhost");
 
		user->onPresenceChanged.connect(boost::bind(&UserManagerTest::handleUserPresenceChanged, this, user, _1));
 

	
 
		// we should get presences
 
		CPPUNIT_ASSERT_EQUAL(4, (int) received2.size());
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received2[2])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received2[2]))->getShow());
 
		CPPUNIT_ASSERT_EQUAL(std::string("status1"), dynamic_cast<Swift::Presence *>(getStanza(received2[2]))->getStatus());
 

	
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received2[3])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received2[3]))->getShow());
 
		CPPUNIT_ASSERT_EQUAL(std::string("status2"), dynamic_cast<Swift::Presence *>(getStanza(received2[3]))->getStatus());
 

	
 
		Swift::Presence::ref response = Swift::Presence::create();
 
		response->setTo("localhost");
 
		response->setFrom("user@localhost/resource");
 
		response->setType(Swift::Presence::Unavailable);
 
		injectPresence(response);
 

	
 
		CPPUNIT_ASSERT_EQUAL(Swift::Presence::Available, changedPresence->getType());
 

	
 
		Swift::Presence::ref response2 = Swift::Presence::create();
 
		response2->setTo("localhost");
 
		response2->setFrom("user@localhost/resource2");
 
		response2->setType(Swift::Presence::Unavailable);
 
		injectPresence(response2);
 

	
 
		CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unavailable, changedPresence->getType());
 
	}
 

	
 
	void disconnectUserBouncer() {
 
		connectUser();
 
		User *user = userManager->getUser("user@localhost");
 
		user->addUserSetting("stay_connected", "1");
src/user.cpp
Show inline comments
 
@@ -345,13 +345,12 @@ void User::handlePresence(Swift::Presence::ref presence, bool forceJoin) {
 
	if (presence->getType() != Swift::Presence::Unavailable && currentResourcesCount != m_resources) {
 
		m_rosterManager->sendCurrentPresences(presence->getFrom());
 
	}
 

	
 
	m_resources = currentResourcesCount;
 

	
 

	
 
	// Change legacy network presence
 
	if (m_readyForConnect) {
 
		Swift::Presence::ref highest = m_presenceOracle->getHighestPriorityPresence(m_jid.toBare());
 
		if (highest) {
 
			if (highest->getType() == Swift::Presence::Unavailable && getUserSetting("stay_connected") == "1") {
 
				m_resources = 0;
0 comments (0 inline, 0 general)