diff options
Diffstat (limited to 'Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp')
-rw-r--r-- | Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp | 278 |
1 files changed, 139 insertions, 139 deletions
diff --git a/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp b/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp index 99713a9..55e6012 100644 --- a/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp +++ b/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp @@ -20,145 +20,145 @@ using namespace Swift; namespace Swift { class StanzaAckRequesterTest : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(StanzaAckRequesterTest); - CPPUNIT_TEST(testHandleStanzaSent_MessageRequestsAck); - CPPUNIT_TEST(testHandleStanzaSent_IQDoesNotRequestAck); - CPPUNIT_TEST(testHandleStanzaSent_PresenceDoesNotRequestAck); - CPPUNIT_TEST(testHandleAckReceived_AcksStanza); - CPPUNIT_TEST(testHandleAckReceived_AcksMultipleMessages); - CPPUNIT_TEST(testHandleAckReceived_AcksMultipleStanzas); - CPPUNIT_TEST(testHandleAckReceived_MultipleAcks); - CPPUNIT_TEST(testHandleAckReceived_WrapAround); - CPPUNIT_TEST_SUITE_END(); - - public: - void setUp() { - acksRequested = 0; - } - - void testHandleStanzaSent_MessageRequestsAck() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createMessage("m1")); - - CPPUNIT_ASSERT_EQUAL(1, acksRequested); - } - - void testHandleStanzaSent_IQDoesNotRequestAck() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createIQ("iq1")); - - CPPUNIT_ASSERT_EQUAL(0, acksRequested); - } - - void testHandleStanzaSent_PresenceDoesNotRequestAck() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createPresence("p1")); - - CPPUNIT_ASSERT_EQUAL(0, acksRequested); - } - - void testHandleAckReceived_AcksStanza() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createMessage("m1")); - - testling->handleAckReceived(1); - - CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(ackedStanzas.size())); - CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); - } - - void testHandleAckReceived_AcksMultipleMessages() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createMessage("m1")); - testling->handleStanzaSent(createMessage("m2")); - - testling->handleAckReceived(2); - - CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size())); - CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); - } - - void testHandleAckReceived_AcksMultipleStanzas() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createIQ("iq1")); - testling->handleStanzaSent(createPresence("p1")); - testling->handleStanzaSent(createMessage("m1")); - - testling->handleAckReceived(3); - - CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size())); - CPPUNIT_ASSERT_EQUAL(std::string("iq1"), ackedStanzas[0]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("p1"), ackedStanzas[1]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[2]->getID()); - } - - void testHandleAckReceived_MultipleAcks() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->handleStanzaSent(createMessage("m1")); - testling->handleAckReceived(1); - - testling->handleStanzaSent(createMessage("m2")); - testling->handleStanzaSent(createMessage("m3")); - testling->handleAckReceived(3); - - CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size())); - CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("m3"), ackedStanzas[2]->getID()); - } - - // Handle stanza ack count wrapping, as per the XEP - void testHandleAckReceived_WrapAround() { - boost::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->lastHandledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); - testling->handleStanzaSent(createMessage("m1")); - testling->handleStanzaSent(createMessage("m2")); - - testling->handleAckReceived(1); - - CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size())); - CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); - CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); - } - - private: - Message::ref createMessage(const std::string& id) { - Message::ref result(new Message()); - result->setID(id); - return result; - } - - IQ::ref createIQ(const std::string& id) { - IQ::ref result(new IQ()); - result->setID(id); - return result; - } - - Presence::ref createPresence(const std::string& id) { - Presence::ref result(new Presence()); - result->setID(id); - return result; - } - - StanzaAckRequester* createRequester() { - StanzaAckRequester* requester = new StanzaAckRequester(); - requester->onRequestAck.connect(boost::bind(&StanzaAckRequesterTest::handleRequestAck, this)); - requester->onStanzaAcked.connect(boost::bind(&StanzaAckRequesterTest::handleStanzaAcked, this, _1)); - return requester; - } - - void handleRequestAck() { - acksRequested++; - } - - void handleStanzaAcked(boost::shared_ptr<Stanza> stanza) { - ackedStanzas.push_back(stanza); - } - - private: - int acksRequested; - std::vector< boost::shared_ptr<Stanza> > ackedStanzas; + CPPUNIT_TEST_SUITE(StanzaAckRequesterTest); + CPPUNIT_TEST(testHandleStanzaSent_MessageRequestsAck); + CPPUNIT_TEST(testHandleStanzaSent_IQDoesNotRequestAck); + CPPUNIT_TEST(testHandleStanzaSent_PresenceDoesNotRequestAck); + CPPUNIT_TEST(testHandleAckReceived_AcksStanza); + CPPUNIT_TEST(testHandleAckReceived_AcksMultipleMessages); + CPPUNIT_TEST(testHandleAckReceived_AcksMultipleStanzas); + CPPUNIT_TEST(testHandleAckReceived_MultipleAcks); + CPPUNIT_TEST(testHandleAckReceived_WrapAround); + CPPUNIT_TEST_SUITE_END(); + + public: + void setUp() { + acksRequested = 0; + } + + void testHandleStanzaSent_MessageRequestsAck() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createMessage("m1")); + + CPPUNIT_ASSERT_EQUAL(1, acksRequested); + } + + void testHandleStanzaSent_IQDoesNotRequestAck() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createIQ("iq1")); + + CPPUNIT_ASSERT_EQUAL(0, acksRequested); + } + + void testHandleStanzaSent_PresenceDoesNotRequestAck() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createPresence("p1")); + + CPPUNIT_ASSERT_EQUAL(0, acksRequested); + } + + void testHandleAckReceived_AcksStanza() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createMessage("m1")); + + testling->handleAckReceived(1); + + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(ackedStanzas.size())); + CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); + } + + void testHandleAckReceived_AcksMultipleMessages() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createMessage("m1")); + testling->handleStanzaSent(createMessage("m2")); + + testling->handleAckReceived(2); + + CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size())); + CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); + } + + void testHandleAckReceived_AcksMultipleStanzas() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createIQ("iq1")); + testling->handleStanzaSent(createPresence("p1")); + testling->handleStanzaSent(createMessage("m1")); + + testling->handleAckReceived(3); + + CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size())); + CPPUNIT_ASSERT_EQUAL(std::string("iq1"), ackedStanzas[0]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("p1"), ackedStanzas[1]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[2]->getID()); + } + + void testHandleAckReceived_MultipleAcks() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->handleStanzaSent(createMessage("m1")); + testling->handleAckReceived(1); + + testling->handleStanzaSent(createMessage("m2")); + testling->handleStanzaSent(createMessage("m3")); + testling->handleAckReceived(3); + + CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size())); + CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("m3"), ackedStanzas[2]->getID()); + } + + // Handle stanza ack count wrapping, as per the XEP + void testHandleAckReceived_WrapAround() { + boost::shared_ptr<StanzaAckRequester> testling(createRequester()); + testling->lastHandledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); + testling->handleStanzaSent(createMessage("m1")); + testling->handleStanzaSent(createMessage("m2")); + + testling->handleAckReceived(1); + + CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size())); + CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); + CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); + } + + private: + Message::ref createMessage(const std::string& id) { + Message::ref result(new Message()); + result->setID(id); + return result; + } + + IQ::ref createIQ(const std::string& id) { + IQ::ref result(new IQ()); + result->setID(id); + return result; + } + + Presence::ref createPresence(const std::string& id) { + Presence::ref result(new Presence()); + result->setID(id); + return result; + } + + StanzaAckRequester* createRequester() { + StanzaAckRequester* requester = new StanzaAckRequester(); + requester->onRequestAck.connect(boost::bind(&StanzaAckRequesterTest::handleRequestAck, this)); + requester->onStanzaAcked.connect(boost::bind(&StanzaAckRequesterTest::handleStanzaAcked, this, _1)); + return requester; + } + + void handleRequestAck() { + acksRequested++; + } + + void handleStanzaAcked(boost::shared_ptr<Stanza> stanza) { + ackedStanzas.push_back(stanza); + } + + private: + int acksRequested; + std::vector< boost::shared_ptr<Stanza> > ackedStanzas; }; } |