summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Weimer <bernd.weimer@pelagicore.com>2017-11-14 10:21:50 +0100
committerRobert Griebl <robert.griebl@pelagicore.com>2018-01-11 22:41:37 +0000
commit6015eb9f14c305375f0ee65d4172f48c7f015f6c (patch)
treef46decd50d4c364c540e57b0e72c8f5a51f84a6a
parente3a69de57b2b948a618e7cc48eabcbfccb098278 (diff)
Add monitoring auto tests
Added tests for ProcessMonitor memory (smaps file) parsing and basic QML tests for SystemMonitor. Change-Id: If80a48734ecc1785f7564b668cd5ccc433869010 Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r--src/monitor-lib/processmonitor_p.cpp15
-rw-r--r--src/monitor-lib/processmonitor_p.h3
-rw-r--r--tests/processmonitor/basic.smaps352
-rw-r--r--tests/processmonitor/invalid.smaps16
-rw-r--r--tests/processmonitor/processmonitor.pro11
-rw-r--r--tests/processmonitor/tst_processmonitor.cpp136
-rw-r--r--tests/qml/monitoring/am-config.yaml16
-rw-r--r--tests/qml/monitoring/monitoring.pro4
-rw-r--r--tests/qml/monitoring/tst_monitoring.qml105
-rw-r--r--tests/qml/qml.pro3
-rw-r--r--tests/tests.pro1
11 files changed, 653 insertions, 9 deletions
diff --git a/src/monitor-lib/processmonitor_p.cpp b/src/monitor-lib/processmonitor_p.cpp
index 205b5cb9..092fa57c 100644
--- a/src/monitor-lib/processmonitor_p.cpp
+++ b/src/monitor-lib/processmonitor_p.cpp
@@ -117,7 +117,8 @@ void ReadingTask::timerEvent(QTimerEvent *event)
ReadingTask::Results results;
if (m_readMem) {
- if (!readMemory(results.memory))
+ const QByteArray file = "/proc/" + QByteArray::number(m_pid) + "/smaps";
+ if (!readMemory(file, results.memory))
results.memory = ReadingTask::Results::Memory();
results.memory.read = true;
}
@@ -182,17 +183,15 @@ qreal ReadingTask::readLoad()
return load;
}
-bool ReadingTask::readMemory(ReadingTask::Results::Memory &results)
+bool ReadingTask::readMemory(const QByteArray &smapsFile, ReadingTask::Results::Memory &results)
{
struct ScopedFile {
~ScopedFile() { if (file) fclose(file); }
FILE *file = nullptr;
};
- const QByteArray fileName = "/proc/" + QByteArray::number(m_pid) + "/smaps";
-
ScopedFile sf;
- sf.file = fopen(fileName.constData(), "r");
+ sf.file = fopen(smapsFile.constData(), "r");
if (sf.file == nullptr)
return false;
@@ -336,8 +335,9 @@ qreal ReadingTask::readLoad()
return 0.0;
}
-bool ReadingTask::readMemory(ReadingTask::Results::Memory &results)
+bool ReadingTask::readMemory(const QByteArray &smapsFile, ReadingTask::Results::Memory &results)
{
+ Q_UNUSED(smapsFile)
struct task_basic_info t_info;
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
@@ -363,8 +363,9 @@ qreal ReadingTask::readLoad()
return 0.0;
}
-bool ReadingTask::readMemory(ReadingTask::Results::Memory &results)
+bool ReadingTask::readMemory(const QByteArray &smapsFile, ReadingTask::Results::Memory &results)
{
+ Q_UNUSED(smapsFile)
Q_UNUSED(results)
return false;
}
diff --git a/src/monitor-lib/processmonitor_p.h b/src/monitor-lib/processmonitor_p.h
index ccdb10ca..f5104d89 100644
--- a/src/monitor-lib/processmonitor_p.h
+++ b/src/monitor-lib/processmonitor_p.h
@@ -76,6 +76,7 @@
QT_BEGIN_NAMESPACE_AM
class Window;
+class tst_ProcessMonitor;
class ReadingTask : public QObject
{
@@ -108,6 +109,7 @@ public:
protected:
void timerEvent(QTimerEvent *event) override;
+ bool readMemory(const QByteArray &smapsFile, Results::Memory &results);
public slots:
void setupTimer(bool enabled, int interval);
@@ -123,7 +125,6 @@ private:
void cancelTimer();
void openLoad();
qreal readLoad();
- bool readMemory(Results::Memory &results);
QMutex &m_mutex;
Results &m_results;
diff --git a/tests/processmonitor/basic.smaps b/tests/processmonitor/basic.smaps
new file mode 100644
index 00000000..00640230
--- /dev/null
+++ b/tests/processmonitor/basic.smaps
@@ -0,0 +1,352 @@
+00400000-00413000 r-xp 00000000 b3:01 266877 application
+Size: 76 kB
+Rss: 76 kB
+Pss: 38 kB
+Shared_Clean: 76 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 76 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex mr mw me dw
+00422000-00423000 rw-p 00012000 b3:01 266877 application
+Size: 4 kB
+Rss: 4 kB
+Pss: 4 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 4 kB
+Referenced: 4 kB
+Anonymous: 4 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me dw ac
+00423000-004ec000 rw-p 00000000 00:00 0 [heap]
+Size: 804 kB
+Rss: 796 kB
+Pss: 796 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 796 kB
+Referenced: 796 kB
+Anonymous: 796 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+004ed000-00bc9000 rw-p 00000000 00:00 0 [heap]
+Size: 7024 kB
+Rss: 6700 kB
+Pss: 6700 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 6700 kB
+Referenced: 6700 kB
+Anonymous: 6700 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+7f54000000-7f54021000 rw-p 00000000 00:00 0
+Size: 132 kB
+Rss: 4 kB
+Pss: 4 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 4 kB
+Referenced: 4 kB
+Anonymous: 4 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me nr
+7f54021000-7f58000000 ---p 00000000 00:00 0
+Size: 65404 kB
+Rss: 0 kB
+Pss: 0 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 0 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: mr mw me nr
+7f5c000000-7f5c00a000 rw-p 00000000 00:00 0
+Size: 40 kB
+Rss: 40 kB
+Pss: 40 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 40 kB
+Referenced: 40 kB
+Anonymous: 40 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me nr
+7f600d1000-7f604d1000 rw-s 00000000 00:09 12516 anon_inode:dmabuf
+Size: 4096 kB
+Rss: 1656 kB
+Pss: 828 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 1656 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 1656 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr sh mr mw me ms dc de dd
+7f604d1000-7f608d1000 rw-s 00000000 00:09 12516 anon_inode:dmabuf
+Size: 4096 kB
+Rss: 4084 kB
+Pss: 2042 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 4084 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 4084 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr sh mr mw me ms dc de dd
+7f614d2000-7f6168a000 r-xp 00000000 b3:01 12487 /verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/lib.so
+Size: 1760 kB
+Rss: 1448 kB
+Pss: 726 kB
+Shared_Clean: 1444 kB
+Shared_Dirty: 0 kB
+Private_Clean: 4 kB
+Private_Dirty: 0 kB
+Referenced: 1448 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex mr mw me
+7f6168a000-7f61699000 ---p 001b8000 b3:01 12487 /verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/lib.so
+Size: 60 kB
+Rss: 0 kB
+Pss: 0 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 0 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: mr mw me
+7f61699000-7f616a0000 rw-p 001b7000 b3:01 12487 /verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/verylonglibrarypathname/lib.so
+Size: 28 kB
+Rss: 28 kB
+Pss: 28 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 28 kB
+Referenced: 28 kB
+Anonymous: 28 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+7f61925000-7f61ef7000 r-xp 00000000 b3:01 13766 /linelength98/linelen.so
+Size: 5960 kB
+Rss: 4356 kB
+Pss: 1554 kB
+Shared_Clean: 4264 kB
+Shared_Dirty: 0 kB
+Private_Clean: 92 kB
+Private_Dirty: 0 kB
+Referenced: 4356 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex mr mw me
+7f61ef7000-7f61f07000 ---p 005d2000 b3:01 13766 /linelength99/lineleng.so
+Size: 64 kB
+Rss: 0 kB
+Pss: 0 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 0 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: mr mw me
+7f61f07000-7f6204c000 rw-p 005d2000 b3:01 13766 /linelength100/lineleng.so
+Size: 1300 kB
+Rss: 1084 kB
+Pss: 986 kB
+Shared_Clean: 156 kB
+Shared_Dirty: 0 kB
+Private_Clean: 24 kB
+Private_Dirty: 904 kB
+Referenced: 1084 kB
+Anonymous: 904 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+7f74146000-7f74945000 rw-p 00000000 00:00 0 [stack:3396]
+Size: 8188 kB
+Rss: 8 kB
+Pss: 8 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 8 kB
+Referenced: 8 kB
+Anonymous: 8 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+7f74946000-7f75145000 rw-p 00000000 00:00 0 [stack:3116]
+Size: 8188 kB
+Rss: 8 kB
+Pss: 8 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 8 kB
+Referenced: 8 kB
+Anonymous: 8 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me ac
+7f78fff000-7f79001000 rw-s 00000000 00:16 37047 /tmp/.gl3LHuLJ (deleted)
+Size: 8 kB
+Rss: 8 kB
+Pss: 8 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 8 kB
+Referenced: 8 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr sh mr mw me ms
+7f79001000-7f79003000 r-xs 00000000 00:16 37047 /tmp/.gl3LHuLJ (deleted)
+Size: 8 kB
+Rss: 0 kB
+Pss: 0 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 0 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex sh mr mw me ms
+7f79005000-7f79006000 r--p 00000000 00:00 0 [vvar]
+Size: 4 kB
+Rss: 4 kB
+Pss: 0 kB
+Shared_Clean: 4 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 4 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd mr de
+7f79006000-7f79007000 r-xp 00000000 00:00 0 [vdso]
+Size: 4 kB
+Rss: 4 kB
+Pss: 0 kB
+Shared_Clean: 4 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 4 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex mr mw me de
+7ffc8f6000-7ffc917000 rw-p 00000000 00:00 0 [stack]
+Size: 136 kB
+Rss: 44 kB
+Pss: 44 kB
+Shared_Clean: 0 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 44 kB
+Referenced: 44 kB
+Anonymous: 44 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd wr mr mw me gd ac
diff --git a/tests/processmonitor/invalid.smaps b/tests/processmonitor/invalid.smaps
new file mode 100644
index 00000000..146a42b8
--- /dev/null
+++ b/tests/processmonitor/invalid.smaps
@@ -0,0 +1,16 @@
+00400000-00413000 r-xp 00000000 b3:01 266877 application
+Size: #missing
+Rss: 76 kB
+Pss: 38 kB
+Shared_Clean: 76 kB
+Shared_Dirty: 0 kB
+Private_Clean: 0 kB
+Private_Dirty: 0 kB
+Referenced: 76 kB
+Anonymous: 0 kB
+AnonHugePages: 0 kB
+Swap: 0 kB
+KernelPageSize: 4 kB
+MMUPageSize: 4 kB
+Locked: 0 kB
+VmFlags: rd ex mr mw me dw
diff --git a/tests/processmonitor/processmonitor.pro b/tests/processmonitor/processmonitor.pro
new file mode 100644
index 00000000..b7425e06
--- /dev/null
+++ b/tests/processmonitor/processmonitor.pro
@@ -0,0 +1,11 @@
+TARGET = tst_processmonitor
+
+include($$PWD/../tests.pri)
+
+QT *= appman_monitor-private \
+ appman_manager-private \
+ appman_window-private \
+ appman_application-private \
+ appman_common-private
+
+SOURCES += tst_processmonitor.cpp
diff --git a/tests/processmonitor/tst_processmonitor.cpp b/tests/processmonitor/tst_processmonitor.cpp
new file mode 100644
index 00000000..bd053651
--- /dev/null
+++ b/tests/processmonitor/tst_processmonitor.cpp
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Pelagicore Application Manager.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite licenses may use
+** this file in accordance with the commercial license agreement provided
+** with the Software or, alternatively, in accordance with the terms
+** contained in a written agreement between you and The Qt Company. For
+** licensing terms and conditions see https://www.qt.io/terms-conditions.
+** For further information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtTest>
+#include "private/processmonitor_p.h"
+
+QT_USE_NAMESPACE_AM
+
+class ReadingTaskTester : public ReadingTask
+{
+public:
+ using ReadingTask::readMemory;
+};
+
+class QtAM::tst_ProcessMonitor : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_ProcessMonitor();
+
+private slots:
+ void memInvalid_data();
+ void memInvalid();
+ void memTestProcess();
+ void memBasic();
+
+private:
+ void printMem(const ReadingTask::Results::Memory &memres);
+
+ ReadingTask task;
+ ReadingTask::Results readResults;
+ QMutex mutex;
+};
+
+tst_ProcessMonitor::tst_ProcessMonitor() : task(mutex, readResults)
+{}
+
+void tst_ProcessMonitor::memInvalid_data()
+{
+ QTest::addColumn<QString>("file");
+
+ QTest::newRow("arbitrary") << QFINDTESTDATA("tst_processmonitor.cpp");
+ QTest::newRow("binary") << QFINDTESTDATA("tst_processmonitor");
+ QTest::newRow("missingvalue") << QFINDTESTDATA("invalid.smaps");
+}
+
+void tst_ProcessMonitor::memInvalid()
+{
+ QFETCH(QString, file);
+
+ ReadingTask::Results::Memory memres;
+ QVERIFY(!static_cast<ReadingTaskTester*>(&task)->readMemory(file.toLocal8Bit(), memres));
+ QCOMPARE(memres.totalVm, 0u);
+ QCOMPARE(memres.totalRss, 0u);
+ QCOMPARE(memres.totalPss, 0u);
+ QCOMPARE(memres.textVm, 0u);
+ QCOMPARE(memres.textRss, 0u);
+ QCOMPARE(memres.textPss, 0u);
+ QCOMPARE(memres.heapVm, 0u);
+ QCOMPARE(memres.heapRss, 0u);
+ QCOMPARE(memres.heapPss, 0u);
+}
+
+void tst_ProcessMonitor::memTestProcess()
+{
+ ReadingTask::Results::Memory memres;
+ const QByteArray file = "/proc/" + QByteArray::number(QCoreApplication::applicationPid()) + "/smaps";
+ QVERIFY(static_cast<ReadingTaskTester*>(&task)->readMemory(file, memres));
+ //printMem(memres);
+ QVERIFY(memres.totalVm >= memres.totalRss);
+ QVERIFY(memres.totalRss >= memres.totalPss);
+ QVERIFY(memres.textVm >= memres.textRss);
+ QVERIFY(memres.textRss >= memres.textPss);
+ QVERIFY(memres.heapVm >= memres.heapRss);
+ QVERIFY(memres.heapRss >= memres.heapPss);
+}
+
+void tst_ProcessMonitor::memBasic()
+{
+ ReadingTask::Results::Memory memres;
+ QVERIFY(static_cast<ReadingTaskTester*>(&task)->readMemory(QFINDTESTDATA("basic.smaps").toLocal8Bit(), memres));
+ //printMem(memres);
+ QCOMPARE(memres.totalVm, 107384u);
+ QCOMPARE(memres.totalRss, 20352u);
+ QCOMPARE(memres.totalPss, 13814u);
+ QCOMPARE(memres.textVm, 7800u);
+ QCOMPARE(memres.textRss, 5884u);
+ QCOMPARE(memres.textPss, 2318u);
+ QCOMPARE(memres.heapVm, 24376u);
+ QCOMPARE(memres.heapRss, 7556u);
+ QCOMPARE(memres.heapPss, 7556u);
+}
+
+void tst_ProcessMonitor::printMem(const ReadingTask::Results::Memory &memres)
+{
+ qDebug() << "totalVm:" << memres.totalVm;
+ qDebug() << "totalRss:" << memres.totalRss;
+ qDebug() << "totalPss:" << memres.totalPss;
+ qDebug() << "textVm:" << memres.textVm;
+ qDebug() << "textRss:" << memres.textRss;
+ qDebug() << "textPss:" << memres.textPss;
+ qDebug() << "heapVm:" << memres.heapVm;
+ qDebug() << "heapRss:" << memres.heapRss;
+ qDebug() << "heapPss:" << memres.heapPss;
+}
+
+QTEST_APPLESS_MAIN(tst_ProcessMonitor)
+
+#include "tst_processmonitor.moc"
diff --git a/tests/qml/monitoring/am-config.yaml b/tests/qml/monitoring/am-config.yaml
new file mode 100644
index 00000000..00c43b53
--- /dev/null
+++ b/tests/qml/monitoring/am-config.yaml
@@ -0,0 +1,16 @@
+formatVersion: 1
+formatType: am-configuration
+---
+applications:
+ builtinAppsManifestDir: "${CONFIG_PWD}/apps"
+ installedAppsManifestDir: "/tmp/am-monitoring-test/manifests"
+ appImageMountDir: "/tmp/am-monitoring-test/image-mounts"
+ database: "/tmp/am-monitoring-test/apps.db"
+
+installationLocations:
+- id: "internal-0"
+ installationPath: "/tmp/am-monitoring-test/apps"
+ documentPath: "/tmp/am-monitoring-test/docs"
+ mountPoint: "/tmp"
+ isDefault: true
+
diff --git a/tests/qml/monitoring/monitoring.pro b/tests/qml/monitoring/monitoring.pro
new file mode 100644
index 00000000..efdca89a
--- /dev/null
+++ b/tests/qml/monitoring/monitoring.pro
@@ -0,0 +1,4 @@
+AM_CONFIG = am-config.yaml
+TEST_FILES = tst_monitoring.qml
+
+load(am-qml-testcase)
diff --git a/tests/qml/monitoring/tst_monitoring.qml b/tests/qml/monitoring/tst_monitoring.qml
new file mode 100644
index 00000000..d5c55d6c
--- /dev/null
+++ b/tests/qml/monitoring/tst_monitoring.qml
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Pelagicore Application Manager.
+**
+** $QT_BEGIN_LICENSE:LGPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite licenses may use
+** this file in accordance with the commercial license agreement provided
+** with the Software or, alternatively, in accordance with the terms
+** contained in a written agreement between you and The Qt Company. For
+** licensing terms and conditions see https://www.qt.io/terms-conditions.
+** For further information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: LGPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import QtTest 1.0
+import QtApplicationManager 1.0
+
+TestCase {
+ id: testCase
+ when: windowShown
+ name: "Monitoring"
+
+ ListView {
+ id: listView
+ model: SystemMonitor
+ delegate: Item {}
+ }
+
+ SignalSpy {
+ id: memoryReportingChangedSpy
+ target: SystemMonitor
+ signalName: "memoryReportingChanged"
+ }
+
+ function test_mem_reporting() {
+ compare(SystemMonitor.count, 10);
+ verify(!SystemMonitor.memoryReportingEnabled);
+
+ SystemMonitor.reportingInterval = 80
+ SystemMonitor.count = 5;
+ SystemMonitor.memoryReportingEnabled = true;
+
+ compare(SystemMonitor.reportingInterval, 80);
+ compare(SystemMonitor.count, 5);
+ verify(SystemMonitor.memoryReportingEnabled);
+
+ memoryReportingChangedSpy.wait(100);
+ compare(memoryReportingChangedSpy.count, 1);
+ console.info("Used Memory: " + (memoryReportingChangedSpy.signalArguments[0][0]/1e9).toFixed(1) + " GB");
+ var mem = [memoryReportingChangedSpy.signalArguments[0][0]];
+ verify(mem[0] > 16000);
+ compare(listView.model.get(0).memoryUsed, mem[0]);
+
+ memoryReportingChangedSpy.wait(100);
+ compare(memoryReportingChangedSpy.count, 2);
+ mem[1] = memoryReportingChangedSpy.signalArguments[1][0];
+ verify(mem[1] > 16000);
+ compare(listView.model.get(0).memoryUsed, mem[1]);
+ compare(listView.model.get(1).memoryUsed, mem[0]);
+
+ SystemMonitor.count = 4;
+ compare(listView.model.get(0).memoryUsed, mem[1]);
+ compare(listView.model.get(1).memoryUsed, mem[0]);
+
+ SystemMonitor.reportingInterval = 85;
+ compare(listView.model.get(0).memoryUsed, 0);
+ compare(listView.model.get(1).memoryUsed, 0);
+ }
+
+ function test_static() {
+ console.info("CPU Cores: " + SystemMonitor.cpuCores);
+ console.info("Total Memory: " + (SystemMonitor.totalMemory/1e9).toFixed(1) + " GB");
+ verify(SystemMonitor.cpuCores >= 1);
+ verify(SystemMonitor.totalMemory > 64000);
+ compare(SystemMonitor.idleLoadThreshold, 0.1);
+ }
+}
diff --git a/tests/qml/qml.pro b/tests/qml/qml.pro
index 93201f45..78ee24a8 100644
--- a/tests/qml/qml.pro
+++ b/tests/qml/qml.pro
@@ -3,4 +3,5 @@ SUBDIRS = \
simple \
windowmapping \
fakeamwindow \
- installer
+ installer \
+ monitoring
diff --git a/tests/tests.pro b/tests/tests.pro
index b18ad3eb..a478922a 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -16,6 +16,7 @@ SUBDIRS = \
linux*:SUBDIRS += \
sudo \
+ processmonitor
OTHER_FILES += \
tests.pri \