diff --git a/tests/libtransport/localbuddy.cpp b/tests/libtransport/localbuddy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d73cf5dd18066fc6dfc68c6494b5a084e8d924c2 --- /dev/null +++ b/tests/libtransport/localbuddy.cpp @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include +#include +#include +#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 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 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 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(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast(getStanza(received[0]))->getShow()); + CPPUNIT_ASSERT_EQUAL(std::string("status1"), dynamic_cast(getStanza(received[0]))->getStatus()); + } + + void setAlias() { + User *user = userManager->getUser("user@localhost"); + CPPUNIT_ASSERT(user); + + std::vector 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(); + 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 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), ""); + dumpReceived(); + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::None, dynamic_cast(getStanza(received[0]))->getShow()); + } + +}; + +CPPUNIT_TEST_SUITE_REGISTRATION (LocalBuddyTest);