inspec 0.16.0 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 243a577f37796094ac8a136876c11d14ded819c2
4
- data.tar.gz: 7a95c3d207666f7d91c7ccb10316432d1ba70dd6
3
+ metadata.gz: 5487adad33ddb0d68d7115f3b5855862ac2269f4
4
+ data.tar.gz: 856ab3b28b9a5d5ffb3bbed9983095553be1c1e5
5
5
  SHA512:
6
- metadata.gz: 4d66e309baed6ba892f9b5fc4c03f488afc7886dc67c88bcf4a9d97e32e2a5cdbbb4e475e792e3f6d4199ea034177fd8a3698063a0d8b4d36d60b626eecfa993
7
- data.tar.gz: 03d6a852e3d9e3d629e1e1d44555973ea69f66d78d630ebd80bbdcddcff6035a96a03416a58c02fcc757cbc01f838ef36e6b44ef17a41692204d6120d17426e8
6
+ metadata.gz: 4ff5484ae1c3be74b1380f5521eb8bfb925c94fc0b8cf9bb68baaa9a6b998c6b54875d65b9b1b0c12fe68d7db16794c6b0a113d222d4c6a09c3ceb3536c78445
7
+ data.tar.gz: 65619588022d504d018a3f25e8cd05adf53305b641143b1175e3a78c8e7aae27212c2a29bd51b78bd36e16a7d42a09ae2520eb4e753672a8e70c5b32dbb8ca96
data/CHANGELOG.md CHANGED
@@ -1,7 +1,20 @@
1
1
  # Change Log
2
2
 
