diff --git a/src/tests/userregistration.cpp b/src/tests/userregistration.cpp index d97db6dbe90398def73629dbd27b40bc4a23936f..1c81aa5b31c549233d2d33893ed8f69a155427a7 100644 --- a/src/tests/userregistration.cpp +++ b/src/tests/userregistration.cpp @@ -28,6 +28,8 @@ class UserRegistrationTest : public CPPUNIT_NS :: TestFixture, public BasicTest CPPUNIT_TEST(registerUser); CPPUNIT_TEST(unregisterUser); CPPUNIT_TEST(unregisterEmptyPayload); + CPPUNIT_TEST(registerUserNotify); + CPPUNIT_TEST(unregisterUserNotify); CPPUNIT_TEST(changePassword); CPPUNIT_TEST(registerUserEmpty); CPPUNIT_TEST(registerUserNoNeedPassword); @@ -139,6 +141,72 @@ class UserRegistrationTest : public CPPUNIT_NS :: TestFixture, public BasicTest CPPUNIT_ASSERT_EQUAL(false, storage->getUser("user@localhost", user)); } + void registerUserNotify() { + std::istringstream ifs("service.server_mode = 1\nregistration.notify_jid=user@localhost\nservice.jid=localhost\nservice.more_resources=1\n"); + cfg->load(ifs); + + Swift::InBandRegistrationPayload *reg = new Swift::InBandRegistrationPayload(); + reg->setUsername("legacyname"); + reg->setPassword("password"); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", boost::shared_ptr(reg)); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(3, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribe, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); + CPPUNIT_ASSERT_EQUAL(std::string("registered: user@localhost"), dynamic_cast(getStanza(received[1]))->getBody()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[2]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[2]))->getType()); + + UserInfo user; + CPPUNIT_ASSERT_EQUAL(true, storage->getUser("user@localhost", user)); + + CPPUNIT_ASSERT_EQUAL(std::string("legacyname"), user.uin); + CPPUNIT_ASSERT_EQUAL(std::string("password"), user.password); + } + + void unregisterUserNotify() { + registerUserNotify(); + received.clear(); + + Swift::InBandRegistrationPayload *reg = new Swift::InBandRegistrationPayload(); + reg->setRemove(true); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", boost::shared_ptr(reg)); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(2, (int) received.size()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[1]))->getType()); + + iq = Swift::IQ::createResult(Swift::JID("localhost"), getStanza(received[0])->getTo(), getStanza(received[0])->getID(), boost::shared_ptr(new Swift::RosterPayload())); + received.clear(); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(2, (int) received.size()); + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Set, dynamic_cast(getStanza(received[0]))->getType()); + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); + CPPUNIT_ASSERT_EQUAL(std::string("unregistered: user@localhost"), dynamic_cast(getStanza(received[1]))->getBody()); + + + UserInfo user; + CPPUNIT_ASSERT_EQUAL(false, storage->getUser("user@localhost", user)); + } + void changePassword() { registerUser(); received.clear();