Use temp dir. for cache when a unit test is performed

* the temp. dir can also be used for other purposes
This commit is contained in:
Klaus Basan
2016-09-10 23:47:54 +02:00
committed by Roland Winklmeier
parent 09d74c48b8
commit 44258a97fa
2 changed files with 47 additions and 26 deletions

View File

@@ -98,7 +98,12 @@ namespace BlackCore
QCoreApplication::setApplicationVersion(CVersion::version()); QCoreApplication::setApplicationVersion(CVersion::version());
this->setObjectName(this->m_applicationName); this->setObjectName(this->m_applicationName);
const QString executable = QFileInfo(QCoreApplication::applicationFilePath()).fileName(); const QString executable = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
if (executable.startsWith("test")) { this->m_unitTest = true; } if (executable.startsWith("test"))
{
this->m_unitTest = true;
const QString tempPath(this->getTemporaryDirectory());
BlackMisc::setMockCacheRootDirectory(tempPath);
}
this->initParser(); this->initParser();
this->initLogging(); this->initLogging();
@@ -385,6 +390,18 @@ namespace BlackCore
} }
} }
QString CApplication::getTemporaryDirectory() const
{
if (this->m_tempDirectory.isValid())
{
return this->m_tempDirectory.path();
}
else
{
return QDir::tempPath();
}
}
QString CApplication::getInfoString(const QString &separator) const QString CApplication::getInfoString(const QString &separator) const
{ {
QString str(CVersion::version()); QString str(CVersion::version());
@@ -398,17 +415,17 @@ namespace BlackCore
QNetworkReply *CApplication::getFromNetwork(const CUrl &url, const CSlot<void(QNetworkReply *)> &callback) QNetworkReply *CApplication::getFromNetwork(const CUrl &url, const CSlot<void(QNetworkReply *)> &callback)
{ {
return httpRequestImpl(url.toNetworkRequest(), callback, [ ] (QNetworkAccessManager &nam, const QNetworkRequest &request) { return nam.get(request); }); return httpRequestImpl(url.toNetworkRequest(), callback, [ ](QNetworkAccessManager & nam, const QNetworkRequest & request) { return nam.get(request); });
} }
QNetworkReply *CApplication::getFromNetwork(const QNetworkRequest &request, const CSlot<void(QNetworkReply *)> &callback) QNetworkReply *CApplication::getFromNetwork(const QNetworkRequest &request, const CSlot<void(QNetworkReply *)> &callback)
{ {
return httpRequestImpl(request, callback, [ ] (QNetworkAccessManager &nam, const QNetworkRequest &request) { return nam.get(request); }); return httpRequestImpl(request, callback, [ ](QNetworkAccessManager & nam, const QNetworkRequest & request) { return nam.get(request); });
} }
QNetworkReply *CApplication::postToNetwork(const QNetworkRequest &request, const QByteArray &data, const CSlot<void(QNetworkReply *)> &callback) QNetworkReply *CApplication::postToNetwork(const QNetworkRequest &request, const QByteArray &data, const CSlot<void(QNetworkReply *)> &callback)
{ {
return httpRequestImpl(request, callback, [ data ] (QNetworkAccessManager &nam, const QNetworkRequest &request) { return nam.post(request, data); }); return httpRequestImpl(request, callback, [ data ](QNetworkAccessManager & nam, const QNetworkRequest & request) { return nam.post(request, data); });
} }
QNetworkReply *CApplication::postToNetwork(const QNetworkRequest &request, QHttpMultiPart *multiPart, const CSlot<void(QNetworkReply *)> &callback) QNetworkReply *CApplication::postToNetwork(const QNetworkRequest &request, QHttpMultiPart *multiPart, const CSlot<void(QNetworkReply *)> &callback)
@@ -418,24 +435,23 @@ namespace BlackCore
multiPart->moveToThread(this->m_accessManager.thread()); multiPart->moveToThread(this->m_accessManager.thread());
} }
return httpRequestImpl(request, callback, [ this, multiPart ] (QNetworkAccessManager &nam, const QNetworkRequest &request) return httpRequestImpl(request, callback, [ this, multiPart ](QNetworkAccessManager & nam, const QNetworkRequest & request)
{ {
QNetworkReply *reply = nam.post(request, multiPart); QNetworkReply *reply = nam.post(request, multiPart);
Q_ASSERT(reply); Q_ASSERT(reply);
multiPart->setParent(reply); multiPart->setParent(reply);
return reply; return reply;
} });
);
} }
QNetworkReply *CApplication::headerFromNetwork(const CUrl &url, const BlackMisc::CSlot<void (QNetworkReply *)> &callback) QNetworkReply *CApplication::headerFromNetwork(const CUrl &url, const BlackMisc::CSlot<void (QNetworkReply *)> &callback)
{ {
return httpRequestImpl(url.toNetworkRequest(), callback, [ ] (QNetworkAccessManager &nam, const QNetworkRequest &request) { return nam.head(request); }); return httpRequestImpl(url.toNetworkRequest(), callback, [ ](QNetworkAccessManager & nam, const QNetworkRequest & request) { return nam.head(request); });
} }
QNetworkReply *CApplication::headerFromNetwork(const QNetworkRequest &request, const BlackMisc::CSlot<void (QNetworkReply *)> &callback) QNetworkReply *CApplication::headerFromNetwork(const QNetworkRequest &request, const BlackMisc::CSlot<void (QNetworkReply *)> &callback)
{ {
return httpRequestImpl(request, callback, [ ] (QNetworkAccessManager &nam, const QNetworkRequest &request) { return nam.head(request); }); return httpRequestImpl(request, callback, [ ](QNetworkAccessManager & nam, const QNetworkRequest & request) { return nam.head(request); });
} }
void CApplication::deleteAllCookies() void CApplication::deleteAllCookies()
@@ -941,29 +957,29 @@ namespace BlackCore
return CUrlList(); return CUrlList();
} }
#ifdef BLACK_USE_CRASHPAD #ifdef BLACK_USE_CRASHPAD
base::FilePath qstringToFilePath(const QString &str) base::FilePath qstringToFilePath(const QString &str)
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
return base::FilePath(str.toStdWString()); return base::FilePath(str.toStdWString());
#else #else
return base::FilePath(str.toStdString()); return base::FilePath(str.toStdString());
#endif #endif
} }
#endif #endif
void CApplication::initCrashHandler() void CApplication::initCrashHandler()
{ {
#ifdef BLACK_USE_CRASHPAD #ifdef BLACK_USE_CRASHPAD
// No crash handling for unit tests // No crash handling for unit tests
if (isUnitTest()) { return; } if (isUnitTest()) { return; }
static const QString extension = CBuildConfig::isRunningOnWindowsNtPlatform() ? ".exe" : QString(); static const QString extension = CBuildConfig::isRunningOnWindowsNtPlatform() ? ".exe" : QString();
static const QString handler = CDirectoryUtils::applicationDirectoryPath() + "/" + "swift_crashpad_handler" + extension; static const QString handler = CDirectoryUtils::applicationDirectoryPath() + "/" + "swift_crashpad_handler" + extension;
static const QString database = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + static const QString database = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
"/org.swift-project/" + "/org.swift-project/" +
CDirectoryUtils::normalizedApplicationDirectory() + CDirectoryUtils::normalizedApplicationDirectory() +
"/crashpad"; "/crashpad";
if (!QFileInfo::exists(handler)) if (!QFileInfo::exists(handler))
{ {
@@ -986,16 +1002,16 @@ namespace BlackCore
m_crashpadClient->StartHandler(qstringToFilePath(handler), qstringToFilePath(database), m_crashpadClient->StartHandler(qstringToFilePath(handler), qstringToFilePath(database),
serverUrl.getFullUrl().toStdString(), annotations, {}, false); serverUrl.getFullUrl().toStdString(), annotations, {}, false);
m_crashpadClient->UseHandler(); m_crashpadClient->UseHandler();
#endif #endif
} }
void CApplication::crashDumpUploadEnabledChanged() void CApplication::crashDumpUploadEnabledChanged()
{ {
#ifdef BLACK_USE_CRASHPAD #ifdef BLACK_USE_CRASHPAD
if (!m_crashReportDatabase) { return; } if (!m_crashReportDatabase) { return; }
auto settings = m_crashReportDatabase->GetSettings(); auto settings = m_crashReportDatabase->GetSettings();
settings->SetUploadsEnabled(CBuildConfig::isReleaseBuild() && m_crashDumpUploadEnabled.getThreadLocal()); settings->SetUploadsEnabled(CBuildConfig::isReleaseBuild() && m_crashDumpUploadEnabled.getThreadLocal());
#endif #endif
} }
QNetworkReply *CApplication::httpRequestImpl(const QNetworkRequest &request, const BlackMisc::CSlot<void (QNetworkReply *)> &callback, std::function<QNetworkReply *(QNetworkAccessManager &, const QNetworkRequest &)> method) QNetworkReply *CApplication::httpRequestImpl(const QNetworkRequest &request, const BlackMisc::CSlot<void (QNetworkReply *)> &callback, std::function<QNetworkReply *(QNetworkAccessManager &, const QNetworkRequest &)> method)

View File

@@ -22,6 +22,7 @@
#include <QScopedPointer> #include <QScopedPointer>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QTemporaryDir>
#include <atomic> #include <atomic>
#include <functional> #include <functional>
@@ -188,6 +189,9 @@ namespace BlackCore
//! Save all settings //! Save all settings
BlackMisc::CStatusMessage saveSettingsByKey(const QStringList &keys); BlackMisc::CStatusMessage saveSettingsByKey(const QStringList &keys);
//! Directory for temporary files
QString getTemporaryDirectory() const;
//! Run event loop //! Run event loop
static int exec(); static int exec();
@@ -434,6 +438,7 @@ namespace BlackCore
QScopedPointer<CSetupReader> m_setupReader; //!< setup reader QScopedPointer<CSetupReader> m_setupReader; //!< setup reader
QScopedPointer<CWebDataServices> m_webDataServices; //!< web data services QScopedPointer<CWebDataServices> m_webDataServices; //!< web data services
QScopedPointer<BlackMisc::CFileLogger> m_fileLogger; //!< file logger QScopedPointer<BlackMisc::CFileLogger> m_fileLogger; //!< file logger
QTemporaryDir m_tempDirectory; //!< temp.directory for the lifetime of application object
QNetworkAccessManager m_accessManager { this }; //!< single network access manager QNetworkAccessManager m_accessManager { this }; //!< single network access manager
CCookieManager m_cookieManager; //!< single cookie manager for our access manager CCookieManager m_cookieManager; //!< single cookie manager for our access manager
QString m_applicationName; //!< application name QString m_applicationName; //!< application name