chef 16.8.14 → 16.9.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -4
  3. data/README.md +1 -1
  4. data/chef.gemspec +20 -2
  5. data/lib/chef/compliance/default_attributes.rb +5 -1
  6. data/lib/chef/compliance/fetcher/automate.rb +2 -2
  7. data/lib/chef/compliance/fetcher/chef_server.rb +2 -2
  8. data/lib/chef/compliance/reporter/automate.rb +1 -2
  9. data/lib/chef/compliance/reporter/chef_server_automate.rb +2 -2
  10. data/lib/chef/compliance/runner.rb +11 -8
  11. data/lib/chef/http/ssl_policies.rb +27 -14
  12. data/lib/chef/knife/core/formatting_options.rb +49 -0
  13. data/lib/chef/knife/core/node_presenter.rb +0 -25
  14. data/lib/chef/knife/core/status_presenter.rb +1 -26
  15. data/lib/chef/knife/core/windows_bootstrap_context.rb +1 -1
  16. data/lib/chef/knife/node_show.rb +2 -1
  17. data/lib/chef/knife/search.rb +2 -1
  18. data/lib/chef/knife/status.rb +8 -11
  19. data/lib/chef/policy_builder/policyfile.rb +1 -1
  20. data/lib/chef/provider/package.rb +53 -19
  21. data/lib/chef/provider/package/dnf.rb +39 -12
  22. data/lib/chef/provider/package/dnf/dnf_helper.py +18 -5
  23. data/lib/chef/provider/package/dnf/python_helper.rb +6 -6
  24. data/lib/chef/provider/package/freebsd/pkgng.rb +3 -1
  25. data/lib/chef/provider/yum_repository.rb +2 -2
  26. data/lib/chef/resource/chef_gem.rb +2 -2
  27. data/lib/chef/resource/cron/cron_d.rb +1 -0
  28. data/lib/chef/resource/file.rb +1 -1
  29. data/lib/chef/resource/gem_package.rb +2 -2
  30. data/lib/chef/resource/homebrew_cask.rb +3 -3
  31. data/lib/chef/resource/http_request.rb +1 -1
  32. data/lib/chef/resource/locale.rb +1 -1
  33. data/lib/chef/resource/mdadm.rb +2 -2
  34. data/lib/chef/resource/osx_profile.rb +7 -7
  35. data/lib/chef/resource/remote_directory.rb +1 -1
  36. data/lib/chef/resource/ruby.rb +1 -5
  37. data/lib/chef/resource/ruby_block.rb +1 -1
  38. data/lib/chef/resource/user/windows_user.rb +5 -0
  39. data/lib/chef/resource/windows_certificate.rb +2 -12
  40. data/lib/chef/resource/yum_repository.rb +5 -0
  41. data/lib/chef/shell.rb +32 -1
  42. data/lib/chef/version.rb +1 -1
  43. data/lib/chef/version_string.rb +1 -1
  44. data/spec/data/rubygems.org/latest_specs.4.8.gz +0 -0
  45. data/spec/data/rubygems.org/nonexistent_gem +0 -0
  46. data/spec/data/rubygems.org/sexp_processor +0 -0
  47. data/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz +0 -0
  48. data/spec/data/ssl/binary/chef-rspec-der.cert +0 -0
  49. data/spec/data/ssl/binary/chef-rspec-der.key +0 -0
  50. data/spec/functional/resource/dnf_package_spec.rb +319 -16
  51. data/spec/functional/resource/ohai_spec.rb +2 -10
  52. data/spec/functional/resource/windows_certificate_spec.rb +204 -384
  53. data/spec/spec_helper.rb +1 -1
  54. data/spec/unit/compliance/runner_spec.rb +33 -7
  55. data/spec/unit/http/ssl_policies_spec.rb +106 -78
  56. data/spec/unit/knife/bootstrap_spec.rb +5 -17
  57. data/spec/unit/knife/core/status_presenter_spec.rb +54 -0
  58. data/spec/unit/mixin/openssl_helper_spec.rb +0 -7
  59. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  60. data/spec/unit/provider/package/rubygems_spec.rb +39 -7
  61. data/spec/unit/resource/user/windows_user_spec.rb +36 -0
  62. metadata +32 -14
  63. data/spec/data/trusted_certs_empty/.gitkeep +0 -0
  64. data/spec/data/trusted_certs_empty/README.md +0 -1
  65. data/spec/scripts/ssl-serve.rb +0 -47
@@ -29,7 +29,7 @@ class Chef
29
29
 
30
30
  provides :remote_directory
31
31
 
32
- description "Use the **remote_directory** resource to incrementally transfer a directory from a cookbook to a node. The director that is copied from the cookbook should be located under COOKBOOK_NAME/files/default/REMOTE_DIRECTORY. The remote_directory resource will obey file specificity."
32
+ description "Use the **remote_directory** resource to incrementally transfer a directory from a cookbook to a node. The directory that is copied from the cookbook should be located under `COOKBOOK_NAME/files/default/REMOTE_DIRECTORY`. The `remote_directory` resource will obey file specificity."
33
33
 
34
34
  default_action :create
35
35
  allowed_actions :create, :create_if_missing, :delete
@@ -25,11 +25,7 @@ class Chef
25
25
 
26
26
  provides :ruby
27
27
 
28
- description "Use the **ruby** resource to execute scripts using the Ruby interpreter. This"\
29
- " resource may also use any of the actions and properties that are available"\
30
- " to the **execute** resource. Commands that are executed with this resource are (by"\
31
- " their nature) not idempotent, as they are typically unique to the environment"\
32
- " in which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
28
+ description "Use the **ruby** resource to execute scripts using the Ruby interpreter. This resource may also use any of the actions and properties that are available to the **execute** resource. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
33
29
 
34
30
  def initialize(name, run_context = nil)
35
31
  super
@@ -28,7 +28,7 @@ class Chef
28
28
 
