Files
@ 098a8d4c944c
Branch filter:
Location: libtransport.git/src/tests/filetransfermanager.cpp
098a8d4c944c
5.6 KiB
text/x-c++hdr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | #include "transport/userregistry.h"
#include "transport/userregistration.h"
#include "transport/config.h"
#include "transport/storagebackend.h"
#include "transport/user.h"
#include "transport/transport.h"
#include "transport/conversation.h"
#include "transport/usermanager.h"
#include "transport/localbuddy.h"
#include "transport/settingsadhoccommand.h"
#include "transport/filetransfermanager.h"
#include "transport/adhocmanager.h"
#include "transport/memoryreadbytestream.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"
using namespace Transport;
class FileTransferManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
CPPUNIT_TEST_SUITE(FileTransferManagerTest);
CPPUNIT_TEST(sendFileNoMethod);
CPPUNIT_TEST(sendFileSIIBB);
CPPUNIT_TEST_SUITE_END();
public:
FileTransferManager *manager;
std::string data;
FileTransferManager::Transfer transfer;
bool dataNeeded;
Swift::FileTransfer::State::FTState ftState;
boost::shared_ptr<MemoryReadBytestream> bytestream;
void setUp (void) {
setMeUp();
dataNeeded = false;
data = "This is our testing file\n";
manager = new FileTransferManager(component, userManager);
connectUser();
add2Buddies();
received.clear();
}
void tearDown (void) {
received.clear();
delete manager;
disconnectUser();
tearMeDown();
}
void handleFTDataNeeded() {
dataNeeded = true;
// std::cout << "data needed\n";
}
void handleFTStateChanged(Swift::FileTransfer::State state) {
// std::cout << "state changed " << state.state << "\n";
ftState = state.state;
}
void _sendFile() {
User *user = userManager->getUser("user@localhost");
Swift::StreamInitiationFileInfo fileInfo;
fileInfo.setSize(data.size());
fileInfo.setName("test.pdf");
bytestream = boost::shared_ptr<MemoryReadBytestream>(new MemoryReadBytestream(data.size()));
bytestream->onDataNeeded.connect(boost::bind(&FileTransferManagerTest::handleFTDataNeeded, this));
transfer = manager->sendFile(user, user->getRosterManager()->getBuddy("buddy1"), bytestream, fileInfo);
}
void sendFileNoMethod() {
_sendFile();
CPPUNIT_ASSERT(!transfer.ft);
}
void sendFileSIIBB() {
User *user = userManager->getUser("user@localhost");
boost::shared_ptr<Swift::DiscoInfo> info(new Swift::DiscoInfo());
info->addFeature("http://jabber.org/protocol/si/profile/file-transfer");
user->handleDiscoInfo("user@localhost/resource", info);
// Send file request
_sendFile();
CPPUNIT_ASSERT(transfer.ft);
transfer.ft->onStateChange.connect(boost::bind(&FileTransferManagerTest::handleFTStateChanged, this, _1));
transfer.ft->start();
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::IQ *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::IQ::Set, dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::StreamInitiation>());
CPPUNIT_ASSERT_EQUAL(std::string("test.pdf"), dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getPayload<Swift::StreamInitiation>()->getFileInfo()->getName());
CPPUNIT_ASSERT_EQUAL((int) data.size(), (int) dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getPayload<Swift::StreamInitiation>()->getFileInfo()->getSize());
// request acceptation
Swift::IQ::ref accept = Swift::IQ::createResult(getStanza(received[0])->getFrom(), getStanza(received[0])->getTo(), getStanza(received[0])->getID());
Swift::StreamInitiation::ref payload(new Swift::StreamInitiation());
payload->setRequestedMethod("http://jabber.org/protocol/ibb");
accept->addPayload(payload);
injectIQ(accept);
loop->processEvents();
received.erase(received.begin());
// handle open packet and accept the FT
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::IQ *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::IQ::Set, dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::IBB>());
CPPUNIT_ASSERT_EQUAL(Swift::IBB::Open, getStanza(received[0])->getPayload<Swift::IBB>()->getAction());
injectIQ(Swift::IQ::createResult(getStanza(received[0])->getFrom(), getStanza(received[0])->getTo(), getStanza(received[0])->getID()));
loop->processEvents();
CPPUNIT_ASSERT_EQUAL(true, dataNeeded);
CPPUNIT_ASSERT_EQUAL(Swift::FileTransfer::State::Transferring, ftState);
bytestream->appendData(data); // this will be send in one packet...
loop->processEvents();
received.erase(received.begin());
// we received data now
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::IQ *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::IQ::Set, dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::IBB>());
CPPUNIT_ASSERT_EQUAL(Swift::IBB::Data, getStanza(received[0])->getPayload<Swift::IBB>()->getAction());
injectIQ(Swift::IQ::createResult(getStanza(received[0])->getFrom(), getStanza(received[0])->getTo(), getStanza(received[0])->getID()));
loop->processEvents();
received.erase(received.begin());
}
};
CPPUNIT_TEST_SUITE_REGISTRATION (FileTransferManagerTest);
|