diff options
author | Jonatan Pålsson <jonatan.palsson@pelagicore.com> | 2014-02-20 14:51:15 +0100 |
---|---|---|
committer | Jonatan Pålsson <jonatan.palsson@pelagicore.com> | 2014-02-20 14:51:15 +0100 |
commit | 070840b7c89d70ef5097dccb888c8f9475fa0bea (patch) | |
tree | d4d6f8c45fe34ab9b5583884c4c6041da9293746 | |
parent | 483e1b7cb3fd8f9f834c256e3b97096de39399e8 (diff) | |
parent | afcf93e0900676ce52252230022bb1eedc1f13b5 (diff) | |
download | browser-poc-070840b7c89d70ef5097dccb888c8f9475fa0bea.tar.gz |
Merge branch 'feature_errorlogger'
Conflicts:
.gitignore
browser/browser.cpp
browser/browser.h
browser/browser.pro
browser/browserconfig.cpp
browser/browserconfig.h
browser/browserhelper.cpp
browser/browserview.cpp
browser/browserview.h
browser/cachemanager.cpp
browser/cachemanager.h
browser/errorlogger.cpp
browser/errorlogger.h
browser/unit-tests/browserdbus/testbrowserdbus.cpp
browser/unit-tests/browserdbus/testbrowserdbus.h
common/browserdbus.cpp
common/browserdbus.h
common/browserdefs.h
testapp/main.cpp
testapp/qml/testapp/main.qml
testapp/testapp.pro
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | browser/browser.h | 3 | ||||
-rw-r--r-- | browser/browserhelper.cpp | 2 | ||||
-rw-r--r-- | browser/errorlogger.cpp | 37 | ||||
-rw-r--r-- | browser/errorlogger.h | 56 | ||||
-rw-r--r-- | browser/unit-tests/errorloggerdbus/errorloggerdbus.pro | 17 | ||||
-rw-r--r-- | browser/unit-tests/errorloggerdbus/testerrorloggerdbus.cpp | 109 | ||||
-rw-r--r-- | browser/unit-tests/errorloggerdbus/testerrorloggerdbus.h | 45 | ||||
-rw-r--r-- | common/browserdefs.h | 47 | ||||
-rw-r--r-- | testapp/main.cpp | 5 | ||||
-rw-r--r-- | testapp/qml/testapp/main.qml | 14 | ||||
-rw-r--r-- | testapp/testapp.pro | 12 |
12 files changed, 331 insertions, 17 deletions
@@ -19,4 +19,3 @@ BrowserDefs* *.db browserdbus-tests cachemanagerdbus-tests -unit-tests diff --git a/browser/browser.h b/browser/browser.h index 60d1271..625dc34 100644 --- a/browser/browser.h +++ b/browser/browser.h @@ -37,9 +37,6 @@ signals: void onPageWindowCreated(qlonglong a_hPageWindowHandle, conn::brw::ERROR_IDS a_eErrorId); void onPageWindowDestroyed(qlonglong a_hPageWindowHandle); - // Distribute cache changes signals to all browser windows - - public Q_SLOTS: conn::brw::ERROR_IDS createPageWindow(int a_eDeviceId, const conn::brw::Rect & a_oGeometry, conn::brw::OBJECT_HANDLE &a_hPageWindowHandle); diff --git a/browser/browserhelper.cpp b/browser/browserhelper.cpp index 008ea24..aa4b9b9 100644 --- a/browser/browserhelper.cpp +++ b/browser/browserhelper.cpp @@ -42,7 +42,7 @@ browserhelper::browserhelper(QString instanceId, QObject *parent) : exit(1); } - errorlogger *err = new errorlogger(); + errorlogger *err = errorlogger::instance(); new IErrorLoggerAdaptor(err); if(!connection->registerObject("/Browser/IErrorLogger", err)) { qDebug() << "failed register object IErrorLogger"; diff --git a/browser/errorlogger.cpp b/browser/errorlogger.cpp index 729f4f2..c83f010 100644 --- a/browser/errorlogger.cpp +++ b/browser/errorlogger.cpp @@ -16,24 +16,51 @@ #include <QDebug> #include <QAbstractNetworkCache> #include <QNetworkDiskCache> +#include <QDateTime> #include "errorlogger.h" #include "../common/browserdefs.h" -errorlogger::errorlogger(QObject *parent) : - QObject(parent) -{} +errorlogger* errorlogger::m_instance = NULL; uint errorlogger::getItemsCount(qlonglong timeFrom, qlonglong timeTo) { - return 0; + uint num = 0; + for (int i = 0; i < m_errors->size(); i++) { + const conn::brw::ErrorItem *e = &m_errors->at(i); + if (timeFrom <= e->i64DateTime && timeTo >= e->i64DateTime) + num++; + } + return num; } conn::brw::ERROR_IDS errorlogger::getItems(qlonglong timeFrom, qlonglong timeTo, conn::brw::ERROR_SORT_TYPE type, uint startIndex, uint itemsCount, - conn::brw::ErrorItemList items) + conn::brw::ErrorItemList &items) { + if (type == conn::brw::EST_DATE_ASCENDING) + qSort (m_errors->begin(), m_errors->end(), conn::brw::ltError); + else + qSort (m_errors->begin(), m_errors->end(), conn::brw::gtError); + for (int i = 0; i < m_errors->size(); i++){ + } + for (int i = startIndex; i < m_errors->size(); i++) { + const conn::brw::ErrorItem e = m_errors->at(i); + if (timeFrom <= e.i64DateTime && timeTo >= e.i64DateTime) { + if (items.size() < itemsCount){ + items.append(e); + } + else + break; + } + } return conn::brw::EID_NO_ERROR; } + + +void errorlogger::m_logError(conn::brw::ErrorItem item) { + m_errors->append(item); + emit onNewErrorItem(item); +} diff --git a/browser/errorlogger.h b/browser/errorlogger.h index 5858f29..5a5dbd4 100644 --- a/browser/errorlogger.h +++ b/browser/errorlogger.h @@ -16,6 +16,7 @@ #include <QObject> #include <QDBusContext> +#include <QDateTime> #include "../common/browserdefs.h" @@ -23,8 +24,51 @@ class errorlogger : public QObject, protected QDBusContext { Q_OBJECT public: - errorlogger(QObject *parent = 0); + static errorlogger *instance() + { + if (!m_instance) + m_instance = new errorlogger(); + return m_instance; + } + static void logError (qlonglong dateTime, + QString browserVersion, + QString connectionType, + QString code, + QString source, + QString desc) + { + conn::brw::ErrorItem err; + err.i64DateTime = dateTime; + err.strBrowserVersion = browserVersion; + err.strConnectionType = connectionType; + err.strCode = code; + err.strSource = source; + err.strDescription = desc; + errorlogger::logError(err); + } + + static void logError(QString error) + { + errorlogger::logError( + QDateTime::currentDateTime().toTime_t(), + "Unknown", + "Unknown", + "Unknown", + "Unknown", + error); + } + + static void logError(conn::brw::ErrorItem item) + { + m_instance->m_logError(item); + } + + void clearErrors() + { + m_errors->clear(); + emit onErrorListChanged(); + } signals: void onErrorListChanged(); void onNewErrorItem (const conn::brw::ErrorItem); @@ -36,9 +80,17 @@ public Q_SLOTS: conn::brw::ERROR_SORT_TYPE sortType, uint startIndex, uint itemsCount, - conn::brw::ErrorItemList items); + conn::brw::ErrorItemList &items); private: + errorlogger(){ + m_errors = new conn::brw::ErrorItemList(); + } + static errorlogger *m_instance; + + void m_logError(conn::brw::ErrorItem); + + conn::brw::ErrorItemList *m_errors; }; #endif // ERRORLOGGER_H diff --git a/browser/unit-tests/errorloggerdbus/errorloggerdbus.pro b/browser/unit-tests/errorloggerdbus/errorloggerdbus.pro new file mode 100644 index 0000000..bdc9080 --- /dev/null +++ b/browser/unit-tests/errorloggerdbus/errorloggerdbus.pro @@ -0,0 +1,17 @@ +CONFIG += qtestlib debug qt +TEMPLATE = app +TARGET = errorloggerdbus-tests +INCLUDEPATH += . ../../../common/ +QT += dbus webkitwidgets + +my_dbus_interfaces.files += ../../../common/IErrorLogger.xml +my_dbus_interfaces.header_flags = -l errorlogger -i ../../../common/browserdefs.h -i ../../errorlogger.h +DBUS_INTERFACES += my_dbus_interfaces + +dbus_adaptors.files += ../../../common/IErrorLogger.xml +dbus_adaptors.header_flags = -l errorlogger -i ../../../common/browserdefs.h -i ../../errorlogger.h +DBUS_ADAPTORS += dbus_adaptors + +# Input +HEADERS += testerrorloggerdbus.h ../../../common/errorloggerdbus.h ../../errorlogger.h +SOURCES += testerrorloggerdbus.cpp ../../../common/errorloggerdbus.cpp ../../errorlogger.cpp diff --git a/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.cpp b/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.cpp new file mode 100644 index 0000000..3edb91b --- /dev/null +++ b/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.cpp @@ -0,0 +1,109 @@ +/** + * Copyright (C) 2014, Pelagicore + * + * Author: Jonatan Palsson <jonatan.palsson@pelagicore.com> + * + * This file is part of the GENIVI project Browser Proof-Of-Concept + * For further information, see http://genivi.org/ + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <QtTest/QtTest> +#include <QDBusConnection> +#include <QDateTime> + +#include "../../../common/errorloggerdbus.h" +#include "../../../common/browserdefs.h" + +#include "testerrorloggerdbus.h" +#include "ierrorlogger_interface.h" +#include "ierrorlogger_adaptor.h" +#include "../../errorlogger.h" + +void TestErrorLoggerDBus::initTestCase() { + qDBusRegisterMetaType<conn::brw::ERROR_IDS>(); + qDBusRegisterMetaType<conn::brw::BOOKMARK_SORT_TYPE>(); + qDBusRegisterMetaType<conn::brw::BookmarkItem>(); + qDBusRegisterMetaType<conn::brw::BookmarkItemList>(); + qDBusRegisterMetaType<conn::brw::DIALOG_RESULT>(); + qDBusRegisterMetaType<conn::brw::INPUT_ELEMENT_TYPE>(); + qDBusRegisterMetaType<conn::brw::Rect>(); + qDBusRegisterMetaType<conn::brw::SCROLL_DIRECTION>(); + qDBusRegisterMetaType<conn::brw::SCROLL_TYPE>(); + qDBusRegisterMetaType<conn::brw::BrowserActions>(); + qDBusRegisterMetaType<conn::brw::OBJECT_HANDLE>(); + qDBusRegisterMetaType<conn::brw::ObjectHandleList>(); + qDBusRegisterMetaType<conn::brw::CACHE_POLICY>(); + + m_connection = new QDBusConnection(QDBusConnection::sessionBus()); + if(!m_connection->isConnected()) { + qDebug() << "failed to connect to dbus"; + exit(1); + } + + QString *dbusservicename = new QString("genivi.poc.browser1"); + qDebug() << *dbusservicename; + + if(!m_connection->registerService(*dbusservicename)) { + qDebug() << "failed register service " << *dbusservicename; + exit(1); + } + + m_err = errorlogger::instance(); + new IErrorLoggerAdaptor(m_err); + if(!m_connection->registerObject("/Browser/IErrorLogger", m_err)) + QFAIL("failed register object IErrorLogger"); + + m_eld = new ErrorLoggerDbus(); + m_eld->connectdbussession("1"); +} +void TestErrorLoggerDBus::cleanup() +{ + m_err->clearErrors(); +} + +void TestErrorLoggerDBus::canLogMessage() +{ + qlonglong date = QDateTime::currentDateTime().toTime_t(); + errorlogger* el = errorlogger::instance(); + el->logError("Error!"); + el->logError("Error2!"); + QVERIFY(m_eld->getItemsCount(date - 10, date + 10) == 2); + conn::brw::ErrorItemList items = m_eld->getItems(date - 10, + date + 10, conn::brw::EST_DATE_DESCENDING, 0, 100); + QVERIFY(items.size() == 2); +} + +void TestErrorLoggerDBus::canGetSorted() +{ + qlonglong date = QDateTime::currentDateTime().toTime_t(); + errorlogger* el = errorlogger::instance(); + el->logError("Error!"); + QTest::qSleep(1000); + el->logError("Error2!"); + conn::brw::ErrorItemList items = m_eld->getItems(date - 10, + date + 10, conn::brw::EST_DATE_ASCENDING, 0, 100); + qDebug() << items.size(); + qDebug() << items.at(0).strDescription; + qDebug() << items.at(1).strDescription; + QVERIFY(items.at(0).strDescription.compare("Error!") == 0); + QVERIFY(items.at(1).strDescription.compare("Error2!") == 0); +} + +void TestErrorLoggerDBus::isNotifiedOnNewItem() +{ + QSignalSpy spy (m_eld, SIGNAL(onNewErrorItem(conn::brw::ErrorItem))); + errorlogger::instance()->logError("Error!"); + QVERIFY (spy.wait(1000)); +} + +void TestErrorLoggerDBus::isNotifiedWhenListChanges() +{ + QSignalSpy spy (m_eld, SIGNAL(onErrorListChanged(void))); + errorlogger::instance()->clearErrors(); + QVERIFY (spy.wait(1000)); +} +QTEST_MAIN (TestErrorLoggerDBus); diff --git a/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.h b/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.h new file mode 100644 index 0000000..bb0e38f --- /dev/null +++ b/browser/unit-tests/errorloggerdbus/testerrorloggerdbus.h @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2014, Pelagicore + * + * Author: Jonatan Palsson <jonatan.palsson@pelagicore.com> + * + * This file is part of the GENIVI project Browser Proof-Of-Concept + * For further information, see http://genivi.org/ + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef TESTERRORLOGGERDBUS_H +#define TESTERRORLOGGERDBUS_H + +#include <QtTest/QtTest> +#include <QDBusConnection> + +#include "../../../common/errorloggerdbus.h" +#include "../../../common/browserdefs.h" + +#include "ierrorlogger_interface.h" +#include "ierrorlogger_adaptor.h" +#include "../../errorlogger.h" + +class TestErrorLoggerDBus: public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanup(); + + void canLogMessage(); + void canGetSorted(); + void isNotifiedOnNewItem(); + void isNotifiedWhenListChanges(); + +private: + ErrorLoggerDbus *m_eld = NULL; + QDBusConnection *m_connection = NULL; + errorlogger *m_err; +}; + +#endif /* TESTERRORLOGGERDBUS_H */ diff --git a/common/browserdefs.h b/common/browserdefs.h index 167233e..f9c8e84 100644 --- a/common/browserdefs.h +++ b/common/browserdefs.h @@ -15,7 +15,6 @@ #define BROWSERDEFS_H #include <QDBusArgument> -#include <QDebug> namespace conn { namespace brw { @@ -593,6 +592,42 @@ namespace conn { EST_DATE_DESCENDING = 1 }; + //## operation operator>>(QDBusArgument,ERROR_SORT_TYPE) + inline const QDBusArgument& operator>>(const QDBusArgument& a_rDbusArg, ERROR_SORT_TYPE& a_rArg) { + //#[ operation operator>>(QDBusArgument,ERROR_SORT_TYPE) + a_rDbusArg.beginStructure(); + + int param = 0; + a_rDbusArg >> param; + + switch (param) + { + case EST_DATE_ASCENDING: + { + a_rArg = EST_DATE_ASCENDING; + break; + } + case EST_DATE_DESCENDING: + { + a_rArg = EST_DATE_DESCENDING; + break; + } + } + a_rDbusArg.endStructure(); + return a_rDbusArg; + //#] + } + + //## operation operator<<(QDBusArgument,ERROR_SORT_TYPE) + inline const QDBusArgument& operator<<(QDBusArgument& a_rDbusArg, ERROR_SORT_TYPE a_rArg) { + //#[ operation operator<<(QDBusArgument,ERROR_SORT_TYPE) + a_rDbusArg.beginStructure(); + int param = a_rArg; + a_rDbusArg << param; + a_rDbusArg.endStructure(); + return a_rDbusArg; + //#] + } struct ErrorItem { /*! @@ -621,6 +656,16 @@ namespace conn { QString strDescription; //## attribute strDescription }; + inline bool ltError(ErrorItem a, ErrorItem b) + { + return a.i64DateTime < b.i64DateTime; + } + + inline bool gtError( ErrorItem a, ErrorItem b) + { + return a.i64DateTime > b.i64DateTime; + } + //## package connInterfaces::connPublic::conn::brw::def //## class ErrorItemList /*! diff --git a/testapp/main.cpp b/testapp/main.cpp index 1149390..a286eb9 100644 --- a/testapp/main.cpp +++ b/testapp/main.cpp @@ -16,6 +16,8 @@ #include <QtQml> #include "../common/browserdbus.h" #include "../common/cachemanagerdbus.h" +#include "../common/errorloggerdbus.h" +#include "../common/browserdefs.h" int main(int argc, char *argv[]) { @@ -23,7 +25,10 @@ int main(int argc, char *argv[]) qmlRegisterType<BrowserDbus>("browserdbusinterface",1,0,"BrowserInterface"); qmlRegisterType<CacheManagerDbus>("browserdbusinterface",1,0,"CacheManagerInterface"); + qmlRegisterType<ErrorLoggerDbus>("browserdbusinterface",1,0,"ErrorLoggerInterface"); qmlRegisterType<Bookmark>("browserdbusinterface",1,0,"Tmp"); +// qmlRegisterType<conn::brw::ErrorItem>("browserdbusinterface", 1,0, "ErrorItem"); +// qmlRegisterType<conn::brw::ErrorItemList>("browserdbusinterface", 1,0, "ErrorItemList"); QQmlApplicationEngine engine("qml/testapp/main.qml"); diff --git a/testapp/qml/testapp/main.qml b/testapp/qml/testapp/main.qml index 9802b20..42909d3 100644 --- a/testapp/qml/testapp/main.qml +++ b/testapp/qml/testapp/main.qml @@ -17,6 +17,10 @@ ApplicationWindow { id: cachemanagerinterface } + ErrorLoggerInterface { + id: errorloggerinterface + } + Item { id: header width: parent.width @@ -54,7 +58,8 @@ ApplicationWindow { anchors.leftMargin: 20 text: "Connect" onClicked: { browserinterface.connectdbussession(inputstring.text); - cachemanagerinterface.connectdbussession(inputstring.text);} + cachemanagerinterface.connectdbussession(inputstring.text); + errorloggerinterface.connectdbussession(inputstring.text);} } Component { id: hallo @@ -160,5 +165,12 @@ ApplicationWindow { clip: true CacheManager {} } + Tab { + id: errorlogger + title: "IErrorLogger" + anchors.fill: parent + clip: true + ErrorLogger {} + } } } diff --git a/testapp/testapp.pro b/testapp/testapp.pro index da84a8b..9557d16 100644 --- a/testapp/testapp.pro +++ b/testapp/testapp.pro @@ -23,15 +23,20 @@ my_dbus_interfaces.header_flags = -i ../common/browserdefs.h my_dbus_interfaces.files += ../common/ICacheManager.xml my_dbus_interfaces.header_flags = -i ../common/browserdefs.h +my_dbus_interfaces.files += ../common/IErrorLogger.xml +my_dbus_interfaces.header_flags += -l errorlogger -i ../browser/errorlogger.h -i ../common/browserdefs.h + DBUS_INTERFACES += my_dbus_interfaces include(../common/common.pri) SOURCES += main.cpp \ - ../common/cachemanagerdbus.cpp + ../common/cachemanagerdbus.cpp \ + ../common/errorloggerdbus.cpp HEADERS += ../common/cachemanagerdbus.h \ - ../common/browserdefs.h + ../common/browserdefs.h \ + ../common/errorloggerdbus.h OTHER_FILES += \ qml/testapp/main.qml \ @@ -39,5 +44,6 @@ OTHER_FILES += \ qml/testapp/Browser.qml \ qml/testapp/BookmarkManager.qml \ qml/testapp/WebPageWindow.qml \ - qml/testapp/CacheManager.qml + qml/testapp/CacheManager.qml \ + qml/testapp/ErrorLogger.qml |