Files
@ 5002dce4a922
Branch filter:
Location: libtransport.git/src/tests/rostermanager.cpp - annotation
5002dce4a922
11.1 KiB
text/x-c++hdr
Prevent python plugin from crashing with InvalidWireType exception
Too much data was passed to wrapper.parseFromString resulting in it
trying to read another tag even after the WrapperMessage has ended
Too much data was passed to wrapper.parseFromString resulting in it
trying to read another tag even after the WrapperMessage has ended
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda f9eb932dbc9d f57929c659c0 cb2dbb39379f 0cd6ed850207 9c48437b09d7 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 c82202f16bda c82202f16bda c82202f16bda 31b80dbe76f2 31b80dbe76f2 c82202f16bda 31b80dbe76f2 c82202f16bda c82202f16bda 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda c82202f16bda 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 c82202f16bda c82202f16bda 9c48437b09d7 9c48437b09d7 9c48437b09d7 9c48437b09d7 9c48437b09d7 9c48437b09d7 9c48437b09d7 9c48437b09d7 6eb53393c74f 9c48437b09d7 9c48437b09d7 9c48437b09d7 f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d f9eb932dbc9d c82202f16bda c82202f16bda eeda35442237 c82202f16bda 9e05a8dffbe8 9e05a8dffbe8 9e05a8dffbe8 9e05a8dffbe8 c82202f16bda c82202f16bda c82202f16bda eeda35442237 9e05a8dffbe8 9e05a8dffbe8 9e05a8dffbe8 c82202f16bda c82202f16bda c82202f16bda 9e05a8dffbe8 9e05a8dffbe8 eeda35442237 9e05a8dffbe8 9e05a8dffbe8 eeda35442237 eeda35442237 eeda35442237 eeda35442237 eeda35442237 eeda35442237 eeda35442237 eeda35442237 c82202f16bda c82202f16bda f57929c659c0 f57929c659c0 f57929c659c0 f57929c659c0 f57929c659c0 f57929c659c0 f57929c659c0 f57929c659c0 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f cb2dbb39379f 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 0cd6ed850207 f57929c659c0 f57929c659c0 31b80dbe76f2 31b80dbe76f2 eeda35442237 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 31b80dbe76f2 c82202f16bda c82202f16bda c82202f16bda | #include "transport/userregistry.h"
#include "transport/config.h"
#include "transport/storagebackend.h"
#include "transport/user.h"
#include "transport/transport.h"
#include "transport/conversation.h"
#include "transport/usermanager.h"
#include "transport/localbuddy.h"
#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 RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
CPPUNIT_TEST_SUITE(RosterManagerTest);
CPPUNIT_TEST(setBuddy);
CPPUNIT_TEST(setBuddyNoAlias);
CPPUNIT_TEST(sendCurrentPresences);
CPPUNIT_TEST(sendUnavailablePresences);
CPPUNIT_TEST(sendCurrentPresence);
CPPUNIT_TEST(sendBuddySubscribePresence);
CPPUNIT_TEST(removeBuddy);
CPPUNIT_TEST(subscribeExistingBuddy);
CPPUNIT_TEST(subscribeNewBuddy);
CPPUNIT_TEST(unsubscribeExistingBuddy);
CPPUNIT_TEST(unsubscribeNewBuddy);
CPPUNIT_TEST_SUITE_END();
public:
std::string m_buddy;
void setUp (void) {
m_buddy.clear();
setMeUp();
connectUser();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->onBuddyAdded.connect(boost::bind(&RosterManagerTest::handleBuddyAdded, this, _1));
user->getRosterManager()->onBuddyRemoved.connect(boost::bind(&RosterManagerTest::handleBuddyRemoved, this, _1));
received.clear();
}
void tearDown (void) {
received.clear();
disconnectUser();
tearMeDown();
}
void handleBuddyAdded(Buddy *buddy) {
m_buddy = buddy->getName();
}
void handleBuddyRemoved(Buddy *buddy) {
m_buddy = buddy->getName();
}
void sendBuddySubscribePresence() {
add2Buddies();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendBuddySubscribePresence(user->getRosterManager()->getBuddy("buddy1"));
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::Nickname>());
CPPUNIT_ASSERT_EQUAL(std::string("Buddy 1"), getStanza(received[0])->getPayload<Swift::Nickname>()->getNickname());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1@localhost"), getStanza(received[0])->getFrom().toString());
}
void setBuddyNoAlias() {
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", "", grp, BUDDY_JID_ESCAPING);
user->getRosterManager()->setBuddy(buddy);
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(""), item.getName());
}
void setBuddy() {
add2Buddies();
CPPUNIT_ASSERT_EQUAL(4, (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 1"), item.getName());
Swift::RosterPayload::ref payload2 = getStanza(received[2])->getPayload<Swift::RosterPayload>();
CPPUNIT_ASSERT(payload2);
CPPUNIT_ASSERT_EQUAL(1, (int) payload2->getItems().size());
item = payload2->getItems()[0];
CPPUNIT_ASSERT_EQUAL(std::string("buddy2"), Buddy::JIDToLegacyName(item.getJID()));
CPPUNIT_ASSERT_EQUAL(std::string("Buddy 2"), item.getName());
// send responses back
injectIQ(Swift::IQ::createResult(getStanza(received[0])->getFrom(), getStanza(received[0])->getTo(), getStanza(received[0])->getID()));
injectIQ(Swift::IQ::createResult(getStanza(received[2])->getFrom(), getStanza(received[2])->getTo(), getStanza(received[2])->getID()));
// we should get presences
CPPUNIT_ASSERT_EQUAL(6, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[4])));
CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received[4]))->getShow());
CPPUNIT_ASSERT_EQUAL(std::string("status1"), dynamic_cast<Swift::Presence *>(getStanza(received[4]))->getStatus());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[5])));
CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received[5]))->getShow());
CPPUNIT_ASSERT_EQUAL(std::string("status2"), dynamic_cast<Swift::Presence *>(getStanza(received[5]))->getStatus());
}
void sendCurrentPresences() {
setBuddy();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendCurrentPresences("user@localhost/resource");
CPPUNIT_ASSERT_EQUAL(2, (int) received.size());
for (int i = 0; i < 2; i++) {
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[i])));
CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getShow());
CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getTo().toString());
}
}
void sendUnavailablePresences() {
setBuddy();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendUnavailablePresences("user@localhost/resource");
CPPUNIT_ASSERT_EQUAL(3, (int) received.size());
for (int i = 0; i < 3; i++) {
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[i])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unavailable, dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getTo().toString());
}
}
void sendCurrentPresence() {
setBuddy();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendCurrentPresence("buddy1@localhost", "user@localhost/resource");
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("user@localhost/resource"), dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getTo().toString());
received.clear();
user->getRosterManager()->sendCurrentPresence("buddy_unknown@localhost", "user@localhost/resource");
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unavailable, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getTo().toString());
}
void removeBuddy() {
add2Buddies();
CPPUNIT_ASSERT_EQUAL(4, (int) received.size());
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->removeBuddy("buddy1");
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(Swift::RosterItemPayload::Remove, item.getSubscription());
}
void subscribeExistingBuddy() {
add2Buddies();
received.clear();
Swift::Presence::ref response = Swift::Presence::create();
response->setTo("buddy1@localhost");
response->setFrom("user@localhost/resource");
response->setType(Swift::Presence::Subscribe);
injectPresence(response);
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
}
void subscribeNewBuddy() {
Swift::Presence::ref response = Swift::Presence::create();
response->setTo("buddy1@localhost");
response->setFrom("user@localhost/resource");
response->setType(Swift::Presence::Subscribe);
injectPresence(response);
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(2, (int) received.size());
Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
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(dynamic_cast<Swift::Presence *>(getStanza(received[1])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast<Swift::Presence *>(getStanza(received[1]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
}
void unsubscribeExistingBuddy() {
add2Buddies();
received.clear();
Swift::Presence::ref response = Swift::Presence::create();
response->setTo("buddy1@localhost");
response->setFrom("user@localhost/resource");
response->setType(Swift::Presence::Unsubscribe);
injectPresence(response);
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(2, (int) received.size());
Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
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(dynamic_cast<Swift::Presence *>(getStanza(received[1])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unsubscribed, dynamic_cast<Swift::Presence *>(getStanza(received[1]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
}
void unsubscribeNewBuddy() {
Swift::Presence::ref response = Swift::Presence::create();
response->setTo("buddy1@localhost");
response->setFrom("user@localhost/resource");
response->setType(Swift::Presence::Unsubscribe);
injectPresence(response);
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unsubscribed, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
}
};
CPPUNIT_TEST_SUITE_REGISTRATION (RosterManagerTest);
|