2015-09-05 15:40:02 +00:00
|
|
|
# encoding: utf-8
|
2015-10-06 16:55:44 +00:00
|
|
|
# author: Christoph Hartmann
|
|
|
|
# author: Dominik Richter
|
2015-09-05 15:40:02 +00:00
|
|
|
|
|
|
|
require 'helper'
|
2015-10-26 03:04:18 +00:00
|
|
|
require 'inspec/resource'
|
2015-09-05 15:40:02 +00:00
|
|
|
|
2015-10-26 03:04:18 +00:00
|
|
|
describe 'Inspec::Resources::Processes' do
|
2015-10-26 15:47:54 +00:00
|
|
|
it 'handles empty process results' do
|
|
|
|
resource = load_resource('processes', 'nothing')
|
2017-02-02 22:10:41 +00:00
|
|
|
_(resource.entries).must_equal []
|
2015-10-26 15:47:54 +00:00
|
|
|
end
|
|
|
|
|
2015-09-22 16:33:05 +00:00
|
|
|
it 'verify processes resource' do
|
2016-10-17 14:23:50 +00:00
|
|
|
resource = MockLoader.new(:freebsd10).load_resource('processes', 'login -fp apop')
|
2019-01-12 23:50:20 +00:00
|
|
|
|
|
|
|
proc { resource.list.length.must_equal 2 }
|
|
|
|
.must_output nil, "[DEPRECATION] `processes.list` is deprecated. Please use `processes.entries` instead. It will be removed in version 4.0.\n"
|
|
|
|
|
2017-02-02 22:10:41 +00:00
|
|
|
_(resource.entries.length).must_equal 2
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
2016-05-09 19:19:56 +00:00
|
|
|
label: nil,
|
2016-10-17 14:23:50 +00:00
|
|
|
pid: 7115,
|
|
|
|
cpu: '0.3',
|
2015-09-22 16:33:05 +00:00
|
|
|
mem: '0.0',
|
2016-10-17 14:23:50 +00:00
|
|
|
vsz: 2516588,
|
|
|
|
rss: 3052,
|
|
|
|
tty: 'ttys008',
|
|
|
|
stat: 'U',
|
|
|
|
start: 'Fri05PM',
|
|
|
|
time: '0:00.05',
|
2016-09-26 18:03:19 +00:00
|
|
|
user: 'root',
|
2016-10-17 14:23:50 +00:00
|
|
|
command: 'login -fp apop',
|
2016-05-13 09:16:45 +00:00
|
|
|
})
|
2015-09-05 15:40:02 +00:00
|
|
|
end
|
2015-12-07 08:39:48 +00:00
|
|
|
|
2016-05-09 19:19:56 +00:00
|
|
|
it 'verify processes resource on linux os' do
|
2016-10-17 14:23:50 +00:00
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'postgres: bifrost bifrost')
|
2017-02-02 22:10:41 +00:00
|
|
|
_(resource.entries.length).must_equal 1
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
|
|
|
label: 'system_u:system_r:init_t:s0',
|
|
|
|
pid: 5127,
|
|
|
|
cpu: '0.0',
|
|
|
|
mem: '0.2',
|
|
|
|
vsz: 547208,
|
|
|
|
rss: 5376,
|
|
|
|
tty: '?',
|
|
|
|
stat: 'Ss',
|
|
|
|
start: '10:54:22',
|
|
|
|
time: '00:00:00',
|
|
|
|
user: 'opscode-pgsql',
|
|
|
|
command: 'postgres: bifrost bifrost 127.0.0.1(43699) idle',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'verify processes resource using where filters on linux os. String match regex' do
|
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', '.+')
|
2017-09-05 12:36:55 +00:00
|
|
|
_(resource.entries.length).must_equal 8
|
2017-02-02 22:10:41 +00:00
|
|
|
_(resource.where { pid < 11663 && cpu == '0.0' }.users).must_equal(["opscode-pgsql", "opscode", "root", "httpd"])
|
|
|
|
_(resource.where { user =~ /opscode-.*/ }.entries[0].to_h).must_equal({
|
2016-10-17 14:23:50 +00:00
|
|
|
label: 'system_u:system_r:init_t:s0',
|
|
|
|
pid: 5127,
|
2016-05-09 19:19:56 +00:00
|
|
|
cpu: '0.0',
|
2016-10-17 14:23:50 +00:00
|
|
|
mem: '0.2',
|
|
|
|
vsz: 547208,
|
|
|
|
rss: 5376,
|
2016-05-09 19:19:56 +00:00
|
|
|
tty: '?',
|
|
|
|
stat: 'Ss',
|
2016-10-17 14:23:50 +00:00
|
|
|
start: '10:54:22',
|
|
|
|
time: '00:00:00',
|
|
|
|
user: 'opscode-pgsql',
|
|
|
|
command: 'postgres: bifrost bifrost 127.0.0.1(43699) idle',
|
2016-05-13 09:16:45 +00:00
|
|
|
})
|
|
|
|
end
|
2016-05-09 19:19:56 +00:00
|
|
|
|
2016-11-30 00:20:49 +00:00
|
|
|
it 'verify long-run processes resource on linux os' do
|
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'httpd')
|
2017-02-02 22:10:41 +00:00
|
|
|
_(resource.entries.length).must_equal 4
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
2016-11-30 00:20:49 +00:00
|
|
|
label: '-',
|
|
|
|
pid: 4589,
|
|
|
|
cpu: '0.0',
|
|
|
|
mem: '0.0',
|
|
|
|
vsz: 70992,
|
|
|
|
rss: 2864,
|
|
|
|
tty: '?',
|
|
|
|
stat: 'Ss',
|
|
|
|
start: 'Nov 09',
|
|
|
|
time: '00:01:01',
|
|
|
|
user: 'root',
|
|
|
|
command: '/usr/local/apache2/bin/httpd -k start',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
2019-02-12 23:02:54 +00:00
|
|
|
it 'access information of a process' do
|
2016-10-17 14:23:50 +00:00
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'postgres: bifrost bifrost')
|
2017-02-02 22:10:41 +00:00
|
|
|
process = resource.entries[0]
|
2016-10-17 14:23:50 +00:00
|
|
|
process.user.must_equal 'opscode-pgsql'
|
|
|
|
process[:user].must_equal 'opscode-pgsql'
|
|
|
|
process['user'].must_equal 'opscode-pgsql'
|
|
|
|
process[-1].must_equal 'postgres: bifrost bifrost 127.0.0.1(43699) idle'
|
|
|
|
process[1].must_equal 5127
|
2016-05-09 19:19:56 +00:00
|
|
|
end
|
|
|
|
|
2015-12-07 08:39:48 +00:00
|
|
|
it 'retrieves the users and states as arrays' do
|
2016-10-17 14:23:50 +00:00
|
|
|
resource = MockLoader.new(:freebsd10).load_resource('processes', 'login -fp apop')
|
|
|
|
_(resource.users.sort).must_equal ['apop', 'root']
|
|
|
|
_(resource.states.sort).must_equal ['Ss', 'U']
|
2015-12-07 08:39:48 +00:00
|
|
|
end
|
2016-05-09 19:19:56 +00:00
|
|
|
|
|
|
|
it 'retrieves the users and states as arrays on linux os' do
|
2016-10-17 14:23:50 +00:00
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'postgres: bifrost bifrost')
|
|
|
|
_(resource.users.sort).must_equal ['opscode-pgsql']
|
|
|
|
_(resource.states.sort).must_equal ['Ss']
|
2017-06-04 20:03:04 +00:00
|
|
|
_(resource.exists?).must_equal true
|
2016-05-09 19:19:56 +00:00
|
|
|
end
|
2016-11-29 11:00:43 +00:00
|
|
|
|
|
|
|
it 'command name matches with output (string)' do
|
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'mysqld')
|
|
|
|
_(resource.to_s).must_equal 'Processes mysqld'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'command name matches with output (regex)' do
|
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', /mysqld/)
|
|
|
|
_(resource.to_s).must_equal 'Processes /mysqld/'
|
|
|
|
end
|
2017-06-04 20:03:04 +00:00
|
|
|
|
2017-09-05 12:36:55 +00:00
|
|
|
it 'handles labels with spaces' do
|
|
|
|
resource = MockLoader.new(:centos6).load_resource('processes', 'ntpd')
|
|
|
|
_(resource.entries.length).must_equal 1
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
|
|
|
label: '/usr/sbin/ntpd (enforce)',
|
|
|
|
pid: 14415,
|
|
|
|
cpu: '0.0',
|
|
|
|
mem: '0.5',
|
|
|
|
vsz: 110032,
|
|
|
|
rss: 5164,
|
|
|
|
tty: '?',
|
|
|
|
stat: 'Ssl',
|
|
|
|
start: '22:39:25',
|
|
|
|
time: '00:00:00',
|
|
|
|
user: 'ntp',
|
|
|
|
command: '/usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 112:117',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
2018-10-04 18:06:17 +00:00
|
|
|
it 'handles regular processes from busybox' do
|
|
|
|
resource = MockLoader.new(:alpine).load_resource('processes', '/some/other/coolprogram')
|
|
|
|
_(resource.entries.length).must_equal 1
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
|
|
|
label: nil,
|
|
|
|
pid: 5,
|
|
|
|
cpu: nil,
|
|
|
|
mem: nil,
|
|
|
|
vsz: 1528,
|
|
|
|
rss: 4,
|
|
|
|
tty: '136,0',
|
|
|
|
stat: 'R',
|
|
|
|
start: nil,
|
|
|
|
time: '0:00',
|
|
|
|
user: 'joe',
|
|
|
|
command: '/some/other/coolprogram',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'handles human readable megabytes from busybox' do
|
|
|
|
resource = MockLoader.new(:alpine).load_resource('processes', '/a/bigger/program')
|
|
|
|
_(resource.entries.length).must_equal 1
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
|
|
|
label: nil,
|
|
|
|
pid: 82,
|
|
|
|
cpu: nil,
|
|
|
|
mem: nil,
|
|
|
|
vsz: 24576,
|
|
|
|
rss: 2048,
|
|
|
|
tty: '?',
|
|
|
|
stat: 'S',
|
|
|
|
start: nil,
|
|
|
|
time: '3:50',
|
|
|
|
user: 'frank',
|
|
|
|
command: '/a/bigger/program',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'handles human readable gigabytes from busybox' do
|
|
|
|
resource = MockLoader.new(:alpine).load_resource('processes', '/the/biggest/program')
|
|
|
|
_(resource.entries.length).must_equal 1
|
|
|
|
_(resource.entries[0].to_h).must_equal({
|
|
|
|
label: nil,
|
|
|
|
pid: 83,
|
|
|
|
cpu: nil,
|
|
|
|
mem: nil,
|
|
|
|
vsz: 2726297,
|
|
|
|
rss: 1048576,
|
|
|
|
tty: '?',
|
|
|
|
stat: 'S',
|
|
|
|
start: nil,
|
|
|
|
time: '39:00',
|
|
|
|
user: 'tim',
|
|
|
|
command: '/the/biggest/program',
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
2017-06-04 20:03:04 +00:00
|
|
|
it 'command name matches with output (string)' do
|
|
|
|
resource = MockLoader.new(:windows).load_resource('processes', 'winlogon.exe')
|
|
|
|
_(resource.to_s).must_equal 'Processes winlogon.exe'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'retrieves the users and states as arrays on windows os' do
|
|
|
|
resource = MockLoader.new(:windows).load_resource('processes', 'winlogon.exe')
|
|
|
|
_(resource.users.sort).must_equal ['NT AUTHORITY\\SYSTEM']
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'process should exist' do
|
|
|
|
resource = MockLoader.new(:windows).load_resource('processes', 'winlogon.exe')
|
|
|
|
_(resource.exists?).must_equal true
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'process should_not exist' do
|
|
|
|
resource = MockLoader.new(:windows).load_resource('processes', 'unicorn.exe')
|
|
|
|
_(resource.exists?).must_equal false
|
|
|
|
end
|
2017-10-06 17:32:39 +00:00
|
|
|
|
|
|
|
it 'returns the correct command for busybox ps' do
|
|
|
|
resource = MockLoader.new(:alpine).load_resource('processes')
|
|
|
|
resource.expects(:busybox_ps?).returns(true)
|
|
|
|
resource.send(:ps_configuration_for_linux)[0].must_equal 'ps -o pid,vsz,rss,tty,stat,time,ruser,args'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns the correct command for non-busybox linux' do
|
|
|
|
resource = MockLoader.new(:centos7).load_resource('processes')
|
|
|
|
resource.expects(:busybox_ps?).returns(false)
|
|
|
|
resource.send(:ps_configuration_for_linux)[0].must_equal 'ps axo label,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,user:32,command'
|
|
|
|
end
|
2015-09-05 15:40:02 +00:00
|
|
|
end
|