summaryrefslogtreecommitdiffstats
path: root/tests/auto/accesscontrol/testjsondb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/accesscontrol/testjsondb.cpp')
-rw-r--r--tests/auto/accesscontrol/testjsondb.cpp162
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)