inspec 0.9.3 → 0.9.4

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: bd29dd29fa1bea327ff76e8cf6f0d0676a9b4880
4
- data.tar.gz: 0e238efe1576c2a97b5fe241f4bee80e1eb8f9fd
3
+ metadata.gz: 75b5b2cf05d5f27de71c74ba5ee3bf4d8e5ea281
4
+ data.tar.gz: b1934841d5088956ebc3021d31190d21aa8d3a9f
5
5
  SHA512:
6
- metadata.gz: 1f8164b146576f1579b6a16f8006898a96957edce6cfe37abdf12575a0df3b901e501d92db9f91d9dcd812bc9737f043557321b5a9e1422fa28bff086375b28f
7
- data.tar.gz: 7ef1c4bc7066985ad11fb023027a7c83d70774e06c2f48c7ba6b86c8e32ad3983fde1dcc336c1322e52345b6227ea793fec92ecf8b41fda366ffa4d035df28c1
6
+ metadata.gz: 66fe3886fed541edc87ceb0ed0f421fc8d66b4fff67f8b9564627d5f10e4b8b762a0c0be04c8dad76718b9b51d5f70abc6daa5effc95f29403cfa0c01eae207a
7
+ data.tar.gz: 7da21c7c93b062a6ef3529438ad585dabf7a3ded7aa8fcb67a12aa71aa8b5c4f57631bd4d6385eb6d8a016969329dab984d8509774c9afd5c6963c3508574070
data/CHANGELOG.md CHANGED
@@ -1,7 +1,26 @@
1
1
  # Change Log
2
2
 
