inspec-core 4.23.4 → 4.24.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +16 -33
  3. data/inspec-core.gemspec +8 -9
  4. data/lib/bundles/inspec-supermarket/api.rb +2 -2
  5. data/lib/bundles/inspec-supermarket/target.rb +1 -1
  6. data/lib/inspec/archive/tar.rb +1 -1
  7. data/lib/inspec/archive/zip.rb +3 -3
  8. data/lib/inspec/base_cli.rb +7 -1
  9. data/lib/inspec/cached_fetcher.rb +1 -1
  10. data/lib/inspec/cli.rb +5 -3
  11. data/lib/inspec/config.rb +5 -5
  12. data/lib/inspec/dependencies/cache.rb +1 -1
  13. data/lib/inspec/env_printer.rb +2 -2
  14. data/lib/inspec/fetcher/git.rb +3 -3
  15. data/lib/inspec/fetcher/local.rb +1 -1
  16. data/lib/inspec/fetcher/url.rb +4 -4
  17. data/lib/inspec/file_provider.rb +4 -4
  18. data/lib/inspec/formatters/base.rb +16 -0
  19. data/lib/inspec/globals.rb +8 -2
  20. data/lib/inspec/input.rb +3 -0
  21. data/lib/inspec/input_registry.rb +5 -3
  22. data/lib/inspec/metadata.rb +1 -1
  23. data/lib/inspec/plugin/v1/plugins.rb +2 -2
  24. data/lib/inspec/plugin/v2.rb +5 -0
  25. data/lib/inspec/plugin/v2/config_file.rb +1 -1
  26. data/lib/inspec/plugin/v2/filter.rb +2 -2
  27. data/lib/inspec/plugin/v2/installer.rb +5 -5
  28. data/lib/inspec/plugin/v2/loader.rb +6 -1
  29. data/lib/inspec/plugin/v2/registry.rb +2 -2
  30. data/lib/inspec/profile.rb +3 -3
  31. data/lib/inspec/profile_context.rb +1 -1
  32. data/lib/inspec/reporters/automate.rb +2 -2
  33. data/lib/inspec/reporters/json.rb +3 -1
  34. data/lib/inspec/reporters/json_automate.rb +1 -1
  35. data/lib/inspec/resource.rb +2 -0
  36. data/lib/inspec/resources.rb +5 -5
  37. data/lib/inspec/resources/apt.rb +6 -6
  38. data/lib/inspec/resources/auditd.rb +1 -1
  39. data/lib/inspec/resources/csv.rb +1 -1
  40. data/lib/inspec/resources/dh_params.rb +1 -1
  41. data/lib/inspec/resources/file.rb +1 -1
  42. data/lib/inspec/resources/grub_conf.rb +2 -1
  43. data/lib/inspec/resources/http.rb +1 -1
  44. data/lib/inspec/resources/iis_website.rb +1 -1
  45. data/lib/inspec/resources/interfaces.rb +1 -1
  46. data/lib/inspec/resources/json.rb +2 -2
  47. data/lib/inspec/resources/key_rsa.rb +1 -1
  48. data/lib/inspec/resources/mssql_session.rb +5 -1
  49. data/lib/inspec/resources/mysql_session.rb +1 -1
  50. data/lib/inspec/resources/nginx.rb +1 -1
  51. data/lib/inspec/resources/nginx_conf.rb +1 -1
  52. data/lib/inspec/resources/npm.rb +1 -1
  53. data/lib/inspec/resources/oracledb_session.rb +1 -1
  54. data/lib/inspec/resources/package.rb +1 -1
  55. data/lib/inspec/resources/parse_config.rb +5 -2
  56. data/lib/inspec/resources/platform.rb +11 -1
  57. data/lib/inspec/resources/port.rb +1 -1
  58. data/lib/inspec/resources/postgres_session.rb +1 -1
  59. data/lib/inspec/resources/ppa.rb +1 -1
  60. data/lib/inspec/resources/processes.rb +1 -1
  61. data/lib/inspec/resources/rabbitmq_conf.rb +1 -1
  62. data/lib/inspec/resources/registry_key.rb +1 -1
  63. data/lib/inspec/resources/sshd_config.rb +1 -1
  64. data/lib/inspec/resources/ssl.rb +2 -2
  65. data/lib/inspec/resources/toml.rb +1 -1
  66. data/lib/inspec/resources/vbscript.rb +1 -1
  67. data/lib/inspec/resources/windows_registry_key.rb +1 -1
  68. data/lib/inspec/resources/wmi.rb +16 -8
  69. data/lib/inspec/resources/x509_certificate.rb +1 -1
  70. data/lib/inspec/resources/xml.rb +1 -1
  71. data/lib/inspec/rule.rb +8 -8
  72. data/lib/inspec/run_data.rb +1 -1
  73. data/lib/inspec/run_data/result.rb +2 -0
  74. data/lib/inspec/runner.rb +2 -2
  75. data/lib/inspec/schema.rb +3 -1
  76. data/lib/inspec/schema/exec_json.rb +1 -1
  77. data/lib/inspec/schema/output_schema.rb +1 -1
  78. data/lib/inspec/schema/primitives.rb +1 -1
  79. data/lib/inspec/shell.rb +3 -3
  80. data/lib/inspec/shell_detector.rb +2 -2
  81. data/lib/inspec/utils/command_wrapper.rb +1 -1
  82. data/lib/inspec/utils/deprecation/config_file.rb +2 -2
  83. data/lib/inspec/utils/json_log.rb +1 -1
  84. data/lib/inspec/utils/telemetry/collector.rb +1 -1
  85. data/lib/inspec/utils/telemetry/data_series.rb +1 -1
  86. data/lib/inspec/version.rb +1 -1
  87. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +5 -5
  88. data/lib/plugins/inspec-compliance/README.md +1 -1
  89. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +3 -3
  90. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +2 -2
  91. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +2 -2
  92. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +3 -3
  93. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +1 -1
  94. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +1 -1
  95. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +2 -2
  96. data/lib/plugins/inspec-init/templates/profiles/aws/README.md +1 -1
  97. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +3 -3
  98. data/lib/plugins/inspec-reporter-html2/README.md +1 -1
  99. data/lib/plugins/inspec-reporter-html2/lib/inspec-reporter-html2/reporter.rb +1 -1
  100. data/lib/plugins/inspec-reporter-json-min/lib/inspec-reporter-json-min/reporter.rb +1 -1
  101. data/lib/plugins/inspec-reporter-junit/README.md +9 -7
  102. data/lib/plugins/inspec-reporter-junit/lib/inspec-reporter-junit.rb +10 -1
  103. data/lib/plugins/inspec-reporter-junit/lib/inspec-reporter-junit/reporter.rb +94 -12
  104. data/lib/plugins/shared/core_plugin_test_helper.rb +6 -22
  105. metadata +44 -40
