#include"transport/userregistry.h"#include"transport/config.h"#include"transport/transport.h"#include"transport/conversation.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"usingnamespaceTransport;classComponentTest:publicCPPUNIT_NS::TestFixture,publicBasicTest{CPPUNIT_TEST_SUITE(ComponentTest);CPPUNIT_TEST(handlePresenceWithNode);CPPUNIT_TEST(handlePresenceWithoutNode);CPPUNIT_TEST(handleErrorPresence);CPPUNIT_TEST_SUITE_END();public:voidsetUp(void){onUserPresenceReceived=false;onUserDiscoInfoReceived=false;setMeUp();component->onUserPresenceReceived.connect(boost::bind(&ComponentTest::handleUserPresenceReceived,this,_1));component->onUserDiscoInfoReceived.connect(boost::bind(&ComponentTest::handleUserDiscoInfoReceived,this,_1,_2));}voidtearDown(void){tearMeDown();}voidhandleUserDiscoInfoReceived(constSwift::JID&jid,boost::shared_ptr<Swift::DiscoInfo>info){onUserDiscoInfoReceived=true;}voidhandleUserPresenceReceived(Swift::Presence::refpresence){onUserPresenceReceived=true;}voidhandlePresenceWithNode(){Swift::Presence::refresponse=Swift::Presence::create();response->setTo("somebody@localhost");response->setFrom("user@localhost/resource");dynamic_cast<Swift::ServerStanzaChannel*>(component->getStanzaChannel())->onPresenceReceived(response);loop->processEvents();CPPUNIT_ASSERT_EQUAL(0,(int)received.size());}// Error presence should be ignoredvoidhandleErrorPresence(){Swift::Presence::refresponse=Swift::Presence::create();response->setTo("localhost");response->setFrom("user@localhost/resource");response->setType(Swift::Presence::Error);dynamic_cast<Swift::ServerStanzaChannel*>(component->getStanzaChannel())->onPresenceReceived(response);loop->processEvents();CPPUNIT_ASSERT_EQUAL(0,(int)received.size());}voidhandlePresenceWithoutNode(){Swift::Presence::refresponse=Swift::Presence::create();response->setTo("localhost");response->setFrom("user@localhost/resource");dynamic_cast<Swift::ServerStanzaChannel*>(component->getStanzaChannel())->onPresenceReceived(response);loop->processEvents();CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoInfo>());CPPUNIT_ASSERT(onUserPresenceReceived);}private:boolonUserPresenceReceived;boolonUserDiscoInfoReceived;};CPPUNIT_TEST_SUITE_REGISTRATION(ComponentTest);