29
29
  provides :ruby_block, target_mode: true
30
30
 
31
- description "Use the **ruby_block** resource to execute Ruby code during a #{ChefUtils::Dist::Infra::PRODUCT} run. Ruby code in the ruby_block resource is evaluated with other resources during convergence, whereas Ruby code outside of a ruby_block resource is evaluated before other resources, as the recipe is compiled."
31
+ description "Use the **ruby_block** resource to execute Ruby code during a #{ChefUtils::Dist::Infra::PRODUCT} run. Ruby code in the `ruby_block` resource is evaluated with other resources during convergence, whereas Ruby code outside of a `ruby_block` resource is evaluated before other resources, as the recipe is compiled."
32
32
 
33
33
  default_action :run
34
34
  allowed_actions :create, :run
@@ -29,6 +29,11 @@ class Chef
29
29
  property :full_name, String,
30
30
  description: "The full name of the user.",
31
31
  introduced: "14.6"
32
+
33
+ # Override the property from the parent class to coerce to integer.
34
+ property :uid, [ String, Integer, NilClass ], # nil for backwards compat
35
+ description: "The numeric user identifier.",
36
+ coerce: proc { |n| n && Integer(n) rescue n }
32
37
  end
33
38
  end
34
39
  end
@@ -69,7 +69,7 @@ class Chef
69
69
  description: "The password to access the source if it is a pfx file."
70
70
 
71
71
  property :private_key_acl, Array,
72
- description: "An array of 'domain\account' entries to be granted read-only access to the certificate's private key. Not idempotent."
72
+ description: "An array of 'domain\\account' entries to be granted read-only access to the certificate's private key. Not idempotent."
73
73
 
74
74
  property :store_name, String,
75
75
  description: "The certificate store to manipulate.",
@@ -309,11 +309,7 @@ class Chef
309
309
  # @raise [OpenSSL::PKCS12::PKCS12Error] When incorrect password is provided for PFX certificate
310
310
  #
311
311
  def fetch_cert_object(ext)
312
- contents = if binary_cert?
313
- ::File.binread(new_resource.source)
314
- else
315
- ::File.read(new_resource.source)
316
- end
312
+ contents = ::File.binread(new_resource.source)
317
313
 
318
314
  case ext
319
315
  when ".pfx"
@@ -330,12 +326,6 @@ class Chef
330
326
  end
331
327
  end
332
328
 
333
- # @return [Boolean] Whether the certificate file is binary encoded or not
334
- #
335
- def binary_cert?
336
- shell_out!("file -b --mime-encoding #{new_resource.source}").stdout.strip == "binary"
337
- end
338
-
339
329
  # Imports the certificate object into cert store
340
330
  #
341
331
  # @param cert_objs [OpenSSL::X509::Certificate] Object containing certificate's attributes
@@ -50,6 +50,11 @@ class Chef
50
50
 
51
51
  # http://linux.die.net/man/5/yum.conf as well as
52
52
  # http://dnf.readthedocs.io/en/latest/conf_ref.html
53
+ property :reposdir, String,
54
+ description: "The directory where the Yum repository files should be stored",
55
+ default: "/etc/yum.repos.d/",
56
+ introduced: "16.9"
57
+
53
58
  property :baseurl, [String, Array],
54
59
  description: "URL to the directory where the Yum repository's `repodata` directory lives. Can be an `http://`, `https://` or a `ftp://` URLs. You can specify multiple URLs in one `baseurl` statement."
55
60
 
@@ -25,6 +25,7 @@ require "pp" unless defined?(PP)
25
25
  require "etc" unless defined?(Etc)
26
26
  require "mixlib/cli" unless defined?(Mixlib::CLI)
27
27
  require "chef-utils/dist" unless defined?(ChefUtils::Dist)
28
+ require "chef-config/mixin/dot_d"
28
29
 
29
30
  require_relative "../chef"
30
31
  require_relative "version"
@@ -211,6 +212,7 @@ module Shell
211
212
 
212
213
  class Options
213
214
  include Mixlib::CLI
215
+ include ChefConfig::Mixin::DotD
214
216
 
215
217
  def self.footer(text = nil)
216
218
  @footer = text if text
@@ -341,15 +343,44 @@ module Shell
341
343
  # We have to nuke ARGV to make sure irb's option parser never sees it.
342
344
  # otherwise, IRB complains about command line switches it doesn't recognize.
343
345
  ARGV.clear
346
+
347
+ # This code should not exist.
348
+ # We should be using Application::Client and then calling load_config_file
349
+ # which does all this properly. However this will do for now.
344
350
  config[:config_file] = config_file_for_shell_mode(environment)
345
351
  config_msg = config[:config_file] || "none (standalone session)"
346
352
  puts "loading configuration: #{config_msg}"
347
- Chef::Config.from_file(config[:config_file]) if !config[:config_file].nil? && File.exist?(config[:config_file]) && File.readable?(config[:config_file])
353
+
354
+ # load the config (if we have one)
355
+ if !config[:config_file].nil?
356
+ if File.exist?(config[:config_file]) && File.readable?(config[:config_file])
357
+ Chef::Config.from_file(config[:config_file])
358
+ end
359
+
360
+ # even if we couldn't load that, we need to tell Chef::Config what
361
+ # the file was so it sets confdir and d_dir and such properly
362
+ Chef::Config[:config_file] = config[:config_file]
363
+
364
+ # now attempt to load any relevant dot-dirs
365
+ load_dot_d(Chef::Config[:client_d_dir]) if Chef::Config[:client_d_dir]
366
+ end
367
+
368
+ # finally merge command-line options in
348
369
  Chef::Config.merge!(config)
349
370
  end
350
371
 
351
372
  private
352
373
 
