From c86358c64f5f7c92122e74c6cfcb9cb3fd6c1fee Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Wed, 19 Oct 2011 14:35:27 +0200 Subject: [PATCH] Preparation for better tests --- .../Swiften/Network/DummyNetworkFactories.cpp | 2 + .../Swiften/Network/DummyNetworkFactories.h | 4 +- .../Server/ServerFromClientSession.cpp | 4 +- .../Swiften/Server/ServerFromClientSession.h | 3 +- .../Swiften/Server/ServerStanzaChannel.cpp | 1 - src/tests/component.cpp | 52 +++++++++++++++++-- 6 files changed, 58 insertions(+), 8 deletions(-) diff --git a/include/Swiften/Network/DummyNetworkFactories.cpp b/include/Swiften/Network/DummyNetworkFactories.cpp index cf47d7cc..4c477561 100644 --- a/include/Swiften/Network/DummyNetworkFactories.cpp +++ b/include/Swiften/Network/DummyNetworkFactories.cpp @@ -17,6 +17,7 @@ DummyNetworkFactories::DummyNetworkFactories(EventLoop* eventLoop) { connectionFactory = new DummyConnectionFactory(eventLoop); domainNameResolver = new PlatformDomainNameResolver(eventLoop); connectionServerFactory = new DummyConnectionServerFactory(eventLoop); + m_platformXMLParserFactory = new PlatformXMLParserFactory(); } DummyNetworkFactories::~DummyNetworkFactories() { @@ -24,6 +25,7 @@ DummyNetworkFactories::~DummyNetworkFactories() { delete domainNameResolver; delete connectionFactory; delete timerFactory; + delete m_platformXMLParserFactory; } } diff --git a/include/Swiften/Network/DummyNetworkFactories.h b/include/Swiften/Network/DummyNetworkFactories.h index 8942be4b..a945cdfa 100644 --- a/include/Swiften/Network/DummyNetworkFactories.h +++ b/include/Swiften/Network/DummyNetworkFactories.h @@ -7,6 +7,7 @@ #pragma once #include +#include namespace Swift { class EventLoop; @@ -37,7 +38,7 @@ namespace Swift { } Swift::XMLParserFactory* getXMLParserFactory() const { - return 0; + return m_platformXMLParserFactory; } Swift::TLSContextFactory* getTLSContextFactory() const { @@ -49,6 +50,7 @@ namespace Swift { } private: + PlatformXMLParserFactory *m_platformXMLParserFactory; TimerFactory* timerFactory; ConnectionFactory* connectionFactory; DomainNameResolver* domainNameResolver; diff --git a/include/Swiften/Server/ServerFromClientSession.cpp b/include/Swiften/Server/ServerFromClientSession.cpp index 109d0d8f..4a2bb751 100644 --- a/include/Swiften/Server/ServerFromClientSession.cpp +++ b/include/Swiften/Server/ServerFromClientSession.cpp @@ -36,7 +36,8 @@ ServerFromClientSession::ServerFromClientSession( PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, UserRegistry* userRegistry, - XMLParserFactory* factory) : + XMLParserFactory* factory, + Swift::JID remoteJID) : Session(connection, payloadParserFactories, payloadSerializers, factory), id_(id), userRegistry_(userRegistry), @@ -45,6 +46,7 @@ ServerFromClientSession::ServerFromClientSession( allowSASLEXTERNAL(false), tlsLayer(0), tlsConnected(false) { + setRemoteJID(remoteJID); } ServerFromClientSession::~ServerFromClientSession() { diff --git a/include/Swiften/Server/ServerFromClientSession.h b/include/Swiften/Server/ServerFromClientSession.h index 1bb51fee..1de5ac9b 100644 --- a/include/Swiften/Server/ServerFromClientSession.h +++ b/include/Swiften/Server/ServerFromClientSession.h @@ -39,7 +39,8 @@ namespace Swift { PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, UserRegistry* userRegistry, - XMLParserFactory* factory); + XMLParserFactory* factory, + Swift::JID remoteJID = Swift::JID()); ~ServerFromClientSession(); boost::signal onSessionStarted; diff --git a/include/Swiften/Server/ServerStanzaChannel.cpp b/include/Swiften/Server/ServerStanzaChannel.cpp index 4ac5acc8..a0f56543 100644 --- a/include/Swiften/Server/ServerStanzaChannel.cpp +++ b/include/Swiften/Server/ServerStanzaChannel.cpp @@ -29,7 +29,6 @@ namespace { } void ServerStanzaChannel::addSession(boost::shared_ptr session) { - std::cout << "ADDING SESSION\n"; sessions[session->getRemoteJID().toBare().toString()].push_back(session); session->onSessionFinished.connect(boost::bind(&ServerStanzaChannel::handleSessionFinished, this, _1, session)); session->onElementReceived.connect(boost::bind(&ServerStanzaChannel::handleElement, this, _1, session)); diff --git a/src/tests/component.cpp b/src/tests/component.cpp index 8276eaa2..ac02a5b0 100644 --- a/src/tests/component.cpp +++ b/src/tests/component.cpp @@ -5,10 +5,14 @@ #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; @@ -48,9 +52,9 @@ class TestingFactory : public Factory { } }; -class ComponentTest : public CPPUNIT_NS :: TestFixture { +class ComponentTest : public CPPUNIT_NS :: TestFixture, public Swift::XMPPParserClient { CPPUNIT_TEST_SUITE(ComponentTest); - CPPUNIT_TEST(presence); + CPPUNIT_TEST(handlePresenceWithNode); CPPUNIT_TEST_SUITE_END(); public: @@ -69,24 +73,64 @@ class ComponentTest : public CPPUNIT_NS :: TestFixture { component = new Component(loop, factories, cfg, factory, userRegistry); 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(); } - void presence() { + 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("localhost"); + response->setFrom("user@localhost/resource"); + dynamic_cast(component->getStanzaChannel())->onPresenceReceived(response); + + loop->processEvents(); + } + private: + boost::shared_ptr serverFromClientSession; + Swift::FullPayloadSerializerCollection* payloadSerializers; + Swift::FullPayloadParserFactoryCollection* payloadParserFactories; + Swift::XMPPParser *parser; UserRegistry *userRegistry; Config *cfg; Swift::Server *server; @@ -94,7 +138,7 @@ class ComponentTest : public CPPUNIT_NS :: TestFixture { Swift::DummyEventLoop *loop; TestingFactory *factory; Component *component; - std::vector received; + std::vector > received; }; CPPUNIT_TEST_SUITE_REGISTRATION (ComponentTest);