From 974bf2de0a2cac2c3c692b2ce351a06d4bc9f9df Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 16 Aug 2012 14:43:00 +0200 Subject: [PATCH] adhoc tests --- src/adhocmanager.cpp | 13 +++- src/settingsadhoccommand.cpp | 7 +- src/tests/settingsadhoccommand.cpp | 109 +++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 5 deletions(-) diff --git a/src/adhocmanager.cpp b/src/adhocmanager.cpp index 664b421e..cf02a937 100644 --- a/src/adhocmanager.cpp +++ b/src/adhocmanager.cpp @@ -113,8 +113,15 @@ bool AdHocManager::handleGetRequest(const Swift::JID& from, const Swift::JID& to bool AdHocManager::handleSetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr payload) { AdHocCommand *command = NULL; // Try to find AdHocCommand according to 'from' and session_id - if (m_sessions.find(from) != m_sessions.end() && m_sessions[from].find(payload->getSessionID()) != m_sessions[from].end()) { - command = m_sessions[from][payload->getSessionID()]; + if (m_sessions.find(from) != m_sessions.end()) { + if (m_sessions[from].find(payload->getSessionID()) != m_sessions[from].end()) { + command = m_sessions[from][payload->getSessionID()]; + } + else { + LOG4CXX_ERROR(logger, from.toString() << ": Unknown session id " << payload->getSessionID() << " - ignoring"); + sendError(from, id, Swift::ErrorPayload::BadRequest, Swift::ErrorPayload::Modify); + return true; + } } // Check if we can create command with this node else if (m_factories.find(payload->getNode()) != m_factories.end()) { @@ -148,7 +155,7 @@ bool AdHocManager::handleSetRequest(const Swift::JID& from, const Swift::JID& to command->refreshLastActivity(); // Command completed, so we can remove it now - if (response->getStatus() == Swift::Command::Completed) { + if (response->getStatus() == Swift::Command::Completed || response->getStatus() == Swift::Command::Canceled) { m_sessions[from].erase(command->getId()); if (m_sessions[from].empty()) { m_sessions.erase(from); diff --git a/src/settingsadhoccommand.cpp b/src/settingsadhoccommand.cpp index 00aacece..5aea25ec 100644 --- a/src/settingsadhoccommand.cpp +++ b/src/settingsadhoccommand.cpp @@ -53,13 +53,16 @@ boost::shared_ptr SettingsAdHocCommand::handleResponse(boost::sh - boost::shared_ptr response; - response->setStatus(Swift::Command::Completed); + boost::shared_ptr response(new Swift::Command("settings", m_id, Swift::Command::Completed)); return response; } boost::shared_ptr SettingsAdHocCommand::handleRequest(boost::shared_ptr payload) { boost::shared_ptr response; + if (payload->getAction() == Swift::Command::Cancel) { + response = boost::shared_ptr(new Swift::Command("settings", m_id, Swift::Command::Canceled)); + return response; + } switch (m_state) { case Init: diff --git a/src/tests/settingsadhoccommand.cpp b/src/tests/settingsadhoccommand.cpp index f0b8f6e3..c69ef923 100644 --- a/src/tests/settingsadhoccommand.cpp +++ b/src/tests/settingsadhoccommand.cpp @@ -27,6 +27,8 @@ class SettingsAdHocCommandTest : public CPPUNIT_NS :: TestFixture, public BasicT CPPUNIT_TEST_SUITE(SettingsAdHocCommandTest); CPPUNIT_TEST(getItems); CPPUNIT_TEST(execute); + CPPUNIT_TEST(executeBadSessionID); + CPPUNIT_TEST(cancel); CPPUNIT_TEST_SUITE_END(); public: @@ -73,6 +75,113 @@ class SettingsAdHocCommandTest : public CPPUNIT_NS :: TestFixture, public BasicT iq->setFrom("user@localhost"); injectIQ(iq); loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Executing, getStanza(received[0])->getPayload()->getStatus()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()); + + std::string sessionId = getStanza(received[0])->getPayload()->getSessionID(); + + // finish the command + payload = boost::shared_ptr(new Swift::Command("settings")); + payload->setSessionID(sessionId); + payload->setForm(getStanza(received[0])->getPayload()->getForm()); + iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + received.clear(); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Completed, getStanza(received[0])->getPayload()->getStatus()); + } + + void executeBadSessionID() { + boost::shared_ptr payload(new Swift::Command("settings")); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Executing, getStanza(received[0])->getPayload()->getStatus()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()); + + std::string sessionId = "somethingwrong"; + + // finish the command + payload = boost::shared_ptr(new Swift::Command("settings")); + payload->setSessionID(sessionId); + payload->setForm(getStanza(received[0])->getPayload()->getForm()); + iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + received.clear(); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Error, dynamic_cast(getStanza(received[0]))->getType()); + } + + void cancel() { + boost::shared_ptr payload(new Swift::Command("settings")); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Executing, getStanza(received[0])->getPayload()->getStatus()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()); + + std::string sessionId = getStanza(received[0])->getPayload()->getSessionID(); + + // cancel the command + payload = boost::shared_ptr(new Swift::Command("settings")); + payload->setSessionID(sessionId); + payload->setAction(Swift::Command::Cancel); + iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + received.clear(); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Canceled, getStanza(received[0])->getPayload()->getStatus()); } };