553 lines
18 KiB
C++
553 lines
18 KiB
C++
|
|
#include <QtTest>
|
||
|
|
#include <LocalSendCore/SessionManager.h>
|
||
|
|
#include <LocalSendCore/Device.h>
|
||
|
|
|
||
|
|
class TestSessionManager : public QObject
|
||
|
|
{
|
||
|
|
Q_OBJECT
|
||
|
|
|
||
|
|
private slots:
|
||
|
|
void testCreateReceiveSession();
|
||
|
|
void testAcceptReceiveSession();
|
||
|
|
void testDeclineReceiveSession();
|
||
|
|
void testCancelReceiveSession();
|
||
|
|
void testReceiveProgress();
|
||
|
|
void testCompleteReceiveFile();
|
||
|
|
void testCompleteAllReceiveFiles();
|
||
|
|
void testFailReceiveFile();
|
||
|
|
void testCreateSendSession();
|
||
|
|
void testSetSendSessionTokens();
|
||
|
|
void testStartSendSession();
|
||
|
|
void testSendProgress();
|
||
|
|
void testCompleteSendFile();
|
||
|
|
void testCompleteAllSendFiles();
|
||
|
|
void testCancelSendSession();
|
||
|
|
void testHasSessionQueries();
|
||
|
|
void testGenerateToken();
|
||
|
|
void testDeclineRemovesSession();
|
||
|
|
void testSetSendSessionTokensRekeys();
|
||
|
|
};
|
||
|
|
|
||
|
|
void TestSessionManager::testCreateReceiveSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
sender.ip = QStringLiteral("10.0.0.1");
|
||
|
|
sender.alias = QStringLiteral("Sender");
|
||
|
|
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
LocalSend::FileDto f2;
|
||
|
|
f2.id = QStringLiteral("1");
|
||
|
|
f2.fileName = QStringLiteral("b.txt");
|
||
|
|
f2.size = 200;
|
||
|
|
files.insert(QStringLiteral("1"), f2);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionCreated);
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
|
||
|
|
QVERIFY(!sessionId.isEmpty());
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
|
||
|
|
LocalSend::ReceiveSession session = mgr.receiveSession(sessionId);
|
||
|
|
QCOMPARE(session.sessionId, sessionId);
|
||
|
|
QCOMPARE(session.sender.alias, QStringLiteral("Sender"));
|
||
|
|
QCOMPARE(session.files.size(), 2);
|
||
|
|
QCOMPARE(session.status, LocalSend::SessionStatus::Waiting);
|
||
|
|
QVERIFY(!session.files[QStringLiteral("0")].token.isEmpty());
|
||
|
|
QVERIFY(!session.files[QStringLiteral("1")].token.isEmpty());
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testAcceptReceiveSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionAccepted);
|
||
|
|
QMap<QString, QString> destPaths;
|
||
|
|
destPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
mgr.acceptReceiveSession(sessionId, destPaths);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QList<QVariant> args = spy.takeFirst();
|
||
|
|
QCOMPARE(args.at(0).toString(), sessionId);
|
||
|
|
|
||
|
|
LocalSend::ReceiveSession session = mgr.receiveSession(sessionId);
|
||
|
|
QCOMPARE(session.status, LocalSend::SessionStatus::Sending);
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].destinationPath, QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
auto tokens = args.at(1).value<QMap<QString, QString>>();
|
||
|
|
QVERIFY(!tokens.value(QStringLiteral("0")).isEmpty());
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testDeclineReceiveSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionDeclined);
|
||
|
|
mgr.declineReceiveSession(sessionId);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCancelReceiveSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QMap<QString, QString> destPaths;
|
||
|
|
destPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
mgr.acceptReceiveSession(sessionId, destPaths);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionCanceled);
|
||
|
|
mgr.cancelReceiveSession(sessionId);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testReceiveProgress()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 1000;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QMap<QString, QString> destPaths;
|
||
|
|
destPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
mgr.acceptReceiveSession(sessionId, destPaths);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveProgress);
|
||
|
|
mgr.updateReceiveProgress(sessionId, QStringLiteral("0"), 500);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
double progress = spy.takeFirst().at(2).toDouble();
|
||
|
|
QVERIFY(qFuzzyCompare(progress, 0.5));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCompleteReceiveFile()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 1000;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QMap<QString, QString> destPaths;
|
||
|
|
destPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
mgr.acceptReceiveSession(sessionId, destPaths);
|
||
|
|
|
||
|
|
mgr.updateReceiveProgress(sessionId, QStringLiteral("0"), 1000);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionCompleted);
|
||
|
|
mgr.completeReceiveFile(sessionId, QStringLiteral("0"));
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCompleteAllReceiveFiles()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
LocalSend::FileDto f2;
|
||
|
|
f2.id = QStringLiteral("1");
|
||
|
|
f2.fileName = QStringLiteral("b.txt");
|
||
|
|
f2.size = 200;
|
||
|
|
files.insert(QStringLiteral("1"), f2);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QMap<QString, QString> destPaths;
|
||
|
|
destPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
destPaths.insert(QStringLiteral("1"), QStringLiteral("/tmp/b.txt"));
|
||
|
|
mgr.acceptReceiveSession(sessionId, destPaths);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::receiveSessionCompleted);
|
||
|
|
|
||
|
|
mgr.completeReceiveFile(sessionId, QStringLiteral("0"));
|
||
|
|
QCOMPARE(spy.count(), 0);
|
||
|
|
QVERIFY(mgr.hasReceiveSession(sessionId));
|
||
|
|
|
||
|
|
mgr.completeReceiveFile(sessionId, QStringLiteral("1"));
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testFailReceiveFile()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 1000;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
|
||
|
|
mgr.failReceiveFile(sessionId, QStringLiteral("0"));
|
||
|
|
|
||
|
|
LocalSend::ReceiveSession session = mgr.receiveSession(sessionId);
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].status, LocalSend::FileStatus::Failed);
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCreateSendSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
target.ip = QStringLiteral("10.0.0.2");
|
||
|
|
target.alias = QStringLiteral("Receiver");
|
||
|
|
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("c.txt");
|
||
|
|
f1.size = 500;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/home/user/c.txt"));
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendSessionCreated);
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
|
||
|
|
QVERIFY(!sessionId.isEmpty());
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
|
||
|
|
LocalSend::SendSession session = mgr.sendSession(sessionId);
|
||
|
|
QCOMPARE(session.sessionId, sessionId);
|
||
|
|
QCOMPARE(session.target.alias, QStringLiteral("Receiver"));
|
||
|
|
QCOMPARE(session.files.size(), 1);
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].localPath, QStringLiteral("/home/user/c.txt"));
|
||
|
|
QCOMPARE(session.status, LocalSend::SessionStatus::Waiting);
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testSetSendSessionTokens()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
QString origSessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
|
||
|
|
QString responseSessionId = QStringLiteral("server-session-123");
|
||
|
|
QMap<QString, QString> tokens;
|
||
|
|
tokens.insert(QStringLiteral("0"), QStringLiteral("token-abc"));
|
||
|
|
|
||
|
|
mgr.setSendSessionTokens(origSessionId, responseSessionId, tokens);
|
||
|
|
|
||
|
|
QVERIFY(!mgr.hasSendSession(origSessionId));
|
||
|
|
QVERIFY(mgr.hasSendSession(responseSessionId));
|
||
|
|
|
||
|
|
LocalSend::SendSession session = mgr.sendSession(responseSessionId);
|
||
|
|
QCOMPARE(session.sessionId, responseSessionId);
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].token, QStringLiteral("token-abc"));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testStartSendSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendSessionStarted);
|
||
|
|
mgr.startSendSession(sessionId);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
LocalSend::SendSession session = mgr.sendSession(sessionId);
|
||
|
|
QCOMPARE(session.status, LocalSend::SessionStatus::Sending);
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testSendProgress()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 2000;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
mgr.startSendSession(sessionId);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendProgress);
|
||
|
|
mgr.updateSendProgress(sessionId, QStringLiteral("0"), 1000);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
double progress = spy.takeFirst().at(2).toDouble();
|
||
|
|
QVERIFY(qFuzzyCompare(progress, 0.5));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCompleteSendFile()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 1000;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
mgr.startSendSession(sessionId);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendSessionCompleted);
|
||
|
|
mgr.completeSendFile(sessionId, QStringLiteral("0"));
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasSendSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCompleteAllSendFiles()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
LocalSend::FileDto f2;
|
||
|
|
f2.id = QStringLiteral("1");
|
||
|
|
f2.fileName = QStringLiteral("b.txt");
|
||
|
|
f2.size = 200;
|
||
|
|
files.insert(QStringLiteral("1"), f2);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
localPaths.insert(QStringLiteral("1"), QStringLiteral("/tmp/b.txt"));
|
||
|
|
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
mgr.startSendSession(sessionId);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendSessionCompleted);
|
||
|
|
|
||
|
|
mgr.completeSendFile(sessionId, QStringLiteral("0"));
|
||
|
|
QCOMPARE(spy.count(), 0);
|
||
|
|
|
||
|
|
mgr.completeSendFile(sessionId, QStringLiteral("1"));
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasSendSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testCancelSendSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
|
||
|
|
QString sessionId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
mgr.startSendSession(sessionId);
|
||
|
|
|
||
|
|
QSignalSpy spy(&mgr, &LocalSend::SessionManager::sendSessionCanceled);
|
||
|
|
mgr.cancelSendSession(sessionId);
|
||
|
|
|
||
|
|
QCOMPARE(spy.count(), 1);
|
||
|
|
QVERIFY(!mgr.hasSendSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testHasSessionQueries()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(QStringLiteral("nonexistent")));
|
||
|
|
QVERIFY(!mgr.hasSendSession(QStringLiteral("nonexistent")));
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString recvSessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QVERIFY(mgr.hasReceiveSession(recvSessionId));
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
QString sendSessionId = mgr.createSendSession(sender, files, localPaths);
|
||
|
|
QVERIFY(mgr.hasSendSession(sendSessionId));
|
||
|
|
|
||
|
|
LocalSend::ReceiveSession emptyRecv = mgr.receiveSession(QStringLiteral("nope"));
|
||
|
|
QVERIFY(emptyRecv.sessionId.isEmpty());
|
||
|
|
|
||
|
|
LocalSend::SendSession emptySend = mgr.sendSession(QStringLiteral("nope"));
|
||
|
|
QVERIFY(emptySend.sessionId.isEmpty());
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testGenerateToken()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
QString token1 = mgr.generateToken();
|
||
|
|
QString token2 = mgr.generateToken();
|
||
|
|
|
||
|
|
QVERIFY(!token1.isEmpty());
|
||
|
|
QVERIFY(!token2.isEmpty());
|
||
|
|
QVERIFY(token1 != token2);
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testDeclineRemovesSession()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device sender;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
QString sessionId = mgr.createReceiveSession(sender, files);
|
||
|
|
QVERIFY(mgr.hasReceiveSession(sessionId));
|
||
|
|
|
||
|
|
mgr.declineReceiveSession(sessionId);
|
||
|
|
QVERIFY(!mgr.hasReceiveSession(sessionId));
|
||
|
|
}
|
||
|
|
|
||
|
|
void TestSessionManager::testSetSendSessionTokensRekeys()
|
||
|
|
{
|
||
|
|
LocalSend::SessionManager mgr;
|
||
|
|
|
||
|
|
LocalSend::Device target;
|
||
|
|
QMap<QString, LocalSend::FileDto> files;
|
||
|
|
LocalSend::FileDto f1;
|
||
|
|
f1.id = QStringLiteral("0");
|
||
|
|
f1.fileName = QStringLiteral("a.txt");
|
||
|
|
f1.size = 100;
|
||
|
|
files.insert(QStringLiteral("0"), f1);
|
||
|
|
|
||
|
|
LocalSend::FileDto f2;
|
||
|
|
f2.id = QStringLiteral("1");
|
||
|
|
f2.fileName = QStringLiteral("b.txt");
|
||
|
|
f2.size = 200;
|
||
|
|
files.insert(QStringLiteral("1"), f2);
|
||
|
|
|
||
|
|
QMap<QString, QString> localPaths;
|
||
|
|
localPaths.insert(QStringLiteral("0"), QStringLiteral("/tmp/a.txt"));
|
||
|
|
localPaths.insert(QStringLiteral("1"), QStringLiteral("/tmp/b.txt"));
|
||
|
|
|
||
|
|
QString origId = mgr.createSendSession(target, files, localPaths);
|
||
|
|
|
||
|
|
QString newId = QStringLiteral("response-session-id");
|
||
|
|
QMap<QString, QString> tokens;
|
||
|
|
tokens.insert(QStringLiteral("0"), QStringLiteral("tok0"));
|
||
|
|
tokens.insert(QStringLiteral("1"), QStringLiteral("tok1"));
|
||
|
|
|
||
|
|
mgr.setSendSessionTokens(origId, newId, tokens);
|
||
|
|
|
||
|
|
QVERIFY(!mgr.hasSendSession(origId));
|
||
|
|
QVERIFY(mgr.hasSendSession(newId));
|
||
|
|
|
||
|
|
LocalSend::SendSession session = mgr.sendSession(newId);
|
||
|
|
QCOMPARE(session.sessionId, newId);
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].token, QStringLiteral("tok0"));
|
||
|
|
QCOMPARE(session.files[QStringLiteral("1")].token, QStringLiteral("tok1"));
|
||
|
|
QCOMPARE(session.files[QStringLiteral("0")].localPath, QStringLiteral("/tmp/a.txt"));
|
||
|
|
QCOMPARE(session.files[QStringLiteral("1")].localPath, QStringLiteral("/tmp/b.txt"));
|
||
|
|
}
|
||
|
|
|
||
|
|
QTEST_MAIN(TestSessionManager)
|
||
|
|
#include "TestSessionManager.moc"
|