inspec-core 4.7.3 → 4.7.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bundles/inspec-supermarket/api.rb +2 -1
- data/lib/bundles/inspec-supermarket/cli.rb +6 -6
- data/lib/bundles/inspec-supermarket/target.rb +1 -0
- data/lib/fetchers/git.rb +3 -1
- data/lib/fetchers/mock.rb +1 -0
- data/lib/fetchers/url.rb +6 -3
- data/lib/inspec/backend.rb +1 -0
- data/lib/inspec/base_cli.rb +4 -1
- data/lib/inspec/cli.rb +5 -4
- data/lib/inspec/config.rb +9 -1
- data/lib/inspec/control_eval_context.rb +1 -0
- data/lib/inspec/dependencies/cache.rb +1 -0
- data/lib/inspec/dependencies/dependency_set.rb +2 -0
- data/lib/inspec/dependencies/lockfile.rb +1 -0
- data/lib/inspec/dependencies/requirement.rb +8 -7
- data/lib/inspec/dependencies/resolver.rb +3 -3
- data/lib/inspec/describe.rb +1 -0
- data/lib/inspec/dsl.rb +1 -1
- data/lib/inspec/dsl_shared.rb +1 -1
- data/lib/inspec/env_printer.rb +4 -4
- data/lib/inspec/fetcher.rb +4 -2
- data/lib/inspec/file_provider.rb +18 -8
- data/lib/inspec/formatters/base.rb +5 -0
- data/lib/inspec/impact.rb +2 -0
- data/lib/inspec/input_registry.rb +14 -13
- data/lib/inspec/metadata.rb +6 -2
- data/lib/inspec/method_source.rb +1 -1
- data/lib/inspec/objects/control.rb +4 -1
- data/lib/inspec/objects/describe.rb +3 -1
- data/lib/inspec/objects/input.rb +6 -5
- data/lib/inspec/objects/list.rb +2 -0
- data/lib/inspec/objects/test.rb +3 -2
- data/lib/inspec/plugin/v1/plugin_types/resource.rb +7 -0
- data/lib/inspec/plugin/v1/plugins.rb +4 -3
- data/lib/inspec/plugin/v1/registry.rb +3 -2
- data/lib/inspec/plugin/v2.rb +1 -0
- data/lib/inspec/plugin/v2/activator.rb +2 -0
- data/lib/inspec/plugin/v2/config_file.rb +4 -1
- data/lib/inspec/plugin/v2/filter.rb +1 -0
- data/lib/inspec/plugin/v2/installer.rb +9 -7
- data/lib/inspec/plugin/v2/loader.rb +2 -0
- data/lib/inspec/plugin/v2/plugin_base.rb +1 -0
- data/lib/inspec/plugin/v2/plugin_types/cli.rb +2 -2
- data/lib/inspec/plugin/v2/registry.rb +3 -1
- data/lib/inspec/profile.rb +13 -6
- data/lib/inspec/profile_context.rb +4 -2
- data/lib/inspec/reporters/cli.rb +14 -10
- data/lib/inspec/reporters/json.rb +1 -0
- data/lib/inspec/reporters/json_automate.rb +3 -0
- data/lib/inspec/reporters/json_min.rb +2 -0
- data/lib/inspec/resource.rb +2 -0
- data/lib/inspec/resources/aide_conf.rb +4 -3
- data/lib/inspec/resources/apache_conf.rb +1 -1
- data/lib/inspec/resources/apt.rb +2 -0
- data/lib/inspec/resources/auditd.rb +19 -18
- data/lib/inspec/resources/bridge.rb +5 -2
- data/lib/inspec/resources/chocolatey_package.rb +2 -0
- data/lib/inspec/resources/command.rb +1 -1
- data/lib/inspec/resources/crontab.rb +9 -8
- data/lib/inspec/resources/csv.rb +1 -1
- data/lib/inspec/resources/dh_params.rb +6 -0
- data/lib/inspec/resources/docker.rb +37 -34
- data/lib/inspec/resources/docker_container.rb +1 -0
- data/lib/inspec/resources/docker_image.rb +1 -0
- data/lib/inspec/resources/docker_plugin.rb +1 -0
- data/lib/inspec/resources/docker_service.rb +1 -0
- data/lib/inspec/resources/elasticsearch.rb +24 -24
- data/lib/inspec/resources/etc_fstab.rb +8 -7
- data/lib/inspec/resources/etc_group.rb +4 -0
- data/lib/inspec/resources/etc_hosts.rb +4 -4
- data/lib/inspec/resources/etc_hosts_allow_deny.rb +5 -3
- data/lib/inspec/resources/file.rb +4 -1
- data/lib/inspec/resources/filesystem.rb +5 -3
- data/lib/inspec/resources/firewalld.rb +7 -4
- data/lib/inspec/resources/groups.rb +6 -4
- data/lib/inspec/resources/grub_conf.rb +3 -0
- data/lib/inspec/resources/host.rb +5 -3
- data/lib/inspec/resources/http.rb +6 -4
- data/lib/inspec/resources/iis_app.rb +1 -0
- data/lib/inspec/resources/iis_app_pool.rb +1 -1
- data/lib/inspec/resources/iis_site.rb +4 -3
- data/lib/inspec/resources/interface.rb +10 -7
- data/lib/inspec/resources/json.rb +1 -1
- data/lib/inspec/resources/kernel_module.rb +1 -1
- data/lib/inspec/resources/kernel_parameter.rb +2 -1
- data/lib/inspec/resources/key_rsa.rb +5 -0
- data/lib/inspec/resources/mount.rb +3 -1
- data/lib/inspec/resources/mysql_conf.rb +3 -1
- data/lib/inspec/resources/mysql_session.rb +2 -0
- data/lib/inspec/resources/nginx.rb +1 -0
- data/lib/inspec/resources/nginx_conf.rb +10 -6
- data/lib/inspec/resources/ntp_conf.rb +1 -0
- data/lib/inspec/resources/oneget.rb +1 -1
- data/lib/inspec/resources/oracledb_session.rb +4 -2
- data/lib/inspec/resources/os_env.rb +1 -0
- data/lib/inspec/resources/package.rb +10 -6
- data/lib/inspec/resources/packages.rb +7 -5
- data/lib/inspec/resources/passwd.rb +7 -7
- data/lib/inspec/resources/pip.rb +2 -0
- data/lib/inspec/resources/port.rb +22 -8
- data/lib/inspec/resources/postgres.rb +2 -1
- data/lib/inspec/resources/postgres_conf.rb +2 -0
- data/lib/inspec/resources/postgres_hba_conf.rb +6 -6
- data/lib/inspec/resources/postgres_ident_conf.rb +3 -3
- data/lib/inspec/resources/processes.rb +16 -15
- data/lib/inspec/resources/rabbitmq_config.rb +2 -0
- data/lib/inspec/resources/registry_key.rb +8 -3
- data/lib/inspec/resources/security_identifier.rb +3 -1
- data/lib/inspec/resources/security_policy.rb +2 -1
- data/lib/inspec/resources/service.rb +13 -1
- data/lib/inspec/resources/shadow.rb +1 -0
- data/lib/inspec/resources/ssh_config.rb +2 -0
- data/lib/inspec/resources/ssl.rb +12 -11
- data/lib/inspec/resources/users.rb +29 -19
- data/lib/inspec/resources/virtualization.rb +10 -0
- data/lib/inspec/resources/windows_feature.rb +1 -1
- data/lib/inspec/resources/windows_hotfix.rb +2 -0
- data/lib/inspec/resources/windows_task.rb +4 -0
- data/lib/inspec/resources/wmi.rb +2 -1
- data/lib/inspec/resources/x509_certificate.rb +8 -0
- data/lib/inspec/resources/xinetd_conf.rb +10 -9
- data/lib/inspec/resources/yum.rb +15 -11
- data/lib/inspec/resources/zfs_dataset.rb +4 -2
- data/lib/inspec/resources/zfs_pool.rb +2 -1
- data/lib/inspec/rule.rb +11 -1
- data/lib/inspec/runner.rb +9 -6
- data/lib/inspec/runner_rspec.rb +10 -8
- data/lib/inspec/schema.rb +1 -0
- data/lib/inspec/secrets.rb +1 -0
- data/lib/inspec/secrets/yaml.rb +1 -0
- data/lib/inspec/shell.rb +20 -19
- data/lib/inspec/shell_detector.rb +1 -1
- data/lib/inspec/source_reader.rb +2 -0
- data/lib/inspec/ui.rb +1 -0
- data/lib/inspec/utils/deprecation/config_file.rb +8 -4
- data/lib/inspec/utils/erlang_parser.rb +2 -0
- data/lib/inspec/utils/file_reader.rb +1 -1
- data/lib/inspec/utils/filter.rb +16 -3
- data/lib/inspec/utils/find_files.rb +2 -2
- data/lib/inspec/utils/object_traversal.rb +1 -0
- data/lib/inspec/utils/parser.rb +2 -0
- data/lib/inspec/utils/simpleconfig.rb +4 -1
- data/lib/inspec/utils/telemetry/global_methods.rb +1 -0
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +4 -1
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +12 -11
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +15 -11
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +4 -2
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +13 -12
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +3 -0
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +1 -1
- data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +2 -2
- data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +1 -0
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +6 -5
- data/lib/plugins/shared/core_plugin_test_helper.rb +1 -0
- data/lib/source_readers/flat.rb +1 -0
- data/lib/source_readers/inspec.rb +1 -0
- metadata +2 -2
data/lib/inspec/fetcher.rb
CHANGED
@@ -11,12 +11,13 @@ module Inspec
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
NON_FETCHER_KEYS =
|
14
|
+
NON_FETCHER_KEYS = %i{name version_constraint cwd backend cache sha256}.freeze
|
15
15
|
def fetcher_specified?(target)
|
16
16
|
# Only set a default for Hash-based (i.e. from
|
17
17
|
# inspec.yml/inspec.lock) targets
|
18
18
|
|
19
|
-
return true
|
19
|
+
return true unless target.respond_to?(:keys)
|
20
|
+
|
20
21
|
!(target.keys - NON_FETCHER_KEYS).empty?
|
21
22
|
end
|
22
23
|
|
@@ -31,6 +32,7 @@ module Inspec
|
|
31
32
|
if version != 1
|
32
33
|
raise "Only fetcher version 1 is supported!"
|
33
34
|
end
|
35
|
+
|
34
36
|
Inspec::Plugins::Fetcher
|
35
37
|
end
|
36
38
|
end
|
data/lib/inspec/file_provider.rb
CHANGED
@@ -21,8 +21,7 @@ module Inspec
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def initialize(_path)
|
25
|
-
end
|
24
|
+
def initialize(_path); end
|
26
25
|
|
27
26
|
# List all files that are offered.
|
28
27
|
#
|
@@ -80,12 +79,14 @@ module Inspec
|
|
80
79
|
def read(file)
|
81
80
|
return nil unless files.include?(file)
|
82
81
|
return nil unless File.file?(file)
|
82
|
+
|
83
83
|
File.read(file)
|
84
84
|
end
|
85
85
|
|
86
86
|
def binread(file)
|
87
87
|
return nil unless files.include?(file)
|
88
88
|
return nil unless File.file?(file)
|
89
|
+
|
89
90
|
File.binread(file)
|
90
91
|
end
|
91
92
|
end
|
@@ -133,10 +134,12 @@ module Inspec
|
|
133
134
|
|
134
135
|
def read_from_zip(file)
|
135
136
|
return nil unless @files.include?(file)
|
137
|
+
|
136
138
|
res = nil
|
137
139
|
walk_zip(@path) do |io|
|
138
140
|
while (entry = io.get_next_entry)
|
139
141
|
next unless file == entry.name
|
142
|
+
|
140
143
|
res = io.read
|
141
144
|
break
|
142
145
|
end
|
@@ -172,6 +175,7 @@ module Inspec
|
|
172
175
|
walk_tar(@path) do |files|
|
173
176
|
files.each do |file|
|
174
177
|
next unless @files.include?(file.full_name)
|
178
|
+
|
175
179
|
final_path = File.join(destination_path, file.full_name)
|
176
180
|
|
177
181
|
# This removes the top level directory (and any other files) to ensure
|
@@ -199,11 +203,13 @@ module Inspec
|
|
199
203
|
|
200
204
|
def read_from_tar(file)
|
201
205
|
return nil unless @files.include?(file)
|
206
|
+
|
202
207
|
res = nil
|
203
208
|
# NB `TarReader` includes `Enumerable` beginning with Ruby 2.x
|
204
209
|
walk_tar(@path) do |tar|
|
205
210
|
tar.each do |entry|
|
206
211
|
next unless entry.file? && [file, "./#{file}"].include?(entry.full_name)
|
212
|
+
|
207
213
|
res = entry.read
|
208
214
|
break
|
209
215
|
end
|
@@ -235,16 +241,17 @@ module Inspec
|
|
235
241
|
# PAX-formatted tar files. Do not do any translation of the path if the
|
236
242
|
# path is an absolute path.
|
237
243
|
@files = parent.files
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
+
.find_all { |x| x.start_with?(prefix) && x != prefix }
|
245
|
+
.map { |x| x[prefix.length..-1] }
|
246
|
+
.map do |x|
|
247
|
+
path = Pathname.new(x)
|
248
|
+
path.absolute? ? path.to_s : path.relative_path_from(Pathname.new(".")).to_s
|
249
|
+
end
|
244
250
|
end
|
245
251
|
|
246
252
|
def abs_path(file)
|
247
253
|
return nil if file.nil?
|
254
|
+
|
248
255
|
prefix + file
|
249
256
|
end
|
250
257
|
|
@@ -278,12 +285,14 @@ module Inspec
|
|
278
285
|
|
279
286
|
def get_folder_prefix(fs)
|
280
287
|
return get_files_prefix(fs) if fs.length == 1
|
288
|
+
|
281
289
|
first, *rest = fs
|
282
290
|
pre = prefix_candidate_for(first)
|
283
291
|
|
284
292
|
if rest.all? { |i| i.start_with? pre }
|
285
293
|
return get_folder_prefix(rest)
|
286
294
|
end
|
295
|
+
|
287
296
|
get_files_prefix(fs)
|
288
297
|
end
|
289
298
|
|
@@ -303,6 +312,7 @@ module Inspec
|
|
303
312
|
|
304
313
|
new_pre = get_prefix(rest)
|
305
314
|
return new_pre if pre.start_with? new_pre
|
315
|
+
|
306
316
|
# edge case: completely different prefixes; retry prefix detection
|
307
317
|
a = File.dirname(pre + "a")
|
308
318
|
b = File.dirname(new_pre + "b")
|
@@ -49,6 +49,7 @@ module Inspec::Formatters
|
|
49
49
|
end
|
50
50
|
|
51
51
|
next if e.is_a? RSpec::Expectations::ExpectationNotMetError
|
52
|
+
|
52
53
|
hash[:exception] = e.class.name
|
53
54
|
hash[:backtrace] = e.backtrace
|
54
55
|
end
|
@@ -101,6 +102,7 @@ module Inspec::Formatters
|
|
101
102
|
|
102
103
|
all_unique_controls.each do |control|
|
103
104
|
next unless control[:results]
|
105
|
+
|
104
106
|
if control[:results].any? { |r| r[:status] == "failed" }
|
105
107
|
failed += 1
|
106
108
|
elsif control[:results].any? { |r| r[:status] == "skipped" }
|
@@ -185,6 +187,7 @@ module Inspec::Formatters
|
|
185
187
|
# the proper report.
|
186
188
|
def platform(field)
|
187
189
|
return nil if @backend.nil?
|
190
|
+
|
188
191
|
begin
|
189
192
|
@backend.platform[field]
|
190
193
|
rescue Train::Error => e
|
@@ -195,6 +198,7 @@ module Inspec::Formatters
|
|
195
198
|
|
196
199
|
def backend_target
|
197
200
|
return nil if @backend.nil?
|
201
|
+
|
198
202
|
connection = @backend.backend
|
199
203
|
connection.respond_to?(:uri) ? connection.uri : nil
|
200
204
|
end
|
@@ -218,6 +222,7 @@ module Inspec::Formatters
|
|
218
222
|
def example2control(example)
|
219
223
|
profile = profile_from_example(example)
|
220
224
|
return nil unless profile&.[](:controls)
|
225
|
+
|
221
226
|
profile[:controls].find { |x| x[:id] == example[:id] }
|
222
227
|
end
|
223
228
|
|
data/lib/inspec/impact.rb
CHANGED
@@ -12,6 +12,7 @@ module Inspec::Impact
|
|
12
12
|
# return if its a number
|
13
13
|
return value if is_number?(value)
|
14
14
|
raise Inspec::ImpactError, "'#{value}' is not a valid impact name. Valid impact names: none, low, medium, high, critical." unless IMPACT_SCORES.key?(value.downcase)
|
15
|
+
|
15
16
|
IMPACT_SCORES[value]
|
16
17
|
end
|
17
18
|
|
@@ -25,6 +26,7 @@ module Inspec::Impact
|
|
25
26
|
def self.string_from_impact(value)
|
26
27
|
value = value.to_f
|
27
28
|
raise Inspec::ImpactError, "'#{value}' is not a valid impact score. Valid impact scores: [0.0 - 1.0]." if value < 0 || value > 1
|
29
|
+
|
28
30
|
IMPACT_SCORES.reverse_each do |name, impact|
|
29
31
|
return name if value >= impact
|
30
32
|
end
|
@@ -169,11 +169,12 @@ module Inspec
|
|
169
169
|
data = Inspec::SecretsBackend.resolve(path)
|
170
170
|
if data.nil?
|
171
171
|
raise Inspec::Exceptions::SecretsBackendNotFound,
|
172
|
-
|
173
|
-
|
172
|
+
"Cannot find parser for inputs file '#{path}'. " \
|
173
|
+
"Check to make sure file has the appropriate extension."
|
174
174
|
end
|
175
175
|
|
176
176
|
next if data.inputs.nil?
|
177
|
+
|
177
178
|
data.inputs.each do |input_name, input_value|
|
178
179
|
evt = Inspec::Input::Event.new(
|
179
180
|
value: input_value,
|
@@ -190,14 +191,14 @@ module Inspec
|
|
190
191
|
def validate_inputs_file_readability!(path)
|
191
192
|
unless File.exist?(path)
|
192
193
|
raise Inspec::Exceptions::InputsFileDoesNotExist,
|
193
|
-
|
194
|
-
|
194
|
+
"Cannot find input file '#{path}'. " \
|
195
|
+
"Check to make sure file exists."
|
195
196
|
end
|
196
197
|
|
197
198
|
unless File.readable?(path)
|
198
199
|
raise Inspec::Exceptions::InputsFileNotReadable,
|
199
|
-
|
200
|
-
|
200
|
+
"Cannot read input file '#{path}'. " \
|
201
|
+
"Check to make sure file is readable."
|
201
202
|
end
|
202
203
|
|
203
204
|
true
|
@@ -260,13 +261,13 @@ module Inspec
|
|
260
261
|
|
261
262
|
# These class methods are convenience methods so you don't always
|
262
263
|
# have to call #instance when calling the registry
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
264
|
+
%i{
|
265
|
+
find_or_register_input
|
266
|
+
register_profile_alias
|
267
|
+
list_inputs_for_profile
|
268
|
+
list_potential_input_names_for_profile
|
269
|
+
bind_profile_inputs
|
270
|
+
}.each do |meth|
|
270
271
|
define_singleton_method(meth) do |*args|
|
271
272
|
instance.send(meth, *args)
|
272
273
|
end
|
data/lib/inspec/metadata.rb
CHANGED
@@ -74,6 +74,7 @@ module Inspec
|
|
74
74
|
|
75
75
|
%w{name version}.each do |field|
|
76
76
|
next unless params[field.to_sym].nil?
|
77
|
+
|
77
78
|
errors.push("Missing profile #{field} in #{ref}")
|
78
79
|
end
|
79
80
|
|
@@ -89,6 +90,7 @@ module Inspec
|
|
89
90
|
|
90
91
|
%w{title summary maintainer copyright license}.each do |field|
|
91
92
|
next unless params[field.to_sym].nil?
|
93
|
+
|
92
94
|
warnings.push("Missing profile #{field} in #{ref}")
|
93
95
|
end
|
94
96
|
|
@@ -151,8 +153,8 @@ module Inspec
|
|
151
153
|
when nil then nil
|
152
154
|
else
|
153
155
|
Inspec.deprecate(:supports_syntax,
|
154
|
-
|
155
|
-
|
156
|
+
"Do not use deprecated `supports: #{x}` syntax. Instead use:\n"\
|
157
|
+
"supports:\n - os-family: #{x}\n\n")
|
156
158
|
{ :'os-family' => x } # rubocop:disable Style/HashSyntax
|
157
159
|
end
|
158
160
|
end
|
@@ -182,12 +184,14 @@ module Inspec
|
|
182
184
|
# Crudely slug the target to not contain slashes, to avoid breaking
|
183
185
|
# unit tests that look for warning sequences
|
184
186
|
return if original_target.to_s.empty?
|
187
|
+
|
185
188
|
metadata.params[:title] = "tests from #{original_target}"
|
186
189
|
metadata.params[:name] = metadata.params[:title].gsub(%r{[\/\\]}, ".")
|
187
190
|
end
|
188
191
|
|
189
192
|
def self.finalize(metadata, profile_id, options, logger = nil)
|
190
193
|
return nil if metadata.nil?
|
194
|
+
|
191
195
|
param = metadata.params || {}
|
192
196
|
options ||= {}
|
193
197
|
param["version"] = param["version"].to_s unless param["version"].nil?
|
data/lib/inspec/method_source.rb
CHANGED
@@ -14,7 +14,7 @@ module Inspec
|
|
14
14
|
::MethodSource.expression_at(src.lines, location[:line]).force_encoding("utf-8")
|
15
15
|
rescue SyntaxError => e
|
16
16
|
raise ::MethodSource::SourceNotFoundError,
|
17
|
-
|
17
|
+
"Could not parse source at #{location[:ref]}:#{location[:line]}: #{e.message}"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -33,6 +33,7 @@ module Inspec
|
|
33
33
|
descriptions.each do |label, text|
|
34
34
|
if label == :default
|
35
35
|
next if text.nil? || (text == "") # don't render empty/nil desc
|
36
|
+
|
36
37
|
res.push " desc #{prettyprint_text(text, 2)}"
|
37
38
|
else
|
38
39
|
res.push " desc #{label.to_s.inspect}, #{prettyprint_text(text, 2)}"
|
@@ -52,6 +53,7 @@ module Inspec
|
|
52
53
|
def print_ref(x)
|
53
54
|
return x.inspect if x.is_a?(String)
|
54
55
|
raise "Cannot process the ref: #{x}" unless x.is_a?(Hash)
|
56
|
+
|
55
57
|
"(" + x.inspect + ")"
|
56
58
|
end
|
57
59
|
|
@@ -62,7 +64,8 @@ module Inspec
|
|
62
64
|
# @return [String] pretty-printed textblock
|
63
65
|
def prettyprint_text(s, depth)
|
64
66
|
txt = s.to_s.inspect.gsub('\n', "\n")
|
65
|
-
return txt
|
67
|
+
return txt unless txt.include?("\n")
|
68
|
+
|
66
69
|
middle = indent(txt[1..-2], depth + 2)
|
67
70
|
txt[0] + "\n" + middle + "\n" + " " * depth + txt[-1]
|
68
71
|
end
|
@@ -62,7 +62,8 @@ module Inspec
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def to_ruby
|
65
|
-
return rb_skip
|
65
|
+
return rb_skip unless skip.nil?
|
66
|
+
|
66
67
|
rb_describe
|
67
68
|
end
|
68
69
|
|
@@ -72,6 +73,7 @@ module Inspec
|
|
72
73
|
|
73
74
|
def resource
|
74
75
|
return nil if qualifier.empty? || qualifier[0].empty? || qualifier[0][0].empty?
|
76
|
+
|
75
77
|
qualifier[0][0]
|
76
78
|
end
|
77
79
|
|
data/lib/inspec/objects/input.rb
CHANGED
@@ -309,9 +309,10 @@ module Inspec
|
|
309
309
|
|
310
310
|
def to_hash
|
311
311
|
as_hash = { name: name, options: {} }
|
312
|
-
|
312
|
+
%i{description title identifier type required value}.each do |field|
|
313
313
|
val = send(field)
|
314
314
|
next if val.nil?
|
315
|
+
|
315
316
|
as_hash[:options][field] = val
|
316
317
|
end
|
317
318
|
as_hash
|
@@ -372,11 +373,11 @@ module Inspec
|
|
372
373
|
|
373
374
|
invalid_type = false
|
374
375
|
if type_req == "Regexp"
|
375
|
-
invalid_type = true
|
376
|
+
invalid_type = true unless valid_regexp?(proposed_value)
|
376
377
|
elsif type_req == "Numeric"
|
377
|
-
invalid_type = true
|
378
|
+
invalid_type = true unless valid_numeric?(proposed_value)
|
378
379
|
elsif type_req == "Boolean"
|
379
|
-
invalid_type = true
|
380
|
+
invalid_type = true unless [true, false].include?(proposed_value)
|
380
381
|
elsif proposed_value.is_a?(Module.const_get(type_req)) == false
|
381
382
|
# TODO: why is this case here?
|
382
383
|
invalid_type = true
|
@@ -400,7 +401,7 @@ module Inspec
|
|
400
401
|
"Regex" => "Regexp",
|
401
402
|
}
|
402
403
|
type_req = abbreviations[type_req] if abbreviations.key?(type_req)
|
403
|
-
|
404
|
+
unless VALID_TYPES.include?(type_req)
|
404
405
|
error = Inspec::Input::TypeError.new
|
405
406
|
error.input_type = type_req
|
406
407
|
raise error, "Type '#{error.input_type}' is not a valid input type."
|
data/lib/inspec/objects/list.rb
CHANGED
@@ -2,10 +2,12 @@ module Inspec
|
|
2
2
|
class List < Value
|
3
3
|
def map
|
4
4
|
raise "Inspec::List.map needs to be called with a block" unless block_given?
|
5
|
+
|
5
6
|
t = List.new
|
6
7
|
t.qualifier = [["x"]]
|
7
8
|
yield(t)
|
8
9
|
return if t.qualifier == [["x"]]
|
10
|
+
|
9
11
|
@qualifier.push(["map", "{ |x| #{t.to_ruby} }"])
|
10
12
|
self
|
11
13
|
end
|
data/lib/inspec/objects/test.rb
CHANGED
@@ -14,7 +14,8 @@ module Inspec
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def to_ruby
|
17
|
-
return rb_skip
|
17
|
+
return rb_skip unless skip.nil?
|
18
|
+
|
18
19
|
rb_describe
|
19
20
|
end
|
20
21
|
|
@@ -74,7 +75,7 @@ module Inspec
|
|
74
75
|
" " + expectation.inspect
|
75
76
|
end
|
76
77
|
format("%s%sdescribe %s do\n %s { should%s %s%s }\nend",
|
77
|
-
|
78
|
+
only_if_clause, vars, res, itsy, naughty, matcher, xpect)
|
78
79
|
end
|
79
80
|
|
80
81
|
def rb_skip
|
@@ -17,23 +17,27 @@ module Inspec
|
|
17
17
|
module ResourceDSL
|
18
18
|
def name(name = nil)
|
19
19
|
return if name.nil?
|
20
|
+
|
20
21
|
@name = name
|
21
22
|
__register(name, self)
|
22
23
|
end
|
23
24
|
|
24
25
|
def desc(description = nil)
|
25
26
|
return if description.nil?
|
27
|
+
|
26
28
|
__resource_registry[@name].desc(description)
|
27
29
|
end
|
28
30
|
|
29
31
|
def supports(criteria = nil)
|
30
32
|
return if criteria.nil?
|
33
|
+
|
31
34
|
Inspec::Resource.supports[@name] ||= []
|
32
35
|
Inspec::Resource.supports[@name].push(criteria)
|
33
36
|
end
|
34
37
|
|
35
38
|
def example(example = nil)
|
36
39
|
return if example.nil?
|
40
|
+
|
37
41
|
__resource_registry[@name].example(example)
|
38
42
|
end
|
39
43
|
|
@@ -100,17 +104,20 @@ module Inspec
|
|
100
104
|
# The new platform resources have methods generated on the fly
|
101
105
|
# for inspec check to work we need to skip these train errors
|
102
106
|
raise unless test_backend && e.receiver.class == Train::Transports::Mock::Connection
|
107
|
+
|
103
108
|
skip_resource(e.message)
|
104
109
|
end
|
105
110
|
end
|
106
111
|
|
107
112
|
def self.desc(description = nil)
|
108
113
|
return @description if description.nil?
|
114
|
+
|
109
115
|
@description = description
|
110
116
|
end
|
111
117
|
|
112
118
|
def self.example(example = nil)
|
113
119
|
return @example if example.nil?
|
120
|
+
|
114
121
|
@example = example
|
115
122
|
end
|
116
123
|
|