374
+ # shamelessly lifted from application.rb
375
+ def apply_config(config_content, config_file_path)
376
+ Chef::Config.from_string(config_content, config_file_path)
377
+ rescue Exception => error
378
+ logger.fatal("Configuration error #{error.class}: #{error.message}")
379
+ filtered_trace = error.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
380
+ filtered_trace.each { |line| logger.fatal(" " + line ) }
381
+ raise Chef::Exceptions::ConfigurationError.new("Aborting due to error in '#{config_file_path}': #{error}")
382
+ end
383
+
353
384
  def config_file_for_shell_mode(environment)
354
385
  dot_chef_dir = Chef::Util::PathHelper.home(".chef")
355
386
  if config[:config_file]
@@ -23,7 +23,7 @@ require_relative "version_string"
23
23
 
24
24
  class Chef
25
25
  CHEF_ROOT = File.expand_path("..", __dir__)
26
- VERSION = Chef::VersionString.new("16.8.14")
26
+ VERSION = Chef::VersionString.new("16.9.32")
27
27
  end
28
28
 
29
29
  #
@@ -13,7 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- require "chef-utils/version_string"
16
+ require "chef-utils/version_string" unless defined?(ChefUtils::VersionString)
17
17
 
18
18
  class Chef
19
19
  VersionString = ChefUtils::VersionString
@@ -91,7 +91,6 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
91
91
  preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
92
92
  dnf_package.run_action(:install)
93
93
  expect(dnf_package.updated_by_last_action?).to be false
94
- expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
95
94
  end
96
95
 
97
96
  it "does not install twice" do
@@ -128,6 +127,105 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
128
127
  end
129
128
  end
130
129
 
130
+ context "expanded idempotency checks with version variants" do
131
+ %w{1.10 1* 1.10-1 1*-1 1.10-* 1*-* 0:1.10 0:1* 0:1.10-1 0:1*-1 *:1.10-* *:1*-*}.each do |vstring|
132
+ it "installs the rpm when #{vstring} is in the package_name" do
133
+ flush_cache
134
+ dnf_package.package_name("chef_rpm-#{vstring}")
135
+ dnf_package.run_action(:install)
136
+ expect(dnf_package.updated_by_last_action?).to be true
137
+ end
138
+
139
+ it "is idempotent when #{vstring} is in the package_name" do
140
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
141
+ dnf_package.package_name("chef_rpm-#{vstring}")
142
+ dnf_package.run_action(:install)
143
+ expect(dnf_package.updated_by_last_action?).to be false
144
+ end
145
+
146
+ it "installs the rpm when #{vstring} is in the version property" do
147
+ flush_cache
148
+ dnf_package.package_name("chef_rpm")
149
+ dnf_package.version(vstring)
150
+ dnf_package.run_action(:install)
151
+ expect(dnf_package.updated_by_last_action?).to be true
152
+ end
153
+
154
+ it "is idempotent when #{vstring} is in the version property" do
155
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
156
+ dnf_package.package_name("chef_rpm")
157
+ dnf_package.version(vstring)
158
+ dnf_package.run_action(:install)
159
+ expect(dnf_package.updated_by_last_action?).to be false
160
+ end
161
+
162
+ it "upgrades the rpm when #{vstring} is in the package_name" do
163
+ flush_cache
164
+ dnf_package.package_name("chef_rpm-#{vstring}")
165
+ dnf_package.run_action(:upgrade)
166
+ expect(dnf_package.updated_by_last_action?).to be true
167
+ end
168
+
169
+ it "is idempotent when #{vstring} is in the package_name" do
170
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
171
+ dnf_package.package_name("chef_rpm-#{vstring}")
172
+ dnf_package.run_action(:upgrade)
173
+ expect(dnf_package.updated_by_last_action?).to be false
174
+ end
175
+
176
+ it "upgrades the rpm when #{vstring} is in the version property" do
177
+ flush_cache
178
+ dnf_package.package_name("chef_rpm")
179
+ dnf_package.version(vstring)
180
+ dnf_package.run_action(:upgrade)
181
+ expect(dnf_package.updated_by_last_action?).to be true
182
+ end
183
+
184
+ it "is idempotent when #{vstring} is in the version property" do
185
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
186
+ dnf_package.package_name("chef_rpm")
187
+ dnf_package.version(vstring)
188
+ dnf_package.run_action(:upgrade)
189
+ expect(dnf_package.updated_by_last_action?).to be false
190
+ end
191
+ end
192
+
193
+ %w{1.2 1* 1.2-1 1*-1 1.2-* 1*-* 0:1.2 0:1* 0:1.2-1 0:1*-1 *:1.2-* *:1*-*}.each do |vstring|
194
+ it "is idempotent when #{vstring} is in the version property and there is a candidate version" do
195
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
196
+ dnf_package.package_name("chef_rpm")
197
+ dnf_package.version(vstring)
198
+ dnf_package.run_action(:install)
199
+ expect(dnf_package.updated_by_last_action?).to be false
200
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
201
+ end
202
+ end
203
+
204
+ %w{1.2 1.2-1 1.2-* 0:1.2 0:1.2-1 *:1.2-*}.each do |vstring|
205
+ it "is idempotent when #{vstring} is in the version property on upgrade and it doesn't match the candidate version" do
206
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
207
+ dnf_package.package_name("chef_rpm")
208
+ dnf_package.version(vstring)
209
+ dnf_package.run_action(:upgrade)
210
+ expect(dnf_package.updated_by_last_action?).to be false
211
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
212
+ end
213
+ end
214
+
215
+ %w{1* 1*-1 1*-* 0:1* 0:1*-1 *:1*-*}.each do |vstring|
216
+ it "upgrades when #{vstring} is in the version property on upgrade and it matches the candidate version" do
217
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
218
+ dnf_package.package_name("chef_rpm")
219
+ dnf_package.version(vstring)
220
+ dnf_package.run_action(:upgrade)
221
+ expect(dnf_package.updated_by_last_action?).to be true
222
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
223
+ dnf_package.run_action(:upgrade)
224
+ expect(dnf_package.updated_by_last_action?).to be false
225
+ end
226
+ end
227
+ end
228
+
131
229
  context "with versions or globs in the name" do