3
- ## [0.9.3](https://github.com/chef/inspec/tree/0.9.3) (2015-11-20)
4
- [Full Changelog](https://github.com/chef/inspec/compare/v0.9.2...0.9.3)
3
+ ## [0.9.4](https://github.com/chef/inspec/tree/0.9.4) (2015-11-24)
4
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.9.3...0.9.4)
5
+
6
+ **Fixed bugs:**
7
+
8
+ - registry\_key needs to be case insensitive [\#254](https://github.com/chef/inspec/issues/254)
9
+ - User resource doesn't handle group names with spaces [\#238](https://github.com/chef/inspec/issues/238)
10
+
11
+ **Closed issues:**
12
+
13
+ - inspec does not extract section name from test file header [\#182](https://github.com/chef/inspec/issues/182)
14
+
15
+ **Merged pull requests:**
16
+
17
+ - bugfix: user resources support for group with whitespace [\#258](https://github.com/chef/inspec/pull/258) ([chris-rock](https://github.com/chris-rock))
18
+ - Improve conf file resources \(csv, json, yaml, ini\) [\#257](https://github.com/chef/inspec/pull/257) ([chris-rock](https://github.com/chris-rock))
19
+ - Bugfix: make registry\_key resource case-insensitive [\#255](https://github.com/chef/inspec/pull/255) ([alexpop](https://github.com/alexpop))
20
+ - improvement: update install instructions and add notes for windows builds [\#253](https://github.com/chef/inspec/pull/253) ([chris-rock](https://github.com/chris-rock))
21
+
22
+ ## [v0.9.3](https://github.com/chef/inspec/tree/v0.9.3) (2015-11-20)
23
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.9.2...v0.9.3)
5
24
 
6
25
  **Implemented enhancements:**
7
26
 
@@ -19,6 +38,7 @@
19
38
 
20
39
  **Merged pull requests:**
21
40
 
41
+ - 0.9.3 [\#251](https://github.com/chef/inspec/pull/251) ([arlimus](https://github.com/arlimus))
22
42
  - Introduce automated changelog generation [\#250](https://github.com/chef/inspec/pull/250) ([arlimus](https://github.com/arlimus))
23
43
  - ensure all test directories are on the runner $LOAD\_PATH [\#249](https://github.com/chef/inspec/pull/249) ([schisamo](https://github.com/schisamo))
24
44
  - bugfix: support multiple computed calls to describe [\#247](https://github.com/chef/inspec/pull/247) ([arlimus](https://github.com/arlimus))
data/README.md CHANGED
@@ -39,9 +39,17 @@ inspec exec test.rb -t docker://container_id
39
39
 
40
40
  ## Installation
41
41
 
42
- Requires Ruby ( >1.9 ).
42
+ InSpec requires Ruby ( >1.9 ).
43
43
 
44
- To simply run it without installation, you must install [bundler](http://bundler.io/):
44
+ ### Install it via rubygems.org
45
+
46
+ ```bash
47
+ gem install inspec
48
+ ```
49
+
50
+ ### Install it from source
51
+
52
+ That requires [bundler](http://bundler.io/):
45
53
 
46
54
  ```bash
47
55
  bundle install
@@ -55,16 +63,22 @@ gem build inspec.gemspec
55
63
  gem install inspec-*.gem
56
64
  ```
57
65
 
58
- Or you can install it via rubygems.org
66
+ On Windows, you need to install [Ruby](http://rubyinstaller.org/downloads/) with [Ruby Development Kit](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit) to build dependencies with its native extensions.
59
67
 
60
- ```bash
61
- gem install inspec
62
- ```
68
+ ### Run InSpec
63
69
 
64
70
  You should now be able to run:
65
71
 
66
72
  ```bash
67
- inspec --help
73
+ $ inspec --help
74
+ Commands:
75
+ inspec check PATH # verify test structure in PATH
76
+ inspec detect # detect the target OS
77
+ inspec exec PATHS # run all test files
78
+ inspec help [COMMAND] # Describe available commands or one specific command
79
+ inspec json PATH # read all tests in PATH and generate a JSON profile
80
+ inspec shell # open an interactive debugging shell
81
+ inspec version # prints the version of this tool
68
82
  ```
69
83
 
70
84
  # Examples
@@ -74,3 +74,4 @@ require 'resources/yum'
74
74
  require 'resources/json'
75
75
  require 'resources/yaml'
76
76
  require 'resources/csv'
77
+ require 'resources/ini'
@@ -3,5 +3,5 @@
3
3
  # author: Christoph Hartmann
4
4
 
5
5
  module Inspec
6
- VERSION = '0.9.3'
6
+ VERSION = '0.9.4'
7
7
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'utils/simpleconfig'
6
+
7
+ # Parses a ini file
8
+ # Usage:
9
+ # descibe ini do
10
+ # its("auth_protocol") { should eq "https" }
11
+ # end
12
+ class IniConfig < JsonConfig
13
+ name 'ini'
14
+
15
+ # override file load and parse hash with simple config
16
+ def parse(content)
17
+ SimpleConfig.new(content).params
18
+ end
19
+
20
+ def to_s
21
+ "INI #{@path}"
22
+ end
23
+ end
@@ -15,7 +15,21 @@ class JsonConfig < Inspec.resource(1)
15
15
 
16
16
  def initialize(path)
17
17
  @path = path
18
- @file_content = inspec.file(@path).content
18
+ @file = inspec.file(@path)
19
+ @file_content = @file.content
20
+
21
+ # check if file is available
22
+ if !@file.file?
23
+ skip_resource "Can't find file \"#{@conf_path}\""
24
+ return @params = {}
25
+ end
26
+
27
+ # check if file is readable
28
+ if @file_content.empty? && @file.size > 0
29
+ skip_resource "Can't read file \"#{@conf_path}\""
30
+ return @params = {}
31
+ end
32
+
19
33
  @params = parse(@file_content)
20
34
  end
21
35
 
@@ -24,21 +38,39 @@ class JsonConfig < Inspec.resource(1)
24
38
  JSON.parse(content)
25
39
  end
26
40
 
41
+ def value(key)
42
+ extract_value(key, @params)
43
+ end
44
+
45
+ # Shorthand to retrieve a parameter name via `#its`.
46
+ # Example: describe json('file') { its('paramX') { should eq 'Y' } }
47
+ #
48
+ # @param [String] name name of the field to retrieve
49
+ # @return [Object] the value stored at this position
50
+ def method_missing(*keys)
51
+ # catch bahavior of rspec its implementation
52
+ # @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
53
+ keys.shift if keys.is_a?(Array) && keys[0] == :[]
54
+ value(keys)
55
+ end
56
+
57
+ def to_s
58
+ "Json #{@path}"
59
+ end
60
+
61
+ private
62
+
27
63
  def extract_value(keys, value)
28
64
  key = keys.shift
29
65
  return nil if key.nil?
30
66
 
31
- # check if key is a num, try to extract from array
32
- if key.to_i.to_s == key
33
- value = value[key.to_i]
34
67
  # if value is an array, iterate over each child
35
- elsif value.is_a?(Array)
68
+ if value.is_a?(Array)
36
69
  value = value.map { |i|
37
70
  extract_value([key], i)
38
71
  }
39
- # normal value extraction
40
72
  else
41
- value = value[key].nil? ? nil : value[key]
73
+ value = value[key.to_s].nil? ? nil : value[key.to_s]
42
74
  end
43
75
 
44
76
  # check if further keys exist
@@ -48,17 +80,4 @@ class JsonConfig < Inspec.resource(1)
48
80
  return value
49
81
  end
50
82
  end
51
-
52
- # Shorthand to retrieve a parameter name via `#its`.
53
- # Example: describe json('file') { its('paramX') { should eq 'Y' } }
54
- #
55
- # @param [String] name name of the field to retrieve
56
- # @return [Object] the value stored at this position
57
- def method_missing(name)
58
- @params[name.to_s]
59
- end
60
-
61
- def to_s
62
- "Json #{@path}"
63
- end
64
83
  end
@@ -23,37 +23,36 @@ class RegistryKey < Inspec.resource(1)
23
23
  end
24
24
 
25
25
  def exists?
26
- !registry_value(@reg_key).nil?
26
+ !registry_key(@reg_key).nil?
27
27
  end
28
28
 
29
29
  def has_value?(value)
30
- val = registry_value(@reg_key)
31
- !val.nil? && val['(default)'.to_s]['value'] == value ? true : false
30
+ val = registry_key(@reg_key)
31
+ !val.nil? && registry_property_value(val, '(default)') == value ? true : false
32
32
  end
33
33
 
34
34
  def has_property?(property_name, property_type = nil)
35
- val = registry_value(@reg_key)
36
- !val.nil? && !val[property_name.to_s].nil? && (property_type.nil? || val[property_name.to_s]['type'] == map2type(property_type)) ? true : false
35
+ val = registry_key(@reg_key)
36
+ !val.nil? && registry_property_exists(val, property_name) && (property_type.nil? || registry_property_type(val, property_name) == map2type(property_type)) ? true : false
37
37
  end
38
38
 
39
39
  # deactivate rubocop, because we need to stay compatible with Serverspe
40
40
  # rubocop:disable Style/OptionalArguments
41
41
  def has_property_value?(property_name, property_type = nil, value)
42
42
  # rubocop:enable Style/OptionalArguments
43
- val = registry_value(@reg_key)
43
+ val = registry_key(@reg_key)
44
44
 
45
45
  # convert value to binary if required
46
46
  value = value.bytes if !property_type.nil? && map2type(property_type) == 3 && !value.is_a?(Array)
47
47
 
48
- !val.nil? && val[property_name.to_s]['value'] == value && (property_type.nil? || val[property_name.to_s]['type'] == map2type(property_type)) ? true : false
48
+ !val.nil? && registry_property_value(val, property_name) == value && (property_type.nil? || registry_property_type(val, property_name) == map2type(property_type)) ? true : false
49
49
  end
50
50
 
51
51
  # returns nil, if not existant or value
52
52
  def method_missing(meth)
53
53
  # get data
54
- val = registry_value(@reg_key)
55
- return nil if val.nil?
56
- val[meth.to_s]['value']
54
+ val = registry_key(@reg_key)
55
+ registry_property_value(val, meth)
57
56
  end
58
57
 
59
58
  def to_s
@@ -62,7 +61,25 @@ class RegistryKey < Inspec.resource(1)
62
61
 
63
62
  private
64
63
 
65
- def registry_value(path)
64
+ def registry_property_exists(regkey, property)
65
+ return false if regkey.nil? || property.nil?
66
+ # always ensure the key is lower case
67
+ !regkey[property.to_s.downcase].nil?
68
+ end
69
+
70
+ def registry_property_value(regkey, property)
71
+ return nil if regkey.nil? || property.nil?
72
+ # always ensure the key is lower case
73
+ regkey[property.to_s.downcase]['value']
74
+ end
75
+
76
+ def registry_property_type(regkey, property)
77
+ return nil if regkey.nil? || property.nil?
78
+ # always ensure the key is lower case
79
+ regkey[property.to_s.downcase]['type']
80
+ end
81
+
82
+ def registry_key(path)
66
83
  return @registy_cache if defined?(@registy_cache)
67
84
 
68
85
  # load registry key and all properties
@@ -87,6 +104,10 @@ class RegistryKey < Inspec.resource(1)
87
104
  # return nil if cmd.exit_status != 0, try to parse json
88
105
  begin
89
106
  @registy_cache = JSON.parse(cmd.stdout)
107
+ # convert keys to lower case
108
+ @registy_cache = Hash[@registy_cache.map do |key, value|
109
+ [key.downcase, value]
110
+ end]
90
111
  rescue JSON::ParserError => _e
91
112
  @registy_cache = nil
92
113
  end
@@ -195,8 +195,7 @@ class UnixUser < UserInfo
195
195
 
196
196
  # parse words
197
197
  params = SimpleConfig.new(
198
- cmd.stdout.chomp,
199
- line_separator: ' ',
198
+ parse_id_entries(cmd.stdout.chomp),
200
199
  assignment_re: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
201
200
  group_re: nil,
202
201
  multiple_values: false,
@@ -210,6 +209,17 @@ class UnixUser < UserInfo
210
209
  groups: parse_value(params['groups']).values,
211
210
  }
212
211
  end
212
+
213
+ # splits the results of id into seperate lines
214
+ def parse_id_entries(raw)
215
+ data = []
216
+ until (index = raw.index(/\)\s{1}/)).nil?
217
+ data.push(raw[0, index+1]) # inclue closing )
218
+ raw = raw[index+2, raw.length-index-2]
219
+ end
220
+ data.push(raw) if !raw.nil?
221
+ data.join("\n")
222
+ end
213
223
  end
214
224
 
215
225
  class LinuxUser < UnixUser
data/test/helper.rb CHANGED
@@ -91,6 +91,7 @@ class MockLoader
91
91
  'example.csv' => mockfile.call('example.csv'),
92
92
  'policyfile.lock.json' => mockfile.call('policyfile.lock.json'),
93
93
  '/sys/class/net/br0/bridge' => mockdir.call(true),
94
+ 'rootwrap.conf' => mockfile.call('rootwrap.conf'),
94
95
  }
95
96
 
96
97
  # create all mock commands
@@ -156,6 +157,10 @@ class MockLoader
156
157
  'id root' => cmd.call('id-root'),
157
158
  'getent passwd root' => cmd.call('getent-passwd-root'),
158
159
  'chage -l root' => cmd.call('chage-l-root'),
160
+ # user information for ldap test
161
+ 'id jfolmer' => cmd.call('id-jfolmer'),
162
+ 'getent passwd jfolmer' => cmd.call('getent-passwd-jfolmer'),
163
+ 'chage -l jfolmer' => cmd.call('chage-l-root'),
159
164
  # user info for mac
160
165
  'id chartmann' => cmd.call('id-chartmann'),
161
166
  'dscl -q . -read /Users/chartmann NFSHomeDirectory PrimaryGroupID RecordName UniqueID UserShell' => cmd.call('dscl'),
@@ -0,0 +1,7 @@
1
+ name,version,license,title,description
2
+ addressable,2.3.6,Apache 2.0,URI Implementation,"Addressable is a replacement for the URI implementation that is part of
3
+ Ruby's standard library. It more closely conforms to the relevant RFCs and
4
+ adds support for IRIs and URI templates."
5
+ ast,2.0.0,MIT,A library for working with Abstract Syntax Trees.,A library for working with Abstract Syntax Trees.
6
+ astrolabe,1.3.0,MIT,An object-oriented AST extension for Parser,An object-oriented AST extension for Parser
7
+ berkshelf,3.2.3,Apache 2.0,"Manages a Cookbook's, or an Application's, Cookbook dependencies","Manages a Cookbook's, or an Application's, Cookbook dependencies"
@@ -0,0 +1,6 @@
1
+ # a comment...
2
+ [client]
3
+ port = 3306
4
+
5
+ [mysqld]
6
+ user = mysql
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "demo",
3
+ "run_list": [
4
+ "apache2",
5
+ "omnibus"
6
+ ],
7
+ "cookbook_locks": {
8
+ "omnibus": {
9
+ "version": "2.2.0"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,7 @@
1
+ driver:
2
+ name: vagrant
3
+ customize:
4
+ memory: 1024
5
+ platforms:
6
+ - name: centos-5.11
7
+ - name: centos-6.7
@@ -6,6 +6,7 @@
6
6
 
7
7
  include_recipe('os_prepare::apt')
8
8
  include_recipe('os_prepare::file')
9
+ include_recipe('os_prepare::json_yaml_csv_ini')
9
10
  include_recipe('os_prepare::package')
10
11
  include_recipe('os_prepare::registry_key')
11
12
  include_recipe('os_prepare::service')
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+ #
5
+ # adds a yaml file
6
+
7
+ gid = 'root'
8
+ gid = 'wheel' if node['platform_family'] == 'freebsd'
9
+
10
+ ['yml', 'json', 'csv', 'ini'].each { |filetype|
11
+
12
+ cookbook_file "/tmp/example.#{filetype}" do
13
+ source "example.#{filetype}"
14
+ owner 'root'
15
+ group gid
16
+ mode '0755'
17
+ action :create
18
+ end
19
+ }
@@ -66,4 +66,9 @@ if node['platform_family'] == 'windows'
66
66
  action :create
67
67
  end
68
68
 
69
+ registry_key 'HKLM\System\CurrentControlSet\Control\Lsa\MSV1_0' do
70
+ values [{ name: 'NTLMMinServerSec', type: :dword, data: 537_395_200 }]
71
+ recursive true
72
+ action :create
73
+ end
69
74
  end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ describe csv('/tmp/example.csv') do
4
+ its('name') { should eq(['addressable', 'ast', 'astrolabe', 'berkshelf']) }
5
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ describe ini('/tmp/example.ini') do
4
+ its(['client','port']) { should eq('3306') }
5
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ describe json('/tmp/example.json') do
4
+ its(['cookbook_locks','omnibus','version']) { should eq('2.2.0') }
5
+ end
@@ -6,11 +6,16 @@ if os.windows?
6
6
  it { should exist }
7
7
  it { should have_value('test') }
8
8
  it { should have_property('binary value', :binary) }
9
+ it { should have_property('Binary value', :binary) }
9
10
  it { should have_property('string value') }
11
+ it { should have_property('String value') }
10
12
  it { should have_property('dword value', :dword) }
11
13
  it { should have_property_value('multistring value', :multi_string, ['test', 'multi','string','data']) }
14
+ it { should have_property_value('Multistring Value', :multi_string, ['test', 'multi','string','data']) }
12
15
  it { should have_property_value('qword value', :qword, 0) }
16
+ it { should have_property_value('Qword value', :qword, 0) }
13
17
  it { should have_property_value('binary value', :binary, 'dfa0f066') }
18
+ it { should have_property_value('Binary value', :binary, 'dfa0f066') }
14
19
  end
15
20
 
16
21
  # serverspec compatability
@@ -33,6 +38,8 @@ if os.windows?
33
38
  describe registry_key('HKLM\System\CurrentControlSet\Control\Session Manager') do
34
39
  it { should exist }
35
40
  it { should_not have_property_value('SafeDllSearchMode', :type_dword, 0) }
41
+ # case-insensitive test
42
+ it { should_not have_property_value('safedllsearchmode', :type_dword, 0) }
36
43
  end
37
44
 
38
45
  describe registry_key('HKLM\System\CurrentControlSet\Services\LanManServer\Parameters') do
@@ -43,6 +50,8 @@ if os.windows?
43
50
  describe registry_key('HKLM\Software\Policies\Microsoft\Internet Explorer\Main') do
44
51
  it { should exist }
45
52
  its('Isolation64Bit') { should eq 1 }
53
+ # check that its is case-insensitive
54
+ its('isolation64bit') { should eq 1 }
46
55
  end
47
56
 
48
57
  describe registry_key('HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services') do
@@ -50,4 +59,9 @@ if os.windows?
50
59
  its('MinEncryptionLevel') { should eq 3 }
51
60
  end
52
61
 
62
+ describe registry_key('HKLM\System\CurrentControlSet\Control\Lsa\MSV1_0') do
63
+ it { should exist }
64
+ its('NTLMMinServerSec') { should eq 537_395_200 }
65
+ its('NtlmMinServerSec') { should eq 537_395_200 }
66
+ end
53
67
  end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ describe yaml('/tmp/example.yml') do
4
+ its(['driver','name']) { should eq('vagrant') }
5
+ end
@@ -0,0 +1 @@
1
+ jfolmer:x:0:0:jfolmer:/jfolmer:/bin/bash
@@ -0,0 +1 @@
1
+ uid=201105(jfolmer) gid=200513(domain users) groups=200513(domain users),200512(domain admins),200572(denied rodc password replication group)
@@ -0,0 +1,7 @@
1
+ # Test the ini file format
2
+ # Configuration for cinder-rootwrap
3
+
4
+ [DEFAULT]
5
+ # List of directories to load filter definitions from (separated by ',').
6
+ filters_path=/etc/cinder/rootwrap.d,/usr/share/cinder/rootwrap
7
+ exec_dirs=/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin
@@ -0,0 +1,16 @@
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::Ini' do
9
+
10
+ it 'check ini parsing on ubuntu' do
11
+ resource = MockLoader.new(:ubuntu1404).load_resource('ini', 'rootwrap.conf')
12
+ result = {"DEFAULT"=>{"filters_path"=>"/etc/cinder/rootwrap.d,/usr/share/cinder/rootwrap", "exec_dirs"=>"/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin"}}
13
+ _(resource.params).must_equal result
14
+ _(resource.value(['DEFAULT','exec_dirs'])).must_equal '/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin'
15
+ end
16
+ end
@@ -20,6 +20,19 @@ describe 'Inspec::Resources::User' do
20
20
  _(resource.warndays).must_equal 7
21
21
  end
22
22
 
23
+ # ubuntu 14.04 test with ldap user
24
+ it 'read user on ubuntu' do
25
+ resource = MockLoader.new(:ubuntu1404).load_resource('user', 'jfolmer')
26
+ _(resource.exists?).must_equal true
27
+ _(resource.group).must_equal 'domain users'
28
+ _(resource.groups).must_equal ['domain users', 'domain admins', 'denied rodc password replication group']
29
+ _(resource.home).must_equal '/jfolmer'
30
+ _(resource.shell).must_equal '/bin/bash'
31
+ _(resource.mindays).must_equal 0
32
+ _(resource.maxdays).must_equal 99999
33
+ _(resource.warndays).must_equal 7
34
+ end
35
+
23
36
  # serverspec compatibility tests (do not test matcher)
24
37
  it 'verify serverspec compatibility' do
25
38
  resource = MockLoader.new(:ubuntu1404).load_resource('user', 'root')
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.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-20 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: r-train
@@ -211,6 +211,7 @@ files:
211
211
  - lib/resources/group.rb
212
212
  - lib/resources/host.rb
213
213
  - lib/resources/inetd_conf.rb
214
+ - lib/resources/ini.rb
214
215
  - lib/resources/interface.rb
215
216
  - lib/resources/iptables.rb
216
217
  - lib/resources/json.rb
@@ -257,17 +258,25 @@ files:
257
258
  - test/helper.rb
258
259
  - test/integration/.kitchen.yml
259
260
  - test/integration/Berksfile
261
+ - test/integration/cookbooks/os_prepare/files/example.csv
262
+ - test/integration/cookbooks/os_prepare/files/example.ini
263
+ - test/integration/cookbooks/os_prepare/files/example.json
264
+ - test/integration/cookbooks/os_prepare/files/example.yml
260
265
  - test/integration/cookbooks/os_prepare/metadata.rb
261
266
  - test/integration/cookbooks/os_prepare/recipes/apt.rb
262
267
  - test/integration/cookbooks/os_prepare/recipes/default.rb
263
268
  - test/integration/cookbooks/os_prepare/recipes/file.rb
269
+ - test/integration/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb
264
270
  - test/integration/cookbooks/os_prepare/recipes/package.rb
265
271
  - test/integration/cookbooks/os_prepare/recipes/registry_key.rb
266
272
  - test/integration/cookbooks/os_prepare/recipes/service.rb
267
273
  - test/integration/test/integration/default/_debug_spec.rb
268
274
  - test/integration/test/integration/default/apt_spec.rb
275
+ - test/integration/test/integration/default/csv_spec.rb
269
276
  - test/integration/test/integration/default/file_spec.rb
270
277
  - test/integration/test/integration/default/group_spec.rb
278
+ - test/integration/test/integration/default/ini_spec.rb
279
+ - test/integration/test/integration/default/json_spec.rb
271
280
  - test/integration/test/integration/default/kernel_module_spec.rb
272
281
  - test/integration/test/integration/default/kernel_parameter_spec.rb
273
282
  - test/integration/test/integration/default/package_spec.rb
@@ -275,6 +284,7 @@ files:
275
284
  - test/integration/test/integration/default/registry_key_spec.rb
276
285
  - test/integration/test/integration/default/service_spec.rb
277
286
  - test/integration/test/integration/default/user_spec.rb
287
+ - test/integration/test/integration/default/yaml_spec.rb
278
288
  - test/resource/command_test.rb
279
289
  - test/resource/dsl_test.rb
280
290
  - test/resource/file_test.rb
@@ -306,8 +316,10 @@ files:
306
316
  - test/unit/mock/cmd/get-service-dhcp
307
317
  - test/unit/mock/cmd/get-windows-feature
308
318
  - test/unit/mock/cmd/getent-hosts-example.com
319
+ - test/unit/mock/cmd/getent-passwd-jfolmer
309
320
  - test/unit/mock/cmd/getent-passwd-root
310
321
  - test/unit/mock/cmd/id-chartmann
322
+ - test/unit/mock/cmd/id-jfolmer
311
323
  - test/unit/mock/cmd/id-root
312
324
  - test/unit/mock/cmd/initctl-show-config-ssh
313
325
  - test/unit/mock/cmd/initctl-status-ssh
@@ -349,6 +361,7 @@ files:
349
361
  - test/unit/mock/files/ntp.conf
350
362
  - test/unit/mock/files/passwd
351
363
  - test/unit/mock/files/policyfile.lock.json
364
+ - test/unit/mock/files/rootwrap.conf
352
365
  - test/unit/mock/files/ssh_config
353
366
  - test/unit/mock/files/sshd_config
354
367
  - test/unit/mock/profiles/empty/metadata.rb
@@ -369,6 +382,7 @@ files:
369
382
  - test/unit/resources/group_test.rb
370
383
  - test/unit/resources/host_test.rb
371
384
  - test/unit/resources/inetd_conf_test.rb
385
+ - test/unit/resources/ini_test.rb
372
386
  - test/unit/resources/interface_test.rb
373
387
  - test/unit/resources/iptables_test.rb
374
388
  - test/unit/resources/json_test.rb
@@ -427,17 +441,25 @@ test_files:
427
441
  - test/helper.rb
428
442
  - test/integration/.kitchen.yml
429
443
  - test/integration/Berksfile
444
+ - test/integration/cookbooks/os_prepare/files/example.csv
445
+ - test/integration/cookbooks/os_prepare/files/example.ini
446
+ - test/integration/cookbooks/os_prepare/files/example.json
447
+ - test/integration/cookbooks/os_prepare/files/example.yml
430
448
  - test/integration/cookbooks/os_prepare/metadata.rb
431
449
  - test/integration/cookbooks/os_prepare/recipes/apt.rb
432
450
  - test/integration/cookbooks/os_prepare/recipes/default.rb
433
451
  - test/integration/cookbooks/os_prepare/recipes/file.rb
452
+ - test/integration/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb
434
453
  - test/integration/cookbooks/os_prepare/recipes/package.rb
435
454
  - test/integration/cookbooks/os_prepare/recipes/registry_key.rb
436
455
  - test/integration/cookbooks/os_prepare/recipes/service.rb
437
456
  - test/integration/test/integration/default/_debug_spec.rb
438
457
  - test/integration/test/integration/default/apt_spec.rb
458
+ - test/integration/test/integration/default/csv_spec.rb
439
459
  - test/integration/test/integration/default/file_spec.rb
440
460
  - test/integration/test/integration/default/group_spec.rb
461
+ - test/integration/test/integration/default/ini_spec.rb
462
+ - test/integration/test/integration/default/json_spec.rb
441
463
  - test/integration/test/integration/default/kernel_module_spec.rb
442
464
  - test/integration/test/integration/default/kernel_parameter_spec.rb
443
465
  - test/integration/test/integration/default/package_spec.rb
@@ -445,6 +467,7 @@ test_files:
445
467
  - test/integration/test/integration/default/registry_key_spec.rb
446
468
  - test/integration/test/integration/default/service_spec.rb
447
469
  - test/integration/test/integration/default/user_spec.rb
470
+ - test/integration/test/integration/default/yaml_spec.rb
448
471
  - test/resource/command_test.rb
449
472
  - test/resource/dsl_test.rb
450
473
  - test/resource/file_test.rb
@@ -476,8 +499,10 @@ test_files:
476
499
  - test/unit/mock/cmd/get-service-dhcp
477
500
  - test/unit/mock/cmd/get-windows-feature
478
501
  - test/unit/mock/cmd/getent-hosts-example.com
502
+ - test/unit/mock/cmd/getent-passwd-jfolmer
479
503
  - test/unit/mock/cmd/getent-passwd-root
480
504
  - test/unit/mock/cmd/id-chartmann
505
+ - test/unit/mock/cmd/id-jfolmer
481
506
  - test/unit/mock/cmd/id-root
482
507
  - test/unit/mock/cmd/initctl-show-config-ssh
483
508
  - test/unit/mock/cmd/initctl-status-ssh
@@ -519,6 +544,7 @@ test_files:
519
544
  - test/unit/mock/files/ntp.conf
520
545
  - test/unit/mock/files/passwd
521
546
  - test/unit/mock/files/policyfile.lock.json
547
+ - test/unit/mock/files/rootwrap.conf
522
548
  - test/unit/mock/files/ssh_config
523
549
  - test/unit/mock/files/sshd_config
524
550
  - test/unit/mock/profiles/empty/metadata.rb
@@ -539,6 +565,7 @@ test_files:
539
565
  - test/unit/resources/group_test.rb
540
566
  - test/unit/resources/host_test.rb
541
567
  - test/unit/resources/inetd_conf_test.rb
568
+ - test/unit/resources/ini_test.rb
542
569
  - test/unit/resources/interface_test.rb
543
570
  - test/unit/resources/iptables_test.rb
544
571
  - test/unit/resources/json_test.rb