Files @ 0a78acefef91
Branch filter:

Location: libtransport.git/tests/libtransport/localbuddy.cpp - annotation

himselfv
Carbons (#267)

Forward own messages from legacy network

* requires XEP-280/XEP-297 enabled client and XEP-0356 enabled server
* closes #265
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
e5aab1415d9e
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
df3276119498
eeda35442237
31b80dbe76f2
f2385971a209
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
e5aab1415d9e
e5aab1415d9e
e5aab1415d9e
e5aab1415d9e
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
df3276119498
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
eeda35442237
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
eeda35442237
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
31b80dbe76f2
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
f2385971a209
7b287fdc66eb
7b287fdc66eb
7b287fdc66eb
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>
#include <Swiften/Swiften.h>
#include <Swiften/EventLoop/DummyEventLoop.h>
#include <Swiften/Server/Server.h>
#include <Swiften/Network/DummyNetworkFactories.h>
#include <Swiften/Network/DummyConnectionServer.h>
#include "Swiften/Server/ServerStanzaChannel.h"
#include "Swiften/Server/ServerFromClientSession.h"
#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h"
#include "basictest.h"

using namespace Transport;

class LocalBuddyTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
	CPPUNIT_TEST_SUITE(LocalBuddyTest);
	CPPUNIT_TEST(localBuddySize);
	CPPUNIT_TEST(createWithInvalidName);
	CPPUNIT_TEST(buddyFlagsFromJID);
	CPPUNIT_TEST(JIDToLegacyName);
	CPPUNIT_TEST(getSafeName);
	CPPUNIT_TEST(sendPresence);
	CPPUNIT_TEST(setAlias);
	CPPUNIT_TEST(sendPresenceTypeNone);
	CPPUNIT_TEST_SUITE_END();

	public:
		void setUp (void) {
			setMeUp();
			connectUser();
			received.clear();
		}

		void tearDown (void) {
			received.clear();
			disconnectUser();
			tearMeDown();
		}

	void localBuddySize() {
		std::cout << " = " << sizeof(LocalBuddy) << " B";
	}

	void createWithInvalidName() {
		User *user = userManager->getUser("user@localhost");
		CPPUNIT_ASSERT(user);

		std::vector<std::string> grp;
		grp.push_back("group");

		// with BUDDY_JID_ESCAPING it escapes /
		LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "msn/something", "Buddy 1", grp, BUDDY_JID_ESCAPING);
		CPPUNIT_ASSERT(buddy->isValid());
		CPPUNIT_ASSERT_EQUAL(std::string("msn\\2fsomething@localhost/bot"), buddy->getJID().toString());
		delete buddy;

		// without BUDDY_JID_ESCAPING it shoudl fail
		buddy = new LocalBuddy(user->getRosterManager(), -1, "msn/something", "Buddy 1", grp);
		CPPUNIT_ASSERT(!buddy->isValid());
		delete buddy;

		buddy = new LocalBuddy(user->getRosterManager(), -1, "\xd7\x92\xd7\x9c\xd7\x99\xd7\x9d@nimbuzz.com", "Buddy 1", grp);
		CPPUNIT_ASSERT(!buddy->isValid());
		delete buddy;
	}

	void JIDToLegacyName() {
		CPPUNIT_ASSERT_EQUAL(std::string("hanzz@test"), Buddy::JIDToLegacyName("hanzz\\40test@localhost/bot"));
		CPPUNIT_ASSERT_EQUAL(std::string("hanzz@test"), Buddy::JIDToLegacyName("hanzz%test@localhost/bot"));
	}

	void getSafeName() {
		User *user = userManager->getUser("user@localhost");
		CPPUNIT_ASSERT(user);

		std::vector<std::string> grp;
		grp.push_back("group1");
		LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1@test", "Buddy 1", grp, BUDDY_JID_ESCAPING);

		CPPUNIT_ASSERT_EQUAL(std::string("buddy1\\40test"), buddy->getSafeName());

		buddy->setFlags(BUDDY_NO_FLAG);
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1%test"), buddy->getSafeName());
	}

	void buddyFlagsFromJID() {
		CPPUNIT_ASSERT_EQUAL(BUDDY_JID_ESCAPING, Buddy::buddyFlagsFromJID("hanzz\\40test@localhost/bot"));
		CPPUNIT_ASSERT_EQUAL(BUDDY_NO_FLAG, Buddy::buddyFlagsFromJID("hanzz%test@localhost/bot"));
	}

	void sendPresence() {
		User *user = userManager->getUser("user@localhost");
		CPPUNIT_ASSERT(user);

		std::vector<std::string> grp;
		grp.push_back("group1");
		LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1", "Buddy 1", grp, BUDDY_JID_ESCAPING);
		buddy->setStatus(Swift::StatusShow(Swift::StatusShow::Away), "status1");
		user->getRosterManager()->setBuddy(buddy);
		received.clear();

		buddy->sendPresence();
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
		CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getShow());
		CPPUNIT_ASSERT_EQUAL(std::string("status1"), dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getStatus());
	}

	void setAlias() {
		User *user = userManager->getUser("user@localhost");
		CPPUNIT_ASSERT(user);

		std::vector<std::string> grp;
		grp.push_back("group1");
		LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1", "Buddy 1", grp, BUDDY_JID_ESCAPING);
		buddy->setStatus(Swift::StatusShow(Swift::StatusShow::Away), "status1");
		user->getRosterManager()->setBuddy(buddy);
		received.clear();

		buddy->setAlias("Buddy 2");
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
		Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
		CPPUNIT_ASSERT(payload1);
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
		Swift::RosterItemPayload item = payload1->getItems()[0];
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
		CPPUNIT_ASSERT_EQUAL(std::string("Buddy 2"), item.getName());
	}

	void sendPresenceTypeNone() {
		User *user = userManager->getUser("user@localhost");
		CPPUNIT_ASSERT(user);

		std::vector<std::string> grp;
		grp.push_back("group1");
		LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1", "Buddy 1", grp, BUDDY_JID_ESCAPING);
		buddy->setStatus(Swift::StatusShow(Swift::StatusShow::Away), "");
		user->getRosterManager()->setBuddy(buddy);
		received.clear();

		buddy->setStatus(Swift::StatusShow(Swift::StatusShow::None), "");
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
		CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::None, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getShow());
	}

};

CPPUNIT_TEST_SUITE_REGISTRATION (LocalBuddyTest);