132
230
  it "works with a version" do
133
231
  flush_cache
@@ -135,6 +233,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
135
233
  dnf_package.run_action(:install)
136
234
  expect(dnf_package.updated_by_last_action?).to be true
137
235
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
236
+ dnf_package.run_action(:install)
237
+ expect(dnf_package.updated_by_last_action?).to be false
138
238
  end
139
239
 
140
240
  it "works with an older version" do
@@ -143,6 +243,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
143
243
  dnf_package.run_action(:install)
144
244
  expect(dnf_package.updated_by_last_action?).to be true
145
245
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
246
+ dnf_package.run_action(:install)
247
+ expect(dnf_package.updated_by_last_action?).to be false
146
248
  end
147
249
 
148
250
  it "works with an evra" do
@@ -151,6 +253,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
151
253
  dnf_package.run_action(:install)
152
254
  expect(dnf_package.updated_by_last_action?).to be true
153
255
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
256
+ dnf_package.run_action(:install)
257
+ expect(dnf_package.updated_by_last_action?).to be false
154
258
  end
155
259
 
156
260
  it "works with version and release" do
@@ -159,6 +263,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
159
263
  dnf_package.run_action(:install)
160
264
  expect(dnf_package.updated_by_last_action?).to be true
161
265
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
266
+ dnf_package.run_action(:install)
267
+ expect(dnf_package.updated_by_last_action?).to be false
162
268
  end
163
269
 
164
270
  it "works with a version glob" do
@@ -167,6 +273,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
167
273
  dnf_package.run_action(:install)
168
274
  expect(dnf_package.updated_by_last_action?).to be true
169
275
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
276
+ dnf_package.run_action(:install)
277
+ expect(dnf_package.updated_by_last_action?).to be false
170
278
  end
171
279
 
172
280
  it "works with a name glob + version glob" do
@@ -175,6 +283,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
175
283
  dnf_package.run_action(:install)
176
284
  expect(dnf_package.updated_by_last_action?).to be true
177
285
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
286
+ dnf_package.run_action(:install)
287
+ expect(dnf_package.updated_by_last_action?).to be false
178
288
  end
179
289
 
180
290
  it "upgrades when the installed version does not match the version string" do
@@ -183,6 +293,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
183
293
  dnf_package.run_action(:install)
184
294
  expect(dnf_package.updated_by_last_action?).to be true
185
295
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}")
296
+ dnf_package.run_action(:install)
297
+ expect(dnf_package.updated_by_last_action?).to be false
186
298
  end
187
299
 
188
300
  it "downgrades when the installed version is higher than the package_name version" do
@@ -191,6 +303,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
191
303
  dnf_package.run_action(:install)
192
304
  expect(dnf_package.updated_by_last_action?).to be true
193
305
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
306
+ dnf_package.run_action(:install)
307
+ expect(dnf_package.updated_by_last_action?).to be false
194
308
  end
195
309
  end
196
310
 
@@ -203,6 +317,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
203
317
  dnf_package.run_action(:install)
204
318
  expect(dnf_package.updated_by_last_action?).to be true
205
319
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
320
+ dnf_package.run_action(:install)
321
+ expect(dnf_package.updated_by_last_action?).to be false
206
322
  end
207
323
 
208
324
  it "matches with a glob" do
@@ -212,6 +328,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
212
328
  dnf_package.run_action(:install)
213
329
  expect(dnf_package.updated_by_last_action?).to be true
214
330
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
331
+ dnf_package.run_action(:install)
332
+ expect(dnf_package.updated_by_last_action?).to be false
215
333
  end
216
334
 
217
335
  it "matches the vr" do
@@ -221,6 +339,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
221
339
  dnf_package.run_action(:install)
222
340
  expect(dnf_package.updated_by_last_action?).to be true
223
341
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
342
+ dnf_package.run_action(:install)
343
+ expect(dnf_package.updated_by_last_action?).to be false
224
344
  end
225
345
 
226
346
  it "matches the evr" do
@@ -230,6 +350,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
230
350
  dnf_package.run_action(:install)
231
351
  expect(dnf_package.updated_by_last_action?).to be true
232
352
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
353
+ dnf_package.run_action(:install)
354
+ expect(dnf_package.updated_by_last_action?).to be false
233
355
  end
234
356
 
235
357
  it "matches with a vr glob", :rhel_gte_8 do
@@ -239,6 +361,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
239
361
  dnf_package.run_action(:install)
240
362
  expect(dnf_package.updated_by_last_action?).to be true
241
363
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
364
+ dnf_package.run_action(:install)
365
+ expect(dnf_package.updated_by_last_action?).to be false
242
366
  end
243
367
 
244
368
  it "matches with an evr glob", :rhel_gte_8 do
@@ -248,6 +372,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
248
372
  dnf_package.run_action(:install)
249
373
  expect(dnf_package.updated_by_last_action?).to be true
250
374
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
375
+ dnf_package.run_action(:install)
376
+ expect(dnf_package.updated_by_last_action?).to be false
251
377
  end
252
378
  end
253
379
 
@@ -260,6 +386,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
260
386
  dnf_package.run_action(:install)
261
387
  expect(dnf_package.updated_by_last_action?).to be true
262
388
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
389
+ dnf_package.run_action(:install)
390
+ expect(dnf_package.updated_by_last_action?).to be false
263
391
  end
264
392
  end
265
393
 
@@ -270,6 +398,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
270
398
  dnf_package.run_action(:install)
271
399
  expect(dnf_package.updated_by_last_action?).to be true
272
400
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
401
+ dnf_package.run_action(:install)
402
+ expect(dnf_package.updated_by_last_action?).to be false
273
403
  end
274
404
 
275
405
  it "installs with 32-bit arch in the name" do
