Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.

Commit 4041502

Browse files
committed
added export test
1 parent 3ae45c8 commit 4041502

File tree

5 files changed

+81
-8
lines changed

5 files changed

+81
-8
lines changed

src/datasync/authenticator.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,31 @@ Authenticator::Authenticator(QObject *parent) :
99
QObject(parent)
1010
{}
1111

12+
void Authenticator::exportUserData(QIODevice *device) const
13+
{
14+
exportUserDataImpl(device);
15+
}
16+
1217
QByteArray Authenticator::exportUserData() const
1318
{
1419
QBuffer buffer;
1520
buffer.open(QIODevice::WriteOnly);
16-
exportUserData(&buffer);
21+
exportUserDataImpl(&buffer);
1722
auto res = buffer.data();
1823
buffer.close();
1924
return res;
2025
}
2126

27+
GenericTask<void> Authenticator::importUserData(QIODevice *device)
28+
{
29+
return importUserDataImpl(device);
30+
}
31+
2232
GenericTask<void> Authenticator::importUserData(QByteArray data)
2333
{
2434
QBuffer buffer(&data);
2535
buffer.open(QIODevice::ReadOnly);
26-
auto res = importUserData(&buffer);
36+
auto res = importUserDataImpl(&buffer);
2737
buffer.close();
2838
return res;
2939
}

src/datasync/authenticator.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,21 @@ class Q_DATASYNC_EXPORT Authenticator : public QObject
2525
explicit Authenticator(QObject *parent = nullptr);
2626

2727
//! Export all user-related remote data to the given device
28-
virtual void exportUserData(QIODevice *device) const = 0;
28+
void exportUserData(QIODevice *device) const;
2929
//! Export all user-related remote data
3030
QByteArray exportUserData() const;
3131
//! Import user-related remote data from the given device
32-
virtual GenericTask<void> importUserData(QIODevice *device) = 0;
32+
GenericTask<void> importUserData(QIODevice *device);
3333
//! Import user-related remote data
3434
GenericTask<void> importUserData(QByteArray data);
3535

3636
protected:
3737
//! Call this method to reset the users identity.
3838
GenericTask<void> resetIdentity(const QVariant &extraData = {}, bool resetLocalStore = true);
3939

40+
virtual void exportUserDataImpl(QIODevice *device) const = 0;
41+
virtual GenericTask<void> importUserDataImpl(QIODevice *device) = 0;
42+
4043
//! Returns a reference to the connector this authenticator belongs to
4144
virtual RemoteConnector *connector() = 0;
4245
};

src/datasync/wsauthenticator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ WsAuthenticator::WsAuthenticator(WsRemoteConnector *connector, Defaults *default
2020

2121
WsAuthenticator::~WsAuthenticator() {}
2222

23-
void WsAuthenticator::exportUserData(QIODevice *device) const
23+
void WsAuthenticator::exportUserDataImpl(QIODevice *device) const
2424
{
2525
QJsonObject data;
2626
data[QStringLiteral("key")] = QString::fromUtf8(d->connector->cryptor()->key().toBase64());
@@ -29,7 +29,7 @@ void WsAuthenticator::exportUserData(QIODevice *device) const
2929
device->write(QJsonDocument(data).toJson(QJsonDocument::Indented));
3030
}
3131

32-
GenericTask<void> WsAuthenticator::importUserData(QIODevice *device)
32+
GenericTask<void> WsAuthenticator::importUserDataImpl(QIODevice *device)
3333
{
3434
QJsonParseError error;
3535
auto data = QJsonDocument::fromJson(device->readAll(), &error);

src/datasync/wsauthenticator.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class Q_DATASYNC_EXPORT WsAuthenticator : public Authenticator
4242
//! Destructor
4343
~WsAuthenticator();
4444

45-
void exportUserData(QIODevice *device) const override;
46-
GenericTask<void> importUserData(QIODevice *device) override;
45+
void exportUserDataImpl(QIODevice *device) const override;
46+
GenericTask<void> importUserDataImpl(QIODevice *device) override;
4747

4848
//! @readAcFn{WsAuthenticator::remoteEnabled}
4949
bool isRemoteEnabled() const;

tests/auto/datasync/WsRemoteConnectorTest/tst_wsremoteconnector.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ private Q_SLOTS:
2222
void testRemove();
2323

2424
void testSecondDevice();
25+
void testExportImport();
2526

2627
Q_SIGNALS:
2728
void unlockSignal();
@@ -285,6 +286,65 @@ void WsRemoteConnectorTest::testSecondDevice()
285286
store->mutex.unlock();
286287
}
287288

289+
void WsRemoteConnectorTest::testExportImport()
290+
{
291+
//IMPORTANT!!! clear pending notifies...
292+
QCoreApplication::processEvents();
293+
294+
QSignalSpy syncSpy(controller, &SyncController::syncStateChanged);
295+
QSignalSpy conSpy(auth, &WsAuthenticator::connectedChanged);
296+
297+
auto data = auth->exportUserData();
298+
299+
//after export: test with different user to reset
300+
auth->resetUserIdentity();//reset device trick...
301+
auth->reconnect();
302+
303+
QVERIFY(conSpy.wait());
304+
QVERIFY(!auth->isConnected());
305+
QVERIFY(conSpy.wait());
306+
QVERIFY(auth->isConnected());
307+
for(auto i = 0; i < 10 && syncSpy.count() < 4; i++)
308+
syncSpy.wait(500);
309+
QCOMPARE(syncSpy.count(), 4);
310+
QCOMPARE(syncSpy[0][0], QVariant::fromValue(SyncController::Disconnected));
311+
QCOMPARE(syncSpy[1][0], QVariant::fromValue(SyncController::Loading));
312+
QCOMPARE(syncSpy[2][0], QVariant::fromValue(SyncController::Syncing));
313+
QCOMPARE(syncSpy[3][0], QVariant::fromValue(SyncController::Synced));
314+
QCOMPARE(controller->syncState(), SyncController::Synced);
315+
316+
store->mutex.lock();
317+
[&](){
318+
QVERIFY(store->pseudoStore.keys().isEmpty());
319+
}();
320+
store->mutex.unlock();
321+
322+
//now reimport
323+
syncSpy.clear();
324+
conSpy.clear();
325+
326+
auth->importUserData(data);
327+
328+
QVERIFY(conSpy.wait());
329+
QVERIFY(!auth->isConnected());
330+
QVERIFY(conSpy.wait());
331+
QVERIFY(auth->isConnected());
332+
for(auto i = 0; i < 10 && syncSpy.count() < 4; i++)
333+
syncSpy.wait(500);
334+
QCOMPARE(syncSpy.count(), 4);
335+
QCOMPARE(syncSpy[0][0], QVariant::fromValue(SyncController::Disconnected));
336+
QCOMPARE(syncSpy[1][0], QVariant::fromValue(SyncController::Loading));
337+
QCOMPARE(syncSpy[2][0], QVariant::fromValue(SyncController::Syncing));
338+
QCOMPARE(syncSpy[3][0], QVariant::fromValue(SyncController::Synced));
339+
QCOMPARE(controller->syncState(), SyncController::Synced);
340+
341+
store->mutex.lock();
342+
[&](){
343+
QLISTCOMPARE(store->pseudoStore.keys(), generateDataJson(313, 318).keys());
344+
}();
345+
store->mutex.unlock();
346+
}
347+
288348
QTEST_MAIN(WsRemoteConnectorTest)
289349

290350
#include "tst_wsremoteconnector.moc"

0 commit comments

Comments
 (0)