summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 14:51:15 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 14:51:15 +0100
commit070840b7c89d70ef5097dccb888c8f9475fa0bea (patch)
treed4d6f8c45fe34ab9b5583884c4c6041da9293746
parent483e1b7cb3fd8f9f834c256e3b97096de39399e8 (diff)
parentafcf93e0900676ce52252230022bb1eedc1f13b5 (diff)
downloadbrowser-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--.gitignore1
-rw-r--r--browser/browser.h3
-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.h47
-rw-r--r--testapp/main.cpp5
-rw-r--r--testapp/qml/testapp/main.qml14
-rw-r--r--testapp/testapp.pro12
12 files changed, 331 insertions, 17 deletions
diff --git a/.gitignore b/.gitignore
index 92866e6..071e0ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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