@@ -278,6 +408,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
278
408
  dnf_package.run_action(:install)
279
409
  expect(dnf_package.updated_by_last_action?).to be true
280
410
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
411
+ dnf_package.run_action(:install)
412
+ expect(dnf_package.updated_by_last_action?).to be false
281
413
  end
282
414
 
283
415
  it "installs with 64-bit arch in the property" do
@@ -287,6 +419,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
287
419
  dnf_package.run_action(:install)
288
420
  expect(dnf_package.updated_by_last_action?).to be true
289
421
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
422
+ dnf_package.run_action(:install)
423
+ expect(dnf_package.updated_by_last_action?).to be false
290
424
  end
291
425
 
292
426
  it "installs with 32-bit arch in the property" do
@@ -296,6 +430,30 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
296
430
  dnf_package.run_action(:install)
297
431
  expect(dnf_package.updated_by_last_action?).to be true
298
432
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
433
+ dnf_package.run_action(:install)
434
+ expect(dnf_package.updated_by_last_action?).to be false
435
+ end
436
+
437
+ it "installs when the 32-bit arch is in the name and the version is in the property" do
438
+ flush_cache
439
+ dnf_package.package_name("chef_rpm.i686")
440
+ dnf_package.version("1.10-1")
441
+ dnf_package.run_action(:install)
442
+ expect(dnf_package.updated_by_last_action?).to be true
443
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.i686$")
444
+ dnf_package.run_action(:install)
445
+ expect(dnf_package.updated_by_last_action?).to be false
446
+ end
447
+
448
+ it "installs when the 64-bit arch is in the name and the version is in the property" do
449
+ flush_cache
450
+ dnf_package.package_name("chef_rpm.#{pkg_arch}")
451
+ dnf_package.version("1.10-1")
452
+ dnf_package.run_action(:install)
453
+ expect(dnf_package.updated_by_last_action?).to be true
454
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
455
+ dnf_package.run_action(:install)
456
+ expect(dnf_package.updated_by_last_action?).to be false
299
457
  end
300
458
  end
301
459
 
@@ -306,6 +464,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
306
464
  dnf_package.run_action(:install)
307
465
  expect(dnf_package.updated_by_last_action?).to be true
308
466
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
467
+ dnf_package.run_action(:install)
468
+ expect(dnf_package.updated_by_last_action?).to be false
309
469
  end
310
470
 
311
471
  it "when it is met, it does nothing" do
@@ -330,6 +490,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
330
490
  dnf_package.run_action(:install)
331
491
  expect(dnf_package.updated_by_last_action?).to be true
332
492
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
493
+ dnf_package.run_action(:install)
494
+ expect(dnf_package.updated_by_last_action?).to be false
333
495
  end
334
496
 
335
497
  it "when it is not met by an installed rpm, it upgrades" do
@@ -338,6 +500,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
338
500
  dnf_package.run_action(:install)
339
501
  expect(dnf_package.updated_by_last_action?).to be true
340
502
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
503
+ dnf_package.run_action(:install)
504
+ expect(dnf_package.updated_by_last_action?).to be false
341
505
  end
342
506
 
343
507
  it "with an equality constraint, when it is not met by an installed rpm, it upgrades" do
@@ -346,6 +510,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
346
510
  dnf_package.run_action(:install)
347
511
  expect(dnf_package.updated_by_last_action?).to be true
348
512
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
513
+ dnf_package.run_action(:install)
514
+ expect(dnf_package.updated_by_last_action?).to be false
349
515
  end
350
516
 
351
517
  it "with an equality constraint, when it is met by an installed rpm, it does nothing" do
@@ -382,6 +548,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
382
548
  dnf_package.run_action(:install)
383
549
  expect(dnf_package.updated_by_last_action?).to be true
384
550
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
551
+ dnf_package.run_action(:install)
552
+ expect(dnf_package.updated_by_last_action?).to be false
385
553
  end
386
554
 
387
555
  it "with a less than constraint, when the install version matches, it does nothing" do
@@ -398,6 +566,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
398
566
  dnf_package.run_action(:install)
399
567
  expect(dnf_package.updated_by_last_action?).to be true
400
568
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
569
+ dnf_package.run_action(:install)
570
+ expect(dnf_package.updated_by_last_action?).to be false
401
571
  end
402
572
  end
403
573
 
@@ -424,6 +594,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
424
594
  dnf_package.run_action(:install)
425
595
  expect(dnf_package.updated_by_last_action?).to be true
426
596
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
597
+ dnf_package.run_action(:install)
598
+ expect(dnf_package.updated_by_last_action?).to be false
427
599
  end
428
600
 
429
601
  it "installs the package when the name is a path to a file" do
@@ -432,6 +604,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
432
604
  dnf_package.run_action(:install)
433
605
  expect(dnf_package.updated_by_last_action?).to be true
434
606
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
607
+ dnf_package.run_action(:install)
608
+ expect(dnf_package.updated_by_last_action?).to be false
435
609
  end
436
610
 
437
611
  it "downgrade on a local file with allow_downgrade true works" do
@@ -441,6 +615,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
441
615
  dnf_package.run_action(:install)
442
616
  expect(dnf_package.updated_by_last_action?).to be true
443
617
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
618
+ dnf_package.run_action(:install)
619
+ expect(dnf_package.updated_by_last_action?).to be false
444
620
  end
445
621
 
446
622
  it "does not downgrade the package with :install" do
@@ -475,15 +651,6 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
475
651
  expect(dnf_package.updated_by_last_action?).to be false
476
652
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
477
653
  end
478
-
479
- it "is idempotent when the package is already installed and there is a version string with arch" do
480
- preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
481
- dnf_package.version "1.2-1.#{pkg_arch}"
482
- dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.#{pkg_arch}.rpm")
483
- dnf_package.run_action(:install)
484
- expect(dnf_package.updated_by_last_action?).to be false
485
- expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
486
- end
487
654
  end
