mirror of
https://github.com/inspec/inspec
synced 2024-12-23 03:23:27 +00:00
98546984ae
* service resource: Fix no `.service` + systemd bug This modifies the `enabled?` check to fallback to `sysv_service` in the event that a `.service` file cannot be found. For example: On Debian 8.7 the stock apache2 package does not deploy a `.service` file but deploys a SysV style service. This causes `systemctl is-enabled` to fail when the service is in fact enabled. * Remove `cmd_stderr` and clean up `cmd_exit_1` * Clean up `stderr` assignment using ternary
392 lines
16 KiB
Ruby
392 lines
16 KiB
Ruby
# encoding: utf-8
|
|
# author: Christoph Hartmann
|
|
# author: Dominik Richter
|
|
|
|
require 'helper'
|
|
require 'inspec/resource'
|
|
require 'hashie'
|
|
|
|
describe 'Inspec::Resources::Service' do
|
|
let(:runlevels) { {0=>false, 1=>false, 2=>true, 3=>true, 4=>true, 5=>true, 6=>false} }
|
|
|
|
# windows
|
|
it 'verify service parsing' do
|
|
resource = MockLoader.new(:windows).load_resource('service', 'dhcp')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'windows'
|
|
_(resource.name).must_equal 'dhcp'
|
|
_(resource.description).must_equal 'DHCP Client'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.startmode). must_equal 'Auto'
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# ubuntu 14.04 with upstart
|
|
it 'verify ubuntu service parsing' do
|
|
resource = MockLoader.new(:ubuntu1404).load_resource('service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'upstart'
|
|
_(resource.name).must_equal 'ssh'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify ubuntu service parsing with default upstart_service' do
|
|
resource = MockLoader.new(:ubuntu1404).load_resource('upstart_service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'upstart'
|
|
_(resource.name).must_equal 'ssh'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.UnitFileState).must_be_nil
|
|
end
|
|
|
|
# ubuntu 15.04 with systemd
|
|
it 'verify ubuntu service parsing' do
|
|
resource = MockLoader.new(:ubuntu1504).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.SubState).must_equal 'running'
|
|
end
|
|
|
|
it 'verify ubuntu service parsing with default systemd_service' do
|
|
resource = MockLoader.new(:ubuntu1504).load_resource('systemd_service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# linux mint 17 with upstart
|
|
it 'verify mint service parsing' do
|
|
resource = MockLoader.new(:mint17).load_resource('service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'upstart'
|
|
_(resource.name).must_equal 'ssh'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify mint service parsing with default upstart_service' do
|
|
resource = MockLoader.new(:mint17).load_resource('upstart_service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'upstart'
|
|
_(resource.name).must_equal 'ssh'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.UnitFileState).must_be_nil
|
|
end
|
|
|
|
# mint 18 with systemd
|
|
it 'verify mint service parsing' do
|
|
resource = MockLoader.new(:mint18).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.SubState).must_equal 'running'
|
|
end
|
|
|
|
it 'verify mint service parsing with default systemd_service' do
|
|
resource = MockLoader.new(:mint18).load_resource('systemd_service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# centos 6 with sysv
|
|
it 'verify centos 6 service parsing' do
|
|
resource = MockLoader.new(:centos6).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'sysv'
|
|
_(resource.name).must_equal 'sshd'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.SubState).must_be_nil
|
|
end
|
|
|
|
it 'verify centos 6 service parsing with default sysv_service' do
|
|
resource = MockLoader.new(:centos6).load_resource('sysv_service', 'sshd')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'sysv'
|
|
_(resource.name).must_equal 'sshd'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# centos 7 with systemd
|
|
it 'verify centos 7 service parsing' do
|
|
resource = MockLoader.new(:centos7).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify centos 7 service parsing with systemd_service and service_ctl override' do
|
|
resource = MockLoader.new(:centos7).load_resource('systemd_service', 'sshd', '/path/to/systemctl')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'UnitFileState' => 'enabled', 'SubState' => 'running' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify centos 7 service parsing with static loaded service' do
|
|
resource = MockLoader.new(:centos7).load_resource('service', 'dbus')
|
|
params = Hashie::Mash.new({ 'Description' => 'D-Bus System Message Bus', 'Id' => 'dbus.service', 'LoadState' => 'loaded', 'Names' => 'messagebus.service dbus.service', 'SubState' => 'running', 'UnitFileState' => 'static' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'dbus.service'
|
|
_(resource.description).must_equal 'D-Bus System Message Bus'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
_(resource.params.UnitFileState).must_equal 'static'
|
|
end
|
|
|
|
# freebsd
|
|
it 'verify freebsd10 service parsing' do
|
|
resource = MockLoader.new(:freebsd10).load_resource('service', 'sendmail')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'bsd-init'
|
|
_(resource.name).must_equal 'sendmail'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify freebsd10 service parsing with default bsd_service' do
|
|
resource = MockLoader.new(:freebsd10).load_resource('bsd_service', 'sendmail')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'bsd-init'
|
|
_(resource.name).must_equal 'sendmail'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# arch linux with systemd
|
|
it 'verify arch linux service parsing' do
|
|
resource = MockLoader.new(:arch).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# coreos linux with systemd
|
|
it 'verify coreos linux service parsing' do
|
|
resource = MockLoader.new(:coreos).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# debian 7 with systemv
|
|
it 'verify debian 7 service parsing' do
|
|
resource = MockLoader.new(:debian7).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'sysv'
|
|
_(resource.name).must_equal 'sshd'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# debian 8 with systemd
|
|
it 'verify debian 8 service parsing' do
|
|
resource = MockLoader.new(:debian8).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({ 'ActiveState' => 'active', 'Description' => 'OpenSSH server daemon', 'Id' => 'sshd.service', 'LoadState' => 'loaded', 'Names' => 'sshd.service', 'SubState' => 'running', 'UnitFileState' => 'enabled' })
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'sshd.service'
|
|
_(resource.description).must_equal 'OpenSSH server daemon'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# debian 8 with systemd but no service file
|
|
it 'gets the correct service info when the `.service` file is missing' do
|
|
resource = MockLoader.new(:debian8).load_resource('service', 'apache2')
|
|
params = Hashie::Mash.new(
|
|
'ActiveState' => 'active',
|
|
'Description' => 'LSB: Apache2 web server',
|
|
'Id' => 'apache2.service',
|
|
'LoadState' => 'loaded',
|
|
'Names' => 'apache2.service',
|
|
'SubState' => 'running',
|
|
'UnitFileState' => ''
|
|
)
|
|
_(resource.type).must_equal 'systemd'
|
|
_(resource.name).must_equal 'apache2.service'
|
|
_(resource.description).must_equal 'LSB: Apache2 web server'
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# macos test
|
|
it 'verify mac osx service parsing' do
|
|
resource = MockLoader.new(:osx104).load_resource('service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'darwin'
|
|
_(resource.name).must_equal 'org.openbsd.ssh-agent'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify mac osx service parsing with not-running service' do
|
|
resource = MockLoader.new(:osx104).load_resource('service', 'FilesystemUI')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'darwin'
|
|
_(resource.name).must_equal 'com.apple.FilesystemUI'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal false
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
it 'verify mac osx service parsing with default launchd_service' do
|
|
resource = MockLoader.new(:osx104).load_resource('launchd_service', 'ssh')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'darwin'
|
|
_(resource.name).must_equal 'org.openbsd.ssh-agent'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# wrlinux
|
|
it 'verify wrlinux service parsing' do
|
|
resource = MockLoader.new(:wrlinux).load_resource('service', 'sshd')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.type).must_equal 'sysv'
|
|
_(resource.name).must_equal 'sshd'
|
|
_(resource.description).must_be_nil
|
|
_(resource.installed?).must_equal true
|
|
_(resource.enabled?).must_equal true
|
|
_(resource.running?).must_equal true
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
|
|
# unknown OS
|
|
it 'verify service handling on unsupported os' do
|
|
resource = MockLoader.new(:undefined).load_resource('service', 'dhcp')
|
|
params = Hashie::Mash.new({})
|
|
_(resource.installed?).must_equal false
|
|
_(resource.description).must_be_nil
|
|
_(resource.params).must_equal params
|
|
end
|
|
|
|
# runlevel detection
|
|
describe 'runlevels on centos 6 (system V)' do
|
|
let(:service) { MockLoader.new(:centos6).load_resource('service', 'sshd') }
|
|
|
|
it 'grabs all runlevels' do
|
|
service.runlevels.keys.must_equal [0, 1, 2, 3, 4, 5, 6]
|
|
end
|
|
|
|
it 'grabs runlevels via filter nil' do
|
|
service.runlevels(nil).keys.must_equal [0, 1, 2, 3, 4, 5, 6]
|
|
end
|
|
|
|
it 'grabs runlevels by number' do
|
|
service.runlevels(3).keys.must_equal [3]
|
|
end
|
|
|
|
it 'grabs runlevels by multiple numbers' do
|
|
service.runlevels(3, 4, 8).keys.must_equal [3, 4]
|
|
end
|
|
|
|
it 'grabs runlevels via regex' do
|
|
service.runlevels(/[5-9]/).keys.must_equal [5, 6]
|
|
end
|
|
|
|
it 'checks enabled true if all services are enabled' do
|
|
service.runlevels(2, 4).enabled?.must_equal true
|
|
end
|
|
|
|
it 'checks enabled false if some services are not enabled' do
|
|
service.runlevels(1, 4).enabled?.must_equal false
|
|
end
|
|
|
|
it 'checks disabled true if all services are disabled' do
|
|
service.runlevels(0, 1).disabled?.must_equal true
|
|
end
|
|
|
|
it 'checks disabled false if some services are not disabled' do
|
|
service.runlevels(0, 4).enabled?.must_equal false
|
|
end
|
|
end
|
|
end
|