summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/access
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2017-07-12 12:52:06 +0200
committerTimur Pocheptsov <timur.pocheptsov@qt.io>2017-08-02 22:01:47 +0000
commit72cf2339edbb302b8b1dbe14c5475e8d2c3f62b1 (patch)
treee8d228deeb523f03f866716a7f720dee61149fee /tests/auto/network/access
parent37dc5bb46c27a0567f9349423f0bde338090b005 (diff)
Introduce QHstsStore - the permanent store for HSTS policies
The store is using QSettings under the hood. A user can enable/disable storing HSTS policies (via QNAM's setter method) and we take care of the rest - filling QHstsCache from the store, writing updated/observed targets, removing expired policies. Change-Id: I26e4a98761ddfe5005fedd18be56a6303fe7b35a Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto/network/access')
-rw-r--r--tests/auto/network/access/hsts/tst_qhsts.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/auto/network/access/hsts/tst_qhsts.cpp b/tests/auto/network/access/hsts/tst_qhsts.cpp
index 656516f46b..d72991a2eb 100644
--- a/tests/auto/network/access/hsts/tst_qhsts.cpp
+++ b/tests/auto/network/access/hsts/tst_qhsts.cpp
@@ -32,7 +32,9 @@
#include <QtCore/qvector.h>
#include <QtCore/qpair.h>
#include <QtCore/qurl.h>
+#include <QtCore/qdir.h>
+#include <QtNetwork/private/qhstsstore_p.h>
#include <QtNetwork/private/qhsts_p.h>
QT_USE_NAMESPACE
@@ -46,6 +48,7 @@ private Q_SLOTS:
void testMultilpeKnownHosts();
void testPolicyExpiration();
void testSTSHeaderParser();
+ void testStore();
};
void tst_QHsts::testSingleKnownHost_data()
@@ -313,6 +316,75 @@ void tst_QHsts::testSTSHeaderParser()
QVERIFY(!parser.expirationDate().isValid());
}
+const QLatin1String storeDir(".");
+
+struct TestStoreDeleter
+{
+ ~TestStoreDeleter()
+ {
+ QDir cwd;
+ if (!cwd.remove(QHstsStore::absoluteFilePath(storeDir)))
+ qWarning() << "tst_QHsts::testStore: failed to remove the hsts store file";
+ }
+};
+
+void tst_QHsts::testStore()
+{
+ // Delete the store's file after we finish the test.
+ TestStoreDeleter cleaner;
+
+ const QUrl exampleCom(QStringLiteral("http://example.com"));
+ const QUrl subDomain(QStringLiteral("http://subdomain.example.com"));
+ const QDateTime validDate(QDateTime::currentDateTimeUtc().addDays(1));
+
+ {
+ // We start from an empty cache and empty store:
+ QHstsCache cache;
+ QHstsStore store(storeDir);
+ cache.setStore(&store);
+ QVERIFY(!cache.isKnownHost(exampleCom));
+ QVERIFY(!cache.isKnownHost(subDomain));
+ // (1) This will also store the policy:
+ cache.updateKnownHost(exampleCom, validDate, true);
+ QVERIFY(cache.isKnownHost(exampleCom));
+ QVERIFY(cache.isKnownHost(subDomain));
+ }
+ {
+ // Test the policy stored at (1):
+ QHstsCache cache;
+ QHstsStore store(storeDir);
+ cache.setStore(&store);
+ QVERIFY(cache.isKnownHost(exampleCom));
+ QVERIFY(cache.isKnownHost(subDomain));
+ // (2) Remove subdomains:
+ cache.updateKnownHost(exampleCom, validDate, false);
+ QVERIFY(!cache.isKnownHost(subDomain));
+ }
+ {
+ // Test the previous update (2):
+ QHstsCache cache;
+ QHstsStore store(storeDir);
+ cache.setStore(&store);
+ QVERIFY(cache.isKnownHost(exampleCom));
+ QVERIFY(!cache.isKnownHost(subDomain));
+ }
+ {
+ QHstsCache cache;
+ cache.updateKnownHost(subDomain, validDate, false);
+ QVERIFY(cache.isKnownHost(subDomain));
+ QHstsStore store(storeDir);
+ // (3) This should store policy from cache, over old policy from store:
+ cache.setStore(&store);
+ }
+ {
+ // Test that (3) was stored:
+ QHstsCache cache;
+ QHstsStore store(storeDir);
+ cache.setStore(&store);
+ QVERIFY(cache.isKnownHost(subDomain));
+ }
+}
+
QTEST_MAIN(tst_QHsts)
#include "tst_qhsts.moc"