488
655
 
489
656
  context "with no available version" do
@@ -502,6 +669,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
502
669
  dnf_package.run_action(:install)
503
670
  expect(dnf_package.updated_by_last_action?).to be true
504
671
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
672
+ dnf_package.run_action(:install)
673
+ expect(dnf_package.updated_by_last_action?).to be false
505
674
  end
506
675
  end
507
676
 
@@ -513,6 +682,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
513
682
  expect(dnf_package.updated_by_last_action?).to be true
514
683
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
515
684
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
685
+ dnf_package.run_action(:install)
686
+ expect(dnf_package.updated_by_last_action?).to be false
516
687
  end
517
688
 
518
689
  it "does nothing if both are installed" do
@@ -530,6 +701,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
530
701
  expect(dnf_package.updated_by_last_action?).to be true
531
702
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
532
703
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
704
+ dnf_package.run_action(:install)
705
+ expect(dnf_package.updated_by_last_action?).to be false
533
706
  end
534
707
 
535
708
  it "installs the first rpm if the second is installed" do
@@ -539,6 +712,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
539
712
  expect(dnf_package.updated_by_last_action?).to be true
540
713
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
541
714
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
715
+ dnf_package.run_action(:install)
716
+ expect(dnf_package.updated_by_last_action?).to be false
542
717
  end
543
718
 
544
719
  # unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
@@ -550,6 +725,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
550
725
  expect(dnf_package.updated_by_last_action?).to be true
551
726
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
552
727
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
728
+ dnf_package.run_action(:install)
729
+ expect(dnf_package.updated_by_last_action?).to be false
553
730
  end
554
731
 
555
732
  # unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
@@ -561,6 +738,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
561
738
  expect(dnf_package.updated_by_last_action?).to be true
562
739
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
563
740
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
741
+ dnf_package.run_action(:install)
742
+ expect(dnf_package.updated_by_last_action?).to be false
564
743
  end
565
744
 
566
745
  # unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
@@ -572,6 +751,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
572
751
  expect(dnf_package.updated_by_last_action?).to be true
573
752
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.#{pkg_arch}$/)
574
753
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match(/^chef_rpm-1.10-1.i686$/)
754
+ dnf_package.run_action(:install)
755
+ expect(dnf_package.updated_by_last_action?).to be false
575
756
  end
576
757
 
577
758
  # unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
@@ -597,6 +778,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
597
778
  dnf_package.run_action(:install)
598
779
  expect(dnf_package.updated_by_last_action?).to be true
599
780
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
781
+ dnf_package.run_action(:install)
782
+ expect(dnf_package.updated_by_last_action?).to be false
600
783
  end
601
784
 
602
785
  it "should work to enable a disabled repo" do
@@ -608,6 +791,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
608
791
  dnf_package.run_action(:install)
609
792
  expect(dnf_package.updated_by_last_action?).to be true
610
793
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
794
+ dnf_package.run_action(:install)
795
+ expect(dnf_package.updated_by_last_action?).to be false
611
796
  end
612
797
 
613
798
  it "when an idempotent install action is run, does not leave repos disabled" do
@@ -628,6 +813,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
628
813
  dnf_package.run_action(:install)
629
814
  expect(dnf_package.updated_by_last_action?).to be true
630
815
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
816
+ dnf_package.run_action(:install)
817
+ expect(dnf_package.updated_by_last_action?).to be false
631
818
  end
632
819
  end
633
820
  end
@@ -640,6 +827,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
640
827
  dnf_package.run_action(:install)
641
828
  expect(dnf_package.updated_by_last_action?).to be true
642
829
  expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}")
830
+ dnf_package.run_action(:install)
831
+ expect(dnf_package.updated_by_last_action?).to be false
643
832
  end
644
833
 
645
834
  it "throws a deprecation warning with allow_downgrade" do
@@ -647,10 +836,12 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
647
836
  expect(Chef).to receive(:deprecated).with(:dnf_package_allow_downgrade, /^the allow_downgrade property on the dnf_package provider is not used/)
648
837
  preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
649
838
  dnf_package.version("1.2")
650
- dnf_package.run_action(:install)
651
839
  dnf_package.allow_downgrade true
840
+ dnf_package.run_action(:install)
652
841
  expect(dnf_package.updated_by_last_action?).to be true
653
842
  expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}")
843
+ dnf_package.run_action(:install)
844
+ expect(dnf_package.updated_by_last_action?).to be false
654
845
  end
655
846
  end
656
847
 
@@ -663,6 +854,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
663
854
  dnf_package.run_action(:upgrade)
664
855
  expect(dnf_package.updated_by_last_action?).to be true
665
856
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
857
+ dnf_package.run_action(:upgrade)
858
+ expect(dnf_package.updated_by_last_action?).to be false
666
859
  end
667
860
 
668
861
  it "installs the package when the name is a path to a file" do
@@ -671,6 +864,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
671
864
  dnf_package.run_action(:upgrade)
672
865
  expect(dnf_package.updated_by_last_action?).to be true
673
866
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
867
+ dnf_package.run_action(:upgrade)
868
+ expect(dnf_package.updated_by_last_action?).to be false
674
869
  end
675
870
 
676
871
  it "downgrades the package when allow_downgrade is true" do
@@ -679,6 +874,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
679
874
  dnf_package.run_action(:upgrade)
680
875
  expect(dnf_package.updated_by_last_action?).to be true
681
876
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
877
+ dnf_package.run_action(:upgrade)
878
+ expect(dnf_package.updated_by_last_action?).to be false
682
879
  end
683
880
 
684
881
  it "upgrades the package" do
@@ -687,6 +884,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
687
884
  dnf_package.run_action(:upgrade)
688
885
  expect(dnf_package.updated_by_last_action?).to be true
689
886
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
887
+ dnf_package.run_action(:upgrade)
888
+ expect(dnf_package.updated_by_last_action?).to be false
690
889
  end