@@ -5,15 +5,15 @@ module InspecPlugins::JUnitReporter
5
5
  end
6
6
 
7
7
  def render
8
- require "rexml/document"
8
+ require "rexml/document" unless defined?(REXML::Document)
9
9
  xml_output = REXML::Document.new
10
10
  xml_output.add(REXML::XMLDecl.new)
11
11
 
12
12
  testsuites = REXML::Element.new("testsuites")
13
13
  xml_output.add(testsuites)
14
14
 
15
- run_data.profiles.each do |profile|
16
- testsuites.add(build_profile_xml(profile))
15
+ run_data.profiles.each_with_index do |profile, idx|
16
+ testsuites.add(build_profile_xml(profile, idx))
17
17
  end
18
18
 
19
19
  formatter = REXML::Formatters::Pretty.new
@@ -22,7 +22,42 @@ module InspecPlugins::JUnitReporter
22
22
  output(formatter.write(xml_output.root, ""))
23
23
  end
24
24
 
25
- def build_profile_xml(profile)
25
+ def count_profile_tests(profile)
26
+ profile.controls.reduce(0) do |acc, elem|
27
+ acc + elem.results.count
28
+ end
29
+ end
30
+
31
+ def count_profile_failed_tests(profile)
32
+ profile.controls.reduce(0) do |acc, elem|
33
+ acc + elem.results.reduce(0) do |fail_test_total, test_case|
34
+ test_case.status == "failed" ? fail_test_total + 1 : fail_test_total
35
+ end
36
+ end
37
+ end
38
+
39
+ def count_profile_skipped_tests(profile)
40
+ profile.controls.reduce(0) do |acc, elem|
41
+ acc + elem.results.reduce(0) do |skip_test_total, test_case|
42
+ test_case.status == "skipped" ? skip_test_total + 1 : skip_test_total
43
+ end
44
+ end
45
+ end
46
+
47
+ def count_profile_errored_tests(profile)
48
+ profile.controls.reduce(0) do |acc, elem|
49
+ acc + elem.results.reduce(0) do |err_test_total, test_case|
50
+ test_case.backtrace.nil? ? err_test_total : err_test_total + 1
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ # This is the "Legacy" JUnit reporter. It produces XML which is not
57
+ # correct according to the JUnit standard. It is retained for backwards
58
+ # compatibility.
59
+ class ReporterV1 < Reporter
60
+ def build_profile_xml(profile, _idx)
26
61
  profile_xml = REXML::Element.new("testsuite")
