Skip to content

Commit ff136f3

Browse files
Linux specific tests.
1 parent 8081991 commit ff136f3

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

test/process/general.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
# Copyright, 2024-2025, by Samuel Williams.
55

66
require "process/metrics"
7+
# On Linux, load ps backend too so we can compare General (Linux) vs General::ProcessStatus in tests.
8+
require "process/metrics/general/process_status" if RUBY_PLATFORM.include?("linux")
79

810
describe Process::Metrics::General do
911
with ".capture" do
@@ -100,4 +102,56 @@ def after(error = nil)
100102
expect(child.process_group_id).to be_a(Integer)
101103
end
102104
end
105+
106+
with "Linux backend matches ps backend (Linux only)" do
107+
it "single pid capture matches" do
108+
skip "Linux with ps required" unless RUBY_PLATFORM.include?("linux") && Process::Metrics::General::ProcessStatus.supported?
109+
110+
pid = Process.pid
111+
linux = Process::Metrics::General.capture(pid: pid, memory: false)
112+
ps = Process::Metrics::General::ProcessStatus.capture(pid: pid, memory: false)
113+
114+
expect(linux.keys).to be == ps.keys
115+
linux.each_key do |p|
116+
l = linux[p]
117+
ps_process = ps[p]
118+
expect(ps_process).not.to be_nil
119+
expect(l.process_id).to be == ps_process.process_id
120+
expect(l.parent_process_id).to be == ps_process.parent_process_id
121+
expect(l.process_group_id).to be == ps_process.process_group_id
122+
expect(l.virtual_size).to be == ps_process.virtual_size
123+
expect(l.resident_size).to be == ps_process.resident_size
124+
expect(l.command).to be == ps_process.command
125+
expect((l.processor_time - ps_process.processor_time).abs).to be < 1.0
126+
expect((l.elapsed_time - ps_process.elapsed_time).abs).to be < 1.0
127+
end
128+
end
129+
130+
it "pid and ppid capture matches" do
131+
skip "Linux with ps required" unless RUBY_PLATFORM.include?("linux") && Process::Metrics::General::ProcessStatus.supported?
132+
133+
child_pid = Process.spawn("sleep 10")
134+
begin
135+
linux = Process::Metrics::General.capture(pid: child_pid, ppid: child_pid, memory: false)
136+
ps = Process::Metrics::General::ProcessStatus.capture(pid: child_pid, ppid: child_pid, memory: false)
137+
expect(linux.keys.sort).to be == ps.keys.sort
138+
linux.each_key do |p|
139+
l = linux[p]
140+
ps_process = ps[p]
141+
expect(ps_process).not.to be_nil
142+
expect(l.process_id).to be == ps_process.process_id
143+
expect(l.parent_process_id).to be == ps_process.parent_process_id
144+
expect(l.process_group_id).to be == ps_process.process_group_id
145+
expect(l.virtual_size).to be == ps_process.virtual_size
146+
expect(l.resident_size).to be == ps_process.resident_size
147+
expect(l.command).to be == ps_process.command
148+
expect((l.processor_time - ps_process.processor_time).abs).to be < 1.0
149+
expect((l.elapsed_time - ps_process.elapsed_time).abs).to be < 1.0
150+
end
151+
ensure
152+
Process.kill(:TERM, child_pid)
153+
Process.wait(child_pid)
154+
end
155+
end
156+
end
103157
end

0 commit comments

Comments
 (0)