summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/QA/FileTransferTest')
-rw-r--r--Swiften/QA/FileTransferTest/FileTransferTest.cpp675
-rw-r--r--Swiften/QA/FileTransferTest/SConscript24
2 files changed, 348 insertions, 351 deletions
diff --git a/Swiften/QA/FileTransferTest/FileTransferTest.cpp b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
index 7a50e9f..b627b30 100644
--- a/Swiften/QA/FileTransferTest/FileTransferTest.cpp
+++ b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
@@ -13,7 +13,6 @@
#include <Swiften/Base/BoostRandomGenerator.h>
#include <Swiften/Base/Debug.h>
#include <Swiften/Base/Log.h>
-#include <Swiften/Base/foreach.h>
#include <Swiften/Base/sleep.h>
#include <Swiften/Client/Client.h>
#include <Swiften/Client/ClientXMLTracer.h>
@@ -35,366 +34,364 @@ using namespace Swift;
static const std::string CLIENT_NAME = "Swiften FT Test";
static const std::string CLIENT_NODE = "http://swift.im";
-static boost::shared_ptr<SimpleEventLoop> eventLoop;
-static boost::shared_ptr<BoostNetworkFactories> networkFactories;
+static std::shared_ptr<SimpleEventLoop> eventLoop;
+static std::shared_ptr<BoostNetworkFactories> networkFactories;
BoostRandomGenerator randGen;
enum Candidate {
- InBandBytestream = 1,
- S5B_Direct = 2,
- S5B_Proxied = 4,
- S5B_Assisted = 8,
+ InBandBytestream = 1,
+ S5B_Direct = 2,
+ S5B_Proxied = 4,
+ S5B_Assisted = 8,
};
class FileTransferTest {
- public:
- FileTransferTest(int senderCandidates, int receiverCandidates) : senderCandidates_(senderCandidates), senderError_(FileTransferError::UnknownError), senderIsDone_(false), receiverCandidates_(receiverCandidates), receiverError_(FileTransferError::UnknownError), receiverIsDone_(false) {
- sender_ = boost::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST_JID")), getenv("SWIFT_FILETRANSFERTEST_PASS"), networkFactories.get());
- sender_->onDisconnected.connect(boost::bind(&FileTransferTest::handleSenderDisconnected, this, _1));
- sender_->onConnected.connect(boost::bind(&FileTransferTest::handleSenderConnected, this));
- sender_->getEntityCapsProvider()->onCapsChanged.connect(boost::bind(&FileTransferTest::handleSenderCapsChanged, this, _1));
-
- receiver_ = boost::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST2_JID")), getenv("SWIFT_FILETRANSFERTEST2_PASS"), networkFactories.get());
- receiver_->onConnected.connect(boost::bind(&FileTransferTest::handleReceiverConnected, this));
- receiver_->onDisconnected.connect(boost::bind(&FileTransferTest::handleReceiverDisconnected, this, _1));
-
- senderTracer_ = new ClientXMLTracer(sender_.get());
- receiverTracer_ = new ClientXMLTracer(receiver_.get());
-
- ClientOptions options;
- options.useTLS = ClientOptions::NeverUseTLS;
- options.useStreamCompression = false;
- options.useStreamResumption = false;
- options.useAcks = false;
-
- sender_->connect(options);
- receiver_->connect(options);
-
- timeOut_ = networkFactories->getTimerFactory()->createTimer(60000);
- timeOut_->onTick.connect(boost::bind(&FileTransferTest::handleTimeOut, this));
-
- // Create randomly sized data to exchange.
- sendFilePath_ = boost::filesystem::unique_path("ft_send_%%%%%%%%%%%%%%%%.bin");
- receiveFilePath_ = boost::filesystem::unique_path("ft_receive_%%%%%%%%%%%%%%%%.bin");
-
- size_t size = 1024 + boost::numeric_cast<size_t>(randGen.generateRandomInteger(1024 * 10));
- sendData_.resize(size);
- for (size_t n = 0; n < sendData_.size(); n++) {
- sendData_[n] = boost::numeric_cast<unsigned char>(randGen.generateRandomInteger(255));
- }
-
- std::ofstream outfile(sendFilePath_.native().c_str(), std::ios::out | std::ios::binary);
- outfile.write(reinterpret_cast<char *>(&sendData_[0]), boost::numeric_cast<ptrdiff_t>(sendData_.size()));
- outfile.close();
- }
-
- ~FileTransferTest() {
- timeOut_->stop();
-
- delete senderTracer_;
- delete receiverTracer_;
-
- // Free file-transfer objects so file handles are closed and files can be removed afterwards.
- assert(!outgoingFileTransfer_ && incomingFileTransfers_.empty());
-
- if(boost::filesystem::exists(sendFilePath_)) {
- boost::filesystem::remove(sendFilePath_);
- }
-
- if(boost::filesystem::exists(receiveFilePath_)) {
- boost::filesystem::remove(receiveFilePath_);
- }
- }
-
- void handleSenderConnected() {
- DiscoInfo discoInfo;
- discoInfo.addIdentity(DiscoInfo::Identity(CLIENT_NAME, "client", "pc"));
- discoInfo.addFeature(DiscoInfo::JingleFeature);
- discoInfo.addFeature(DiscoInfo::JingleFTFeature);
- discoInfo.addFeature(DiscoInfo::Bytestream);
- if (senderCandidates_ & InBandBytestream) {
- discoInfo.addFeature(DiscoInfo::JingleTransportsIBBFeature);
- }
- if (senderCandidates_ & (S5B_Direct | S5B_Assisted | S5B_Proxied)) {
- discoInfo.addFeature(DiscoInfo::JingleTransportsS5BFeature);
- }
- sender_->getDiscoManager()->setCapsNode(CLIENT_NODE);
- sender_->getDiscoManager()->setDiscoInfo(discoInfo);
- sender_->sendPresence(Presence::create());
- }
-
- void handleReceiverConnected() {
- receiver_->getFileTransferManager()->onIncomingFileTransfer.connect(boost::bind(&FileTransferTest::handleReceiverIncomingFileTransfer, this, _1));
-
- DiscoInfo discoInfo;
- discoInfo.addIdentity(DiscoInfo::Identity(CLIENT_NAME, "client", "pc"));
- discoInfo.addFeature(DiscoInfo::JingleFeature);
- discoInfo.addFeature(DiscoInfo::JingleFTFeature);
- discoInfo.addFeature(DiscoInfo::Bytestream);
- if (receiverCandidates_ & InBandBytestream) {
- discoInfo.addFeature(DiscoInfo::JingleTransportsIBBFeature);
- }
- if (receiverCandidates_ & (S5B_Direct | S5B_Assisted | S5B_Proxied)) {
- discoInfo.addFeature(DiscoInfo::JingleTransportsS5BFeature);
- }
- receiver_->getDiscoManager()->setCapsNode(CLIENT_NODE);
- receiver_->getDiscoManager()->setDiscoInfo(discoInfo);
- receiver_->getPresenceSender()->sendPresence(Presence::create());
- }
-
- void handleReceiverIncomingFileTransfer(IncomingFileTransfer::ref transfer) {
- incomingFileTransfers_.push_back(transfer);
- boost::shared_ptr<FileWriteBytestream> out = boost::make_shared<FileWriteBytestream>(receiveFilePath_.native());
- transfer->onFinished.connect(boost::bind(&FileTransferTest::handleReceiverFileTransferFinished, this, _1, out));
-
- FileTransferOptions options;
- options = options.withInBandAllowed(receiverCandidates_ & InBandBytestream);
- options = options.withDirectAllowed(receiverCandidates_ & S5B_Direct);
- options = options.withAssistedAllowed(receiverCandidates_ & S5B_Assisted);
- options = options.withProxiedAllowed(receiverCandidates_ & S5B_Proxied);
-
- std::cout << "Incoming transfer options: " << "IBB (" << options.isInBandAllowed() << ")" << ", ";
- std::cout << "S5B Direct (" << options.isDirectAllowed() << ")" << ", ";
- std::cout << "S5B Assisted (" << options.isAssistedAllowed() << ")" << ", ";
- std::cout << "S5B Proxied (" << options.isProxiedAllowed() << ")" << std::endl;
-
- transfer->accept(out, options);
- }
-
- void handleSenderCapsChanged(const JID &jid) {
- if (receiver_ && (receiver_->getJID().toBare() == jid.toBare())) {
- boost::shared_ptr<FileReadBytestream> fileStream = boost::make_shared<FileReadBytestream>(sendFilePath_);
-
- FileTransferOptions options;
- options = options.withInBandAllowed(senderCandidates_ & InBandBytestream);
- options = options.withDirectAllowed(senderCandidates_ & S5B_Direct);
- options = options.withAssistedAllowed(senderCandidates_ & S5B_Assisted);
- options = options.withProxiedAllowed(senderCandidates_ & S5B_Proxied);
-
- std::cout << "Outgoing transfer options: " << "IBB (" << options.isInBandAllowed() << ")" << ", ";
- std::cout << "S5B Direct (" << options.isDirectAllowed() << ")" << ", ";
- std::cout << "S5B Assisted (" << options.isAssistedAllowed() << ")" << ", ";
- std::cout << "S5B Proxied (" << options.isProxiedAllowed() << ")" << std::endl;
-
- outgoingFileTransfer_ = sender_->getFileTransferManager()->createOutgoingFileTransfer(jid.toBare(), sendFilePath_, "Some File!", fileStream, options);
-
- if (outgoingFileTransfer_) {
- outgoingFileTransfer_->onFinished.connect(boost::bind(&FileTransferTest::handleSenderFileTransferFinished, this, _1));
- outgoingFileTransfer_->start();
- } else {
- std::cout << "ERROR: No outgoing file transfer returned." << std::endl;
- receiverIsDone_ = true;
- senderIsDone_ = true;
- endTest();
- }
- }
- }
-
- void handleReceiverFileTransferFinished(const boost::optional<FileTransferError>& error, boost::shared_ptr<FileWriteBytestream> out) {
- out->close();
- receiverError_ = error;
- receiverIsDone_ = true;
- if (senderIsDone_) {
- timeOut_->stop();
- timeOut_ = networkFactories->getTimerFactory()->createTimer(1000);
- timeOut_->onTick.connect(boost::bind(&FileTransferTest::endTest, this));
- timeOut_->start();
- }
- }
-
- void handleSenderDisconnected(const boost::optional<ClientError>& error) {
- if (error) {
- std::cout << this << " " << "handleSenderDisconnected: error: " << error.get() << std::endl;
- }
-
- // All file-transfers related to a Client instance need to be freed
- // *before* freeing the Client instance.
- outgoingFileTransfer_.reset();
-
- sender_.reset();
- if (!sender_ && !receiver_) {
- eventLoop->stop();
- }
- }
-
- void handleReceiverDisconnected(const boost::optional<ClientError>& error) {
- if (error) {
- std::cout << this << " " << "handleReceiverDisconnected: error: " << error.get() << std::endl;
- }
-
- // All file-transfers related to a Client instance need to be freed
- // *before* freeing the Client instance.
- incomingFileTransfers_.clear();
-
- receiver_.reset();
- if (!sender_ && !receiver_) {
- eventLoop->stop();
- }
- }
-
- void handleSenderFileTransferFinished(const boost::optional<FileTransferError>& error) {
- senderError_ = error;
- senderIsDone_ = true;
- if (receiverIsDone_) {
- timeOut_->stop();
- timeOut_ = networkFactories->getTimerFactory()->createTimer(1000);
- timeOut_->onTick.connect(boost::bind(&FileTransferTest::endTest, this));
- timeOut_->start();
- }
- else if (error) {
- endTest();
- }
- }
-
- void run() {
- timeOut_->start();
- eventLoop->run();
- }
-
- void endTest() {
- if (sender_) {
- sender_->disconnect();
- }
- if (receiver_) {
- receiver_->disconnect();
- }
- }
-
- void handleTimeOut() {
- std::cout << "Test timed out!!!" << std::endl;
- endTest();
- }
-
- bool isDone() const {
- return senderIsDone_ && receiverIsDone_;
- }
-
- bool wasSuccessful() const {
- return !senderError_ && !receiverError_;
- }
-
- private:
- int senderCandidates_;
- boost::shared_ptr<Client> sender_;
- ClientXMLTracer* senderTracer_;
- ByteArray sendData_;
- OutgoingFileTransfer::ref outgoingFileTransfer_;
- boost::filesystem::path sendFilePath_;
- boost::optional<FileTransferError> senderError_;
- bool senderIsDone_;
-
- int receiverCandidates_;
- boost::shared_ptr<Client> receiver_;
- ClientXMLTracer* receiverTracer_;
- ByteArray receiveData_;
- std::vector<IncomingFileTransfer::ref> incomingFileTransfers_;
- boost::filesystem::path receiveFilePath_;
- boost::optional<FileTransferError> receiverError_;
- bool receiverIsDone_;
-
- Timer::ref timeOut_;
+ public:
+ FileTransferTest(int senderCandidates, int receiverCandidates) : senderCandidates_(senderCandidates), senderError_(FileTransferError::UnknownError), senderIsDone_(false), receiverCandidates_(receiverCandidates), receiverError_(FileTransferError::UnknownError), receiverIsDone_(false) {
+ sender_ = std::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST_JID")), getenv("SWIFT_FILETRANSFERTEST_PASS"), networkFactories.get());
+ sender_->onDisconnected.connect(boost::bind(&FileTransferTest::handleSenderDisconnected, this, _1));
+ sender_->onConnected.connect(boost::bind(&FileTransferTest::handleSenderConnected, this));
+ sender_->getEntityCapsProvider()->onCapsChanged.connect(boost::bind(&FileTransferTest::handleSenderCapsChanged, this, _1));
+
+ receiver_ = std::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST2_JID")), getenv("SWIFT_FILETRANSFERTEST2_PASS"), networkFactories.get());
+ receiver_->onConnected.connect(boost::bind(&FileTransferTest::handleReceiverConnected, this));
+ receiver_->onDisconnected.connect(boost::bind(&FileTransferTest::handleReceiverDisconnected, this, _1));
+
+ senderTracer_ = new ClientXMLTracer(sender_.get());
+ receiverTracer_ = new ClientXMLTracer(receiver_.get());
+
+ ClientOptions options;
+ options.useTLS = ClientOptions::NeverUseTLS;
+ options.useStreamCompression = false;
+ options.useStreamResumption = false;
+ options.useAcks = false;
+
+ sender_->connect(options);
+ receiver_->connect(options);
+
+ timeOut_ = networkFactories->getTimerFactory()->createTimer(60000);
+ timeOut_->onTick.connect(boost::bind(&FileTransferTest::handleTimeOut, this));
+
+ // Create randomly sized data to exchange.
+ sendFilePath_ = boost::filesystem::unique_path("ft_send_%%%%%%%%%%%%%%%%.bin");
+ receiveFilePath_ = boost::filesystem::unique_path("ft_receive_%%%%%%%%%%%%%%%%.bin");
+
+ size_t size = 1024 + boost::numeric_cast<size_t>(randGen.generateRandomInteger(1024 * 10));
+ sendData_.resize(size);
+ for (unsigned char& n : sendData_) {
+ n = boost::numeric_cast<unsigned char>(randGen.generateRandomInteger(255));
+ }
+
+ std::ofstream outfile(sendFilePath_.native().c_str(), std::ios::out | std::ios::binary);
+ outfile.write(reinterpret_cast<char *>(&sendData_[0]), boost::numeric_cast<ptrdiff_t>(sendData_.size()));
+ outfile.close();
+ }
+
+ ~FileTransferTest() {
+ timeOut_->stop();
+
+ delete senderTracer_;
+ delete receiverTracer_;
+
+ // Free file-transfer objects so file handles are closed and files can be removed afterwards.
+ assert(!outgoingFileTransfer_ && incomingFileTransfers_.empty());
+
+ if(boost::filesystem::exists(sendFilePath_)) {
+ boost::filesystem::remove(sendFilePath_);
+ }
+
+ if(boost::filesystem::exists(receiveFilePath_)) {
+ boost::filesystem::remove(receiveFilePath_);
+ }
+ }
+
+ void handleSenderConnected() {
+ DiscoInfo discoInfo;
+ discoInfo.addIdentity(DiscoInfo::Identity(CLIENT_NAME, "client", "pc"));
+ discoInfo.addFeature(DiscoInfo::JingleFeature);
+ discoInfo.addFeature(DiscoInfo::JingleFTFeature);
+ discoInfo.addFeature(DiscoInfo::Bytestream);
+ if (senderCandidates_ & InBandBytestream) {
+ discoInfo.addFeature(DiscoInfo::JingleTransportsIBBFeature);
+ }
+ if (senderCandidates_ & (S5B_Direct | S5B_Assisted | S5B_Proxied)) {
+ discoInfo.addFeature(DiscoInfo::JingleTransportsS5BFeature);
+ }
+ sender_->getDiscoManager()->setCapsNode(CLIENT_NODE);
+ sender_->getDiscoManager()->setDiscoInfo(discoInfo);
+ sender_->sendPresence(Presence::create());
+ }
+
+ void handleReceiverConnected() {
+ receiver_->getFileTransferManager()->onIncomingFileTransfer.connect(boost::bind(&FileTransferTest::handleReceiverIncomingFileTransfer, this, _1));
+
+ DiscoInfo discoInfo;
+ discoInfo.addIdentity(DiscoInfo::Identity(CLIENT_NAME, "client", "pc"));
+ discoInfo.addFeature(DiscoInfo::JingleFeature);
+ discoInfo.addFeature(DiscoInfo::JingleFTFeature);
+ discoInfo.addFeature(DiscoInfo::Bytestream);
+ if (receiverCandidates_ & InBandBytestream) {
+ discoInfo.addFeature(DiscoInfo::JingleTransportsIBBFeature);
+ }
+ if (receiverCandidates_ & (S5B_Direct | S5B_Assisted | S5B_Proxied)) {
+ discoInfo.addFeature(DiscoInfo::JingleTransportsS5BFeature);
+ }
+ receiver_->getDiscoManager()->setCapsNode(CLIENT_NODE);
+ receiver_->getDiscoManager()->setDiscoInfo(discoInfo);
+ receiver_->getPresenceSender()->sendPresence(Presence::create());
+ }
+
+ void handleReceiverIncomingFileTransfer(IncomingFileTransfer::ref transfer) {
+ incomingFileTransfers_.push_back(transfer);
+ std::shared_ptr<FileWriteBytestream> out = std::make_shared<FileWriteBytestream>(receiveFilePath_.native());
+ transfer->onFinished.connect(boost::bind(&FileTransferTest::handleReceiverFileTransferFinished, this, _1, out));
+
+ FileTransferOptions options;
+ options = options.withInBandAllowed(receiverCandidates_ & InBandBytestream);
+ options = options.withDirectAllowed(receiverCandidates_ & S5B_Direct);
+ options = options.withAssistedAllowed(receiverCandidates_ & S5B_Assisted);
+ options = options.withProxiedAllowed(receiverCandidates_ & S5B_Proxied);
+
+ std::cout << "Incoming transfer options: " << "IBB (" << options.isInBandAllowed() << ")" << ", ";
+ std::cout << "S5B Direct (" << options.isDirectAllowed() << ")" << ", ";
+ std::cout << "S5B Assisted (" << options.isAssistedAllowed() << ")" << ", ";
+ std::cout << "S5B Proxied (" << options.isProxiedAllowed() << ")" << std::endl;
+
+ transfer->accept(out, options);
+ }
+
+ void handleSenderCapsChanged(const JID &jid) {
+ if (receiver_ && (receiver_->getJID().toBare() == jid.toBare())) {
+ std::shared_ptr<FileReadBytestream> fileStream = std::make_shared<FileReadBytestream>(sendFilePath_);
+
+ FileTransferOptions options;
+ options = options.withInBandAllowed(senderCandidates_ & InBandBytestream);
+ options = options.withDirectAllowed(senderCandidates_ & S5B_Direct);
+ options = options.withAssistedAllowed(senderCandidates_ & S5B_Assisted);
+ options = options.withProxiedAllowed(senderCandidates_ & S5B_Proxied);
+
+ std::cout << "Outgoing transfer options: " << "IBB (" << options.isInBandAllowed() << ")" << ", ";
+ std::cout << "S5B Direct (" << options.isDirectAllowed() << ")" << ", ";
+ std::cout << "S5B Assisted (" << options.isAssistedAllowed() << ")" << ", ";
+ std::cout << "S5B Proxied (" << options.isProxiedAllowed() << ")" << std::endl;
+
+ outgoingFileTransfer_ = sender_->getFileTransferManager()->createOutgoingFileTransfer(jid.toBare(), sendFilePath_, "Some File!", fileStream, options);
+
+ if (outgoingFileTransfer_) {
+ outgoingFileTransfer_->onFinished.connect(boost::bind(&FileTransferTest::handleSenderFileTransferFinished, this, _1));
+ outgoingFileTransfer_->start();
+ } else {
+ std::cout << "ERROR: No outgoing file transfer returned." << std::endl;
+ receiverIsDone_ = true;
+ senderIsDone_ = true;
+ endTest();
+ }
+ }
+ }
+
+ void handleReceiverFileTransferFinished(const boost::optional<FileTransferError>& error, std::shared_ptr<FileWriteBytestream> out) {
+ out->close();
+ receiverError_ = error;
+ receiverIsDone_ = true;
+ if (senderIsDone_) {
+ timeOut_->stop();
+ timeOut_ = networkFactories->getTimerFactory()->createTimer(1000);
+ timeOut_->onTick.connect(boost::bind(&FileTransferTest::endTest, this));
+ timeOut_->start();
+ }
+ }
+
+ void handleSenderDisconnected(const boost::optional<ClientError>& error) {
+ if (error) {
+ std::cout << this << " " << "handleSenderDisconnected: error: " << error.get() << std::endl;
+ }
+
+ // All file-transfers related to a Client instance need to be freed
+ // *before* freeing the Client instance.
+ outgoingFileTransfer_.reset();
+
+ sender_.reset();
+ if (!sender_ && !receiver_) {
+ eventLoop->stop();
+ }
+ }
+
+ void handleReceiverDisconnected(const boost::optional<ClientError>& error) {
+ if (error) {
+ std::cout << this << " " << "handleReceiverDisconnected: error: " << error.get() << std::endl;
+ }
+
+ // All file-transfers related to a Client instance need to be freed
+ // *before* freeing the Client instance.
+ incomingFileTransfers_.clear();
+
+ receiver_.reset();
+ if (!sender_ && !receiver_) {
+ eventLoop->stop();
+ }
+ }
+
+ void handleSenderFileTransferFinished(const boost::optional<FileTransferError>& error) {
+ senderError_ = error;
+ senderIsDone_ = true;
+ if (receiverIsDone_) {
+ timeOut_->stop();
+ timeOut_ = networkFactories->getTimerFactory()->createTimer(1000);
+ timeOut_->onTick.connect(boost::bind(&FileTransferTest::endTest, this));
+ timeOut_->start();
+ }
+ else if (error) {
+ endTest();
+ }
+ }
+
+ void run() {
+ timeOut_->start();
+ eventLoop->run();
+ }
+
+ void endTest() {
+ if (sender_) {
+ sender_->disconnect();
+ }
+ if (receiver_) {
+ receiver_->disconnect();
+ }
+ }
+
+ void handleTimeOut() {
+ std::cout << "Test timed out!!!" << std::endl;
+ endTest();
+ }
+
+ bool isDone() const {
+ return senderIsDone_ && receiverIsDone_;
+ }
+
+ bool wasSuccessful() const {
+ return !senderError_ && !receiverError_;
+ }
+
+ private:
+ int senderCandidates_;
+ std::shared_ptr<Client> sender_;
+ ClientXMLTracer* senderTracer_;
+ ByteArray sendData_;
+ OutgoingFileTransfer::ref outgoingFileTransfer_;
+ boost::filesystem::path sendFilePath_;
+ boost::optional<FileTransferError> senderError_;
+ bool senderIsDone_;
+
+ int receiverCandidates_;
+ std::shared_ptr<Client> receiver_;
+ ClientXMLTracer* receiverTracer_;
+ ByteArray receiveData_;
+ std::vector<IncomingFileTransfer::ref> incomingFileTransfers_;
+ boost::filesystem::path receiveFilePath_;
+ boost::optional<FileTransferError> receiverError_;
+ bool receiverIsDone_;
+
+ Timer::ref timeOut_;
};
static bool runTest(int senderCandidates, int receiverCandidates) {
- bool success = false;
+ bool success = false;
- std::cout << "senderCandidates: " << senderCandidates << ", receiverCandidates: " << receiverCandidates << std::endl;
- bool expectSuccess = (senderCandidates & receiverCandidates) > 0;
+ std::cout << "senderCandidates: " << senderCandidates << ", receiverCandidates: " << receiverCandidates << std::endl;
+ bool expectSuccess = (senderCandidates & receiverCandidates) > 0;
- eventLoop = boost::make_shared<SimpleEventLoop>();
- networkFactories = boost::make_shared<BoostNetworkFactories>(eventLoop.get());
+ eventLoop = std::make_shared<SimpleEventLoop>();
+ networkFactories = std::make_shared<BoostNetworkFactories>(eventLoop.get());
- boost::shared_ptr<FileTransferTest> testRun = boost::make_shared<FileTransferTest>(senderCandidates, receiverCandidates);
+ std::shared_ptr<FileTransferTest> testRun = std::make_shared<FileTransferTest>(senderCandidates, receiverCandidates);
- testRun->run();
+ testRun->run();
- bool wasSuccessful = testRun->wasSuccessful();
- if (expectSuccess == wasSuccessful) {
- success = true;
- }
- else {
- if (!testRun->isDone()) {
- std::cout << "Test did not finish transfer. Sender candidates = " << senderCandidates << ", receiver candidates = " << receiverCandidates << "." << std::endl;
- }
- }
- std::cout << "expected success: " << expectSuccess << ", wasSuccessful: " << wasSuccessful << std::endl;
+ bool wasSuccessful = testRun->wasSuccessful();
+ if (expectSuccess == wasSuccessful) {
+ success = true;
+ }
+ else {
+ if (!testRun->isDone()) {
+ std::cout << "Test did not finish transfer. Sender candidates = " << senderCandidates << ", receiver candidates = " << receiverCandidates << "." << std::endl;
+ }
+ }
+ std::cout << "expected success: " << expectSuccess << ", wasSuccessful: " << wasSuccessful << std::endl;
- testRun.reset();
- networkFactories.reset();
- eventLoop->runUntilEvents();
+ testRun.reset();
+ networkFactories.reset();
+ eventLoop->runUntilEvents();
- eventLoop->stop();
- eventLoop.reset();
+ eventLoop->stop();
+ eventLoop.reset();
- return success;
+ return success;
}
/**
- * This program test file-transfer interop between Swift and itself with various connection candidates.
- * The all combinations of the candidates, IBB, S5B (direct) and S5B (proxied), on sender and receiver side are tested.
+ * This program test file-transfer interop between Swift and itself with various connection candidates.
+ * The all combinations of the candidates, IBB, S5B (direct) and S5B (proxied), on sender and receiver side are tested.
*/
int main(int argc, char** argv) {
- int failedTests = 0;
-
- std::vector<std::pair<int, int> > failedTestPairs;
- std::cout << "Swiften File-Transfer Connectivity Test Suite" << std::endl;
- if (argc == 1) {
- if (getenv("SWIFT_FILETRANSFERTEST_CONFIG")) {
- // test configuration described in SWIFT_FILETRANSFERTEST_CONFIG environment variable, e.g. "1:1|2:2"
- std::vector<std::string> configurations;
- std::string configs_env = std::string(getenv("SWIFT_FILETRANSFERTEST_CONFIG"));
- boost::split(configurations, configs_env, boost::is_any_of("|"));
- foreach(const std::string& config, configurations) {
- std::vector<std::string> split_config;
- boost::split(split_config, config, boost::is_any_of(":"));
- assert(split_config.size() == 2);
-
- int senderCandidates = atoi(split_config[0].c_str());
- int receiverCandidates = atoi(split_config[1].c_str());
-
- if (!runTest(senderCandidates, receiverCandidates)) {
- failedTests++;
- failedTestPairs.push_back(std::pair<int, int>(senderCandidates, receiverCandidates));
- }
- }
-
- typedef std::pair<int, int> IntPair;
- foreach(IntPair failedTest, failedTestPairs) {
- std::cout << "Failed test: " << "( " << failedTest.first << ", " << failedTest.second << ") " << std::endl;
- }
- }
- else {
- // test all configurations
- for (int n = 0; n < (1 << 7); n++) {
- int senderCandidates = n & 0xF;
- int receiverCandidates = (n >> 4) & 0xF;
- std::cout << "Run test " << n + 1 << " of " << (1 << 7) << ", (" << senderCandidates << ", " << receiverCandidates << ")" << std::endl;
- if (!runTest(senderCandidates, receiverCandidates)) {
- failedTests++;
- failedTestPairs.push_back(std::pair<int, int>(senderCandidates, receiverCandidates));
- }
- }
-
- typedef std::pair<int, int> IntPair;
- foreach(IntPair failedTest, failedTestPairs) {
- std::cout << "Failed test: " << "( " << failedTest.first << ", " << failedTest.second << ") " << std::endl;
- }
- }
- }
- else if (argc == 3) {
- Log::setLogLevel(Log::debug);
- int senderCandidates = atoi(argv[1]);
- int receiverCandidates = atoi(argv[2]);
- if (!runTest(senderCandidates, receiverCandidates)) {
- failedTests++;
- }
- }
- else {
- std::cout << "Usage:" << std::endl;
- std::cout << "\t- to test all combinations pass no arguments" << std::endl;
- std::cout << "\t- to test a specific combination pass two integers describing sender and receiver candidates" << std::endl;
- }
- return failedTests;
+ int failedTests = 0;
+
+ std::vector<std::pair<int, int> > failedTestPairs;
+ std::cout << "Swiften File-Transfer Connectivity Test Suite" << std::endl;
+ if (argc == 1) {
+ if (getenv("SWIFT_FILETRANSFERTEST_CONFIG")) {
+ // test configuration described in SWIFT_FILETRANSFERTEST_CONFIG environment variable, e.g. "1:1|2:2"
+ std::vector<std::string> configurations;
+ std::string configs_env = std::string(getenv("SWIFT_FILETRANSFERTEST_CONFIG"));
+ boost::split(configurations, configs_env, boost::is_any_of("|"));
+ for (const auto& config : configurations) {
+ std::vector<std::string> split_config;
+ boost::split(split_config, config, boost::is_any_of(":"));
+ assert(split_config.size() == 2);
+
+ int senderCandidates = atoi(split_config[0].c_str());
+ int receiverCandidates = atoi(split_config[1].c_str());
+
+ if (!runTest(senderCandidates, receiverCandidates)) {
+ failedTests++;
+ failedTestPairs.push_back(std::pair<int, int>(senderCandidates, receiverCandidates));
+ }
+ }
+
+ for (auto&& failedTest : failedTestPairs) {
+ std::cout << "Failed test: " << "( " << failedTest.first << ", " << failedTest.second << ") " << std::endl;
+ }
+ }
+ else {
+ // test all configurations
+ for (int n = 0; n < (1 << 7); n++) {
+ int senderCandidates = n & 0xF;
+ int receiverCandidates = (n >> 4) & 0xF;
+ std::cout << "Run test " << n + 1 << " of " << (1 << 7) << ", (" << senderCandidates << ", " << receiverCandidates << ")" << std::endl;
+ if (!runTest(senderCandidates, receiverCandidates)) {
+ failedTests++;
+ failedTestPairs.push_back(std::pair<int, int>(senderCandidates, receiverCandidates));
+ }
+ }
+
+ for (auto&& failedTest : failedTestPairs) {
+ std::cout << "Failed test: " << "( " << failedTest.first << ", " << failedTest.second << ") " << std::endl;
+ }
+ }
+ }
+ else if (argc == 3) {
+ Log::setLogLevel(Log::debug);
+ int senderCandidates = atoi(argv[1]);
+ int receiverCandidates = atoi(argv[2]);
+ if (!runTest(senderCandidates, receiverCandidates)) {
+ failedTests++;
+ }
+ }
+ else {
+ std::cout << "Usage:" << std::endl;
+ std::cout << "\t- to test all combinations pass no arguments" << std::endl;
+ std::cout << "\t- to test a specific combination pass two integers describing sender and receiver candidates" << std::endl;
+ }
+ return failedTests;
}
diff --git a/Swiften/QA/FileTransferTest/SConscript b/Swiften/QA/FileTransferTest/SConscript
index 3275985..4b77674 100644
--- a/Swiften/QA/FileTransferTest/SConscript
+++ b/Swiften/QA/FileTransferTest/SConscript
@@ -3,18 +3,18 @@ import os
Import("env")
if env["TEST"] :
- myenv = env.Clone()
- myenv.UseFlags(myenv["SWIFTEN_FLAGS"])
- myenv.UseFlags(myenv["SWIFTEN_DEP_FLAGS"])
+ myenv = env.Clone()
+ myenv.UseFlags(myenv["SWIFTEN_FLAGS"])
+ myenv.UseFlags(myenv["SWIFTEN_DEP_FLAGS"])
- for i in ["SWIFT_FILETRANSFERTEST_JID", "SWIFT_FILETRANSFERTEST_PASS", "SWIFT_FILETRANSFERTEST2_JID", "SWIFT_FILETRANSFERTEST2_PASS"]:
- if ARGUMENTS.get(i.lower(), False) :
- myenv["ENV"][i] = ARGUMENTS[i.lower()]
- elif os.environ.get(i, "") :
- myenv["ENV"][i] = os.environ[i]
+ for i in ["SWIFT_FILETRANSFERTEST_JID", "SWIFT_FILETRANSFERTEST_PASS", "SWIFT_FILETRANSFERTEST2_JID", "SWIFT_FILETRANSFERTEST2_PASS"]:
+ if ARGUMENTS.get(i.lower(), False) :
+ myenv["ENV"][i] = ARGUMENTS[i.lower()]
+ elif os.environ.get(i, "") :
+ myenv["ENV"][i] = os.environ[i]
- # test in-band transfers, direct SOCKS5 bytestream transfers and proxied SOCKS5 bytestream transfers
- myenv["ENV"]["SWIFT_FILETRANSFERTEST_CONFIG"] = "1:1|2:2|4:4"
+ # test in-band transfers, direct SOCKS5 bytestream transfers and proxied SOCKS5 bytestream transfers
+ myenv["ENV"]["SWIFT_FILETRANSFERTEST_CONFIG"] = "1:1|2:2|4:4"
- tester = myenv.Program("FileTransferTest", ["FileTransferTest.cpp"])
- myenv.Test(tester, "system")
+ tester = myenv.Program("FileTransferTest", ["FileTransferTest.cpp"])
+ myenv.Test(tester, "system")