27
62
  profile_xml.add_attribute("name", profile.name)
28
63
  profile_xml.add_attribute("tests", count_profile_tests(profile))
@@ -55,19 +90,66 @@ module InspecPlugins::JUnitReporter
55
90
 
56
91
  result_xml
57
92
  end
93
+ end
58
94
 
59
- def count_profile_tests(profile)
60
- profile.controls.reduce(0) do |acc, elem|
61
- acc + elem.results.count
95
+ # This is the "Corrected" JUnit reporter. It produces XML which is intended
96
+ # to be valid. It should be used whenever possible.
97
+ class ReporterV2 < Reporter
98
+ def build_profile_xml(profile, idx)
99
+ profile_xml = REXML::Element.new("testsuite")
100
+ profile_xml.add_attribute("name", profile.name)
101
+ profile_xml.add_attribute("tests", count_profile_tests(profile))
102
+ profile_xml.add_attribute("id", idx + 1)
103
+
104
+ # junit2 counts failures and errors separately
105
+ errors = count_profile_errored_tests(profile)
106
+ profile_xml.add_attribute("errors", errors)
107
+ profile_xml.add_attribute("failures", count_profile_failed_tests(profile) - errors)
108
+ profile_xml.add_attribute("skipped", count_profile_skipped_tests(profile))
109
+
110
+ profile_xml.add_attribute("hostname", run_data.platform.target.nil? ? "" : run_data.platform.target.to_s)
111
+ # Author of the schema specified 8601, then went on to add
112
+ # a regex that requires no TZ
113
+ profile_xml.add_attribute("timestamp", Time.now.iso8601.slice(0, 19))
114
+
115
+ # These are empty but are just here to satisfy the schema
116
+ profile_xml.add_attribute("package", "")
117
+ profile_xml.add(REXML::Element.new("properties"))
118
+
119
+ profile_time = 0.0
120
+ profile.controls.each do |control|
121
+ control.results.each do |result|
122
+ profile_time += result.run_time
123
+ profile_xml.add(build_result_xml(profile.name, control, result))
124
+ end
62
125
  end
126
+ profile_xml.add_attribute("time", "%.6f" % profile_time)
127
+
128
+ profile_xml.add(REXML::Element.new("system-out"))
129
+ profile_xml.add(REXML::Element.new("system-err"))
130
+
131
+ profile_xml
63
132
  end
64
133
 
65
- def count_profile_failed_tests(profile)
66
- profile.controls.reduce(0) do |acc, elem|
67
- acc + elem.results.reduce(0) do |fail_test_total, test_case|
68
- test_case.status == "failed" ? fail_test_total + 1 : fail_test_total
69
- end
134
+ def build_result_xml(profile_name, control, result)
135
+ result_xml = REXML::Element.new("testcase")
136
+ result_xml.add_attribute("name", result.code_desc)
137
+ result_xml.add_attribute("classname", control.title.nil? ? "#{profile_name}.Anonymous" : "#{profile_name}.#{control.id}")
138
+
139
+ # <Nokogiri::XML::SyntaxError: 20:0: ERROR: Element 'testcase', attribute 'time': '4.9e-05' is not a valid value of the atomic type 'xs:decimal'.
140
+ # So, we format it.
141
+ result_xml.add_attribute("time", "%.6f" % result.run_time)
142
+
143
+ if result.status == "failed"
144
+ failure_element = REXML::Element.new("failure")
145
+ failure_element.add_attribute("message", result.message)
146
+ failure_element.add_attribute("type", result.resource_title&.to_s || "")
147
+ result_xml.add(failure_element)
148
+ elsif result.status == "skipped"
149
+ result_xml.add_element("skipped")
70
150
  end
