From 848f672b07e5e951a984448d8a3587c4499d6d5a Mon Sep 17 00:00:00 2001 From: HanzZ Date: Wed, 26 Oct 2011 00:16:03 +0200 Subject: [PATCH] Use BasicTest in tests --- src/tests/basictest.cpp | 90 +++++++++++++++++++++++++++++ src/tests/basictest.h | 117 +++++++++++++++++++++++++++++++++++++ src/tests/component.cpp | 112 ++---------------------------------- src/tests/usermanager.cpp | 118 ++------------------------------------ 4 files changed, 216 insertions(+), 221 deletions(-) create mode 100644 src/tests/basictest.cpp create mode 100644 src/tests/basictest.h diff --git a/src/tests/basictest.cpp b/src/tests/basictest.cpp new file mode 100644 index 00000000..9de4b33a --- /dev/null +++ b/src/tests/basictest.cpp @@ -0,0 +1,90 @@ +#include "basictest.h" +#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 +#include +#include +#include +#include +#include +#include +#include "Swiften/Server/ServerStanzaChannel.h" +#include "Swiften/Server/ServerFromClientSession.h" +#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" + +using namespace Transport; + +void BasicTest::setMeUp (void) { + streamEnded = false; + std::istringstream ifs("service.server_mode = 1\n"); + cfg = new Config(); + cfg->load(ifs); + + factory = new TestingFactory(); + + loop = new Swift::DummyEventLoop(); + factories = new Swift::DummyNetworkFactories(loop); + + userRegistry = new UserRegistry(cfg, factories); + + component = new Component(loop, factories, cfg, factory, userRegistry); + component->start(); + + userManager = new UserManager(component, userRegistry); + + payloadSerializers = new Swift::FullPayloadSerializerCollection(); + payloadParserFactories = new Swift::FullPayloadParserFactoryCollection(); + parser = new Swift::XMPPParser(this, payloadParserFactories, factories->getXMLParserFactory()); + + serverFromClientSession = boost::shared_ptr(new Swift::ServerFromClientSession("id", factories->getConnectionFactory()->createConnection(), + payloadParserFactories, payloadSerializers, userRegistry, factories->getXMLParserFactory(), Swift::JID("user@localhost/resource"))); + serverFromClientSession->startSession(); + + serverFromClientSession->onDataWritten.connect(boost::bind(&BasicTest::handleDataReceived, this, _1)); + + dynamic_cast(component->getStanzaChannel())->addSession(serverFromClientSession); + parser->parse(""); + received.clear(); + loop->processEvents(); +} + +void BasicTest::tearMeDown (void) { + dynamic_cast(component->getStanzaChannel())->removeSession(serverFromClientSession); + delete component; + delete userRegistry; + delete factories; + delete factory; + delete loop; + delete cfg; + delete parser; + received.clear(); +} + +void BasicTest::handleDataReceived(const Swift::SafeByteArray &data) { +parser->parse(safeByteArrayToString(data)); +} + +void BasicTest::handleStreamStart(const Swift::ProtocolHeader&) { + +} + +void BasicTest::handleElement(boost::shared_ptr element) { +received.push_back(element); +} + +void BasicTest::handleStreamEnd() { + streamEnded = true; +} + +Swift::Stanza *BasicTest::getStanza(boost::shared_ptr element) { + Swift::Stanza *stanza = dynamic_cast(element.get()); + CPPUNIT_ASSERT(stanza); + return stanza; +} + diff --git a/src/tests/basictest.h b/src/tests/basictest.h new file mode 100644 index 00000000..6e093e33 --- /dev/null +++ b/src/tests/basictest.h @@ -0,0 +1,117 @@ +/** + * libtransport -- C++ library for easy XMPP Transports development + * + * Copyright (C) 2011, Jan Kaluza + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#pragma once + +#include +#include "Swiften/Swiften.h" +#include "Swiften/Queries/SetResponder.h" +#include "transport/conversation.h" +#include "transport/conversationmanager.h" +#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 +#include +#include +#include +#include +#include "Swiften/Server/ServerStanzaChannel.h" +#include "Swiften/Server/ServerFromClientSession.h" +#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" + +using namespace Transport; + +class TestingConversation : public Conversation { + public: + TestingConversation(ConversationManager *conversationManager, const std::string &legacyName, bool muc = false) : Conversation(conversationManager, legacyName, muc) { + } + + // Called when there's new message to legacy network from XMPP network + void sendMessage(boost::shared_ptr &message) { + + } +}; + +class TestingFactory : public Factory { + public: + TestingFactory() { + } + + // Creates new conversation (NetworkConversation in this case) + Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) { + Conversation *nc = new TestingConversation(conversationManager, legacyName); + return nc; + } + + // Creates new LocalBuddy + Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) { + LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id); + buddy->setAlias(buddyInfo.alias); + buddy->setName(buddyInfo.legacyName); + buddy->setSubscription(buddyInfo.subscription); + buddy->setGroups(buddyInfo.groups); + buddy->setFlags((BuddyFlag) buddyInfo.flags); + if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end()) + buddy->setIconHash(buddyInfo.settings.find("icon_hash")->second.s); + return buddy; + } +}; + +class BasicTest : public Swift::XMPPParserClient { + + public: + void setMeUp (void); + + void tearMeDown (void); + + void handleDataReceived(const Swift::SafeByteArray &data); + + void handleStreamStart(const Swift::ProtocolHeader&); + + void handleElement(boost::shared_ptr element); + + void handleStreamEnd(); + + Swift::Stanza *getStanza(boost::shared_ptr element); + + protected: + bool streamEnded; + UserManager *userManager; + boost::shared_ptr serverFromClientSession; + Swift::FullPayloadSerializerCollection* payloadSerializers; + Swift::FullPayloadParserFactoryCollection* payloadParserFactories; + Swift::XMPPParser *parser; + UserRegistry *userRegistry; + Config *cfg; + Swift::Server *server; + Swift::DummyNetworkFactories *factories; + Swift::DummyEventLoop *loop; + TestingFactory *factory; + Component *component; + std::vector > received; +}; + diff --git a/src/tests/component.cpp b/src/tests/component.cpp index 8d4b3be9..a3f709b5 100644 --- a/src/tests/component.cpp +++ b/src/tests/component.cpp @@ -14,45 +14,11 @@ #include "Swiften/Server/ServerFromClientSession.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" +#include "basictest.h" + using namespace Transport; -class TestingConversation : public Conversation { - public: - TestingConversation(ConversationManager *conversationManager, const std::string &legacyName, bool muc = false) : Conversation(conversationManager, legacyName, muc) { - } - - // Called when there's new message to legacy network from XMPP network - void sendMessage(boost::shared_ptr &message) { - - } -}; - -class TestingFactory : public Factory { - public: - TestingFactory() { - } - - // Creates new conversation (NetworkConversation in this case) - Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) { - Conversation *nc = new TestingConversation(conversationManager, legacyName); - return nc; - } - - // Creates new LocalBuddy - Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) { - LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id); - buddy->setAlias(buddyInfo.alias); - buddy->setName(buddyInfo.legacyName); - buddy->setSubscription(buddyInfo.subscription); - buddy->setGroups(buddyInfo.groups); - buddy->setFlags((BuddyFlag) buddyInfo.flags); - if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end()) - buddy->setIconHash(buddyInfo.settings.find("icon_hash")->second.s); - return buddy; - } -}; - -class ComponentTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParserClient { +class ComponentTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_TEST_SUITE(ComponentTest); CPPUNIT_TEST(handlePresenceWithNode); CPPUNIT_TEST(handlePresenceWithoutNode); @@ -62,48 +28,14 @@ class ComponentTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParser void setUp (void) { onUserPresenceReceived = false; onUserDiscoInfoReceived = false; - std::istringstream ifs("service.server_mode = 1\n"); - cfg = new Config(); - cfg->load(ifs); - factory = new TestingFactory(); - - loop = new Swift::DummyEventLoop(); - factories = new Swift::DummyNetworkFactories(loop); - - userRegistry = new UserRegistry(cfg, factories); - - component = new Component(loop, factories, cfg, factory, userRegistry); + setMeUp(); component->onUserPresenceReceived.connect(boost::bind(&ComponentTest::handleUserPresenceReceived, this, _1)); component->onUserDiscoInfoReceived.connect(boost::bind(&ComponentTest::handleUserDiscoInfoReceived, this, _1, _2)); - component->start(); - - payloadSerializers = new Swift::FullPayloadSerializerCollection(); - payloadParserFactories = new Swift::FullPayloadParserFactoryCollection(); - parser = new Swift::XMPPParser(this, payloadParserFactories, factories->getXMLParserFactory()); - - serverFromClientSession = boost::shared_ptr(new Swift::ServerFromClientSession("id", factories->getConnectionFactory()->createConnection(), - payloadParserFactories, payloadSerializers, userRegistry, factories->getXMLParserFactory(), Swift::JID("user@localhost/resource"))); - serverFromClientSession->startSession(); - - serverFromClientSession->onDataWritten.connect(boost::bind(&ComponentTest::handleDataReceived, this, _1)); - - dynamic_cast(component->getStanzaChannel())->addSession(serverFromClientSession); - parser->parse(""); - received.clear(); - loop->processEvents(); } void tearDown (void) { - dynamic_cast(component->getStanzaChannel())->removeSession(serverFromClientSession); - delete component; - delete userRegistry; - delete factories; - delete factory; - delete loop; - delete cfg; - delete parser; - received.clear(); + tearMeDown(); } void handleUserDiscoInfoReceived(const Swift::JID& jid, boost::shared_ptr info) { @@ -114,22 +46,6 @@ class ComponentTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParser onUserPresenceReceived = true; } - void handleDataReceived(const Swift::SafeByteArray &data) { - parser->parse(safeByteArrayToString(data)); - } - - void handleStreamStart(const Swift::ProtocolHeader&) { - - } - - void handleElement(boost::shared_ptr element) { - received.push_back(element); - } - - void handleStreamEnd() { - - } - void handlePresenceWithNode() { Swift::Presence::ref response = Swift::Presence::create(); response->setTo("somebody@localhost"); @@ -151,27 +67,9 @@ class ComponentTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParser CPPUNIT_ASSERT(onUserPresenceReceived); } - Swift::Stanza *getStanza(boost::shared_ptr element) { - Swift::Stanza *stanza = dynamic_cast(element.get()); - CPPUNIT_ASSERT(stanza); - return stanza; - } - private: bool onUserPresenceReceived; bool onUserDiscoInfoReceived; - boost::shared_ptr serverFromClientSession; - Swift::FullPayloadSerializerCollection* payloadSerializers; - Swift::FullPayloadParserFactoryCollection* payloadParserFactories; - Swift::XMPPParser *parser; - UserRegistry *userRegistry; - Config *cfg; - Swift::Server *server; - Swift::DummyNetworkFactories *factories; - Swift::DummyEventLoop *loop; - TestingFactory *factory; - Component *component; - std::vector > received; }; CPPUNIT_TEST_SUITE_REGISTRATION (ComponentTest); diff --git a/src/tests/usermanager.cpp b/src/tests/usermanager.cpp index 428892c7..b67c8e88 100644 --- a/src/tests/usermanager.cpp +++ b/src/tests/usermanager.cpp @@ -16,46 +16,11 @@ #include "Swiften/Server/ServerStanzaChannel.h" #include "Swiften/Server/ServerFromClientSession.h" #include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" +#include "basictest.h" using namespace Transport; -class TestingConversation : public Conversation { - public: - TestingConversation(ConversationManager *conversationManager, const std::string &legacyName, bool muc = false) : Conversation(conversationManager, legacyName, muc) { - } - - // Called when there's new message to legacy network from XMPP network - void sendMessage(boost::shared_ptr &message) { - - } -}; - -class TestingFactory : public Factory { - public: - TestingFactory() { - } - - // Creates new conversation (NetworkConversation in this case) - Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) { - Conversation *nc = new TestingConversation(conversationManager, legacyName); - return nc; - } - - // Creates new LocalBuddy - Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) { - LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id); - buddy->setAlias(buddyInfo.alias); - buddy->setName(buddyInfo.legacyName); - buddy->setSubscription(buddyInfo.subscription); - buddy->setGroups(buddyInfo.groups); - buddy->setFlags((BuddyFlag) buddyInfo.flags); - if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end()) - buddy->setIconHash(buddyInfo.settings.find("icon_hash")->second.s); - return buddy; - } -}; - -class UserManagerTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParserClient { +class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_TEST_SUITE(UserManagerTest); CPPUNIT_TEST(connectUser); CPPUNIT_TEST(handleProbePresence); @@ -64,67 +29,13 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPPars public: void setUp (void) { - streamEnded = false; - std::istringstream ifs("service.server_mode = 1\n"); - cfg = new Config(); - cfg->load(ifs); - - factory = new TestingFactory(); - - loop = new Swift::DummyEventLoop(); - factories = new Swift::DummyNetworkFactories(loop); - - userRegistry = new UserRegistry(cfg, factories); - - component = new Component(loop, factories, cfg, factory, userRegistry); - component->start(); - - userManager = new UserManager(component, userRegistry); - - payloadSerializers = new Swift::FullPayloadSerializerCollection(); - payloadParserFactories = new Swift::FullPayloadParserFactoryCollection(); - parser = new Swift::XMPPParser(this, payloadParserFactories, factories->getXMLParserFactory()); - - serverFromClientSession = boost::shared_ptr(new Swift::ServerFromClientSession("id", factories->getConnectionFactory()->createConnection(), - payloadParserFactories, payloadSerializers, userRegistry, factories->getXMLParserFactory(), Swift::JID("user@localhost/resource"))); - serverFromClientSession->startSession(); - - serverFromClientSession->onDataWritten.connect(boost::bind(&UserManagerTest::handleDataReceived, this, _1)); - - dynamic_cast(component->getStanzaChannel())->addSession(serverFromClientSession); - parser->parse(""); - received.clear(); - loop->processEvents(); + setMeUp(); } void tearDown (void) { - dynamic_cast(component->getStanzaChannel())->removeSession(serverFromClientSession); - delete component; - delete userRegistry; - delete factories; - delete factory; - delete loop; - delete cfg; - delete parser; - received.clear(); + tearMeDown(); } - void handleDataReceived(const Swift::SafeByteArray &data) { - parser->parse(safeByteArrayToString(data)); - } - - void handleStreamStart(const Swift::ProtocolHeader&) { - - } - - void handleElement(boost::shared_ptr element) { - received.push_back(element); - } - - void handleStreamEnd() { - streamEnded = true; - } - void connectUser() { CPPUNIT_ASSERT_EQUAL(0, userManager->getUserCount()); userRegistry->isValidUserPassword(Swift::JID("user@localhost/resource"), serverFromClientSession.get(), Swift::createSafeByteArray("password")); @@ -175,27 +86,6 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPPars CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unavailable, presence->getType()); } - Swift::Stanza *getStanza(boost::shared_ptr element) { - Swift::Stanza *stanza = dynamic_cast(element.get()); - CPPUNIT_ASSERT(stanza); - return stanza; - } - - private: - bool streamEnded; - UserManager *userManager; - boost::shared_ptr serverFromClientSession; - Swift::FullPayloadSerializerCollection* payloadSerializers; - Swift::FullPayloadParserFactoryCollection* payloadParserFactories; - Swift::XMPPParser *parser; - UserRegistry *userRegistry; - Config *cfg; - Swift::Server *server; - Swift::DummyNetworkFactories *factories; - Swift::DummyEventLoop *loop; - TestingFactory *factory; - Component *component; - std::vector > received; }; CPPUNIT_TEST_SUITE_REGISTRATION (UserManagerTest);