691
890
 
692
891
  it "is idempotent when the package is already installed" do
@@ -715,32 +914,104 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
715
914
  dnf_package.run_action(:upgrade)
716
915
  expect(dnf_package.updated_by_last_action?).to be true
717
916
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
917
+ dnf_package.run_action(:upgrade)
918
+ expect(dnf_package.updated_by_last_action?).to be false
718
919
  end
719
920
  end
720
921
 
721
922
  context "version pinning" do
722
- it "with an equality pin in the name it upgrades a prior package" do
923
+ it "with a full version pin it installs a later package" do
723
924
  preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
724
- dnf_package.package_name("chef_rpm-1.10")
925
+ dnf_package.package_name("chef_rpm")
926
+ dnf_package.version("1.10-1")
725
927
  dnf_package.run_action(:upgrade)
726
928
  expect(dnf_package.updated_by_last_action?).to be true
727
929
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
930
+ dnf_package.run_action(:upgrade)
931
+ expect(dnf_package.updated_by_last_action?).to be false
728
932
  end
729
933
 
730
- it "with a prco equality pin in the name it upgrades a prior package" do
934
+ it "with a full version pin in the name it downgrades the package" do
935
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
936
+ dnf_package.package_name("chef_rpm")
937
+ dnf_package.version("1.2-1")
938
+ dnf_package.run_action(:upgrade)
939
+ expect(dnf_package.updated_by_last_action?).to be true
940
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
941
+ dnf_package.run_action(:upgrade)
942
+ expect(dnf_package.updated_by_last_action?).to be false
943
+ end
944
+
945
+ it "with a partial (no release) version pin it installs a later package" do
731
946
  preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
732
- dnf_package.package_name("chef_rpm = 1.10")
947
+ dnf_package.package_name("chef_rpm")
948
+ dnf_package.version("1.10")
949
+ dnf_package.run_action(:upgrade)
950
+ expect(dnf_package.updated_by_last_action?).to be true
951
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
952
+ dnf_package.run_action(:upgrade)
953
+ expect(dnf_package.updated_by_last_action?).to be false
954
+ end
955
+
956
+ it "with a partial (no release) version pin in the name it downgrades the package" do
957
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
958
+ dnf_package.package_name("chef_rpm")
959
+ dnf_package.version("1.2")
960
+ dnf_package.run_action(:upgrade)
961
+ expect(dnf_package.updated_by_last_action?).to be true
962
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
963
+ dnf_package.run_action(:upgrade)
964
+ expect(dnf_package.updated_by_last_action?).to be false
965
+ end
966
+
967
+ it "with a full version pin it installs a later package" do
968
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
969
+ dnf_package.package_name("chef_rpm-1.10-1")
970
+ dnf_package.run_action(:upgrade)
971
+ expect(dnf_package.updated_by_last_action?).to be true
972
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
973
+ dnf_package.run_action(:upgrade)
974
+ expect(dnf_package.updated_by_last_action?).to be false
975
+ end
976
+
977
+ it "with a full version pin in the name it downgrades the package" do
978
+ preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
979
+ dnf_package.package_name("chef_rpm-1.2-1")
980
+ dnf_package.run_action(:upgrade)
981
+ expect(dnf_package.updated_by_last_action?).to be true
982
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
983
+ dnf_package.run_action(:upgrade)
984
+ expect(dnf_package.updated_by_last_action?).to be false
985
+ end
986
+
987
+ it "with a partial (no release) version pin it installs a later package" do
988
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
989
+ dnf_package.package_name("chef_rpm-1.10")
733
990
  dnf_package.run_action(:upgrade)
734
991
  expect(dnf_package.updated_by_last_action?).to be true
735
992
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
993
+ dnf_package.run_action(:upgrade)
994
+ expect(dnf_package.updated_by_last_action?).to be false
736
995
  end
737
996
 
738
- it "with an equality pin in the name it downgrades a later package" do
997
+ it "with a partial (no release) version pin in the name it downgrades the package" do
739
998
  preinstall("chef_rpm-1.10-1.#{pkg_arch}.rpm")
740
999
  dnf_package.package_name("chef_rpm-1.2")
741
1000
  dnf_package.run_action(:upgrade)
742
1001
  expect(dnf_package.updated_by_last_action?).to be true
743
1002
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
1003
+ dnf_package.run_action(:upgrade)
1004
+ expect(dnf_package.updated_by_last_action?).to be false
1005
+ end
1006
+
1007
+ it "with a prco equality pin in the name it upgrades a prior package" do
1008
+ preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
1009
+ dnf_package.package_name("chef_rpm = 1.10")
1010
+ dnf_package.run_action(:upgrade)
1011
+ expect(dnf_package.updated_by_last_action?).to be true
1012
+ expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
1013
+ dnf_package.run_action(:upgrade)
1014
+ expect(dnf_package.updated_by_last_action?).to be false
744
1015
  end
745
1016
 
746
1017
  it "with a prco equality pin in the name it downgrades a later package" do
@@ -749,6 +1020,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
749
1020
  dnf_package.run_action(:upgrade)
750
1021
  expect(dnf_package.updated_by_last_action?).to be true
751
1022
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
1023
+ dnf_package.run_action(:upgrade)
1024
+ expect(dnf_package.updated_by_last_action?).to be false
752
1025
  end
753
1026
 
754
1027
  it "with a > pin in the name and no rpm installed it installs" do
@@ -757,6 +1030,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
757
1030
  dnf_package.run_action(:upgrade)
758
1031
  expect(dnf_package.updated_by_last_action?).to be true
759
1032
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
1033
+ dnf_package.run_action(:upgrade)
1034
+ expect(dnf_package.updated_by_last_action?).to be false
760
1035
  end
761
1036
 
762
1037
  it "with a < pin in the name and no rpm installed it installs" do
@@ -765,6 +1040,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
765
1040
  dnf_package.run_action(:upgrade)