151
+
152
+ result_xml
71
153
  end
72
154
  end
73
155
  end
@@ -3,14 +3,14 @@ require "minitest/autorun"
3
3
  require "minitest/pride"
4
4
 
5
5
  # Data formats commonly used in testing
6
- require "json"
7
- require "ostruct"
6
+ require "json" unless defined?(JSON)
7
+ require "ostruct" unless defined?(OpenStruct)
8
8
 
9
9
  # Utilities often needed
10
- require "fileutils"
11
- require "tmpdir"
12
- require "pathname"
13
- require "forwardable"
10
+ require "fileutils" unless defined?(FileUtils)
11
+ require "tmpdir" unless defined?(Dir.mktmpdir)
12
+ require "pathname" unless defined?(Pathname)
13
+ require "forwardable" unless defined?(Forwardable)
14
14
 
15
15
  require "functional/helper"
16
16
  require "inspec/plugin/v2"
@@ -50,22 +50,6 @@ module CorePluginFunctionalHelper
50
50
  include CorePluginBaseHelper
51
51
  include FunctionalHelper
52
52
 
53
- # TODO: so much duplication! Remove everything we can!
54
- require "train"
55
- TRAIN_CONNECTION = Train.create("local", command_runner: :generic).connection
56
-
57
- # TODO: remove me! it's in test/functional/helper.rb
58
- def run_inspec_process(command_line, opts = {})
59
- prefix = ""
60
- if opts.key?(:prefix)
61
- prefix = opts[:prefix]
62
- elsif opts.key?(:env)
63
- prefix = assemble_env_prefix opts[:env]
64
- end
65
-
66
- TRAIN_CONNECTION.run_command("#{prefix} #{exec_inspec} #{command_line}")
67
- end
68
-
69
53
  # This helper does some fancy footwork to make InSpec think a plugin
70
54
  # under development is temporarily installed.
71
55
  # @param String command_line Invocation, without the word 'inspec'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inspec-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.23.4
4
+ version: 4.24.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef InSpec Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-02 00:00:00.000000000 Z
11
+ date: 2020-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-telemetry
@@ -64,26 +64,6 @@ dependencies:
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '2.0'
67
- - !ruby/object:Gem::Dependency
68
- name: json_schemer
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: 0.2.1
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: 0.2.12
77
- type: :runtime
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: 0.2.1
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: 0.2.12
87
67
  - !ruby/object:Gem::Dependency
88
68
  name: method_source
89
69
  requirement: !ruby/object:Gem::Requirement
@@ -108,36 +88,36 @@ dependencies:
108
88
  name: rubyzip
109
89
  requirement: !ruby/object:Gem::Requirement
110
90
  requirements:
111
- - - "~>"
112
- - !ruby/object:Gem::Version
113
- version: '1.2'
114
91
  - - ">="
115
92
  - !ruby/object:Gem::Version
116
93
  version: 1.2.2
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
117
97
  type: :runtime
118
98
  prerelease: false
119
99
  version_requirements: !ruby/object:Gem::Requirement
120
100
  requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '1.2'
124
101
  - - ">="
125
102
  - !ruby/object:Gem::Version
126
103
  version: 1.2.2
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.0'
127
107
  - !ruby/object:Gem::Dependency
128
108
  name: rspec
129
109
  requirement: !ruby/object:Gem::Requirement
130
110
  requirements:
131
111
  - - "~>"
132
112
  - !ruby/object:Gem::Version
133
- version: '3.9'
113
+ version: '3.10'
134
114
  type: :runtime
135
115
  prerelease: false
136
116
  version_requirements: !ruby/object:Gem::Requirement
137
117
  requirements:
138
118
  - - "~>"
139
119
  - !ruby/object:Gem::Version
140
- version: '3.9'
120
+ version: '3.10'
141
121
  - !ruby/object:Gem::Dependency
