diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-17 12:08:52 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-17 12:08:52 +0200 |
| commit | 3690d0ee9ceb5c0287cfe72eb4dcfd8f43324f0e (patch) | |
| tree | 7f7575c456fb3d1b4d75158f45ed0e339ec7cf22 /test | |
| parent | 64e8f20ce3a27dfc6cc2f37ae449dcb5eb91e7a9 (diff) | |
| download | conky-theme-udt-3690d0ee9ceb5c0287cfe72eb4dcfd8f43324f0e.tar.gz conky-theme-udt-3690d0ee9ceb5c0287cfe72eb4dcfd8f43324f0e.zip | |
feat: add per-core CPU times and named sensor reads
Diffstat (limited to 'test')
| -rw-r--r-- | test/fixtures/proc_stat_percore | 11 | ||||
| -rw-r--r-- | test/test_data.lua | 37 |
2 files changed, 48 insertions, 0 deletions
diff --git a/test/fixtures/proc_stat_percore b/test/fixtures/proc_stat_percore new file mode 100644 index 0000000..cbf62f2 --- /dev/null +++ b/test/fixtures/proc_stat_percore @@ -0,0 +1,11 @@ +cpu 293470 5201 186259 16513195 82679 0 2095 0 0 0 +cpu0 6441 24 3225 1056496 1932 0 760 0 0 0 +cpu1 23587 123 15762 1018523 8299 0 112 0 0 0 +cpu2 9859 24 6098 1049850 2386 0 81 0 0 0 +cpu3 11200 30 7000 1040000 2500 0 90 0 0 0 +intr 123456789 0 0 0 +ctxt 987654321 +btime 1789600000 +processes 54321 +procs_running 2 +procs_blocked 0 diff --git a/test/test_data.lua b/test/test_data.lua index 33551d1..e5b589f 100644 --- a/test/test_data.lua +++ b/test/test_data.lua @@ -54,4 +54,41 @@ local c2 = data.new_cpu_counter() c2:sample(1000, 900) assert(c2:sample(1000, 900) == nil, 'zero delta must give nil, not a division by zero') +-- === Per-core CPU ========================================================= +-- The aggregate line answers "how busy is the machine"; the equaliser needs +-- one entry per core. Both come from the same file, so they are parsed by the +-- same rules and differ only in which lines they read. +local percore = read('test/fixtures/proc_stat_percore') +local cores = data.per_cpu_times(percore) +assert(#cores == 4, 'one entry per cpuN line, got ' .. tostring(#cores)) + +-- cpu0: 6441+24+3225+1056496+1932+0+760 = 1068878 total, idle+iowait = 1058428 +assert(cores[1].total == 1068878, 'core 0 total, got ' .. tostring(cores[1].total)) +assert(cores[1].idle == 1058428, 'core 0 idle, got ' .. tostring(cores[1].idle)) + +-- Ordering matters: bar N must be core N, so the list follows the file. +assert(cores[2].total == 1066406, 'core 1 total, got ' .. tostring(cores[2].total)) + +-- The aggregate 'cpu ' line must NOT be counted as a core: it would draw a +-- seventeenth bar showing the average, which looks like a real core. +for i, c in ipairs(cores) do + assert(c.total < 2000000, 'entry ' .. i .. ' looks like the aggregate line') +end + +-- A counter per core is just another instance, which is why new_cpu_counter +-- holds its own previous sample rather than using a module-level one. +local c0 = data.new_cpu_counter() +assert(c0:sample(cores[1].total, cores[1].idle) == nil, 'first sample is nil') +local busy = c0:sample(cores[1].total + 100, cores[1].idle + 25) +assert(busy == 75.0, 'second sample 75%, got ' .. tostring(busy)) + +-- Malformed input yields an empty list, never an error: a raise here is a +-- blank dashboard. +assert(#data.per_cpu_times('') == 0, 'empty input gives an empty list') +assert(#data.per_cpu_times('garbage\nlines\n') == 0, 'garbage gives an empty list') +assert(#data.per_cpu_times(nil) == 0, 'nil gives an empty list') +-- A truncated line (fewer than the 5 fields the maths needs) is skipped +-- rather than producing a nonsense total. +assert(#data.per_cpu_times('cpu0 1 2\n') == 0, 'a short line is skipped') + print('test_data: all assertions passed') |
