From 61b1d78172c2f205e871f912a414d97105445fab Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 25 May 2012 20:54:08 +0200 Subject: Added a test that reads from multiple private partitions. For that to work I've added QJsonDbStandardPaths that has convenience functions for retrieving home directories for different users and a switch for using a prefix instead of real users, which can be used in autotests. Change-Id: Ibcbba2fe17498b722f5cbe33fc3a1c16f75f3283 Reviewed-by: Tapani Mikola --- tests/auto/client/test-jsondb-client.cpp | 11 +--- .../testqjsondbflushrequest.cpp | 1 + tests/auto/qjsondbrequest/testqjsondbrequest.cpp | 69 ++++++++++++++++++---- tests/auto/qjsondbwatcher/testqjsondbwatcher.cpp | 5 +- tests/benchmarks/client/client-benchmark.cpp | 1 + tests/shared/testhelper.cpp | 25 +++++++- tests/shared/testhelper.h | 2 + 7 files changed, 89 insertions(+), 25 deletions(-) (limited to 'tests') diff --git a/tests/auto/client/test-jsondb-client.cpp b/tests/auto/client/test-jsondb-client.cpp index 45dda54..03099c4 100644 --- a/tests/auto/client/test-jsondb-client.cpp +++ b/tests/auto/client/test-jsondb-client.cpp @@ -436,21 +436,12 @@ void TestJsonDbClient::cleanupTestCase() removeDbFiles(); - struct passwd *pwd = getpwnam(qgetenv("USER")); - if (pwd) { - QDir homePartition(QString::fromLatin1("%1/.jsondb").arg(QString::fromUtf8(pwd->pw_dir))); - foreach (const QString &file, homePartition.entryList()) - QFile::remove(homePartition.absoluteFilePath(file)); - - homePartition.cdUp(); - homePartition.rmpath(QStringLiteral(".jsondb")); - } - stopDaemon(); } void TestJsonDbClient::init() { + clearHelperData(); connectToServer(); } diff --git a/tests/auto/qjsondbflushrequest/testqjsondbflushrequest.cpp b/tests/auto/qjsondbflushrequest/testqjsondbflushrequest.cpp index 8a0550b..d4062ba 100644 --- a/tests/auto/qjsondbflushrequest/testqjsondbflushrequest.cpp +++ b/tests/auto/qjsondbflushrequest/testqjsondbflushrequest.cpp @@ -81,6 +81,7 @@ void TestQJsonDbFlushRequest::cleanupTestCase() void TestQJsonDbFlushRequest::init() { + clearHelperData(); connectToServer(); } diff --git a/tests/auto/qjsondbrequest/testqjsondbrequest.cpp b/tests/auto/qjsondbrequest/testqjsondbrequest.cpp index 86a1e82..e0de07f 100644 --- a/tests/auto/qjsondbrequest/testqjsondbrequest.cpp +++ b/tests/auto/qjsondbrequest/testqjsondbrequest.cpp @@ -43,6 +43,7 @@ #include "qjsondbobject.h" #include "qjsondbreadrequest.h" #include "qjsondbwriterequest.h" +#include "private/qjsondbstandardpaths_p.h" #include "testhelper.h" #include @@ -96,6 +97,7 @@ private slots: void updateRequest(); void privatePartition(); void privatePartition2(); + void privatePartitions(); void invalidPrivatePartition(); void removeRequest(); void forced(); @@ -110,6 +112,7 @@ private: void TestQJsonDbRequest::initTestCase() { + QJsonDbStandardPaths::setAutotestMode(true); removeDbFiles(); QStringList arg_list = QStringList() << "-validate-schemas"; @@ -123,21 +126,12 @@ void TestQJsonDbRequest::cleanupTestCase() QFile partitionsFile(QFileInfo(QFINDTESTDATA("partitions.json")).absoluteDir().absoluteFilePath(QLatin1String("partitions-test.json"))); partitionsFile.remove(); - struct passwd *pwd = getpwnam(qgetenv("USER")); - if (pwd) { - QDir homePartition(QString::fromLatin1("%1/.jsondb").arg(QString::fromUtf8(pwd->pw_dir))); - foreach (const QString &file, homePartition.entryList(QStringList() << QLatin1String("*.db"))) - QFile::remove(homePartition.absoluteFilePath(file)); - - homePartition.cdUp(); - homePartition.rmdir(QStringLiteral(".jsondb")); - } - stopDaemon(); } void TestQJsonDbRequest::init() { + clearHelperData(); connectToServer(); } @@ -826,7 +820,7 @@ void TestQJsonDbRequest::privatePartition() QJsonDbWriteRequest write; write.setObjects(QList() << contact1 << contact2); // use the explicit form of the private partition (with full username) - write.setPartition(QString::fromLatin1("%1.Private").arg(QString::fromLatin1(qgetenv("USER")))); + write.setPartition(QString::fromLatin1("%1.Private").arg(QJsonDbStandardPaths::currentUser())); mConnection->send(&write); QVERIFY(waitForResponse(&write)); QVERIFY(!mRequestErrors.contains(&write)); @@ -879,7 +873,7 @@ void TestQJsonDbRequest::privatePartition() QCOMPARE(results[0].value(QStringLiteral("name")).toString(), contact2.value(QStringLiteral("name")).toString()); // switch - query.setPartition(QString::fromLatin1("%1.Private").arg(QString::fromLatin1(qgetenv("USER")))); + query.setPartition(QString::fromLatin1("%1.Private").arg(QJsonDbStandardPaths::currentUser())); write.setPartition(QStringLiteral("Private")); contact2.insert(QStringLiteral("_deleted"), true); @@ -937,6 +931,57 @@ void TestQJsonDbRequest::privatePartition2() QCOMPARE((int)statuses.at(2), (int)QJsonDbRequest::Finished); } +void TestQJsonDbRequest::privatePartitions() +{ + QJsonDbObject contact1; + contact1.insert(QStringLiteral("_uuid"), QStringLiteral("{9a57c619-fa16-4259-acf5-7d670f59674f}")); + contact1.insert(QStringLiteral("_type"), QStringLiteral("privatePartitions")); + contact1.insert(QStringLiteral("name"), QStringLiteral("Joe")); + QJsonDbObject contact2; + contact2.insert(QStringLiteral("_type"), QStringLiteral("privatePartitions")); + contact2.insert(QStringLiteral("_uuid"), QStringLiteral("{d87707c5-71ae-4524-813e-4dd9dda55a87}")); + contact2.insert(QStringLiteral("name"), QStringLiteral("Alice")); + + QJsonDbWriteRequest write1; + write1.setObjects(QList() << contact1); + write1.setPartition(QStringLiteral("joe.Private")); + mConnection->send(&write1); + QVERIFY(waitForResponse(&write1)); + + QJsonDbWriteRequest write2; + write2.setObjects(QList() << contact2); + write2.setPartition(QStringLiteral("alice.Private")); + mConnection->send(&write2); + QVERIFY(waitForResponse(&write2)); + + { + QJsonDbReadRequest read(QStringLiteral("[?_type=\"privatePartitions\"]")); + read.setPartition(QStringLiteral("Private")); + mConnection->send(&read); + QVERIFY(waitForResponse(&read)); + QList results = read.takeResults(); + QCOMPARE(results.size(), 0); + } + { + QJsonDbReadRequest read(QStringLiteral("[?_type=\"privatePartitions\"]")); + read.setPartition(QStringLiteral("alice.Private")); + mConnection->send(&read); + QVERIFY(waitForResponse(&read)); + QList results = read.takeResults(); + QCOMPARE(results.size(), 1); + QCOMPARE(results.at(0).value(QStringLiteral("name")).toString(), QLatin1String("Alice")); + } + { + QJsonDbReadRequest read(QStringLiteral("[?_type=\"privatePartitions\"]")); + read.setPartition(QStringLiteral("joe.Private")); + mConnection->send(&read); + QVERIFY(waitForResponse(&read)); + QList results = read.takeResults(); + QCOMPARE(results.size(), 1); + QCOMPARE(results.at(0).value(QStringLiteral("name")).toString(), QLatin1String("Joe")); + } +} + void TestQJsonDbRequest::invalidPrivatePartition() { QJsonObject contact1; diff --git a/tests/auto/qjsondbwatcher/testqjsondbwatcher.cpp b/tests/auto/qjsondbwatcher/testqjsondbwatcher.cpp index 3ddeacc..2c1da18 100644 --- a/tests/auto/qjsondbwatcher/testqjsondbwatcher.cpp +++ b/tests/auto/qjsondbwatcher/testqjsondbwatcher.cpp @@ -60,6 +60,7 @@ #include "qjsondbwatcher.h" #include "qjsondbwriterequest.h" #include "private/qjsondbstrings_p.h" +#include "private/qjsondbstandardpaths_p.h" #include "testhelper.h" @@ -103,6 +104,7 @@ TestQJsonDbWatcher::~TestQJsonDbWatcher() void TestQJsonDbWatcher::initTestCase() { + QJsonDbStandardPaths::setAutotestMode(true); removeDbFiles(); QStringList arg_list = QStringList() << "-validate-schemas"; @@ -117,6 +119,7 @@ void TestQJsonDbWatcher::cleanupTestCase() void TestQJsonDbWatcher::init() { + clearHelperData(); connectToServer(); } @@ -799,7 +802,7 @@ void TestQJsonDbWatcher::privatePartition() // watchers are not supported on private partitions, so it should fail QJsonDbWatcher privateWatcher; privateWatcher.setQuery("[?_type=\"foo\"]"); - privateWatcher.setPartition(QString::fromLatin1("%1.Private").arg(QString::fromLatin1(qgetenv("USER")))); + privateWatcher.setPartition(QString::fromLatin1("%1.Private").arg(QJsonDbStandardPaths::currentUser())); QVERIFY(!mConnection->addWatcher(&privateWatcher)); } diff --git a/tests/benchmarks/client/client-benchmark.cpp b/tests/benchmarks/client/client-benchmark.cpp index 27c7bba..6ff2ffd 100644 --- a/tests/benchmarks/client/client-benchmark.cpp +++ b/tests/benchmarks/client/client-benchmark.cpp @@ -179,6 +179,7 @@ void ClientBenchmark::cleanupTestCase() void ClientBenchmark::init() { + clearHelperData(); connectToServer(); } diff --git a/tests/shared/testhelper.cpp b/tests/shared/testhelper.cpp index b4ceef0..bb79d41 100644 --- a/tests/shared/testhelper.cpp +++ b/tests/shared/testhelper.cpp @@ -268,10 +268,23 @@ void TestHelper::removeDbFiles(const QStringList &additionalFiles) if (dontLaunch()) return; - QStringList files = QDir().entryList(QStringList() << QLatin1String("*.db")); + QStringList files = QDir().entryList(QStringList() << QStringLiteral("*.db")); files << additionalFiles; foreach (const QString &fileName, files) QFile::remove(fileName); + + QDir privatePartitionsDir = QDir::home(); + if (privatePartitionsDir.cd(QStringLiteral(".qttest")) && privatePartitionsDir.cd(QStringLiteral("qtjsondb"))) { + QStringList subdirs = privatePartitionsDir.entryList(QDir::NoDotAndDotDot | QDir::Dirs); + foreach (const QString &subdirName, subdirs) { + QDir subdir = privatePartitionsDir; + subdir.cd(subdirName); + subdir.cd(QStringLiteral(".jsondb")); + QStringList files = subdir.entryList(QStringList() << QStringLiteral("*.db")); + foreach (const QString &filename, files) + subdir.remove(filename); + } + } } bool TestHelper::waitForResponse(QJsonDbRequest *request) @@ -541,4 +554,12 @@ void TestHelper::timeout() qCritical() << "A timeout occurred"; } - +void TestHelper::clearHelperData() +{ + mNotificationsReceived = 0; + mNotificationsExpected = 0; + mLastStateChangedExpected = 0; + mLastStateChangedReceived = 0; + mRequestErrors.clear(); + mRequestStatuses.clear(); +} diff --git a/tests/shared/testhelper.h b/tests/shared/testhelper.h index c6411de..3a46e13 100644 --- a/tests/shared/testhelper.h +++ b/tests/shared/testhelper.h @@ -99,6 +99,8 @@ public: const QString &workingDirectory() const { return mWorkingDirectory; } void setWorkingDirectory(const QString &workingDirectory) { mWorkingDirectory = workingDirectory; } + void clearHelperData(); + protected: QProcess *mProcess; QtJsonDb::QJsonDbConnection *mConnection; -- cgit v1.2.3