diff options
author | Bernd Weimer <bernd.weimer@pelagicore.com> | 2017-11-14 10:21:50 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@pelagicore.com> | 2018-01-11 22:41:37 +0000 |
commit | 6015eb9f14c305375f0ee65d4172f48c7f015f6c (patch) | |
tree | f46decd50d4c364c540e57b0e72c8f5a51f84a6a | |
parent | e3a69de57b2b948a618e7cc48eabcbfccb098278 (diff) | |
download | qtapplicationmanager-6015eb9f14c305375f0ee65d4172f48c7f015f6c.tar.gz |
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.cpp | 15 | ||||
-rw-r--r-- | src/monitor-lib/processmonitor_p.h | 3 | ||||
-rw-r--r-- | tests/processmonitor/basic.smaps | 352 | ||||
-rw-r--r-- | tests/processmonitor/invalid.smaps | 16 | ||||
-rw-r--r-- | tests/processmonitor/processmonitor.pro | 11 | ||||
-rw-r--r-- | tests/processmonitor/tst_processmonitor.cpp | 136 | ||||
-rw-r--r-- | tests/qml/monitoring/am-config.yaml | 16 | ||||
-rw-r--r-- | tests/qml/monitoring/monitoring.pro | 4 | ||||
-rw-r--r-- | tests/qml/monitoring/tst_monitoring.qml | 105 | ||||
-rw-r--r-- | tests/qml/qml.pro | 3 | ||||
-rw-r--r-- | tests/tests.pro | 1 |
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 \ |