summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-17 07:31:52 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-17 07:31:52 +0100
commitfb453c1e3e7d97613f8e227929a0361357982c76 (patch)
tree3e7ee9d9a83db4dde32d903b97fcde5c973d1ba5
parent62eb6eebada09736fb465ebd9f9d3caeec2a12a5 (diff)
downloadbrowser-poc-fb453c1e3e7d97613f8e227929a0361357982c76.tar.gz
Implemented IErrorLogger
-rw-r--r--.gitignore2
-rw-r--r--browser/browserhelper.cpp2
-rw-r--r--browser/errorlogger.cpp37
-rw-r--r--browser/errorlogger.h56
-rw-r--r--browser/unit-tests/errorloggerdbus/errorloggerdbus.pro17
-rw-r--r--browser/unit-tests/errorloggerdbus/testerrorloggerdbus.cpp109
-rw-r--r--browser/unit-tests/errorloggerdbus/testerrorloggerdbus.h45
-rw-r--r--common/browserdefs.h46
8 files changed, 304 insertions, 10 deletions
diff --git a/.gitignore b/.gitignore
index 92eb961..c77998a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,5 +21,3 @@ BrowserDefs*
*.db
browserdbus-tests
cachemanagerdbus-tests
-unit-tests
-browser
diff --git a/browser/browserhelper.cpp b/browser/browserhelper.cpp
index f225065..04cf11a 100644
--- a/browser/browserhelper.cpp
+++ b/browser/browserhelper.cpp
@@ -41,7 +41,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 8aa5139..64209c1 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 ad7fb9a..814a812 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 8499904..9747173 100644
--- a/common/browserdefs.h
+++ b/common/browserdefs.h
@@ -592,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
{
/*!
@@ -620,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
/*!