diff options
Diffstat (limited to 'tests/auto/accesscontrol/testjsondb.cpp')
-rw-r--r-- | tests/auto/accesscontrol/testjsondb.cpp | 162 |
1 files changed, 93 insertions, 69 deletions
diff --git a/tests/auto/accesscontrol/testjsondb.cpp b/tests/auto/accesscontrol/testjsondb.cpp index 4339934..3f18ff5 100644 --- a/tests/auto/accesscontrol/testjsondb.cpp +++ b/tests/auto/accesscontrol/testjsondb.cpp @@ -47,13 +47,12 @@ #include <QDir> #include <QTime> -#include "json.h" #include "jsondbpartition.h" #include "jsondbsettings.h" #include "../../shared/util.h" -QT_USE_NAMESPACE_JSONDB +QT_USE_NAMESPACE_JSONDB_PARTITION /* Ensure that a good result object contains the correct fields @@ -103,6 +102,7 @@ private slots: void testAccessControl(); void testFindAccessControl(); void testViewAccessControl(); + void testIndexAccessControl(); private: JsonDbQueryResult find(JsonDbOwner *owner, const QString &query, const QJsonObject bindings = QJsonObject()); @@ -110,15 +110,13 @@ private: JsonDbWriteResult update(JsonDbOwner *owner, JsonDbObject &object, JsonDbPartition::WriteMode mode = JsonDbPartition::OptimisticWrite); JsonDbWriteResult remove(JsonDbOwner *owner, JsonDbObject &object, JsonDbPartition::WriteMode mode = JsonDbPartition::OptimisticWrite); - QJsonValue readJsonFile(const QString &filename); - QJsonValue readJson(const QByteArray& json); void removeDbFiles(); private: JsonDbPartition *mJsonDbPartition; QStringList mNotificationsReceived; QList<JsonDbObject> mContactList; - JsonDbOwner *mOwner; + QScopedPointer<JsonDbOwner> mOwner; }; const char *kFilename = "testdatabase"; @@ -151,10 +149,10 @@ void TestJsonDb::initTestCase() QCoreApplication::setApplicationVersion("1.0"); removeDbFiles(); - mOwner = new JsonDbOwner(this); + mOwner.reset (new JsonDbOwner(this)); mOwner->setOwnerId(QStringLiteral("com.example.JsonDbTest")); - mJsonDbPartition = new JsonDbPartition(kFilename, QStringLiteral("com.example.JsonDbTest"), mOwner, this); + mJsonDbPartition = new JsonDbPartition(kFilename, QStringLiteral("com.example.JsonDbTest"), mOwner.data(), this); mJsonDbPartition->open(); } @@ -175,7 +173,8 @@ void TestJsonDb::cleanup() JsonDbQueryResult TestJsonDb::find(JsonDbOwner *owner, const QString &query, const QJsonObject bindings) { - return mJsonDbPartition->queryObjects(owner, JsonDbQuery::parse(query, bindings)); + QScopedPointer<JsonDbQuery> q(JsonDbQuery::parse(query, bindings)); + return mJsonDbPartition->queryObjects(owner, q.data()); } JsonDbWriteResult TestJsonDb::create(JsonDbOwner *owner, JsonDbObject &object, JsonDbPartition::WriteMode mode) @@ -220,7 +219,7 @@ void TestJsonDb::capabilities() QJsonObject capabilities(object.value("capabilities").toObject()); owner->setCapabilities(capabilities, mJsonDbPartition); } else { - JsonDbWriteResult result = create(mOwner, object); + JsonDbWriteResult result = create(mOwner.data(), object); verifyGoodResult(result); } } @@ -235,7 +234,7 @@ void TestJsonDb::allowAll() // can delete me when this goes away jsondbSettings->setEnforceAccessControl(true); - JsonDbOwner *owner = new JsonDbOwner(); + QScopedPointer<JsonDbOwner> owner(new JsonDbOwner()); owner->setAllowedObjects(QLatin1String("all"), QLatin1String("read"), QStringList()); owner->setAllowedObjects(QLatin1String("all"), QLatin1String("write"), QStringList()); owner->setStorageQuota(-1); @@ -243,14 +242,14 @@ void TestJsonDb::allowAll() JsonDbObject toPut; toPut.insert("_type", QLatin1String("TestObject")); - JsonDbWriteResult result = create(owner, toPut); + JsonDbWriteResult result = create(owner.data(), toPut); verifyErrorResult(result); JsonDbObject toPut2; toPut2.insert("_type", QLatin1String("TestObject")); - owner->setAllowAll(true); - result = create(owner, toPut2); + owner.data()->setAllowAll(true); + result = create(owner.data(), toPut2); verifyGoodResult(result); mJsonDbPartition->removeIndex("TestObject"); @@ -276,7 +275,7 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("create-test-type")); item.insert("access-control-test", 22); - JsonDbWriteResult result = create(mOwner, item); + JsonDbWriteResult result = create(mOwner.data(), item); verifyErrorResult(result); @@ -284,14 +283,14 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("Contact")); item.insert("access-control-test", 23); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); item.insert("access-control-test", 24); - result = update(mOwner, item); + result = update(mOwner.data(), item); verifyGoodResult(result); - result = remove(mOwner, item); + result = remove(mOwner.data(), item); verifyGoodResult(result); // Test some %owner and %typeDomain horror @@ -304,7 +303,7 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.foo.bar.FooType")); item.insert("access-control-test", 25); - result = create(mOwner, item); + result = create(mOwner.data(), item); QJsonValue uuid = item.value(JsonDbString::kUuidStr); @@ -321,7 +320,7 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.foo.bar.FooType")); item.insert("access-control-test", 26); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyErrorResult(result); @@ -329,12 +328,12 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kUuidStr, uuid); item.insert("access-control-test", 27); - result = update(mOwner, item); + result = update(mOwner.data(), item); verifyErrorResult(result); // .. or remove item.insert(JsonDbString::kUuidStr, uuid); - result = remove(mOwner, item); + result = remove(mOwner.data(), item); verifyErrorResult(result); // Positive tests @@ -344,10 +343,10 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.foo.FooType")); item.insert("access-control-test", 28); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); - result = remove(mOwner, item); + result = remove(mOwner.data(), item); verifyGoodResult(result); item.remove(JsonDbString::kUuidStr); @@ -356,14 +355,14 @@ void TestJsonDb::testAccessControl() item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.FooType")); item.insert("access-control-test", 29); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); item.insert("access-control-test", 30); - result = update(mOwner, item); + result = update(mOwner.data(), item); verifyGoodResult(result); - result = remove(mOwner, item); + result = remove(mOwner.data(), item); verifyGoodResult(result); jsondbSettings->setEnforceAccessControl(false); } @@ -375,12 +374,12 @@ void TestJsonDb::testFindAccessControl() JsonDbObject item; item.insert(JsonDbString::kTypeStr, QLatin1String("find-access-control-test-type")); item.insert("find-access-control-test", 50); - JsonDbWriteResult result = create(mOwner, item); + JsonDbWriteResult result = create(mOwner.data(), item); verifyGoodResult(result); item.remove(JsonDbString::kUuidStr); item.insert(JsonDbString::kTypeStr, QLatin1String("Contact")); item.insert("find-access-control-test", 51); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); QJsonObject contactsCapabilities; @@ -390,12 +389,12 @@ void TestJsonDb::testFindAccessControl() mOwner->setAllowAll(false); mOwner->setCapabilities(contactsCapabilities, mJsonDbPartition); - JsonDbQueryResult queryResult = find(mOwner, QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("find-access-control-test-type")); + JsonDbQueryResult queryResult = find(mOwner.data(), QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("find-access-control-test-type")); verifyGoodQueryResult(queryResult); QVERIFY(queryResult.length.toDouble() < 1); - queryResult= find(mOwner, QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("Contact")); + queryResult= find(mOwner.data(), QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("Contact")); verifyGoodQueryResult(queryResult); QVERIFY(queryResult.length.toDouble() > 0); @@ -405,13 +404,13 @@ void TestJsonDb::testFindAccessControl() item.remove(JsonDbString::kUuidStr); item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.foo.bar.FooType")); item.insert("find-access-control-test", 55); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); item.remove(JsonDbString::kUuidStr); item.insert(JsonDbString::kTypeStr, QLatin1String("com.example.foo.FooType")); item.insert("find-access-control-test", 56); - result = create(mOwner, item); + result = create(mOwner.data(), item); verifyGoodResult(result); mOwner->setOwnerId(QStringLiteral("com.example.foo.App")); @@ -423,12 +422,12 @@ void TestJsonDb::testFindAccessControl() mOwner->setAllowAll(false); mOwner->setCapabilities(ownDomainCapabilities, mJsonDbPartition); - queryResult = find(mOwner, QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("com.example.foo.bar.FooType")); + queryResult = find(mOwner.data(), QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("com.example.foo.bar.FooType")); verifyGoodQueryResult(queryResult); QVERIFY(queryResult.length.toDouble() < 1); - queryResult= find(mOwner, QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("com.example.foo.FooType")); + queryResult= find(mOwner.data(), QString("[?%1=\"%2\"]").arg(JsonDbString::kTypeStr).arg("com.example.foo.FooType")); verifyGoodQueryResult(queryResult); QVERIFY(queryResult.length.toDouble() > 0); @@ -445,7 +444,7 @@ void TestJsonDb::testViewAccessControl() QJsonArray defs(readJsonFile(":/security/json/capabilities-view.json").toArray()); for (int i = 0; i < defs.size(); ++i) { JsonDbObject object(defs.at(i).toObject()); - JsonDbWriteResult result = create(mOwner, object); + JsonDbWriteResult result = create(mOwner.data(), object); verifyGoodResult(result); } @@ -460,7 +459,7 @@ void TestJsonDb::testViewAccessControl() defs = readJsonFile(":/security/json/view-test.json").toArray(); for (int i = 0; i < defs.size(); ++i) { JsonDbObject object(defs.at(i).toObject()); - JsonDbWriteResult result = create(mOwner, object); + JsonDbWriteResult result = create(mOwner.data(), object); verifyGoodResult(result); } @@ -474,48 +473,73 @@ void TestJsonDb::testViewAccessControl() defs = readJsonFile(":/security/json/view-test2.json").toArray(); for (int i = 0; i < defs.size(); ++i) { JsonDbObject object(defs.at(i).toObject()); - JsonDbWriteResult result = create(mOwner, object); + JsonDbWriteResult result = create(mOwner.data(), object); verifyErrorResult(result); } } -QStringList strings = (QStringList() - << "abc" - << "def" - << "deaf" - << "leaf" - << "DEAF" - << "LEAF" - << "ghi" - << "foo/bar"); - -QStringList patterns = (QStringList() - ); +/* + * Create Index objects and check access control + */ -QJsonValue TestJsonDb::readJsonFile(const QString& filename) +void TestJsonDb::testIndexAccessControl() { - QString filepath = filename; - QFile jsonFile(filepath); - jsonFile.open(QIODevice::ReadOnly); - QByteArray json = jsonFile.readAll(); - JsonReader parser; - bool ok = parser.parse(json); - if (!ok) { - qDebug() << filepath << parser.errorString() << json; + jsondbSettings->setEnforceAccessControl(false); + QJsonArray defs(readJsonFile(":/security/json/capabilities-indexes.json").toArray()); + for (int i = 0; i < defs.size(); ++i) { + JsonDbObject object(defs.at(i).toObject()); + JsonDbWriteResult result = create(mOwner.data(), object); + verifyGoodResult(result); } - QVariant v = parser.result(); - return QJsonValue::fromVariant(v); -} -QJsonValue TestJsonDb::readJson(const QByteArray& json) -{ - JsonReader parser; - bool ok = parser.parse(json); - if (!ok) { - qDebug() << parser.errorString(); + JsonDbWriteResult result; + + defs = readJsonFile(":/security/json/index-test.json").toArray(); + for (int i = 0; i < defs.size(); ++i) { + JsonDbObject object(defs.at(i).toObject()); + result = create(mOwner.data(), object); + verifyGoodResult(result); + result = remove(mOwner.data(), object); + } + + jsondbSettings->setEnforceAccessControl(true); + QJsonObject indexCapabilities; + QJsonArray value; + value.append (QLatin1String("rw")); + indexCapabilities.insert (QLatin1String("indexes"), value); + mOwner->setAllowAll(false); + mOwner->setCapabilities(indexCapabilities, mJsonDbPartition); + + for (int i = 0; i < defs.size(); ++i) { + JsonDbObject object(defs.at(i).toObject()); + result = create(mOwner.data(), object); + if (i<2){ + verifyGoodResult(result); + result = remove(mOwner.data(), object); + } else { + // Third one should fail as there is no objectType given + verifyErrorResult(result); + } + } + + QJsonObject indexCapabilities2; + QJsonArray value2; + value2.append (QLatin1String("rw")); + indexCapabilities2.insert (QLatin1String("noindexes"), value2); + mOwner->setAllowAll(false); + mOwner->setCapabilities(indexCapabilities2, mJsonDbPartition); + + for (int i = 0; i < defs.size(); ++i) { + JsonDbObject object(defs.at(i).toObject()); + result = create(mOwner.data(), object); + if (i<1){ + verifyGoodResult(result); + result = remove(mOwner.data(), object); + } else { + // Second & Third should fail as there is no objectType given + verifyErrorResult(result); + } } - QVariant v = parser.result(); - return QJsonObject::fromVariantMap(v.toMap()); } void TestJsonDb::notified(const QString nid, const JsonDbObject &o, const QString action) |