diff options
-rw-r--r-- | src/network/access/qnetworkdiskcache.cpp | 4 | ||||
-rw-r--r-- | tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp | 48 |
2 files changed, 39 insertions, 13 deletions
diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp index 6f02405c0f..7b17540417 100644 --- a/src/network/access/qnetworkdiskcache.cpp +++ b/src/network/access/qnetworkdiskcache.cpp @@ -273,14 +273,12 @@ void QNetworkDiskCachePrivate::storeItem(QCacheItem *cacheItem) Q_ASSERT(!fileName.isEmpty()); if (QFile::exists(fileName)) { - if (!QFile::remove(fileName)) { + if (!removeFile(fileName)) { qWarning() << "QNetworkDiskCache: couldn't remove the cache file " << fileName; return; } } - if (currentCacheSize > 0) - currentCacheSize += 1024 + cacheItem->size(); currentCacheSize = q->expire(); if (!cacheItem->file) { QString templateName = tmpCacheFileName(); diff --git a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index f15d4dc7ac..5dc2936d25 100644 --- a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -35,6 +35,7 @@ #include <algorithm> #define EXAMPLE_URL "http://user:pass@localhost:4/#foo" +#define EXAMPLE_URL2 "http://user:pass@localhost:4/bar" //cached objects are organized into these many subdirs #define NUM_SUBDIRECTORIES 16 @@ -141,7 +142,7 @@ class SubQNetworkDiskCache : public QNetworkDiskCache public: ~SubQNetworkDiskCache() { - if (!cacheDirectory().isEmpty()) + if (!cacheDirectory().isEmpty() && clearOnDestruction) clear(); } @@ -170,6 +171,11 @@ public: d->write("Hello World!"); insert(d); } + + void setClearCacheOnDestruction(bool value) { clearOnDestruction = value; } + +private: + bool clearOnDestruction = true; }; tst_QNetworkDiskCache::tst_QNetworkDiskCache() @@ -241,17 +247,39 @@ void tst_QNetworkDiskCache::prepare() // public qint64 cacheSize() const void tst_QNetworkDiskCache::cacheSize() { - SubQNetworkDiskCache cache; - cache.setCacheDirectory(tempDir.path()); - QCOMPARE(cache.cacheSize(), qint64(0)); + qint64 cacheSize = 0; + { + SubQNetworkDiskCache cache; + cache.setCacheDirectory(tempDir.path()); + QCOMPARE(cache.cacheSize(), qint64(0)); - QUrl url(EXAMPLE_URL); - QNetworkCacheMetaData metaData; - metaData.setUrl(url); - QIODevice *d = cache.prepare(metaData); - cache.insert(d); - QVERIFY(cache.cacheSize() > qint64(0)); + { + QUrl url(EXAMPLE_URL); + QNetworkCacheMetaData metaData; + metaData.setUrl(url); + QIODevice *d = cache.prepare(metaData); + cache.insert(d); + cacheSize = cache.cacheSize(); + QVERIFY(cacheSize > qint64(0)); + } + // Add a second item, some difference in behavior when the cache is not empty + { + QUrl url(EXAMPLE_URL2); + QNetworkCacheMetaData metaData; + metaData.setUrl(url); + QIODevice *d = cache.prepare(metaData); + cache.insert(d); + QVERIFY(cache.cacheSize() > cacheSize); + cacheSize = cache.cacheSize(); + } + // Don't clear the cache on destruction so we can re-open the cache and test its size. + cache.setClearCacheOnDestruction(false); + } + + SubQNetworkDiskCache cache; + cache.setCacheDirectory(tempDir.path()); + QCOMPARE(cache.cacheSize(), cacheSize); cache.clear(); QCOMPARE(cache.cacheSize(), qint64(0)); } |