inspec 0.30.0 → 0.31.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -2
- data/Gemfile +2 -1
- data/docs/cli.rst +1 -17
- data/docs/resources.rst +128 -0
- data/docs/shell.rst +130 -0
- data/inspec.gemspec +3 -4
- data/lib/bundles/inspec-compliance/.kitchen.yml +0 -1
- data/lib/bundles/inspec-compliance/README.md +8 -3
- data/lib/bundles/inspec-compliance/api.rb +21 -6
- data/lib/bundles/inspec-compliance/bootstrap.sh +13 -9
- data/lib/bundles/inspec-compliance/cli.rb +23 -19
- data/lib/bundles/inspec-compliance/target.rb +1 -0
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +42 -5
- data/lib/bundles/inspec-init/cli.rb +9 -0
- data/lib/bundles/inspec-supermarket/cli.rb +9 -0
- data/lib/bundles/inspec-supermarket/target.rb +2 -1
- data/lib/fetchers/local.rb +5 -2
- data/lib/fetchers/url.rb +1 -0
- data/lib/inspec/base_cli.rb +2 -1
- data/lib/inspec/cli.rb +14 -5
- data/lib/inspec/dependencies/dependency_set.rb +38 -0
- data/lib/inspec/dependencies/requirement.rb +103 -0
- data/lib/inspec/{dependencies.rb → dependencies/resolver.rb} +13 -132
- data/lib/inspec/dependencies/vendor_index.rb +98 -0
- data/lib/inspec/plugins/source_reader.rb +4 -0
- data/lib/inspec/profile.rb +2 -2
- data/lib/inspec/resource.rb +2 -0
- data/lib/inspec/runner.rb +13 -1
- data/lib/inspec/runner_mock.rb +4 -0
- data/lib/inspec/runner_rspec.rb +6 -2
- data/lib/inspec/shell.rb +22 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/iis_site.rb +107 -0
- data/lib/resources/port.rb +11 -4
- data/lib/resources/ssh_conf.rb +10 -2
- data/lib/resources/ssl.rb +94 -0
- data/lib/resources/xinetd.rb +11 -2
- data/lib/utils/parser.rb +6 -1
- metadata +17 -561
- data/lib/utils/hash_map.rb +0 -37
- data/tasks/maintainers.rb +0 -213
- data/test/bench/startup/startup.flat.txt +0 -1005
- data/test/bench/startup/startup.graph.html +0 -71958
- data/test/bench/startup/startup.grind.dat +0 -101602
- data/test/bench/startup/startup.stack.html +0 -24516
- data/test/bench/startup.flat.txt +0 -998
- data/test/bench/startup.graph.html +0 -71420
- data/test/bench/startup.grind.dat +0 -103554
- data/test/bench/startup.stack.html +0 -25015
- data/test/cookbooks/os_prepare/attributes/default.rb +0 -2
- data/test/cookbooks/os_prepare/files/empty.iso +0 -0
- data/test/cookbooks/os_prepare/files/example.csv +0 -7
- data/test/cookbooks/os_prepare/files/example.ini +0 -6
- data/test/cookbooks/os_prepare/files/example.json +0 -12
- data/test/cookbooks/os_prepare/files/example.yml +0 -7
- data/test/cookbooks/os_prepare/metadata.rb +0 -13
- data/test/cookbooks/os_prepare/recipes/_runit_service_centos.rb +0 -34
- data/test/cookbooks/os_prepare/recipes/_upstart_service_centos.rb +0 -25
- data/test/cookbooks/os_prepare/recipes/apache.rb +0 -14
- data/test/cookbooks/os_prepare/recipes/apt.rb +0 -20
- data/test/cookbooks/os_prepare/recipes/auditctl.rb +0 -8
- data/test/cookbooks/os_prepare/recipes/default.rb +0 -29
- data/test/cookbooks/os_prepare/recipes/file.rb +0 -46
- data/test/cookbooks/os_prepare/recipes/iptables.rb +0 -13
- data/test/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb +0 -34
- data/test/cookbooks/os_prepare/recipes/mount.rb +0 -33
- data/test/cookbooks/os_prepare/recipes/package.rb +0 -25
- data/test/cookbooks/os_prepare/recipes/postgres.rb +0 -20
- data/test/cookbooks/os_prepare/recipes/prep_container.rb +0 -15
- data/test/cookbooks/os_prepare/recipes/registry_key.rb +0 -87
- data/test/cookbooks/os_prepare/recipes/service.rb +0 -19
- data/test/cookbooks/os_prepare/templates/default/sv-default-svlog-run.erb +0 -2
- data/test/docker_run.rb +0 -162
- data/test/docker_test.rb +0 -58
- data/test/functional/helper.rb +0 -37
- data/test/functional/inheritance_test.rb +0 -62
- data/test/functional/inspec_archive_test.rb +0 -80
- data/test/functional/inspec_compliance_test.rb +0 -61
- data/test/functional/inspec_exec_json_test.rb +0 -122
- data/test/functional/inspec_exec_jsonmin_test.rb +0 -59
- data/test/functional/inspec_exec_test.rb +0 -123
- data/test/functional/inspec_json_profile_test.rb +0 -103
- data/test/functional/inspec_test.rb +0 -91
- data/test/helper.rb +0 -329
- data/test/integration/default/_debug_spec.rb +0 -8
- data/test/integration/default/apache_conf_spec.rb +0 -21
- data/test/integration/default/apt_spec.rb +0 -37
- data/test/integration/default/auditd_rules_spec.rb +0 -32
- data/test/integration/default/cmp_matcher_spec.rb +0 -115
- data/test/integration/default/csv_spec.rb +0 -11
- data/test/integration/default/etc_group_spec.rb +0 -29
- data/test/integration/default/file_spec.rb +0 -195
- data/test/integration/default/group_spec.rb +0 -59
- data/test/integration/default/ini_spec.rb +0 -11
- data/test/integration/default/iptables_spec.rb +0 -29
- data/test/integration/default/json_spec.rb +0 -11
- data/test/integration/default/kernel_module_spec.rb +0 -23
- data/test/integration/default/kernel_parameter_spec.rb +0 -60
- data/test/integration/default/mount_spec.rb +0 -19
- data/test/integration/default/os_spec.rb +0 -13
- data/test/integration/default/package_spec.rb +0 -30
- data/test/integration/default/port_spec.rb +0 -27
- data/test/integration/default/postgres_session_spec.rb +0 -13
- data/test/integration/default/powershell_spec.rb +0 -42
- data/test/integration/default/registry_key_spec.rb +0 -109
- data/test/integration/default/secpol_spec.rb +0 -11
- data/test/integration/default/service_spec.rb +0 -128
- data/test/integration/default/user_spec.rb +0 -96
- data/test/integration/default/vbscript_spec.rb +0 -22
- data/test/integration/default/wmi_spec.rb +0 -66
- data/test/integration/default/yaml_spec.rb +0 -11
- data/test/resource/command_test.rb +0 -33
- data/test/resource/dsl_test.rb +0 -45
- data/test/resource/file_test.rb +0 -146
- data/test/resource/ssh_config.rb +0 -9
- data/test/resource/sshd_config.rb +0 -9
- data/test/test-extra.yaml +0 -11
- data/test/test.yaml +0 -11
- data/test/unit/control_test.rb +0 -58
- data/test/unit/fetchers/local_test.rb +0 -67
- data/test/unit/fetchers/mock_test.rb +0 -43
- data/test/unit/fetchers/tar_test.rb +0 -36
- data/test/unit/fetchers/url_test.rb +0 -152
- data/test/unit/fetchers/zip_test.rb +0 -36
- data/test/unit/fetchers_test.rb +0 -65
- data/test/unit/metadata_test.rb +0 -137
- data/test/unit/mock/cmd/$env-PATH +0 -1
- data/test/unit/mock/cmd/Get-NetAdapter +0 -24
- data/test/unit/mock/cmd/GetUserAccount +0 -33
- data/test/unit/mock/cmd/GetWin32Group +0 -23
- data/test/unit/mock/cmd/Resolve-DnsName +0 -26
- data/test/unit/mock/cmd/Test-NetConnection +0 -4
- data/test/unit/mock/cmd/auditctl +0 -3
- data/test/unit/mock/cmd/auditctl-legacy +0 -7
- data/test/unit/mock/cmd/auditctl-s +0 -8
- data/test/unit/mock/cmd/auditpol +0 -2
- data/test/unit/mock/cmd/brew-info-jq +0 -1
- data/test/unit/mock/cmd/chage-l-root +0 -7
- data/test/unit/mock/cmd/dpkg-s-curl +0 -21
- data/test/unit/mock/cmd/dscl +0 -5
- data/test/unit/mock/cmd/env +0 -1
- data/test/unit/mock/cmd/etc-apt +0 -7
- data/test/unit/mock/cmd/find-apache2-conf-enabled +0 -1
- data/test/unit/mock/cmd/find-apache2-ports-conf +0 -1
- data/test/unit/mock/cmd/find-etc-rc-d-name-S +0 -12
- data/test/unit/mock/cmd/find-net-interface +0 -9
- data/test/unit/mock/cmd/find-xinetd.d +0 -2
- data/test/unit/mock/cmd/gem-list-local-a-q-rubocop +0 -1
- data/test/unit/mock/cmd/get-net-tcpconnection +0 -24
- data/test/unit/mock/cmd/get-netadapter-binding-bridge +0 -4
- data/test/unit/mock/cmd/get-package-firefox +0 -30
- data/test/unit/mock/cmd/get-package-ruby +0 -18
- data/test/unit/mock/cmd/get-service-dhcp +0 -10
- data/test/unit/mock/cmd/get-windows-feature +0 -7
- data/test/unit/mock/cmd/get-wmiobject +0 -9
- data/test/unit/mock/cmd/getent-hosts-example.com +0 -1
- data/test/unit/mock/cmd/getent-passwd-jfolmer +0 -1
- data/test/unit/mock/cmd/getent-passwd-root +0 -1
- data/test/unit/mock/cmd/hpux-netstat-inet +0 -10
- data/test/unit/mock/cmd/hpux-netstat-inet6 +0 -11
- data/test/unit/mock/cmd/id-chartmann +0 -1
- data/test/unit/mock/cmd/id-jfolmer +0 -1
- data/test/unit/mock/cmd/id-root +0 -1
- data/test/unit/mock/cmd/initctl--version +0 -5
- data/test/unit/mock/cmd/initctl-show-config-ssh +0 -3
- data/test/unit/mock/cmd/initctl-status-ssh +0 -1
- data/test/unit/mock/cmd/iptables-s +0 -6
- data/test/unit/mock/cmd/launchctl-list +0 -3
- data/test/unit/mock/cmd/logins-x +0 -4
- data/test/unit/mock/cmd/ls-1-etc-init.d +0 -2
- data/test/unit/mock/cmd/ls-sys-class-net-br +0 -2
- data/test/unit/mock/cmd/lsmod +0 -2
- data/test/unit/mock/cmd/lsof-nP-i-FpctPn +0 -63
- data/test/unit/mock/cmd/mount +0 -1
- data/test/unit/mock/cmd/mount-multiple +0 -2
- data/test/unit/mock/cmd/netstat-an.utf8 +0 -13
- data/test/unit/mock/cmd/netstat-tulpen +0 -6
- data/test/unit/mock/cmd/npm-ls-g--json-bower +0 -9
- data/test/unit/mock/cmd/pacman-qi-curl +0 -21
- data/test/unit/mock/cmd/ping-example.com +0 -6
- data/test/unit/mock/cmd/pip-show-jinja2 +0 -11
- data/test/unit/mock/cmd/pkg-info-system-file-system-zfs +0 -8
- data/test/unit/mock/cmd/pkginfo-l-SUNWzfsr +0 -7
- data/test/unit/mock/cmd/ps-aux +0 -5
- data/test/unit/mock/cmd/ps-auxZ +0 -3
- data/test/unit/mock/cmd/pw-usershow-root-7 +0 -1
- data/test/unit/mock/cmd/reg_schedule +0 -6
- data/test/unit/mock/cmd/rpm-qia-curl +0 -24
- data/test/unit/mock/cmd/s11-netstat-an-finet-finet6 +0 -32
- data/test/unit/mock/cmd/sbin_sysctl +0 -1
- data/test/unit/mock/cmd/secedit-export +0 -7
- data/test/unit/mock/cmd/service-e +0 -2
- data/test/unit/mock/cmd/service-sendmail-onestatus +0 -3
- data/test/unit/mock/cmd/service-sshd-status +0 -1
- data/test/unit/mock/cmd/sockstat +0 -5
- data/test/unit/mock/cmd/success +0 -0
- data/test/unit/mock/cmd/swlist-l-product +0 -1
- data/test/unit/mock/cmd/systemctl-show-all-dbus +0 -6
- data/test/unit/mock/cmd/systemctl-show-all-sshd +0 -7
- data/test/unit/mock/cmd/win32_product +0 -8
- data/test/unit/mock/cmd/yum-repolist-all +0 -52
- data/test/unit/mock/files/apache2.conf +0 -14
- data/test/unit/mock/files/auditd.conf +0 -4
- data/test/unit/mock/files/bond0 +0 -37
- data/test/unit/mock/files/etcgroup +0 -3
- data/test/unit/mock/files/example.csv +0 -6
- data/test/unit/mock/files/grub.conf +0 -21
- data/test/unit/mock/files/inetd.conf +0 -2
- data/test/unit/mock/files/kitchen.yml +0 -7
- data/test/unit/mock/files/limits.conf +0 -5
- data/test/unit/mock/files/login.defs +0 -5
- data/test/unit/mock/files/mysql.conf +0 -8
- data/test/unit/mock/files/mysql2.conf +0 -2
- data/test/unit/mock/files/ntp.conf +0 -5
- data/test/unit/mock/files/passwd +0 -2
- data/test/unit/mock/files/policyfile.lock.json +0 -12
- data/test/unit/mock/files/ports.conf +0 -6
- data/test/unit/mock/files/rootwrap.conf +0 -7
- data/test/unit/mock/files/serve-cgi-bin.conf +0 -20
- data/test/unit/mock/files/shadow +0 -2
- data/test/unit/mock/files/ssh_config +0 -5
- data/test/unit/mock/files/sshd_config +0 -7
- data/test/unit/mock/files/sysctl.conf +0 -7
- data/test/unit/mock/files/xinetd.conf +0 -9
- data/test/unit/mock/files/xinetd.d/.gitkeep +0 -0
- data/test/unit/mock/files/xinetd.d_chargen-dgram +0 -9
- data/test/unit/mock/files/xinetd.d_chargen-stream +0 -9
- data/test/unit/mock/profiles/complete-metadata/inspec.yml +0 -7
- data/test/unit/mock/profiles/complete-profile/controls/filesystem_spec.rb +0 -16
- data/test/unit/mock/profiles/complete-profile/inspec.yml +0 -10
- data/test/unit/mock/profiles/complete-profile/libraries/testlib.rb +0 -1
- data/test/unit/mock/profiles/empty-metadata/inspec.yml +0 -0
- data/test/unit/mock/profiles/legacy-complete-metadata/metadata.rb +0 -7
- data/test/unit/mock/profiles/legacy-complete-metadata/test/.gitkeep +0 -0
- data/test/unit/mock/profiles/legacy-empty-metadata/controls/.gitkeep +0 -0
- data/test/unit/mock/profiles/legacy-empty-metadata/metadata.rb +0 -0
- data/test/unit/mock/profiles/legacy-simple-metadata/metadata.rb +0 -1
- data/test/unit/mock/profiles/legacy-simple-metadata/test/.gitkeep +0 -0
- data/test/unit/mock/profiles/library/controls/filesystem_spec.rb +0 -7
- data/test/unit/mock/profiles/library/inspec.yml +0 -10
- data/test/unit/mock/profiles/library/libraries/gordonlib.rb +0 -2
- data/test/unit/mock/profiles/library/libraries/testlib.rb +0 -12
- data/test/unit/mock/profiles/resource-tiny/inspec.yml +0 -10
- data/test/unit/mock/profiles/resource-tiny/libraries/resource.rb +0 -3
- data/test/unit/mock/profiles/simple-metadata/inspec.yml +0 -1
- data/test/unit/mock/profiles/skippy-profile-os/controls/one.rb +0 -3
- data/test/unit/mock/profiles/skippy-profile-os/inspec.yml +0 -5
- data/test/unit/mock/profiles/spec_only/specfile.rb +0 -11
- data/test/unit/mock/profiles/supported_inspec/inspec.yml +0 -2
- data/test/unit/mock/profiles/unsupported_inspec/inspec.yml +0 -2
- data/test/unit/objects_test.rb +0 -65
- data/test/unit/plugin_test.rb +0 -44
- data/test/unit/plugins/resource_test.rb +0 -60
- data/test/unit/profile_context_test.rb +0 -345
- data/test/unit/profile_test.rb +0 -252
- data/test/unit/resources/apache_conf_test.rb +0 -31
- data/test/unit/resources/apt_test.rb +0 -46
- data/test/unit/resources/audit_policy_test.rb +0 -13
- data/test/unit/resources/auditd_conf_test.rb +0 -15
- data/test/unit/resources/auditd_rules_test.rb +0 -91
- data/test/unit/resources/bash_test.rb +0 -29
- data/test/unit/resources/bond_test.rb +0 -24
- data/test/unit/resources/bridge_test.rb +0 -56
- data/test/unit/resources/csv_test.rb +0 -35
- data/test/unit/resources/etc_group_test.rb +0 -37
- data/test/unit/resources/file_test.rb +0 -202
- data/test/unit/resources/gem_test.rb +0 -20
- data/test/unit/resources/group_test.rb +0 -96
- data/test/unit/resources/grub_conf_test.rb +0 -29
- data/test/unit/resources/host_test.rb +0 -38
- data/test/unit/resources/inetd_conf_test.rb +0 -15
- data/test/unit/resources/ini_test.rb +0 -16
- data/test/unit/resources/interface_test.rb +0 -54
- data/test/unit/resources/iptables_test.rb +0 -35
- data/test/unit/resources/json_test.rb +0 -36
- data/test/unit/resources/kernel_module_test.rb +0 -23
- data/test/unit/resources/kernel_parameter_test.rb +0 -13
- data/test/unit/resources/limits_conf_test.rb +0 -14
- data/test/unit/resources/login_def_test.rb +0 -16
- data/test/unit/resources/mount_test.rb +0 -26
- data/test/unit/resources/mysql_conf_test.rb +0 -14
- data/test/unit/resources/npm_test.rb +0 -20
- data/test/unit/resources/ntp_conf_test.rb +0 -16
- data/test/unit/resources/oneget_test.rb +0 -45
- data/test/unit/resources/os_env_test.rb +0 -18
- data/test/unit/resources/os_test.rb +0 -40
- data/test/unit/resources/package_test.rb +0 -87
- data/test/unit/resources/parse_config_test.rb +0 -26
- data/test/unit/resources/passwd_test.rb +0 -111
- data/test/unit/resources/pip_test.rb +0 -15
- data/test/unit/resources/port_test.rb +0 -165
- data/test/unit/resources/powershell_test.rb +0 -32
- data/test/unit/resources/processes_test.rb +0 -72
- data/test/unit/resources/registry_key_test.rb +0 -18
- data/test/unit/resources/security_policy_test.rb +0 -16
- data/test/unit/resources/service_test.rb +0 -305
- data/test/unit/resources/shadow_test.rb +0 -67
- data/test/unit/resources/ssh_conf_test.rb +0 -33
- data/test/unit/resources/user_test.rb +0 -124
- data/test/unit/resources/vbscript_test.rb +0 -18
- data/test/unit/resources/windows_feature.rb +0 -17
- data/test/unit/resources/wmi_test.rb +0 -42
- data/test/unit/resources/xinetd_test.rb +0 -60
- data/test/unit/resources/yaml_test.rb +0 -34
- data/test/unit/resources/yum_test.rb +0 -68
- data/test/unit/shell_detector_test.rb +0 -78
- data/test/unit/source_reader_test.rb +0 -17
- data/test/unit/source_readers/flat_test.rb +0 -61
- data/test/unit/source_readers/inspec_test.rb +0 -38
- data/test/unit/utils/filter_array_test.rb +0 -59
- data/test/unit/utils/filter_table_test.rb +0 -177
- data/test/unit/utils/find_files_test.rb +0 -23
- data/test/unit/utils/passwd_parser_test.rb +0 -32
- data/test/unit/utils/simpleconfig_test.rb +0 -80
- data/test/unit/utils/solaris_netstat_parser.rb +0 -124
@@ -1,103 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# author: Dominik Richter
|
3
|
-
# author: Christoph Hartmann
|
4
|
-
|
5
|
-
require 'functional/helper'
|
6
|
-
|
7
|
-
describe 'inspec json' do
|
8
|
-
include FunctionalHelper
|
9
|
-
|
10
|
-
it 'read the profile json' do
|
11
|
-
out = inspec('json ' + example_profile)
|
12
|
-
out.stderr.must_equal ''
|
13
|
-
out.exit_status.must_equal 0
|
14
|
-
s = out.stdout
|
15
|
-
JSON.load(s).must_be_kind_of Hash
|
16
|
-
end
|
17
|
-
|
18
|
-
describe 'json profile data' do
|
19
|
-
let(:json) { JSON.load(inspec('json ' + example_profile).stdout) }
|
20
|
-
|
21
|
-
it 'has a name' do
|
22
|
-
json['name'].must_equal 'profile'
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'has a title' do
|
26
|
-
json['title'].must_equal 'InSpec Example Profile'
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'has a summary' do
|
30
|
-
json['summary'].must_equal 'Demonstrates the use of InSpec Compliance Profile'
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'has a version' do
|
34
|
-
json['version'].must_equal '1.0.0'
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'has a maintainer' do
|
38
|
-
json['maintainer'].must_equal 'Chef Software, Inc.'
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'has a copyright' do
|
42
|
-
json['copyright'].must_equal 'Chef Software, Inc.'
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'has controls' do
|
46
|
-
json['controls'].length.must_equal 4
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'a control' do
|
50
|
-
let(:control) { json['controls']['tmp-1.0'] }
|
51
|
-
|
52
|
-
it 'has a title' do
|
53
|
-
control['title'].must_equal 'Create /tmp directory'
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'has a description' do
|
57
|
-
control['desc'].must_equal 'An optional description...'
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'has an impact' do
|
61
|
-
control['impact'].must_equal 0.7
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'has a ref' do
|
65
|
-
control['refs'].must_equal([{'ref' => 'Document A-12', 'url' => 'http://...'}])
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'has a source location' do
|
69
|
-
loc = File.join(example_profile, '/controls/example.rb')
|
70
|
-
control['source_location']['ref'].must_equal loc
|
71
|
-
control['source_location']['line'].must_equal 8
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'has a the source code' do
|
75
|
-
control['code'].must_match /\Acontrol \"tmp-1.0\" do.*end\n\Z/m
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe 'filter with --controls' do
|
81
|
-
let(:out) { inspec('json ' + example_profile + ' --controls tmp-1.0') }
|
82
|
-
|
83
|
-
it 'still succeeds' do
|
84
|
-
out.stderr.must_equal ''
|
85
|
-
out.exit_status.must_equal 0
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'only has one control included' do
|
89
|
-
json = JSON.load(out.stdout)
|
90
|
-
json['controls'].keys.must_equal %w{tmp-1.0}
|
91
|
-
json['groups'].keys.must_equal %w{controls/example.rb}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'writes json to file' do
|
96
|
-
out = inspec('json ' + example_profile + ' --output ' + dst.path)
|
97
|
-
out.stderr.must_equal ''
|
98
|
-
out.exit_status.must_equal 0
|
99
|
-
hm = JSON.load(File.read(dst.path))
|
100
|
-
hm['name'].must_equal 'profile'
|
101
|
-
hm['controls'].length.must_equal 4
|
102
|
-
end
|
103
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# author: Dominik Richter
|
3
|
-
# author: Christoph Hartmann
|
4
|
-
|
5
|
-
require 'functional/helper'
|
6
|
-
|
7
|
-
describe 'command tests' do
|
8
|
-
include FunctionalHelper
|
9
|
-
|
10
|
-
describe 'detect with json' do
|
11
|
-
it 'runs well on all nodes' do
|
12
|
-
out = inspec('detect --format json')
|
13
|
-
out.stderr.must_equal ''
|
14
|
-
out.exit_status.must_equal 0
|
15
|
-
j = JSON.load(out.stdout)
|
16
|
-
j.keys.must_include 'name'
|
17
|
-
j.keys.must_include 'family'
|
18
|
-
j.keys.must_include 'arch'
|
19
|
-
j.keys.must_include 'release'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'detect without json' do
|
24
|
-
it 'runs well on all nodes' do
|
25
|
-
out = inspec('detect')
|
26
|
-
out.stderr.must_equal ''
|
27
|
-
out.exit_status.must_equal 0
|
28
|
-
std = out.stdout
|
29
|
-
std.must_include "\n== Operating System Details\n\n"
|
30
|
-
std.must_include "\nName: \e[0;36m"
|
31
|
-
std.must_include "\nFamily: \e[0;36m"
|
32
|
-
std.must_include "\nArch: \e[0;36m"
|
33
|
-
std.must_include "\nRelease: \e[0;36m"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe 'cmd' do
|
38
|
-
it 'can run arbitrary ruby' do
|
39
|
-
x = rand
|
40
|
-
y = rand
|
41
|
-
out = inspec("shell -c '#{x} + #{y}'")
|
42
|
-
out.stderr.must_equal ''
|
43
|
-
out.exit_status.must_equal 0
|
44
|
-
j = JSON.load(out.stdout)
|
45
|
-
j.must_equal x+y
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'retrieves resources in JSON' do
|
49
|
-
out = inspec("shell -c 'os.params'")
|
50
|
-
out.stderr.must_equal ''
|
51
|
-
out.exit_status.must_equal 0
|
52
|
-
j = JSON.load(out.stdout)
|
53
|
-
j.keys.must_include 'name'
|
54
|
-
j.keys.must_include 'family'
|
55
|
-
j.keys.must_include 'arch'
|
56
|
-
j.keys.must_include 'release'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'version' do
|
61
|
-
it 'provides the version number on stdout' do
|
62
|
-
out = inspec('version')
|
63
|
-
out.stderr.must_equal ''
|
64
|
-
out.exit_status.must_equal 0
|
65
|
-
out.stdout.must_equal Inspec::VERSION+"\n"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe 'shell' do
|
70
|
-
it 'provides a help command' do
|
71
|
-
out = CMD.run_command("echo \"help\nexit\" | #{exec_inspec} shell")
|
72
|
-
out.exit_status.must_equal 0
|
73
|
-
out.stdout.must_include 'Available commands:'
|
74
|
-
out.stdout.must_include 'You are currently running on:'
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'exposes all resources' do
|
78
|
-
out = CMD.run_command("echo \"os\nexit\" | #{exec_inspec} shell")
|
79
|
-
out.exit_status.must_equal 0
|
80
|
-
out.stdout.must_match /^=> .*Operating.* .*System.* .*Detection.*$/
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe 'check' do
|
85
|
-
it 'verifies that a profile is ok' do
|
86
|
-
out = inspec('check ' + example_profile)
|
87
|
-
out.stdout.must_match /Valid.*true/
|
88
|
-
out.exit_status.must_equal 0
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
data/test/helper.rb
DELETED
@@ -1,329 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# author: Dominik Richter
|
3
|
-
# author: Christoph Hartmann
|
4
|
-
|
5
|
-
require 'minitest/autorun'
|
6
|
-
require 'minitest/spec'
|
7
|
-
require 'mocha/setup'
|
8
|
-
|
9
|
-
require 'simplecov'
|
10
|
-
SimpleCov.start do
|
11
|
-
add_filter '/test/'
|
12
|
-
add_group 'Resources', 'lib/resources'
|
13
|
-
add_group 'Matchers', 'lib/matchers'
|
14
|
-
add_group 'Backends', 'lib/inspec/backend'
|
15
|
-
end
|
16
|
-
|
17
|
-
require 'fileutils'
|
18
|
-
require 'pathname'
|
19
|
-
require 'tempfile'
|
20
|
-
require 'tmpdir'
|
21
|
-
require 'zip'
|
22
|
-
|
23
|
-
require 'inspec/base_cli'
|
24
|
-
require 'inspec/version'
|
25
|
-
require 'inspec/fetcher'
|
26
|
-
require 'inspec/source_reader'
|
27
|
-
require 'inspec/resource'
|
28
|
-
require 'inspec/backend'
|
29
|
-
require 'inspec/profile'
|
30
|
-
require 'inspec/runner'
|
31
|
-
require 'inspec/runner_mock'
|
32
|
-
require 'fetchers/mock'
|
33
|
-
|
34
|
-
require 'train'
|
35
|
-
CMD = Train.create('local').connection
|
36
|
-
TMP_CACHE = {}
|
37
|
-
|
38
|
-
class MockLoader
|
39
|
-
# collects emulation operating systems
|
40
|
-
OPERATING_SYSTEMS = {
|
41
|
-
arch: { name: 'arch', family: 'arch', release: nil, arch: nil },
|
42
|
-
centos5: { name: 'centos', family: 'redhat', release: '5.11', arch: 'x86_64' },
|
43
|
-
centos6: { name: 'centos', family: 'redhat', release: '6.6', arch: 'x86_64' },
|
44
|
-
centos7: { name: 'centos', family: 'redhat', release: '7.1.1503', arch: 'x86_64' },
|
45
|
-
debian6: { name: 'debian', family: 'debian', release: '6', arch: 'x86_64' },
|
46
|
-
debian7: { name: 'debian', family: 'debian', release: '7', arch: 'x86_64' },
|
47
|
-
debian8: { name: 'debian', family: 'debian', release: '8', arch: 'x86_64' },
|
48
|
-
freebsd9: { name: 'freebsd', family: 'freebsd', release: '9', arch: 'amd64' },
|
49
|
-
freebsd10: { name: 'freebsd', family: 'freebsd', release: '10', arch: 'amd64' },
|
50
|
-
osx104: { name: 'mac_os_x',family: 'darwin', release: '10.10.4', arch: nil },
|
51
|
-
ubuntu1204: { name: 'ubuntu', family: 'debian', release: '12.04', arch: 'x86_64' },
|
52
|
-
ubuntu1404: { name: 'ubuntu', family: 'debian', release: '14.04', arch: 'x86_64' },
|
53
|
-
ubuntu1504: { name: 'ubuntu', family: 'debian', release: '15.04', arch: 'x86_64' },
|
54
|
-
windows: { name: 'windows', family: 'windows', release: '6.2.9200', arch: 'x86_64' },
|
55
|
-
wrlinux: { name: 'wrlinux', family: 'redhat', release: '7.0(3)I2(2)', arch: 'x86_64' },
|
56
|
-
solaris11: { name: "solaris", family: 'solaris', release: '11', arch: 'i386'},
|
57
|
-
solaris10: { name: "solaris", family: 'solaris', release: '10', arch: 'i386'},
|
58
|
-
hpux: { name: 'hpux', family: 'hpux', release: 'B.11.31', arch: 'ia64'},
|
59
|
-
undefined: { name: nil, family: nil, release: nil, arch: nil },
|
60
|
-
}
|
61
|
-
|
62
|
-
# pass the os identifier to emulate a specific operating system
|
63
|
-
def initialize(os = nil)
|
64
|
-
# selects operating system
|
65
|
-
@os = OPERATING_SYSTEMS[os || :ubuntu1404]
|
66
|
-
end
|
67
|
-
|
68
|
-
def backend
|
69
|
-
return @backend if defined?(@backend)
|
70
|
-
scriptpath = ::File.realpath(::File.dirname(__FILE__))
|
71
|
-
|
72
|
-
# create mock backend
|
73
|
-
@backend = Inspec::Backend.create({ backend: :mock })
|
74
|
-
mock = @backend.backend
|
75
|
-
|
76
|
-
# set os emulation
|
77
|
-
mock.mock_os(@os)
|
78
|
-
|
79
|
-
# create all mock files
|
80
|
-
local = Train.create('local').connection
|
81
|
-
mockfile = lambda { |x|
|
82
|
-
path = ::File.join(scriptpath, '/unit/mock/files', x)
|
83
|
-
local.file(path)
|
84
|
-
}
|
85
|
-
mockdir = lambda { |x|
|
86
|
-
md = Object.new
|
87
|
-
|
88
|
-
class << md
|
89
|
-
attr_accessor :isdir
|
90
|
-
end
|
91
|
-
md.isdir = x
|
92
|
-
|
93
|
-
def md.directory?
|
94
|
-
isdir
|
95
|
-
end
|
96
|
-
md
|
97
|
-
}
|
98
|
-
|
99
|
-
mock.files = {
|
100
|
-
'/proc/net/bonding/bond0' => mockfile.call('bond0'),
|
101
|
-
'/etc/ssh/ssh_config' => mockfile.call('ssh_config'),
|
102
|
-
'/etc/ssh/sshd_config' => mockfile.call('sshd_config'),
|
103
|
-
'/etc/passwd' => mockfile.call('passwd'),
|
104
|
-
'/etc/shadow' => mockfile.call('shadow'),
|
105
|
-
'/etc/ntp.conf' => mockfile.call('ntp.conf'),
|
106
|
-
'/etc/login.defs' => mockfile.call('login.defs'),
|
107
|
-
'/etc/security/limits.conf' => mockfile.call('limits.conf'),
|
108
|
-
'/etc/inetd.conf' => mockfile.call('inetd.conf'),
|
109
|
-
'/etc/group' => mockfile.call('etcgroup'),
|
110
|
-
'/etc/grub.conf' => mockfile.call('grub.conf'),
|
111
|
-
'/etc/audit/auditd.conf' => mockfile.call('auditd.conf'),
|
112
|
-
'/etc/mysql/my.cnf' => mockfile.call('mysql.conf'),
|
113
|
-
'/etc/mysql/mysql2.conf' => mockfile.call('mysql2.conf'),
|
114
|
-
'kitchen.yml' => mockfile.call('kitchen.yml'),
|
115
|
-
'example.csv' => mockfile.call('example.csv'),
|
116
|
-
'policyfile.lock.json' => mockfile.call('policyfile.lock.json'),
|
117
|
-
'/sys/class/net/br0/bridge' => mockdir.call(true),
|
118
|
-
'rootwrap.conf' => mockfile.call('rootwrap.conf'),
|
119
|
-
'/etc/apache2/apache2.conf' => mockfile.call('apache2.conf'),
|
120
|
-
'/etc/apache2/ports.conf' => mockfile.call('ports.conf'),
|
121
|
-
'/etc/apache2/conf-enabled/serve-cgi-bin.conf' => mockfile.call('serve-cgi-bin.conf'),
|
122
|
-
'/etc/xinetd.conf' => mockfile.call('xinetd.conf'),
|
123
|
-
'/etc/xinetd.d' => mockfile.call('xinetd.d'),
|
124
|
-
'/etc/xinetd.d/chargen-stream' => mockfile.call('xinetd.d_chargen-stream'),
|
125
|
-
'/etc/xinetd.d/chargen-dgram' => mockfile.call('xinetd.d_chargen-dgram'),
|
126
|
-
'/etc/sysctl.conf' => mockfile.call('sysctl.conf'),
|
127
|
-
}
|
128
|
-
|
129
|
-
# create all mock commands
|
130
|
-
cmd = lambda {|x|
|
131
|
-
stdout = ::File.read(::File.join(scriptpath, '/unit/mock/cmd/'+x))
|
132
|
-
mock.mock_command('', stdout, '', 0)
|
133
|
-
}
|
134
|
-
|
135
|
-
empty = lambda {
|
136
|
-
mock.mock_command('', '', '', 0)
|
137
|
-
}
|
138
|
-
|
139
|
-
mock.commands = {
|
140
|
-
'ps aux' => cmd.call('ps-aux'),
|
141
|
-
'ps auxZ' => cmd.call('ps-auxZ'),
|
142
|
-
'Get-Content win_secpol.cfg' => cmd.call('secedit-export'),
|
143
|
-
'secedit /export /cfg win_secpol.cfg' => cmd.call('success'),
|
144
|
-
'Remove-Item win_secpol.cfg' => cmd.call('success'),
|
145
|
-
'env' => cmd.call('env'),
|
146
|
-
'${Env:PATH}' => cmd.call('$env-PATH'),
|
147
|
-
# registry key test (winrm 1.6.0, 1.6.1)
|
148
|
-
'dd429dd12596fa193ba4111469b4417ecbd78a1d7ba4317c334c9111644bae44' => cmd.call('reg_schedule'),
|
149
|
-
'Fdd429dd12596fa193ba4111469b4417ecbd78a1d7ba4317c334c9111644bae44' => cmd.call('reg_schedule'),
|
150
|
-
'Auditpol /get /subcategory:\'User Account Management\' /r' => cmd.call('auditpol'),
|
151
|
-
'/sbin/auditctl -l' => cmd.call('auditctl'),
|
152
|
-
'/sbin/auditctl -s' => cmd.call('auditctl-s'),
|
153
|
-
'yum -v repolist all' => cmd.call('yum-repolist-all'),
|
154
|
-
'dpkg -s curl' => cmd.call('dpkg-s-curl'),
|
155
|
-
'rpm -qia curl' => cmd.call('rpm-qia-curl'),
|
156
|
-
'pacman -Qi curl' => cmd.call('pacman-qi-curl'),
|
157
|
-
'gem list --local -a -q ^rubocop$' => cmd.call('gem-list-local-a-q-rubocop'),
|
158
|
-
'npm ls -g --json bower' => cmd.call('npm-ls-g--json-bower'),
|
159
|
-
'pip show jinja2' => cmd.call('pip-show-jinja2'),
|
160
|
-
"Get-Package -Name 'Mozilla Firefox' | ConvertTo-Json" => cmd.call('get-package-firefox'),
|
161
|
-
"Get-Package -Name 'Ruby 2.1.6-p336-x64' | ConvertTo-Json" => cmd.call('get-package-ruby'),
|
162
|
-
"New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name Service -Value (Get-Service -Name dhcp| Select-Object -Property Name, DisplayName, Status) -PassThru | Add-Member -MemberType NoteProperty -Name WMI -Value (Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property StartMode) -PassThru | ConvertTo-Json" => cmd.call('get-service-dhcp'),
|
163
|
-
"Get-WindowsFeature | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property Name,DisplayName,Description,Installed,InstallState | ConvertTo-Json" => cmd.call('get-windows-feature'),
|
164
|
-
'lsmod' => cmd.call('lsmod'),
|
165
|
-
'/sbin/sysctl -q -n net.ipv4.conf.all.forwarding' => cmd.call('sbin_sysctl'),
|
166
|
-
# ports on windows
|
167
|
-
'Get-NetTCPConnection | Select-Object -Property State, Caption, Description, LocalAddress, LocalPort, RemoteAddress, RemotePort, DisplayName, Status | ConvertTo-Json' => cmd.call('get-net-tcpconnection'),
|
168
|
-
'netstat -an' => cmd.call('netstat-an.utf8'),
|
169
|
-
# lsof formatted list of ports (should be quite cross platform)
|
170
|
-
'lsof -nP -i -FpctPn' => cmd.call('lsof-nP-i-FpctPn'),
|
171
|
-
# ports on linux
|
172
|
-
'netstat -tulpen' => cmd.call('netstat-tulpen'),
|
173
|
-
# ports on freebsd
|
174
|
-
'sockstat -46l' => cmd.call('sockstat'),
|
175
|
-
# packages on windows
|
176
|
-
"Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq 'Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161'} | Select-Object -Property Name,Version,Vendor,PackageCode,Caption,Description | ConvertTo-Json" => cmd.call('win32_product'),
|
177
|
-
# service status upstart on ubuntu
|
178
|
-
'initctl status ssh' => cmd.call('initctl-status-ssh'),
|
179
|
-
# service config for upstart on ubuntu
|
180
|
-
'initctl show-config ssh' => cmd.call('initctl-show-config-ssh'),
|
181
|
-
# upstart version on ubuntu
|
182
|
-
'initctl --version' => cmd.call('initctl--version'),
|
183
|
-
# show ssh service Centos 7
|
184
|
-
'systemctl show --all sshd' => cmd.call('systemctl-show-all-sshd'),
|
185
|
-
'/path/to/systemctl show --all sshd' => cmd.call('systemctl-show-all-sshd'),
|
186
|
-
'systemctl show --all dbus' => cmd.call('systemctl-show-all-dbus'),
|
187
|
-
'/path/to/systemctl show --all dbus' => cmd.call('systemctl-show-all-dbus'),
|
188
|
-
# services on macos
|
189
|
-
'launchctl list' => cmd.call('launchctl-list'),
|
190
|
-
# services on freebsd 10
|
191
|
-
'service -e' => cmd.call('service-e'),
|
192
|
-
'service sendmail onestatus' => cmd.call('service-sendmail-onestatus'),
|
193
|
-
# services for system 5 e.g. centos6, debian 6
|
194
|
-
'service sshd status' => cmd.call('service-sshd-status'),
|
195
|
-
'find /etc/rc*.d -name S*' => cmd.call('find-etc-rc-d-name-S'),
|
196
|
-
'ls -1 /etc/init.d/' => cmd.call('ls-1-etc-init.d'),
|
197
|
-
# user information for linux
|
198
|
-
'id root' => cmd.call('id-root'),
|
199
|
-
'getent passwd root' => cmd.call('getent-passwd-root'),
|
200
|
-
'chage -l root' => cmd.call('chage-l-root'),
|
201
|
-
# user information for ldap test
|
202
|
-
'id jfolmer' => cmd.call('id-jfolmer'),
|
203
|
-
'getent passwd jfolmer' => cmd.call('getent-passwd-jfolmer'),
|
204
|
-
'chage -l jfolmer' => cmd.call('chage-l-root'),
|
205
|
-
# user info for mac
|
206
|
-
'id chartmann' => cmd.call('id-chartmann'),
|
207
|
-
'dscl -q . -read /Users/chartmann NFSHomeDirectory PrimaryGroupID RecordName UniqueID UserShell' => cmd.call('dscl'),
|
208
|
-
# user info for freebsd
|
209
|
-
'pw usershow root -7' => cmd.call('pw-usershow-root-7'),
|
210
|
-
# user info for windows (winrm 1.6.0, 1.6.1)
|
211
|
-
'650b6b72a66316418b25421a54afe21a230704558082914c54711904bb10e370' => cmd.call('GetUserAccount'),
|
212
|
-
'174686f0441b8dd387b35cf1cbeed3f98441544351de5d8fb7b54f655e75583f' => cmd.call('GetUserAccount'),
|
213
|
-
# group info for windows
|
214
|
-
'Get-WmiObject Win32_Group | Select-Object -Property Caption, Domain, Name, SID, LocalAccount | ConvertTo-Json' => cmd.call('GetWin32Group'),
|
215
|
-
# network interface
|
216
|
-
'9e80f048a1af5a0f6ab8a465e46ea5ed5ba6587e9b5e54a7a0c0a1a02bb6f663' => cmd.call('find-net-interface'),
|
217
|
-
'c33821dece09c8b334e03a5bb9daefdf622007f73af4932605e758506584ec3f' => empty.call,
|
218
|
-
'Get-NetAdapter | Select-Object -Property Name, InterfaceDescription, Status, State, MacAddress, LinkSpeed, ReceiveLinkSpeed, TransmitLinkSpeed, Virtual | ConvertTo-Json' => cmd.call('Get-NetAdapter'),
|
219
|
-
# bridge on linux
|
220
|
-
'ls -1 /sys/class/net/br0/brif/' => cmd.call('ls-sys-class-net-br'),
|
221
|
-
# bridge on Windows
|
222
|
-
'Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter | Select-Object -Property Name, InterfaceDescription | ConvertTo-Json' => cmd.call('get-netadapter-binding-bridge'),
|
223
|
-
# host for Windows
|
224
|
-
'Resolve-DnsName –Type A microsoft.com | ConvertTo-Json' => cmd.call('Resolve-DnsName'),
|
225
|
-
'Test-NetConnection -ComputerName microsoft.com | Select-Object -Property ComputerName, PingSucceeded | ConvertTo-Json' => cmd.call('Test-NetConnection'),
|
226
|
-
# host for Linux
|
227
|
-
'getent hosts example.com' => cmd.call('getent-hosts-example.com'),
|
228
|
-
'ping -w 1 -c 1 example.com' => cmd.call('ping-example.com'),
|
229
|
-
# apt
|
230
|
-
"find /etc/apt/ -name *.list -exec sh -c 'cat {} || echo -n' \\;" => cmd.call('etc-apt'),
|
231
|
-
# iptables
|
232
|
-
'iptables -S' => cmd.call('iptables-s'),
|
233
|
-
# apache_conf
|
234
|
-
'find /etc/apache2/ports.conf -maxdepth 1 -type f' => cmd.call('find-apache2-ports-conf'),
|
235
|
-
'find /etc/apache2/conf-enabled/*.conf -maxdepth 1 -type f' => cmd.call('find-apache2-conf-enabled'),
|
236
|
-
# mount
|
237
|
-
"mount | grep -- ' on /'" => cmd.call("mount"),
|
238
|
-
"mount | grep -- ' on /mnt/iso-disk'" => cmd.call("mount-multiple"),
|
239
|
-
# solaris 10 package manager
|
240
|
-
'pkginfo -l SUNWzfsr' => cmd.call('pkginfo-l-SUNWzfsr'),
|
241
|
-
# solaris 11 package manager
|
242
|
-
'pkg info system/file-system/zfs' => cmd.call('pkg-info-system-file-system-zfs'),
|
243
|
-
# port netstat on solaris 10 & 11
|
244
|
-
'netstat -an -f inet -f inet6' => cmd.call('s11-netstat-an-finet-finet6'),
|
245
|
-
# xinetd configuration
|
246
|
-
'find /etc/xinetd.d -type f' => cmd.call('find-xinetd.d'),
|
247
|
-
# wmi test
|
248
|
-
"4762fab9e8180997634ae70aae6d5f59e641084111fb9f5e5bf2848a583aa5f5" => cmd.call('get-wmiobject'),
|
249
|
-
#user info on hpux
|
250
|
-
"logins -x -l root" => cmd.call('logins-x'),
|
251
|
-
#packages on hpux
|
252
|
-
"swlist -l product | grep vim" => cmd.call('swlist-l-product'),
|
253
|
-
# ipv4 ports on hpux
|
254
|
-
'netstat -an -f inet' => cmd.call('hpux-netstat-inet'),
|
255
|
-
#ipv6 ports on hpux
|
256
|
-
'netstat -an -f inet6' => cmd.call('hpux-netstat-inet6'),
|
257
|
-
}
|
258
|
-
|
259
|
-
@backend
|
260
|
-
end
|
261
|
-
|
262
|
-
# loads a resource class and instantiates the class with the given arguments
|
263
|
-
def load_resource(resource, *args)
|
264
|
-
# initialize resource with backend and parameters
|
265
|
-
@resource_class = Inspec::Resource.registry[resource]
|
266
|
-
@resource = @resource_class.new(backend, resource, *args)
|
267
|
-
end
|
268
|
-
|
269
|
-
def self.mock_os(resource, name)
|
270
|
-
osinfo = OPERATING_SYSTEMS[name] ||
|
271
|
-
fail("Can't find operating system to mock: #{name}")
|
272
|
-
resource.inspec.backend.mock_os(osinfo)
|
273
|
-
end
|
274
|
-
|
275
|
-
def self.mock_command(resource, cmd, res = {})
|
276
|
-
resource.inspec.backend
|
277
|
-
.mock_command(cmd, res[:stdout], res[:stderr], res[:exit_status])
|
278
|
-
end
|
279
|
-
|
280
|
-
def self.home
|
281
|
-
File.join(File.dirname(__FILE__), 'unit')
|
282
|
-
end
|
283
|
-
|
284
|
-
def self.profile_path(name)
|
285
|
-
dst = name
|
286
|
-
dst = "#{home}/mock/profiles/#{name}" unless name.start_with?(home)
|
287
|
-
dst
|
288
|
-
end
|
289
|
-
|
290
|
-
def self.load_profile(name, opts = {})
|
291
|
-
opts[:test_collector] = Inspec::RunnerMock.new
|
292
|
-
Inspec::Profile.for_target(profile_path(name), opts)
|
293
|
-
end
|
294
|
-
|
295
|
-
def self.profile_tgz(name)
|
296
|
-
path = File.join(home, 'mock', 'profiles', name)
|
297
|
-
dst = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname(name, '.tar.gz'))
|
298
|
-
|
299
|
-
# generate relative paths
|
300
|
-
files = Dir.glob("#{path}/**/*")
|
301
|
-
relatives = files.map { |e| Pathname.new(e).relative_path_from(Pathname.new(path)).to_s }
|
302
|
-
|
303
|
-
require 'inspec/archive/tar'
|
304
|
-
tag = Inspec::Archive::TarArchiveGenerator.new
|
305
|
-
tag.archive(path, relatives, dst)
|
306
|
-
|
307
|
-
dst
|
308
|
-
end
|
309
|
-
|
310
|
-
def self.profile_zip(name, opts = {})
|
311
|
-
path = File.join(home, 'mock', 'profiles', name)
|
312
|
-
dst = File.join(Dir.tmpdir, Dir::Tmpname.make_tmpname(name, '.zip'))
|
313
|
-
|
314
|
-
# rubyzip only works relative paths
|
315
|
-
files = Dir.glob("#{path}/**/*")
|
316
|
-
relatives = files.map { |e| Pathname.new(e).relative_path_from(Pathname.new(path)).to_s }
|
317
|
-
|
318
|
-
require 'inspec/archive/zip'
|
319
|
-
zag = Inspec::Archive::ZipArchiveGenerator.new
|
320
|
-
zag.archive(path, relatives, dst)
|
321
|
-
|
322
|
-
dst
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
def load_resource(*args)
|
327
|
-
m = MockLoader.new(:ubuntu1404)
|
328
|
-
m.send('load_resource', *args)
|
329
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
puts "-----------------------------------"
|
2
|
-
puts " TEST ENVIRONMENT "
|
3
|
-
puts "-----------------------------------"
|
4
|
-
puts " Docker: #{!ENV['DOCKER'].nil?}"
|
5
|
-
puts " OS name: #{os[:name] || 'unknown' }"
|
6
|
-
puts "OS release: #{os[:release] || 'unknown'}"
|
7
|
-
puts " OS family: #{os[:family] || 'unknown'}"
|
8
|
-
puts "-----------------------------------"
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
if ENV['DOCKER']
|
3
|
-
STDERR.puts "\033[1;33mTODO: Not running #{__FILE__.split("/").last} because we are running in docker\033[0m"
|
4
|
-
return
|
5
|
-
end
|
6
|
-
|
7
|
-
if !os.linux?
|
8
|
-
STDERR.puts "\033[1;33mTODO: Not running #{__FILE__} because we are not on linux.\033[0m"
|
9
|
-
return
|
10
|
-
end
|
11
|
-
|
12
|
-
# direct access to params of apache conf
|
13
|
-
describe apache_conf do
|
14
|
-
its('LogLevel') { should cmp 'warn' }
|
15
|
-
its('MaxKeepAliveRequests') { should cmp 100 }
|
16
|
-
end
|
17
|
-
|
18
|
-
# only read one param
|
19
|
-
describe apache_conf.params('LogLevel') do
|
20
|
-
it { should include 'warn' }
|
21
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
if os[:name] == 'ubuntu'
|
4
|
-
|
5
|
-
describe apt('ppa:nginx/stable') do
|
6
|
-
it { should exist }
|
7
|
-
it { should be_enabled }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe apt('nginx/stable') do
|
11
|
-
it { should exist }
|
12
|
-
it { should be_enabled }
|
13
|
-
end
|
14
|
-
|
15
|
-
describe apt('http://ppa.launchpad.net/nginx/stable/ubuntu') do
|
16
|
-
it { should exist }
|
17
|
-
it { should be_enabled }
|
18
|
-
end
|
19
|
-
|
20
|
-
describe apt('https://deb.nodesource.com/node_4.x/dists/precise/') do
|
21
|
-
it { should_not exist }
|
22
|
-
it { should_not be_enabled }
|
23
|
-
end
|
24
|
-
|
25
|
-
elsif os[:family] == 'debian'
|
26
|
-
|
27
|
-
describe apt('http://nginx.org/packages/debian') do
|
28
|
-
it { should exist }
|
29
|
-
it { should be_enabled }
|
30
|
-
end
|
31
|
-
|
32
|
-
describe apt('https://deb.nodesource.com/node_4.x/dists/precise/') do
|
33
|
-
it { should_not exist }
|
34
|
-
it { should_not be_enabled }
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# based on operating system we select the available service
|
4
|
-
return unless os[:family] == 'centos'
|
5
|
-
|
6
|
-
describe auditd_rules.syscall('open') do
|
7
|
-
its('action') { should eq(['always']) }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe auditd_rules.syscall('open').action do
|
11
|
-
it { should eq(['always']) }
|
12
|
-
end
|
13
|
-
|
14
|
-
describe auditd_rules.key('sshd_config') do
|
15
|
-
its('permissions') { should contain_match(/x/) }
|
16
|
-
end
|
17
|
-
|
18
|
-
describe auditd_rules.file('/etc/ssh/sshd_config').permissions do
|
19
|
-
it { should eq(['rwxa']) }
|
20
|
-
end
|
21
|
-
|
22
|
-
describe auditd_rules do
|
23
|
-
its('lines') { should contain_match(%r{-w /etc/ssh/sshd_config/}) }
|
24
|
-
end
|
25
|
-
|
26
|
-
describe auditd_rules.syscall('open').action('always').list do
|
27
|
-
it { should eq(['exit']) }
|
28
|
-
end
|
29
|
-
|
30
|
-
describe auditd_rules.status('backlog') do
|
31
|
-
it { should cmp 0 }
|
32
|
-
end
|