3
- ## [0.16.0](https://github.com/chef/inspec/tree/0.16.0) (2016-03-19)
4
- [Full Changelog](https://github.com/chef/inspec/compare/v0.15.0...0.16.0)
3
+ ## [0.16.1](https://github.com/chef/inspec/tree/0.16.1) (2016-03-22)
4
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.16.0...0.16.1)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - undefined method `addresses' for Port [\#555](https://github.com/chef/inspec/issues/555)
9
+ - add `wmi` resource [\#560](https://github.com/chef/inspec/pull/560) ([chris-rock](https://github.com/chris-rock))
10
+ - Add `vbscript` resource [\#559](https://github.com/chef/inspec/pull/559) ([chris-rock](https://github.com/chris-rock))
11
+
12
+ **Merged pull requests:**
13
+
14
+ - add support for addresses in port resource [\#558](https://github.com/chef/inspec/pull/558) ([chris-rock](https://github.com/chris-rock))
15
+
16
+ ## [v0.16.0](https://github.com/chef/inspec/tree/v0.16.0) (2016-03-19)
17
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.15.0...v0.16.0)
5
18
 
6
19
  **Implemented enhancements:**
7
20
 
@@ -17,6 +30,7 @@
17
30
 
18
31
  **Fixed bugs:**
19
32
 
33
+ - Unable to Handle Spaced Windows File Paths [\#469](https://github.com/chef/inspec/issues/469)
20
34
  - fix inspec shell and continuously test it [\#556](https://github.com/chef/inspec/pull/556) ([arlimus](https://github.com/arlimus))
21
35
  - bugfix: prevent duplicate loading of library files [\#547](https://github.com/chef/inspec/pull/547) ([arlimus](https://github.com/arlimus))
22
36
  - fix detect + add output option to archive command [\#546](https://github.com/chef/inspec/pull/546) ([arlimus](https://github.com/arlimus))
@@ -30,6 +44,7 @@
30
44
 
31
45
  **Merged pull requests:**
32
46
 
47
+ - 0.16.0 [\#557](https://github.com/chef/inspec/pull/557) ([arlimus](https://github.com/arlimus))
33
48
  - mock fetcher [\#550](https://github.com/chef/inspec/pull/550) ([arlimus](https://github.com/arlimus))
34
49
  - testing: add inspec exec tests with json formatter [\#549](https://github.com/chef/inspec/pull/549) ([arlimus](https://github.com/arlimus))
35
50
  - dont generate pretty json by default [\#548](https://github.com/chef/inspec/pull/548) ([arlimus](https://github.com/arlimus))
@@ -96,8 +96,10 @@ require 'resources/service'
96
96
  require 'resources/shadow'
97
97
  require 'resources/ssh_conf'
98
98
  require 'resources/user'
99
+ require 'resources/vbscript'
99
100
  require 'resources/windows_feature'
100
101
  require 'resources/xinetd'
102
+ require 'resources/wmi'
101
103
  require 'resources/yum'
102
104
 
103
105
  # file formats, depend on json implementation
@@ -3,5 +3,5 @@
3
3
  # author: Christoph Hartmann
4
4
 
5
5
  module Inspec
6
- VERSION = '0.16.0'.freeze
6
+ VERSION = '0.16.1'.freeze
7
7
  end
@@ -2,6 +2,8 @@
2
2
  # author: Christoph Hartmann
3
3
  # author: Dominik Richter
4
4
 
5
+ require 'utils/object_traversal'
6
+
5
7
  module Inspec::Resources
6
8
  class JsonConfig < Inspec.resource(1)
7
9
  name 'json'
@@ -12,6 +14,8 @@ module Inspec::Resources
12
14
  end
13
15
  "
14
16
 
17
+ include ObjectTraverser
18
+
15
19
  # make params readable
16
20
  attr_reader :params
17
21
 
@@ -59,26 +63,5 @@ module Inspec::Resources
59
63
  def to_s
60
64
  "Json #{@path}"
61
65
  end
62
-
63
- private
64
-
65
- def extract_value(keys, value)
66
- key = keys.shift
67
- return nil if key.nil?
68
-
69
- # if value is an array, iterate over each child
70
- if value.is_a?(Array)
71
- value = value.map { |i|
72
- extract_value([key], i)
73
- }
74
- else
75
- value = value[key.to_s].nil? ? nil : value[key.to_s]
76
- end
77
-
78
- # if there are no more keys, just return the value
79
- return value if keys.first.nil?
80
- # if there are more keys, extract more
81
- extract_value(keys.clone, value)
82
- end
83
66
  end
84
67
  end
@@ -66,6 +66,11 @@ module Inspec::Resources
66
66
  res.size > 0 ? res : nil
67
67
  end
68
68
 
69
+ def addresses
70
+ res = info.map { |x| x[:address] }.uniq.compact
71
+ res.size > 0 ? res : nil
72
+ end
73
+
69
74
  def pids
70
75
  res = info.map { |x| x[:pid] }.uniq.compact
71
76
  res.size > 0 ? res : nil
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ module Inspec::Resources
6
+ # This resource allows users to run vbscript on windows machines. We decided
7
+ # not to use scriptcontrol, due to the fact that it works on 32 bit systems only:
8
+ # $script = new-object -comobject MSScriptControl.ScriptControl
9
+ # $script.language = "vbscript"
10
+ # $script.ExecuteStatement($Cmd)
11
+ #
12
+ # For that reason, we call csript.exe directy with the script. Vbscript is
13
+ # embedded in Powershell to ease the file transfer and reuse powershell
14
+ # encodedCommand since train does not allow file upload yet.
15
+ #
16
+ # We run cscript with /nologo option to get the expected output only with the
17
+ # version information.
18
+ #
19
+ # Since Windows does not delete tmp files automatically, we remove the VBScript
20
+ # after we executed it
21
+ # @see https://msdn.microsoft.com/en-us/library/aa364991.aspx
22
+ class VBScript < PowershellScript
23
+ name 'vbscript'
24
+ desc ''
25
+ example "
26
+ script = <<-EOH
27
+ # you vbscript
28
+ EOH
29
+
30
+ describe vbscript(script) do
31
+ its('stdout') { should eq 'output' }
32
+ end
33
+ "
34
+
35
+ def initialize(vbscript)
36
+ return skip_resource 'The `vbscript` resource is not supported on your OS yet.' unless inspec.os.windows?
37
+
38
+ cmd = <<-EOH
39
+ $vbscript = @"
40
+ #{vbscript}
41
+ "@
42
+ $filename = [System.IO.Path]::GetTempFileName() + ".vbs"
43
+ New-Item $filename -type file -force -value $vbscript | Out-Null
44
+ cscript.exe /nologo $filename
45
+ Remove-Item $filename | Out-Null
46
+ EOH
47
+ super(cmd)
48
+ end
49
+
50
+ def to_s
51
+ 'Windows VBScript'
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'utils/object_traversal'
6
+
7
+ module Inspec::Resources
8
+ # This resource simplifies the access to wmi
9
+ # on CLI you would use:
10
+ # WMIC /NAMESPACE:\\root\rsop\computer PATH RSOP_SecuritySettingNumeric WHERE "KeyName = 'MinimumPasswordAge' And precedence=1" GET Setting
11
+ # We use Get-WmiObject via Powershell to retrieve all values.
12
+ class WMI < Inspec.resource(1)
13
+ name 'wmi'
14
+ desc 'request wmi information'
15
+ example "
16
+ describe wmi('RSOP_SecuritySettingNumeric', {
17
+ namespace: 'root\\rsop\\computer',
18
+ filter: 'KeyName = \'MinimumPasswordAge\' And precedence=1'
19
+ }) do
20
+ its('Setting') { should eq true }
21
+ end
22
+ "
23
+
24
+ include ObjectTraverser
25
+ attr_accessor :content
26
+
27
+ def initialize(wmiclass, opts = {})
28
+ # verify that this resource is only supported on Windows
29
+ return skip_resource 'The `windows_feature` resource is not supported on your OS.' unless inspec.os.windows?
30
+
31
+ @wmiclass = wmiclass
32
+ @wminamespace = opts[:namespace]
33
+ @wmifilter = opts[:filter]
34
+ end
35
+
36
+ # returns nil, if not existant or value
37
+ def method_missing(*keys)
38
+ # catch behavior of rspec its implementation
39
+ # @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
40
+ keys.shift if keys.is_a?(Array) && keys[0] == :[]
41
+
42
+ # map all symbols to strings
43
+ keys = keys.map(&:to_s) if keys.is_a?(Array)
44
+
45
+ value(keys)
46
+ end
47
+
48
+ def value(key)
49
+ extract_value(key, info)
50
+ end
51
+
52
+ def info
53
+ return @content if defined?(@content)
54
+ @content = {}
55
+
56
+ # we should abort execution, if wmi class is not given or wmi resource is
57
+ # executed on a non-windows system
58
+ return @content if @wmiclass.nil?
59
+
60
+ # optional params
61
+ cmd_namespace = "-namespace #{@wminamespace}" unless @wminamespace.nil?
62
+ cmd_filter = "-filter \"#{@wmifilter}\"" unless @wmifilter.nil?
63
+
64
+ # run wmi command
65
+ cmd = inspec.command("Get-WmiObject -class #{@wmiclass} #{cmd_namespace} #{cmd_filter} | ConvertTo-Json")
66
+ @content = JSON.parse(cmd.stdout)
67
+ rescue JSON::ParserError => _e
68
+ @content
69
+ end
70
+
71
+ def to_s
72
+ "WMI #{@wmiclass} where #{@wmifilter}"
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+ # author: Dominik Richter
3
+ # author: Christoph Hartmann
4
+
5
+ class HashMap
6
+ class << self
7
+ def [](hash, *keys)
8
+ return hash if keys.empty? || hash.nil?
9
+ key = keys.shift
10
+ if hash.is_a?(Array)
11
+ map = hash.map { |i| [i, key] }
12
+ else
13
+ map = hash[key]
14
+ end
15
+ [map, *keys]
16
+ rescue NoMethodError => _
17
+ nil
18
+ end
19
+ end
20
+ end
21
+
22
+ class StringMap
23
+ class << self
24
+ def [](hash, *keys)
25
+ return hash if keys.empty? || hash.nil?
26
+ key = keys.shift
27
+ if hash.is_a?(Array)
28
+ map = hash.map { |i| [i, key] }
29
+ else
30
+ map = hash[key]
31
+ end
32
+ [map, *keys]
33
+ rescue NoMethodError => _
34
+ nil
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ # author: Dominik Richter
3
+ # author: Christoph Hartmann
4
+ module ObjectTraverser
5
+ def extract_value(keys, value)
6
+ key = keys.shift
7
+ return nil if key.nil? || value.nil?
8
+
9
+ # if value is an array, iterate over each child
10
+ if value.is_a?(Array)
11
+ value = value.map { |i|
12
+ extract_value([key], i)
13
+ }
14
+ else
15
+ value = value[key.to_s].nil? ? nil : value[key.to_s]
16
+ end
17
+
18
+ # if there are no more keys, just return the value
19
+ return value if keys.first.nil?
20
+ # if there are more keys, extract more
21
+ extract_value(keys.clone, value)
22
+ end
23
+ end
data/test/helper.rb CHANGED
@@ -237,6 +237,8 @@ class MockLoader
237
237
  'netstat -an -f inet -f inet6' => cmd.call('s11-netstat-an-finet-finet6'),
238
238
  # xinetd configuration
239
239
  'find /etc/xinetd.d -type f' => cmd.call('find-xinetd.d'),
240
+ # wmi test
241
+ "Get-WmiObject -class win32_service -filter \"name like '%winrm%'\" | ConvertTo-Json" => cmd.call('get-wmiobject'),
240
242
  }
241
243
 
242
244
  @backend
@@ -17,5 +17,7 @@ end
17
17
  if os.linux?
18
18
  describe port(22) do
19
19
  its('processes') { should include 'sshd' }
20
+ its('protocols') { should include 'tcp' }
21
+ its('addresses') {should include '0.0.0.0'}
20
22
  end
21
23
  end
@@ -3,11 +3,29 @@ script = <<-EOH
3
3
  Write-Output 'hello'
4
4
  EOH
5
5
 
6
+ # Write-Output comes with a newline
6
7
  describe powershell(script) do
7
- its('stdout') { should eq 'hello' }
8
+ its('stdout') { should eq "hello\r\n" }
9
+ its('stderr') { should eq '' }
8
10
  end
9
11
 
10
- # legacy test
12
+ # legacy test with `script` resource
11
13
  describe script(script) do
14
+ its('stdout') { should eq "hello\r\n" }
15
+ its('stderr') { should eq '' }
16
+ end
17
+
18
+ # -NoNewLine only works in powershell 5
19
+ # @see https://blogs.technet.microsoft.com/heyscriptingguy/2015/08/07/the-powershell-5-nonewline-parameter/
20
+ describe powershell("'hello' | Write-Host -NoNewLine") do
12
21
  its('stdout') { should eq 'hello' }
22
+ its('stderr') { should eq '' }
23
+ end
24
+
25
+ # test stderr
26
+ describe powershell("Write-Error \"error\"") do
27
+ its('stdout') { should eq '' }
28
+ # this is an xml error for now, if the script is run via WinRM
29
+ # @see https://github.com/WinRb/WinRM/issues/106
30
+ # its('stderr') { should eq 'error' }
13
31
  end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ # script that may have multiple lines
4
+ vbscript = <<-EOH
5
+ WScript.Echo "hello"
6
+ EOH
7
+
8
+ describe vbscript(vbscript) do
9
+ its('stdout') { should eq "hello\r\n" }
10
+ end
11
+
12
+ # ensure that we do not require a newline
13
+ describe vbscript("Wscript.Stdout.Write \"hello\"") do
14
+ its('stdout') { should eq 'hello' }
15
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ # Get-WmiObject win32_service
4
+ # Get-WmiObject -class win32_service
5
+ # returns an array of service objects
6
+ describe wmi('win32_service') do
7
+ its(['Path','ClassName']) { should include 'Win32_Service' }
8
+ its('DisplayName') { should include 'Windows Remote Management (WS-Management)'}
9
+ end
10
+
11
+ # Use win32_service with filter
12
+ # this returns a single service object
13
+ describe wmi('win32_service', {
14
+ filter: "name like '%winrm%'"
15
+ }) do
16
+ its(['Path','ClassName']) { should eq 'Win32_Service' }
17
+ its('DisplayName') { should eq 'Windows Remote Management (WS-Management)'}
18
+ end
19
+
20
+ # TODO: this works on domain controllers only
21
+ describe wmi('RSOP_SecuritySettingNumeric', {
22
+ namespace: 'root\\rsop\\computer',
23
+ filter: 'KeyName = \'MinimumPasswordAge\' And precedence=1'
24
+ }) do
25
+ its('Setting') { should eq 1 }
26
+ end
@@ -0,0 +1,10 @@
1
+ {
2
+ "Path": {
3
+ "ClassName": "Win32_Service"
4
+ },
5
+ "Caption": "Windows Remote Management (WS-Management)",
6
+ "CreationClassName": "Win32_Service",
7
+ "DisplayName": "Windows Remote Management (WS-Management)",
8
+ "Name": "WinRM",
9
+ "PathName": "C:\\Windows\\System32\\svchost.exe -k NetworkService"
10
+ }
@@ -12,6 +12,7 @@ describe 'Inspec::Resources::Port' do
12
12
  _(resource.protocols).must_equal %w{ tcp tcp6 }
13
13
  _(resource.pids).must_equal [1]
14
14
  _(resource.processes).must_equal ['sshd']
15
+ _(resource.addresses).must_equal ["0.0.0.0", "::"]
15
16
  end
16
17
 
17
18
  it 'verify UDP port on Ubuntu 14.04' do
@@ -20,6 +21,7 @@ describe 'Inspec::Resources::Port' do
20
21
  _(resource.protocols).must_equal %w{ udp }
21
22
  _(resource.pids).must_equal [545]
22
23
  _(resource.processes).must_equal ['rpcbind']
24
+ _(resource.addresses).must_equal ["0.0.0.0"]
23
25
  end
24
26
 
25
27
  it 'verify port on MacOs x' do
@@ -27,6 +29,7 @@ describe 'Inspec::Resources::Port' do
27
29
  _(resource.listening?).must_equal true
28
30
  _(resource.protocols).must_equal ['tcp']
29
31
  _(resource.processes).must_equal ['VBoxHeadl']
32
+ _(resource.addresses).must_equal ["127.0.0.1"]
30
33
  end
31
34
 
32
35
  it 'verify port on Windows' do
@@ -34,6 +37,7 @@ describe 'Inspec::Resources::Port' do
34
37
  _(resource.listening?).must_equal true
35
38
  _(resource.protocols).must_equal ['tcp']
36
39
  _(resource.processes).must_equal nil
40
+ _(resource.addresses).must_equal ["::", "192.168.10.157"]
37
41
  end
38
42
 
39
43
  it 'verify port on FreeBSD' do
@@ -42,6 +46,7 @@ describe 'Inspec::Resources::Port' do
42
46
  _(resource.protocols).must_equal %w{ tcp6 tcp }
43
47
  _(resource.pids).must_equal [668]
44
48
  _(resource.processes).must_equal ['sshd']
49
+ _(resource.addresses).must_equal ["0:0:0:0:0:0:0:0", "0.0.0.0"]
45
50
  end
46
51
 
47
52
  it 'verify port on wrlinux' do
@@ -49,6 +54,7 @@ describe 'Inspec::Resources::Port' do
49
54
  _(resource.listening?).must_equal true
50
55
  _(resource.protocols).must_equal %w{ tcp tcp6 }
51
56
  _(resource.processes).must_equal ['sshd']
57
+ _(resource.addresses).must_equal ["0.0.0.0", "::"]
52
58
  end
53
59
 
54
60
  it 'verify running on undefined' do
@@ -57,6 +63,7 @@ describe 'Inspec::Resources::Port' do
57
63
  _(resource.protocols).must_equal nil
58
64
  _(resource.pids).must_equal nil
59
65
  _(resource.processes).must_equal nil
66
+ _(resource.addresses).must_equal nil
60
67
  end
61
68
 
62
69
  it 'verify port and interface on Ubuntu 14.04' do
@@ -65,20 +72,24 @@ describe 'Inspec::Resources::Port' do
65
72
  _(resource.protocols).must_equal %w{ tcp }
66
73
  _(resource.pids).must_equal [1]
67
74
  _(resource.processes).must_equal ['sshd']
75
+ _(resource.addresses).must_equal ["0.0.0.0"]
68
76
  end
69
77
 
70
78
  it 'verify not listening port on interface on Ubuntu 14.04' do
71
79
  resource = MockLoader.new(:ubuntu1404).load_resource('port', '127.0.0.1', 22)
72
80
  _(resource.listening?).must_equal false
81
+ _(resource.addresses).must_equal nil
73
82
  end
74
83
 
75
84
  it 'verify port on Solaris 10' do
76
85
  resource = MockLoader.new(:solaris10).load_resource('port', 22)
77
86
  _(resource.listening?).must_equal true
87
+ _(resource.addresses).must_equal ["0.0.0.0"]
78
88
  end
79
89
 
80
90
  it 'verify port on Solaris 11' do
81
91
  resource = MockLoader.new(:solaris11).load_resource('port', 22)
82
92
  _(resource.listening?).must_equal true
93
+ _(resource.addresses).must_equal ["0.0.0.0"]
83
94
  end
84
95
  end
@@ -5,7 +5,7 @@
5
5
  require 'helper'
6
6
  require 'inspec/resource'
7
7
 
8
- describe 'Inspec::Resources::Script' do
8
+ describe 'Inspec::Resources::Powershell' do
9
9
 
10
10
  ps1_script = <<-EOH
11
11
  # call help for get command
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'helper'
6
+ require 'inspec/resource'
7
+
8
+ describe 'Inspec::Resources::VbScript' do
9
+
10
+ vb_script = <<-EOH
11
+ WScript.Echo "hello vbscript"
12
+ EOH
13
+
14
+ it 'check if `vbscript` for windows is properly generated ' do
15
+ resource = MockLoader.new(:windows).load_resource('vbscript', vb_script)
16
+ _(resource.command).must_equal 'powershell -encodedCommand JABQAHIAbwBnAHIAZQBzAHMAUAByAGUAZgBlAHIAZQBuAGMAZQA9ACcAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAnADsAJAB2AGIAcwBjAHIAaQBwAHQAIAA9ACAAQAAiAAoAIAAgACAAIABXAFMAYwByAGkAcAB0AC4ARQBjAGgAbwAgACIAaABlAGwAbABvACAAdgBiAHMAYwByAGkAcAB0ACIACgAKACIAQAAKACQAZgBpAGwAZQBuAGEAbQBlACAAPQAgAFsAUwB5AHMAdABlAG0ALgBJAE8ALgBQAGEAdABoAF0AOgA6AEcAZQB0AFQAZQBtAHAARgBpAGwAZQBOAGEAbQBlACgAKQAgACsAIAAiAC4AdgBiAHMAIgAKAE4AZQB3AC0ASQB0AGUAbQAgACQAZgBpAGwAZQBuAGEAbQBlACAALQB0AHkAcABlACAAZgBpAGwAZQAgAC0AZgBvAHIAYwBlACAALQB2AGEAbAB1AGUAIAAkAHYAYgBzAGMAcgBpAHAAdAAgAHwAIABPAHUAdAAtAE4AdQBsAGwACgBjAHMAYwByAGkAcAB0AC4AZQB4AGUAIAAvAG4AbwBsAG8AZwBvACAAJABmAGkAbABlAG4AYQBtAGUACgBSAGUAbQBvAHYAZQAtAEkAdABlAG0AIAAkAGYAaQBsAGUAbgBhAG0AZQAgAHwAIABPAHUAdAAtAE4AdQBsAGwACgA='
17
+ end
18
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'helper'
6
+ require 'inspec/resource'
7
+
8
+ describe 'Inspec::Resources::WMI' do
9
+
10
+ # Check the following as unit test
11
+ # describe wmi('win32_service', {
12
+ # filter: "name like '%winrm%'"
13
+ # }) do
14
+ # its(['Path','ClassName']) { should eq 'Win32_Service' }
15
+ # its('DisplayName') { should eq 'Windows Remote Management (WS-Management)'}
16
+ # end
17
+
18
+ # windows
19
+ it 'verify wmi parsing on windows' do
20
+ resource = MockLoader.new(:windows).load_resource('wmi', 'win32_service', { filter: "name like '%winrm%'" })
21
+ _(resource.send('DisplayName')).must_equal 'Windows Remote Management (WS-Management)'
22
+ _(resource.send('method_missing', 'Path', 'ClassName')).must_equal 'Win32_Service'
23
+ end
24
+
25
+ # ubuntu 14.04 with upstart
26
+ it 'fail wmi on ubuntu' do
27
+ resource = MockLoader.new(:ubuntu1404).load_resource('wmi', 'win32_service', { filter: "name like '%winrm%'" })
28
+ _(resource.send('DisplayName')).must_equal nil
29
+ _(resource.send('method_missing', 'Path', 'ClassName')).must_equal nil
30
+ end
31
+
32
+ # centos 7 with systemd
33
+ it 'fail wmi on centos' do
34
+ resource = MockLoader.new(:centos7).load_resource('wmi', 'win32_service', { filter: "name like '%winrm%'" })
35
+ _(resource.send('DisplayName')).must_equal nil
36
+ _(resource.send('method_missing', 'Path', 'ClassName')).must_equal nil
37
+ end
38
+
39
+ # unknown OS
40
+ it 'fail wmi on unknown os' do
41
+ resource = MockLoader.new(:undefined).load_resource('wmi', 'win32_service', { filter: "name like '%winrm%'" })
42
+ _(resource.send('DisplayName')).must_equal nil
43
+ _(resource.send('method_missing', 'Path', 'ClassName')).must_equal nil
44
+ end
45
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+ # author: Dominik Richter
3
+ # author: Christoph Hartmann
4
+
5
+ require 'helper'
6
+ require 'utils/hash_map'
7
+
8
+ describe HashMap do
9
+ describe '#get_value' do
10
+ it 'returns the source value if no keys are given' do
11
+ x = rand
12
+ HashMap[x].must_equal x
13
+ end
14
+
15
+ it 'retrieves a key from a map' do
16
+ x = { a: rand }
17
+ HashMap[x, :a].must_equal x[:a]
18
+ end
19
+
20
+ it 'returns nil if the key doesnt exist' do
21
+ x = { a: rand }
22
+ HashMap[x, :b].must_be :nil?
23
+ end
24
+
25
+ it 'can extract a nil key' do
26
+ x = { nil => rand }
27
+ HashMap[x, nil].must_equal x[nil]
28
+ end
29
+
30
+ it 'extracts multiple keys' do
31
+ y = rand
32
+ x = { a: { b: { c: y }}}
33
+ HashMap[x, :a, :b, :c].must_equal y
34
+ end
35
+
36
+ it 'returns nil if a key in a list doesnt exist' do
37
+ x = { a: { b: { c: rand }}}
38
+ HashMap[x, :d, :b, :c].must_be :nil?
39
+ end
40
+
41
+ it 'retrieves exact keys by string' do
42
+ x = { a: rand }
43
+ HashMap[x, :a].must_equal x[:a]
44
+ HashMap[x, 'a'].must_be :nil?
45
+ end
46
+
47
+ it 'retrieves exact keys by string' do
48
+ x = { 'a' => rand }
49
+ HashMap[x, 'a'].must_equal x['a']
50
+ HashMap[x, :a].must_be :nil?
51
+ end
52
+
53
+ it 'con retrieve string keys' do
54
+ x = { 'a' => rand }
55
+ HashMap.extract_keys(x, ['a'], string_keys: true).must_equal x['a']
56
+ HashMap.extract_keys(x, [:a], string_keys: true).must_equal x['a']
57
+ end
58
+ end
59
+
60
+ describe 'as an instance' do
61
+
62
+ end
63
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-19 00:00:00.000000000 Z
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: r-train
@@ -315,7 +315,9 @@ files:
315
315
  - lib/resources/shadow.rb
316
316
  - lib/resources/ssh_conf.rb
317
317
  - lib/resources/user.rb
318
+ - lib/resources/vbscript.rb
318
319
  - lib/resources/windows_feature.rb
320
+ - lib/resources/wmi.rb
319
321
  - lib/resources/xinetd.rb
320
322
  - lib/resources/yaml.rb
321
323
  - lib/resources/yum.rb
@@ -327,8 +329,10 @@ files:
327
329
  - lib/utils/filter_array.rb
328
330
  - lib/utils/find_files.rb
329
331
  - lib/utils/hash.rb
332
+ - lib/utils/hash_map.rb
330
333
  - lib/utils/json_log.rb
331
334
  - lib/utils/modulator.rb
335
+ - lib/utils/object_traversal.rb
332
336
  - lib/utils/parser.rb
333
337
  - lib/utils/plugin_registry.rb
334
338
  - lib/utils/simpleconfig.rb
@@ -382,6 +386,8 @@ files:
382
386
  - test/integration/default/secpol_spec.rb
383
387
  - test/integration/default/service_spec.rb
384
388
  - test/integration/default/user_spec.rb
389
+ - test/integration/default/vbscript_spec.rb
390
+ - test/integration/default/wmi_spec.rb
385
391
  - test/integration/default/yaml_spec.rb
386
392
  - test/resource/command_test.rb
387
393
  - test/resource/dsl_test.rb
@@ -426,6 +432,7 @@ files:
426
432
  - test/unit/mock/cmd/get-package-ruby
427
433
  - test/unit/mock/cmd/get-service-dhcp
428
434
  - test/unit/mock/cmd/get-windows-feature
435
+ - test/unit/mock/cmd/get-wmiobject
429
436
  - test/unit/mock/cmd/getent-hosts-example.com
430
437
  - test/unit/mock/cmd/getent-passwd-jfolmer
431
438
  - test/unit/mock/cmd/getent-passwd-root
@@ -547,7 +554,9 @@ files:
547
554
  - test/unit/resources/shadow_test.rb
548
555
  - test/unit/resources/ssh_conf_test.rb
549
556
  - test/unit/resources/user_test.rb
557
+ - test/unit/resources/vbscript_test.rb
550
558
  - test/unit/resources/windows_feature.rb
559
+ - test/unit/resources/wmi_test.rb
551
560
  - test/unit/resources/xinetd_test.rb
552
561
  - test/unit/resources/yaml_test.rb
553
562
  - test/unit/resources/yum_test.rb
@@ -556,6 +565,7 @@ files:
556
565
  - test/unit/source_readers/inspec_test.rb
557
566
  - test/unit/utils/filter_array_test.rb
558
567
  - test/unit/utils/find_files_test.rb
568
+ - test/unit/utils/hash_map_test.rb
559
569
  - test/unit/utils/passwd_parser_test.rb
560
570
  - test/unit/utils/simpleconfig_test.rb
561
571
  - test/unit/utils/solaris_netstat_parser.rb
@@ -633,6 +643,8 @@ test_files:
633
643
  - test/integration/default/secpol_spec.rb
634
644
  - test/integration/default/service_spec.rb
635
645
  - test/integration/default/user_spec.rb
646
+ - test/integration/default/vbscript_spec.rb
647
+ - test/integration/default/wmi_spec.rb
636
648
  - test/integration/default/yaml_spec.rb
637
649
  - test/resource/command_test.rb
638
650
  - test/resource/dsl_test.rb
@@ -677,6 +689,7 @@ test_files:
677
689
  - test/unit/mock/cmd/get-package-ruby
678
690
  - test/unit/mock/cmd/get-service-dhcp
679
691
  - test/unit/mock/cmd/get-windows-feature
692
+ - test/unit/mock/cmd/get-wmiobject
680
693
  - test/unit/mock/cmd/getent-hosts-example.com
681
694
  - test/unit/mock/cmd/getent-passwd-jfolmer
682
695
  - test/unit/mock/cmd/getent-passwd-root
@@ -798,7 +811,9 @@ test_files:
798
811
  - test/unit/resources/shadow_test.rb
799
812
  - test/unit/resources/ssh_conf_test.rb
800
813
  - test/unit/resources/user_test.rb
814
+ - test/unit/resources/vbscript_test.rb
801
815
  - test/unit/resources/windows_feature.rb
816
+ - test/unit/resources/wmi_test.rb
802
817
  - test/unit/resources/xinetd_test.rb
803
818
  - test/unit/resources/yaml_test.rb
804
819
  - test/unit/resources/yum_test.rb
@@ -807,6 +822,7 @@ test_files:
807
822
  - test/unit/source_readers/inspec_test.rb
808
823
  - test/unit/utils/filter_array_test.rb
809
824
  - test/unit/utils/find_files_test.rb
825
+ - test/unit/utils/hash_map_test.rb
810
826
  - test/unit/utils/passwd_parser_test.rb
811
827
  - test/unit/utils/simpleconfig_test.rb
812
828
  - test/unit/utils/solaris_netstat_parser.rb