766
1041
  expect(dnf_package.updated_by_last_action?).to be true
767
1042
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
1043
+ dnf_package.run_action(:upgrade)
1044
+ expect(dnf_package.updated_by_last_action?).to be false
768
1045
  end
769
1046
 
770
1047
  it "with a > pin in the name and matching rpm installed it does nothing" do
@@ -789,6 +1066,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
789
1066
  dnf_package.run_action(:upgrade)
790
1067
  expect(dnf_package.updated_by_last_action?).to be true
791
1068
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
1069
+ dnf_package.run_action(:upgrade)
1070
+ expect(dnf_package.updated_by_last_action?).to be false
792
1071
  end
793
1072
 
794
1073
  it "with a < pin in the name and non-matching rpm installed it downgrades" do
@@ -797,6 +1076,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
797
1076
  dnf_package.run_action(:upgrade)
798
1077
  expect(dnf_package.updated_by_last_action?).to be true
799
1078
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
1079
+ dnf_package.run_action(:upgrade)
1080
+ expect(dnf_package.updated_by_last_action?).to be false
800
1081
  end
801
1082
  end
802
1083
  end
@@ -833,6 +1114,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
833
1114
  dnf_package.run_action(:remove)
834
1115
  expect(dnf_package.updated_by_last_action?).to be true
835
1116
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1117
+ dnf_package.run_action(:remove)
1118
+ expect(dnf_package.updated_by_last_action?).to be false
836
1119
  end
837
1120
 
838
1121
  it "removes the package if the i686 package is installed", :intel_64bit do
@@ -841,6 +1124,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
841
1124
  dnf_package.run_action(:remove)
842
1125
  expect(dnf_package.updated_by_last_action?).to be true
843
1126
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1127
+ dnf_package.run_action(:remove)
1128
+ expect(dnf_package.updated_by_last_action?).to be false
844
1129
  end
845
1130
 
846
1131
  it "removes the package if the prior version i686 package is installed", :intel_64bit do
@@ -849,6 +1134,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
849
1134
  dnf_package.run_action(:remove)
850
1135
  expect(dnf_package.updated_by_last_action?).to be true
851
1136
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1137
+ dnf_package.run_action(:remove)
1138
+ expect(dnf_package.updated_by_last_action?).to be false
852
1139
  end
853
1140
  end
854
1141
 
@@ -866,6 +1153,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
866
1153
  dnf_package.run_action(:remove)
867
1154
  expect(dnf_package.updated_by_last_action?).to be true
868
1155
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1156
+ dnf_package.run_action(:remove)
1157
+ expect(dnf_package.updated_by_last_action?).to be false
869
1158
  end
870
1159
 
871
1160
  it "removes the package if the prior version package is installed" do
@@ -873,6 +1162,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
873
1162
  dnf_package.run_action(:remove)
874
1163
  expect(dnf_package.updated_by_last_action?).to be true
875
1164
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1165
+ dnf_package.run_action(:remove)
1166
+ expect(dnf_package.updated_by_last_action?).to be false
876
1167
  end
877
1168
 
878
1169
  it "does nothing if the i686 package is installed" do
@@ -897,6 +1188,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
897
1188
  dnf_package.run_action(:remove)
898
1189
  expect(dnf_package.updated_by_last_action?).to be true
899
1190
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
1191
+ dnf_package.run_action(:remove)
1192
+ expect(dnf_package.updated_by_last_action?).to be false
900
1193
  end
901
1194
  end
902
1195
 
@@ -907,6 +1200,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
907
1200
  dnf_package.run_action(:remove)
908
1201
  expect(dnf_package.updated_by_last_action?).to be true
909
1202
  expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^package chef_rpm is not installed$")
1203
+ dnf_package.run_action(:remove)
1204
+ expect(dnf_package.updated_by_last_action?).to be false
910
1205
  end
911
1206
  end
912
1207
  end
@@ -926,6 +1221,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
926
1221
  dnf_package.run_action(:lock)
927
1222
  expect(dnf_package.updated_by_last_action?).to be true
928
1223
  expect(shell_out("dnf versionlock list").stdout.chomp).to match("^chef_rpm-0:")
1224
+ dnf_package.run_action(:lock)
1225
+ expect(dnf_package.updated_by_last_action?).to be false
929
1226
  end
930
1227
 
931
1228
  it "does not lock if its already locked" do
@@ -944,6 +1241,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
944
1241
  dnf_package.run_action(:unlock)
945
1242
  expect(dnf_package.updated_by_last_action?).to be true
946
1243
  expect(shell_out("dnf versionlock list").stdout.chomp).not_to match("^chef_rpm-0:")
1244
+ dnf_package.run_action(:unlock)
1245
+ expect(dnf_package.updated_by_last_action?).to be false
947
1246
  end
948
1247
 
949
1248
  it "does not unlock an already locked rpm" do
@@ -960,6 +1259,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
960
1259
  dnf_package.run_action(:lock)
961
1260
  expect(dnf_package.updated_by_last_action?).to be true
962
1261
  expect(shell_out("dnf versionlock list").stdout.chomp).to match("^chef_rpm-0:")
1262
+ dnf_package.run_action(:lock)
1263
+ expect(dnf_package.updated_by_last_action?).to be false
963
1264
  end
964
1265
 
965
1266
  it "check that we can unlock based on provides" do
@@ -969,6 +1270,8 @@ describe Chef::Resource::DnfPackage, :requires_root, external: exclude_test do
969
1270
  dnf_package.run_action(:unlock)
970
1271
  expect(dnf_package.updated_by_last_action?).to be true
971
1272
  expect(shell_out("dnf versionlock list").stdout.chomp).not_to match("^chef_rpm-0:")
1273
+ dnf_package.run_action(:unlock)
1274
+ expect(dnf_package.updated_by_last_action?).to be false
972
1275
  end
973
1276
  end
974
1277
  end