142
122
  name: rspec-its
143
123
  requirement: !ruby/object:Gem::Requirement
@@ -170,16 +150,22 @@ dependencies:
170
150
  name: hashie
171
151
  requirement: !ruby/object:Gem::Requirement
172
152
  requirements:
173
- - - "~>"
153
+ - - ">="
174
154
  - !ruby/object:Gem::Version
175
155
  version: '3.4'
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: '5.0'
176
159
  type: :runtime
177
160
  prerelease: false
178
161
  version_requirements: !ruby/object:Gem::Requirement
179
162
  requirements:
180
- - - "~>"
163
+ - - ">="
181
164
  - !ruby/object:Gem::Version
182
165
  version: '3.4'
166
+ - - "<"
167
+ - !ruby/object:Gem::Version
168
+ version: '5.0'
183
169
  - !ruby/object:Gem::Dependency
184
170
  name: mixlib-log
185
171
  requirement: !ruby/object:Gem::Requirement
@@ -229,6 +215,9 @@ dependencies:
229
215
  - - ">="
230
216
  - !ruby/object:Gem::Version
231
217
  version: 0.9.0
218
+ - - "<"
219
+ - !ruby/object:Gem::Version
220
+ version: '1.2'
232
221
  type: :runtime
233
222
  prerelease: false
234
223
  version_requirements: !ruby/object:Gem::Requirement
@@ -236,6 +225,9 @@ dependencies:
236
225
  - - ">="
237
226
  - !ruby/object:Gem::Version
238
227
  version: 0.9.0
228
+ - - "<"
229
+ - !ruby/object:Gem::Version
230
+ version: '1.2'
239
231
  - !ruby/object:Gem::Dependency
240
232
  name: tty-table
241
233
  requirement: !ruby/object:Gem::Requirement
@@ -268,16 +260,22 @@ dependencies:
268
260
  name: tomlrb
269
261
  requirement: !ruby/object:Gem::Requirement
270
262
  requirements:
271
- - - "~>"
263
+ - - ">="
272
264
  - !ruby/object:Gem::Version
273
- version: 1.2.0
265
+ version: '1.2'
266
+ - - "<"
267
+ - !ruby/object:Gem::Version
268
+ version: '2.1'
274
269
  type: :runtime
275
270
  prerelease: false
276
271
  version_requirements: !ruby/object:Gem::Requirement
277
272
  requirements:
278
- - - "~>"
273
+ - - ">="
274
+ - !ruby/object:Gem::Version
275
+ version: '1.2'
276
+ - - "<"
279
277
  - !ruby/object:Gem::Version
280
- version: 1.2.0
278
+ version: '2.1'
281
279
  - !ruby/object:Gem::Dependency
282
280
  name: addressable
283
281
  requirement: !ruby/object:Gem::Requirement
@@ -296,16 +294,22 @@ dependencies:
296
294
  name: parslet
297
295
  requirement: !ruby/object:Gem::Requirement
298
296
  requirements:
299
- - - "~>"
297
+ - - ">="
300
298
  - !ruby/object:Gem::Version
301
299
  version: '1.5'
300
+ - - "<"
301
+ - !ruby/object:Gem::Version
302
+ version: '3.0'
302
303
  type: :runtime
303
304
  prerelease: false
304
305
  version_requirements: !ruby/object:Gem::Requirement
305
306
  requirements:
306
- - - "~>"
307
+ - - ">="
307
308
  - !ruby/object:Gem::Version
308
309
  version: '1.5'
310
+ - - "<"
311
+ - !ruby/object:Gem::Version
312
+ version: '3.0'
309
313
  - !ruby/object:Gem::Dependency
310
314
  name: semverse
311
315
  requirement: !ruby/object:Gem::Requirement
@@ -737,9 +741,9 @@ require_paths:
737
741
  - lib
738
742
  required_ruby_version: !ruby/object:Gem::Requirement
739
743
  requirements:
740
- - - "~>"
744
+ - - ">="
741
745
  - !ruby/object:Gem::Version
742
- version: '2.4'
746
+ version: '2.5'
743
747
  required_rubygems_version: !ruby/object:Gem::Requirement
744
748
  requirements:
745
749
  - - ">="