chef 12.17.44-universal-mingw32 → 12.18.31-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/README.md +3 -2
- data/Rakefile +9 -0
- data/VERSION +1 -1
- data/acceptance/Gemfile.lock +17 -17
- data/distro/common/html/knife_environment.html +4 -8
- data/distro/common/man/man1/knife-environment.1 +4 -16
- data/distro/powershell/chef/chef.psm1 +139 -24
- data/lib/chef/application.rb +5 -4
- data/lib/chef/application/windows_service_manager.rb +6 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +8 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +1 -1
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
- data/lib/chef/cookbook/metadata.rb +2 -2
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/data_collector.rb +24 -13
- data/lib/chef/data_collector/messages.rb +8 -6
- data/lib/chef/data_collector/messages/helpers.rb +1 -1
- data/lib/chef/deprecated.rb +30 -0
- data/lib/chef/dsl/platform_introspection.rb +2 -2
- data/lib/chef/encrypted_data_bag_item.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +2 -2
- data/lib/chef/environment.rb +1 -1
- data/lib/chef/exceptions.rb +5 -5
- data/lib/chef/file_access_control/unix.rb +5 -5
- data/lib/chef/formatters/error_description.rb +1 -1
- data/lib/chef/http/basic_client.rb +1 -1
- data/lib/chef/http/json_input.rb +2 -2
- data/lib/chef/knife.rb +1 -1
- data/lib/chef/knife/cookbook_site_install.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/ui.rb +1 -1
- data/lib/chef/mixin/command.rb +1 -0
- data/lib/chef/mixin/deep_merge.rb +1 -1
- data/lib/chef/mixin/shell_out.rb +58 -3
- data/lib/chef/mixin/which.rb +5 -9
- data/lib/chef/mixin/wide_string.rb +1 -1
- data/lib/chef/node.rb +1 -1
- data/lib/chef/node/attribute.rb +4 -5
- data/lib/chef/node_map.rb +18 -2
- data/lib/chef/platform/provider_handler_map.rb +2 -2
- data/lib/chef/platform/provider_mapping.rb +5 -0
- data/lib/chef/platform/resource_handler_map.rb +2 -2
- data/lib/chef/provider/env/windows.rb +1 -1
- data/lib/chef/provider/git.rb +1 -1
- data/lib/chef/provider/group.rb +41 -46
- data/lib/chef/provider/group/aix.rb +12 -19
- data/lib/chef/provider/group/dscl.rb +46 -43
- data/lib/chef/provider/group/gpasswd.rb +7 -7
- data/lib/chef/provider/group/groupadd.rb +29 -34
- data/lib/chef/provider/group/groupmod.rb +26 -31
- data/lib/chef/provider/group/pw.rb +28 -31
- data/lib/chef/provider/group/suse.rb +9 -9
- data/lib/chef/provider/group/usermod.rb +10 -11
- data/lib/chef/provider/group/windows.rb +18 -20
- data/lib/chef/provider/ifconfig.rb +52 -63
- data/lib/chef/provider/ifconfig/aix.rb +23 -28
- data/lib/chef/provider/ifconfig/debian.rb +23 -22
- data/lib/chef/provider/ifconfig/redhat.rb +12 -12
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/osx_profile.rb +4 -2
- data/lib/chef/provider/package.rb +16 -7
- data/lib/chef/provider/package/chocolatey.rb +3 -1
- data/lib/chef/provider/package/dnf.rb +183 -0
- data/lib/chef/provider/package/dnf/dnf_helper.py +91 -0
- data/lib/chef/provider/package/dnf/python_helper.rb +120 -0
- data/lib/chef/provider/package/dnf/version.rb +56 -0
- data/lib/chef/provider/package/easy_install.rb +1 -1
- data/lib/chef/provider/package/freebsd/base.rb +1 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/powershell.rb +3 -3
- data/lib/chef/provider/package/windows.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/route.rb +186 -184
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/insserv.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/support/yum_repo.erb +10 -3
- data/lib/chef/provider/user.rb +17 -20
- data/lib/chef/provider/user/aix.rb +23 -24
- data/lib/chef/provider/user/dscl.rb +56 -53
- data/lib/chef/provider/user/linux.rb +13 -16
- data/lib/chef/provider/user/pw.rb +26 -30
- data/lib/chef/provider/user/solaris.rb +11 -12
- data/lib/chef/provider/user/useradd.rb +20 -22
- data/lib/chef/provider/user/windows.rb +19 -22
- data/lib/chef/provider_resolver.rb +4 -2
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource.rb +7 -0
- data/lib/chef/resource/chocolatey_package.rb +1 -0
- data/lib/chef/resource/dnf_package.rb +64 -0
- data/lib/chef/resource/file/verification.rb +6 -4
- data/lib/chef/resource/yum_package.rb +18 -14
- data/lib/chef/resource/yum_repository.rb +1 -1
- data/lib/chef/resource_reporter.rb +11 -0
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/scan_access_control.rb +4 -4
- data/lib/chef/util/dsc/resource_store.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/memory.rb +1 -1
- data/lib/chef/win32/security.rb +2 -2
- data/lib/chef/win32/security/sid.rb +2 -2
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
- data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
- data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -0
- data/spec/functional/resource/dnf_package_spec.rb +686 -0
- data/spec/functional/resource/dsc_script_spec.rb +1 -0
- data/spec/functional/resource/user/useradd_spec.rb +10 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +2 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +3 -0
- data/spec/integration/recipes/resource_load_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -3
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/cat.rb +1 -0
- data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -0
- data/spec/support/lib/chef/resource/openldap_includer.rb +2 -0
- data/spec/support/lib/chef/resource/with_state.rb +2 -0
- data/spec/support/lib/chef/resource/zen_master.rb +1 -0
- data/spec/unit/cookbook/metadata_spec.rb +3 -3
- data/spec/unit/data_collector/messages/helpers_spec.rb +7 -0
- data/spec/unit/data_collector_spec.rb +56 -0
- data/spec/unit/decorator/lazy_spec.rb +1 -1
- data/spec/unit/environment_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +3 -4
- data/spec/unit/node_spec.rb +23 -2
- data/spec/unit/platform_spec.rb +1 -0
- data/spec/unit/provider/group/dscl_spec.rb +29 -29
- data/spec/unit/provider/group/gpasswd_spec.rb +10 -10
- data/spec/unit/provider/group/groupadd_spec.rb +31 -30
- data/spec/unit/provider/group/groupmod_spec.rb +16 -16
- data/spec/unit/provider/group/pw_spec.rb +11 -11
- data/spec/unit/provider/group/suse_spec.rb +5 -5
- data/spec/unit/provider/group/usermod_spec.rb +15 -15
- data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
- data/spec/unit/provider/ifconfig/debian_spec.rb +10 -22
- data/spec/unit/provider/ifconfig/redhat_spec.rb +4 -4
- data/spec/unit/provider/ifconfig_spec.rb +18 -19
- data/spec/unit/provider/package/chocolatey_spec.rb +21 -21
- data/spec/unit/provider/package/msu_spec.rb +1 -1
- data/spec/unit/provider/route_spec.rb +21 -21
- data/spec/unit/provider/user/dscl_spec.rb +54 -57
- data/spec/unit/provider/user/linux_spec.rb +5 -5
- data/spec/unit/provider/user/pw_spec.rb +26 -22
- data/spec/unit/provider/user/windows_spec.rb +4 -4
- data/spec/unit/provider/user_spec.rb +19 -21
- data/spec/unit/provider_resolver_spec.rb +1 -0
- data/spec/unit/resource/chocolatey_package_spec.rb +12 -0
- data/spec/unit/resource/dnf_package_spec.rb +99 -0
- data/spec/unit/resource/remote_file_spec.rb +2 -2
- data/spec/unit/resource/yum_package_spec.rb +20 -0
- data/spec/unit/resource_reporter_spec.rb +24 -0
- data/spec/unit/resource_spec.rb +2 -0
- data/spec/unit/runner_spec.rb +1 -0
- data/tasks/bin/bundle-platform +1 -1
- data/tasks/gemfile_util.rb +2 -2
- data/tasks/templates/prerelease.md.erb +1 -10
- data/tasks/templates/release.md.erb +1 -9
- metadata +24 -5
- data/lib/chef/platform/handler_map.rb +0 -40
data/lib/chef/resource.rb
CHANGED
@@ -1548,6 +1548,13 @@ class Chef
|
|
1548
1548
|
#
|
1549
1549
|
# Returns the class with the given resource_name.
|
1550
1550
|
#
|
1551
|
+
# NOTE: Chef::Resource.resource_matching_short_name(:package) returns
|
1552
|
+
# Chef::Resource::Package, while on rhel the API call
|
1553
|
+
# Chef::Resource.resource_for_node(:package, node) will return
|
1554
|
+
# Chef::Resource::YumPackage -- which is probably what you really
|
1555
|
+
# want. This API should most likely be removed or changed to call
|
1556
|
+
# resource_for_node.
|
1557
|
+
#
|
1551
1558
|
# ==== Parameters
|
1552
1559
|
# short_name<Symbol>:: short_name of the resource (ie :directory)
|
1553
1560
|
#
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2016, Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "chef/resource/package"
|
19
|
+
|
20
|
+
class Chef
|
21
|
+
class Resource
|
22
|
+
class DnfPackage < Chef::Resource::Package
|
23
|
+
extend Chef::Mixin::Which
|
24
|
+
|
25
|
+
resource_name :dnf_package
|
26
|
+
|
27
|
+
allowed_actions :install, :upgrade, :remove, :purge, :reconfig, :lock, :unlock, :flush_cache
|
28
|
+
|
29
|
+
provides :package, os: "linux", platform_family: %w{rhel fedora} do
|
30
|
+
which("dnf")
|
31
|
+
end
|
32
|
+
|
33
|
+
provides :dnf_package
|
34
|
+
|
35
|
+
# Install a specific arch
|
36
|
+
property :arch, [String, Array], coerce: proc { |x| [x].flatten }
|
37
|
+
|
38
|
+
# Flush the in-memory available/installed cache, this does not flush the dnf caches on disk
|
39
|
+
property :flush_cache,
|
40
|
+
Hash,
|
41
|
+
default: { before: false, after: false },
|
42
|
+
coerce: proc { |v|
|
43
|
+
if v.is_a?(Hash)
|
44
|
+
v
|
45
|
+
elsif v.is_a?(Array)
|
46
|
+
v.each_with_object({}) { |arg, obj| obj[arg] = true }
|
47
|
+
elsif v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
48
|
+
{ before: v, after: v }
|
49
|
+
elsif v == :before
|
50
|
+
{ before: true, after: false }
|
51
|
+
elsif v == :after
|
52
|
+
{ after: true, before: false }
|
53
|
+
end
|
54
|
+
}
|
55
|
+
|
56
|
+
def allow_downgrade(arg = nil)
|
57
|
+
if !arg.nil?
|
58
|
+
Chef.deprecated(:dnf_package_allow_downgrade, "the allow_downgrade property on the dnf_package provider is not used, DNF supports downgrades by default.")
|
59
|
+
end
|
60
|
+
false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -108,10 +108,12 @@ class Chef
|
|
108
108
|
def verify_command(path, opts)
|
109
109
|
# First implementation interpolated `file`; docs & RFC claim `path`
|
110
110
|
# is interpolated. Until `file` can be deprecated, interpolate both.
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
111
|
+
if @command.include?("%{file}")
|
112
|
+
Chef.deprecated(:verify_file,
|
113
|
+
"%{file} is deprecated in verify command and will not be "\
|
114
|
+
"supported in Chef 13. Please use %{path} instead."
|
115
|
+
)
|
116
|
+
end
|
115
117
|
command = @command % { :file => path, :path => path }
|
116
118
|
interpreter = Chef::GuardInterpreter.for_resource(@parent_resource, command, @command_opts)
|
117
119
|
interpreter.evaluate
|
@@ -17,7 +17,6 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require "chef/resource/package"
|
20
|
-
require "chef/provider/package/yum"
|
21
20
|
|
22
21
|
class Chef
|
23
22
|
class Resource
|
@@ -27,22 +26,27 @@ class Chef
|
|
27
26
|
|
28
27
|
# Install a specific arch
|
29
28
|
property :arch, [ String, Array ]
|
30
|
-
|
29
|
+
|
31
30
|
property :flush_cache,
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
31
|
+
Hash,
|
32
|
+
default: { before: false, after: false },
|
33
|
+
coerce: proc { |v|
|
34
|
+
if v.is_a?(Hash)
|
35
|
+
v
|
36
|
+
elsif v.is_a?(Array)
|
37
|
+
v.each_with_object({}) { |arg, obj| obj[arg] = true }
|
38
|
+
elsif v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
39
|
+
{ before: v, after: v }
|
40
|
+
elsif v == :before
|
41
|
+
{ before: true, after: false }
|
42
|
+
elsif v == :after
|
43
|
+
{ after: true, before: false }
|
44
|
+
end
|
45
|
+
}
|
46
|
+
|
43
47
|
property :allow_downgrade, [ true, false ], default: false
|
44
|
-
property :yum_binary, String
|
45
48
|
|
49
|
+
property :yum_binary, String
|
46
50
|
end
|
47
51
|
end
|
48
52
|
end
|
@@ -25,7 +25,7 @@ class Chef
|
|
25
25
|
provides :yum_repository
|
26
26
|
|
27
27
|
# http://linux.die.net/man/5/yum.conf
|
28
|
-
property :baseurl, String, regex: /.*/
|
28
|
+
property :baseurl, [String, Array], regex: /.*/
|
29
29
|
property :cost, String, regex: /^\d+$/
|
30
30
|
property :clean_headers, [TrueClass, FalseClass], default: false # deprecated
|
31
31
|
property :clean_metadata, [TrueClass, FalseClass], default: true
|
@@ -198,6 +198,17 @@ class Chef
|
|
198
198
|
def resource_completed(new_resource)
|
199
199
|
if @pending_update && !nested_resource?(new_resource)
|
200
200
|
@pending_update.finish
|
201
|
+
|
202
|
+
# Verify if the resource has sensitive data
|
203
|
+
# and create a new blank resource with only
|
204
|
+
# the name so we can report it back without
|
205
|
+
# sensitive data
|
206
|
+
if @pending_update.new_resource.sensitive
|
207
|
+
klass = @pending_update.new_resource.class
|
208
|
+
resource_name = @pending_update.new_resource.name
|
209
|
+
@pending_update.new_resource = klass.new(resource_name)
|
210
|
+
end
|
211
|
+
|
201
212
|
@updated_resources << @pending_update
|
202
213
|
@pending_update = nil
|
203
214
|
end
|
data/lib/chef/resources.rb
CHANGED
@@ -31,6 +31,7 @@ require "chef/resource/deploy"
|
|
31
31
|
require "chef/resource/deploy_revision"
|
32
32
|
require "chef/resource/directory"
|
33
33
|
require "chef/resource/dpkg_package"
|
34
|
+
require "chef/resource/dnf_package"
|
34
35
|
require "chef/resource/dsc_script"
|
35
36
|
require "chef/resource/dsc_resource"
|
36
37
|
require "chef/resource/easy_install_package"
|
@@ -70,7 +70,7 @@ class Chef
|
|
70
70
|
when Integer
|
71
71
|
stat.uid
|
72
72
|
else
|
73
|
-
Chef::Log.error("The `owner` parameter of the
|
73
|
+
Chef::Log.error("The `owner` parameter of the #{@new_resource} resource is set to an invalid value (#{new_resource.owner.inspect})")
|
74
74
|
raise ArgumentError, "cannot resolve #{new_resource.owner.inspect} to uid, owner must be a string or integer"
|
75
75
|
end
|
76
76
|
end
|
@@ -97,7 +97,7 @@ class Chef
|
|
97
97
|
when Integer
|
98
98
|
stat.gid
|
99
99
|
else
|
100
|
-
Chef::Log.error("The `group` parameter of the
|
100
|
+
Chef::Log.error("The `group` parameter of the #{@new_resource} resource is set to an invalid value (#{new_resource.owner.inspect})")
|
101
101
|
raise ArgumentError, "cannot resolve #{new_resource.group.inspect} to gid, group must be a string or integer"
|
102
102
|
end
|
103
103
|
end
|
@@ -121,8 +121,8 @@ class Chef
|
|
121
121
|
when String, Integer, nil
|
122
122
|
"0#{(stat.mode & 07777).to_s(8)}"
|
123
123
|
else
|
124
|
-
Chef::Log.error("The `mode` parameter of the
|
125
|
-
raise ArgumentError, "Invalid value #{new_resource.mode.inspect} for `mode` on resource
|
124
|
+
Chef::Log.error("The `mode` parameter of the #{@new_resource} resource is set to an invalid value (#{new_resource.mode.inspect})")
|
125
|
+
raise ArgumentError, "Invalid value #{new_resource.mode.inspect} for `mode` on resource #{@new_resource}"
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
@@ -74,7 +74,7 @@ class Chef
|
|
74
74
|
found = rs.find_all do |r|
|
75
75
|
name_matches = r["Name"].casecmp(name) == 0
|
76
76
|
if name_matches
|
77
|
-
module_name
|
77
|
+
module_name.nil? || (r["Module"] && r["Module"]["Name"].casecmp(module_name) == 0)
|
78
78
|
else
|
79
79
|
false
|
80
80
|
end
|
data/lib/chef/version.rb
CHANGED
data/lib/chef/win32/memory.rb
CHANGED
data/lib/chef/win32/security.rb
CHANGED
@@ -551,7 +551,7 @@ class Chef
|
|
551
551
|
def set_security_descriptor_dacl(security_descriptor, acl, defaulted = false, present = nil)
|
552
552
|
security_descriptor = security_descriptor.pointer if security_descriptor.respond_to?(:pointer)
|
553
553
|
acl = acl.pointer if acl.respond_to?(:pointer)
|
554
|
-
present = !security_descriptor.null? if present
|
554
|
+
present = !security_descriptor.null? if present.nil?
|
555
555
|
|
556
556
|
unless SetSecurityDescriptorDacl(security_descriptor, present, acl, defaulted)
|
557
557
|
Chef::ReservedNames::Win32::Error.raise!
|
@@ -579,7 +579,7 @@ class Chef
|
|
579
579
|
def self.set_security_descriptor_sacl(security_descriptor, acl, defaulted = false, present = nil)
|
580
580
|
security_descriptor = security_descriptor.pointer if security_descriptor.respond_to?(:pointer)
|
581
581
|
acl = acl.pointer if acl.respond_to?(:pointer)
|
582
|
-
present = !security_descriptor.null? if present
|
582
|
+
present = !security_descriptor.null? if present.nil?
|
583
583
|
|
584
584
|
unless SetSecurityDescriptorSacl(security_descriptor, present, acl, defaulted)
|
585
585
|
Chef::ReservedNames::Win32::Error.raise!
|
@@ -50,7 +50,7 @@ class Chef
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def ==(other)
|
53
|
-
other
|
53
|
+
!other.nil? && Chef::ReservedNames::Win32::Security.equal_sid(self, other)
|
54
54
|
end
|
55
55
|
|
56
56
|
attr_reader :pointer
|
@@ -61,7 +61,7 @@ class Chef
|
|
61
61
|
|
62
62
|
def account_name
|
63
63
|
domain, name, use = account
|
64
|
-
(domain
|
64
|
+
(!domain.nil? && domain.length > 0) ? "#{domain}\\#{name}" : name
|
65
65
|
end
|
66
66
|
|
67
67
|
def size
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
|
3
|
+
<revision>1479418959</revision>
|
4
|
+
<data type="filelists">
|
5
|
+
<checksum type="sha256">8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16</checksum>
|
6
|
+
<open-checksum type="sha256">9f5be999b4a535c19afc53703851577e1a325227fab651189c5c39708b9a1e38</open-checksum>
|
7
|
+
<location href="repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz"/>
|
8
|
+
<timestamp>1479418959</timestamp>
|
9
|
+
<size>419</size>
|
10
|
+
<open-size>1127</open-size>
|
11
|
+
</data>
|
12
|
+
<data type="primary">
|
13
|
+
<checksum type="sha256">66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243</checksum>
|
14
|
+
<open-checksum type="sha256">dc25cfbf4520861130e0ba203d27cc40b183fbb7c576aac33d838fb20a68aa32</open-checksum>
|
15
|
+
<location href="repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz"/>
|
16
|
+
<timestamp>1479418959</timestamp>
|
17
|
+
<size>859</size>
|
18
|
+
<open-size>4529</open-size>
|
19
|
+
</data>
|
20
|
+
<data type="primary_db">
|
21
|
+
<checksum type="sha256">313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0</checksum>
|
22
|
+
<open-checksum type="sha256">720b637c782cce8604b922e9989ecfff9091e26163d643bd1b676778beb1c933</open-checksum>
|
23
|
+
<location href="repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2"/>
|
24
|
+
<timestamp>1479418959</timestamp>
|
25
|
+
<database_version>10</database_version>
|
26
|
+
<size>2460</size>
|
27
|
+
<open-size>32768</open-size>
|
28
|
+
</data>
|
29
|
+
<data type="other_db">
|
30
|
+
<checksum type="sha256">b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc</checksum>
|
31
|
+
<open-checksum type="sha256">938156bcfc95828cb6857e1b2790dceaef57196843a80464ba5749772fc15e83</open-checksum>
|
32
|
+
<location href="repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2"/>
|
33
|
+
<timestamp>1479418959</timestamp>
|
34
|
+
<database_version>10</database_version>
|
35
|
+
<size>967</size>
|
36
|
+
<open-size>6144</open-size>
|
37
|
+
</data>
|
38
|
+
<data type="other">
|
39
|
+
<checksum type="sha256">31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553</checksum>
|
40
|
+
<open-checksum type="sha256">2ea64cdb2f5ba3859af29fe67a85d61d5b4de23f3da1ee71d5af175d8d887ab6</open-checksum>
|
41
|
+
<location href="repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz"/>
|
42
|
+
<timestamp>1479418959</timestamp>
|
43
|
+
<size>413</size>
|
44
|
+
<open-size>1035</open-size>
|
45
|
+
</data>
|
46
|
+
<data type="filelists_db">
|
47
|
+
<checksum type="sha256">4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773</checksum>
|
48
|
+
<open-checksum type="sha256">8bc15efa19d02a5112e20c6ed1be17c5851287ddfba17aee2283ddb216dd08d7</open-checksum>
|
49
|
+
<location href="repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2"/>
|
50
|
+
<timestamp>1479418959</timestamp>
|
51
|
+
<database_version>10</database_version>
|
52
|
+
<size>1131</size>
|
53
|
+
<open-size>7168</open-size>
|
54
|
+
</data>
|
55
|
+
</repomd>
|
@@ -0,0 +1,686 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2016, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "spec_helper"
|
19
|
+
require "functional/resource/base"
|
20
|
+
require "chef/mixin/shell_out"
|
21
|
+
|
22
|
+
# run this test only for following platforms.
|
23
|
+
exclude_test = !(%w{rhel fedora}.include?(ohai[:platform_family]) && File.exist?("/usr/bin/dnf"))
|
24
|
+
describe Chef::Resource::RpmPackage, :requires_root, :external => exclude_test do
|
25
|
+
include Chef::Mixin::ShellOut
|
26
|
+
|
27
|
+
def flush_cache
|
28
|
+
# needed on at least fc23/fc24 sometimes to deal with the dnf cache getting out of sync with the rpm db
|
29
|
+
FileUtils.rm_f "/var/cache/dnf/@System.solv"
|
30
|
+
Chef::Resource::DnfPackage.new("shouldnt-matter", run_context).run_action(:flush_cache)
|
31
|
+
end
|
32
|
+
|
33
|
+
def preinstall(*rpms)
|
34
|
+
rpms.each do |rpm|
|
35
|
+
shell_out!("rpm -ivh #{CHEF_SPEC_ASSETS}/yumrepo/#{rpm}")
|
36
|
+
end
|
37
|
+
flush_cache
|
38
|
+
end
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
File.open("/etc/yum.repos.d/chef-dnf-localtesting.repo", "w+") do |f|
|
42
|
+
f.write <<-EOF
|
43
|
+
[chef-dnf-localtesting]
|
44
|
+
name=Chef DNF spec testing repo
|
45
|
+
baseurl=file://#{CHEF_SPEC_ASSETS}/yumrepo
|
46
|
+
enable=1
|
47
|
+
gpgcheck=0
|
48
|
+
EOF
|
49
|
+
end
|
50
|
+
shell_out!("rpm -qa | grep chef_rpm | xargs -r rpm -e")
|
51
|
+
end
|
52
|
+
|
53
|
+
after(:all) do
|
54
|
+
shell_out!("rpm -qa | grep chef_rpm | xargs -r rpm -e")
|
55
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
56
|
+
end
|
57
|
+
|
58
|
+
let(:package_name) { "chef_rpm" }
|
59
|
+
let(:dnf_package) { Chef::Resource::DnfPackage.new(package_name, run_context) }
|
60
|
+
|
61
|
+
describe ":install" do
|
62
|
+
context "vanilla use case" do
|
63
|
+
let(:package_name) { "chef_rpm" }
|
64
|
+
|
65
|
+
it "installs if the package is not installed" do
|
66
|
+
flush_cache
|
67
|
+
dnf_package.run_action(:install)
|
68
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
69
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "does not install if the package is installed" do
|
73
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
74
|
+
dnf_package.run_action(:install)
|
75
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
76
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
77
|
+
end
|
78
|
+
|
79
|
+
it "does not install twice" do
|
80
|
+
flush_cache
|
81
|
+
dnf_package.run_action(:install)
|
82
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
83
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
84
|
+
dnf_package.run_action(:install)
|
85
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
86
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "does not install if the prior version package is installed" do
|
90
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
91
|
+
dnf_package.run_action(:install)
|
92
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
93
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
94
|
+
end
|
95
|
+
|
96
|
+
it "does not install if the i686 package is installed" do
|
97
|
+
skip "FIXME: do nothing, or install the x86_64 version?"
|
98
|
+
preinstall("chef_rpm-1.10-1.fc24.i686.rpm")
|
99
|
+
dnf_package.run_action(:install)
|
100
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
101
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.i686")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "does not install if the prior version i686 package is installed" do
|
105
|
+
skip "FIXME: do nothing, or install the x86_64 version?"
|
106
|
+
preinstall("chef_rpm-1.2-1.fc24.i686.rpm")
|
107
|
+
dnf_package.run_action(:install)
|
108
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
109
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.i686")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context "with versions or globs in the name" do
|
114
|
+
it "works with a version" do
|
115
|
+
flush_cache
|
116
|
+
dnf_package.package_name("chef_rpm-1.10")
|
117
|
+
dnf_package.run_action(:install)
|
118
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
119
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "works with an older version" do
|
123
|
+
flush_cache
|
124
|
+
dnf_package.package_name("chef_rpm-1.2")
|
125
|
+
dnf_package.run_action(:install)
|
126
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
127
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
128
|
+
end
|
129
|
+
|
130
|
+
it "works with an evr" do
|
131
|
+
flush_cache
|
132
|
+
dnf_package.package_name("chef_rpm-0:1.2-1.fc24")
|
133
|
+
dnf_package.run_action(:install)
|
134
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
135
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "works with a version glob" do
|
139
|
+
flush_cache
|
140
|
+
dnf_package.package_name("chef_rpm-1*")
|
141
|
+
dnf_package.run_action(:install)
|
142
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
143
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
144
|
+
end
|
145
|
+
|
146
|
+
it "works with a name glob + version glob" do
|
147
|
+
flush_cache
|
148
|
+
dnf_package.package_name("chef_rp*-1*")
|
149
|
+
dnf_package.run_action(:install)
|
150
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
151
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# version only matches the actual dnf version, does not work with epoch or release or combined evr
|
156
|
+
context "with version property" do
|
157
|
+
it "matches the full version" do
|
158
|
+
flush_cache
|
159
|
+
dnf_package.package_name("chef_rpm")
|
160
|
+
dnf_package.version("1.10")
|
161
|
+
dnf_package.run_action(:install)
|
162
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
163
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
164
|
+
end
|
165
|
+
|
166
|
+
it "matches with a glob" do
|
167
|
+
flush_cache
|
168
|
+
dnf_package.package_name("chef_rpm")
|
169
|
+
dnf_package.version("1*")
|
170
|
+
dnf_package.run_action(:install)
|
171
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
172
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
173
|
+
end
|
174
|
+
|
175
|
+
it "matches the vr" do
|
176
|
+
flush_cache
|
177
|
+
dnf_package.package_name("chef_rpm")
|
178
|
+
dnf_package.version("1.10-1.fc24")
|
179
|
+
dnf_package.run_action(:install)
|
180
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
181
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
182
|
+
end
|
183
|
+
|
184
|
+
it "matches the evr" do
|
185
|
+
flush_cache
|
186
|
+
dnf_package.package_name("chef_rpm")
|
187
|
+
dnf_package.version("0:1.10-1.fc24")
|
188
|
+
dnf_package.run_action(:install)
|
189
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
190
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
191
|
+
end
|
192
|
+
|
193
|
+
it "matches with a vr glob" do
|
194
|
+
pending "doesn't work on command line either"
|
195
|
+
flush_cache
|
196
|
+
dnf_package.package_name("chef_rpm")
|
197
|
+
dnf_package.version("1.10-1*")
|
198
|
+
dnf_package.run_action(:install)
|
199
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
200
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
201
|
+
end
|
202
|
+
|
203
|
+
it "matches with an evr glob" do
|
204
|
+
pending "doesn't work on command line either"
|
205
|
+
flush_cache
|
206
|
+
dnf_package.package_name("chef_rpm")
|
207
|
+
dnf_package.version("0:1.10-1*")
|
208
|
+
dnf_package.run_action(:install)
|
209
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
210
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "downgrades" do
|
215
|
+
it "just work with DNF" do
|
216
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
217
|
+
dnf_package.version("1.2")
|
218
|
+
dnf_package.run_action(:install)
|
219
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
220
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
221
|
+
end
|
222
|
+
|
223
|
+
it "throws a deprecation warning with allow_downgrade" do
|
224
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
225
|
+
expect(Chef).to receive(:deprecated).with(:dnf_package_allow_downgrade, /^the allow_downgrade property on the dnf_package provider is not used/)
|
226
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
227
|
+
dnf_package.version("1.2")
|
228
|
+
dnf_package.run_action(:install)
|
229
|
+
dnf_package.allow_downgrade true
|
230
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
231
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context "with arches" do
|
236
|
+
it "installs with 64-bit arch in the name" do
|
237
|
+
flush_cache
|
238
|
+
dnf_package.package_name("chef_rpm.x86_64")
|
239
|
+
dnf_package.run_action(:install)
|
240
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
241
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
242
|
+
end
|
243
|
+
|
244
|
+
it "installs with 32-bit arch in the name" do
|
245
|
+
flush_cache
|
246
|
+
dnf_package.package_name("chef_rpm.i686")
|
247
|
+
dnf_package.run_action(:install)
|
248
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
249
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.i686")
|
250
|
+
end
|
251
|
+
|
252
|
+
it "installs with 64-bit arch in the property" do
|
253
|
+
flush_cache
|
254
|
+
dnf_package.package_name("chef_rpm")
|
255
|
+
dnf_package.arch("x86_64")
|
256
|
+
dnf_package.run_action(:install)
|
257
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
258
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
259
|
+
end
|
260
|
+
|
261
|
+
it "installs with 32-bit arch in the property" do
|
262
|
+
flush_cache
|
263
|
+
dnf_package.package_name("chef_rpm")
|
264
|
+
dnf_package.arch("i686")
|
265
|
+
dnf_package.run_action(:install)
|
266
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
267
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.i686")
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
context "with constraints" do
|
272
|
+
it "with nothing installed, it installs the latest version" do
|
273
|
+
flush_cache
|
274
|
+
dnf_package.package_name("chef_rpm >= 1.2")
|
275
|
+
dnf_package.run_action(:install)
|
276
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
277
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
278
|
+
end
|
279
|
+
|
280
|
+
it "when it is met, it does nothing" do
|
281
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
282
|
+
dnf_package.package_name("chef_rpm >= 1.2")
|
283
|
+
dnf_package.run_action(:install)
|
284
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
285
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
286
|
+
end
|
287
|
+
|
288
|
+
it "when it is met, it does nothing" do
|
289
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
290
|
+
dnf_package.package_name("chef_rpm >= 1.2")
|
291
|
+
dnf_package.run_action(:install)
|
292
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
293
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
294
|
+
end
|
295
|
+
|
296
|
+
it "with nothing intalled, it installs the latest version" do
|
297
|
+
flush_cache
|
298
|
+
dnf_package.package_name("chef_rpm > 1.2")
|
299
|
+
dnf_package.run_action(:install)
|
300
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
301
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
302
|
+
end
|
303
|
+
|
304
|
+
it "when it is not met by an installed rpm, it upgrades" do
|
305
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
306
|
+
dnf_package.package_name("chef_rpm > 1.2")
|
307
|
+
dnf_package.run_action(:install)
|
308
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
309
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
310
|
+
end
|
311
|
+
|
312
|
+
it "when it is met by an installed rpm, it does nothing" do
|
313
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
314
|
+
dnf_package.package_name("chef_rpm > 1.2")
|
315
|
+
dnf_package.run_action(:install)
|
316
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
317
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
318
|
+
end
|
319
|
+
|
320
|
+
it "when there is no solution to the contraint" do
|
321
|
+
flush_cache
|
322
|
+
dnf_package.package_name("chef_rpm > 2.0")
|
323
|
+
expect { dnf_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
324
|
+
end
|
325
|
+
|
326
|
+
it "when there is no solution to the contraint but an rpm is preinstalled" do
|
327
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
328
|
+
dnf_package.package_name("chef_rpm > 2.0")
|
329
|
+
expect { dnf_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
context "with source arguments" do
|
334
|
+
it "raises an exception when the package does not exist" do
|
335
|
+
flush_cache
|
336
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/this-file-better-not-exist.rpm")
|
337
|
+
expect { dnf_package.run_action(:install) }.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
338
|
+
end
|
339
|
+
|
340
|
+
it "does not raise a hard exception in why-run mode when the package does not exist" do
|
341
|
+
Chef::Config[:why_run] = true
|
342
|
+
flush_cache
|
343
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/this-file-better-not-exist.rpm")
|
344
|
+
dnf_package.run_action(:install)
|
345
|
+
expect { dnf_package.run_action(:install) }.not_to raise_error
|
346
|
+
end
|
347
|
+
|
348
|
+
it "installs the package when using the source argument" do
|
349
|
+
flush_cache
|
350
|
+
dnf_package.name "something"
|
351
|
+
dnf_package.package_name "somethingelse"
|
352
|
+
dnf_package.source("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
353
|
+
dnf_package.run_action(:install)
|
354
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
355
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
356
|
+
end
|
357
|
+
|
358
|
+
it "installs the package when the name is a path to a file" do
|
359
|
+
flush_cache
|
360
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
361
|
+
dnf_package.run_action(:install)
|
362
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
363
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
364
|
+
end
|
365
|
+
|
366
|
+
it "does not downgrade the package with :install" do
|
367
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
368
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
369
|
+
dnf_package.run_action(:install)
|
370
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
371
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
372
|
+
end
|
373
|
+
|
374
|
+
it "does not upgrade the package with :install" do
|
375
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
376
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm")
|
377
|
+
dnf_package.run_action(:install)
|
378
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
379
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
380
|
+
end
|
381
|
+
|
382
|
+
it "is idempotent when the package is already installed" do
|
383
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
384
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
385
|
+
dnf_package.run_action(:install)
|
386
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
387
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
context "with no available version" do
|
392
|
+
it "works when a package is installed" do
|
393
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
394
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
395
|
+
dnf_package.run_action(:install)
|
396
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
397
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
398
|
+
end
|
399
|
+
|
400
|
+
it "works with a local source" do
|
401
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
402
|
+
flush_cache
|
403
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
404
|
+
dnf_package.run_action(:install)
|
405
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
406
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
context "multipackage with arches" do
|
411
|
+
it "installs two rpms" do
|
412
|
+
flush_cache
|
413
|
+
dnf_package.package_name([ "chef_rpm.x86_64", "chef_rpm.i686" ] )
|
414
|
+
dnf_package.run_action(:install)
|
415
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
416
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
417
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
418
|
+
end
|
419
|
+
|
420
|
+
it "does nothing if both are installed" do
|
421
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm", "chef_rpm-1.10-1.fc24.i686.rpm")
|
422
|
+
flush_cache
|
423
|
+
dnf_package.package_name([ "chef_rpm.x86_64", "chef_rpm.i686" ] )
|
424
|
+
dnf_package.run_action(:install)
|
425
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
426
|
+
end
|
427
|
+
|
428
|
+
it "installs the second rpm if the first is installed" do
|
429
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
430
|
+
dnf_package.package_name([ "chef_rpm.x86_64", "chef_rpm.i686" ] )
|
431
|
+
dnf_package.run_action(:install)
|
432
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
433
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
434
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
435
|
+
end
|
436
|
+
|
437
|
+
it "installs the first rpm if the second is installed" do
|
438
|
+
preinstall("chef_rpm-1.10-1.fc24.i686.rpm")
|
439
|
+
dnf_package.package_name([ "chef_rpm.x86_64", "chef_rpm.i686" ] )
|
440
|
+
dnf_package.run_action(:install)
|
441
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
442
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
443
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
444
|
+
end
|
445
|
+
|
446
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
447
|
+
it "installs two rpms with multi-arch" do
|
448
|
+
flush_cache
|
449
|
+
dnf_package.package_name(%w{chef_rpm chef_rpm} )
|
450
|
+
dnf_package.arch(%w{x86_64 i686})
|
451
|
+
dnf_package.run_action(:install)
|
452
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
453
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
454
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
455
|
+
end
|
456
|
+
|
457
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
458
|
+
it "installs the second rpm if the first is installed (muti-arch)" do
|
459
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
460
|
+
dnf_package.package_name(%w{chef_rpm chef_rpm} )
|
461
|
+
dnf_package.arch(%w{x86_64 i686})
|
462
|
+
dnf_package.run_action(:install)
|
463
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
464
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
465
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
466
|
+
end
|
467
|
+
|
468
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
469
|
+
it "installs the first rpm if the second is installed (muti-arch)" do
|
470
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
471
|
+
dnf_package.package_name(%w{chef_rpm chef_rpm} )
|
472
|
+
dnf_package.arch(%w{x86_64 i686})
|
473
|
+
dnf_package.run_action(:install)
|
474
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
475
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.x86_64/)
|
476
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to match(/chef_rpm-1.10-1.fc24.i686/)
|
477
|
+
end
|
478
|
+
|
479
|
+
# unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name
|
480
|
+
it "does nothing if both are installed (muti-arch)" do
|
481
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm", "chef_rpm-1.10-1.fc24.i686.rpm")
|
482
|
+
dnf_package.package_name(%w{chef_rpm chef_rpm} )
|
483
|
+
dnf_package.arch(%w{x86_64 i686})
|
484
|
+
dnf_package.run_action(:install)
|
485
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
describe ":upgrade" do
|
491
|
+
context "downgrades" do
|
492
|
+
it "just work with DNF" do
|
493
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
494
|
+
dnf_package.version("1.2")
|
495
|
+
dnf_package.run_action(:install)
|
496
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
497
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
498
|
+
end
|
499
|
+
|
500
|
+
it "throws a deprecation warning with allow_downgrade" do
|
501
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
502
|
+
expect(Chef).to receive(:deprecated).with(:dnf_package_allow_downgrade, /^the allow_downgrade property on the dnf_package provider is not used/)
|
503
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
504
|
+
dnf_package.version("1.2")
|
505
|
+
dnf_package.run_action(:install)
|
506
|
+
dnf_package.allow_downgrade true
|
507
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
508
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
512
|
+
context "with source arguments" do
|
513
|
+
it "installs the package when using the source argument" do
|
514
|
+
flush_cache
|
515
|
+
dnf_package.name "something"
|
516
|
+
dnf_package.package_name "somethingelse"
|
517
|
+
dnf_package.source("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
518
|
+
dnf_package.run_action(:upgrade)
|
519
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
520
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
521
|
+
end
|
522
|
+
|
523
|
+
it "installs the package when the name is a path to a file" do
|
524
|
+
flush_cache
|
525
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
526
|
+
dnf_package.run_action(:upgrade)
|
527
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
528
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
529
|
+
end
|
530
|
+
|
531
|
+
it "downgrades the package" do
|
532
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
533
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
534
|
+
dnf_package.run_action(:upgrade)
|
535
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
536
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
537
|
+
end
|
538
|
+
|
539
|
+
it "upgrades the package" do
|
540
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
541
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm")
|
542
|
+
dnf_package.run_action(:upgrade)
|
543
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
544
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
545
|
+
end
|
546
|
+
|
547
|
+
it "is idempotent when the package is already installed" do
|
548
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
549
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
550
|
+
dnf_package.run_action(:upgrade)
|
551
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
552
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
context "with no available version" do
|
557
|
+
it "works when a package is installed" do
|
558
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
559
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
560
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
561
|
+
dnf_package.run_action(:upgrade)
|
562
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
563
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
564
|
+
end
|
565
|
+
|
566
|
+
it "works with a local source" do
|
567
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
568
|
+
flush_cache
|
569
|
+
dnf_package.package_name("#{CHEF_SPEC_ASSETS}/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm")
|
570
|
+
dnf_package.run_action(:upgrade)
|
571
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
572
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.x86_64")
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
577
|
+
describe ":remove" do
|
578
|
+
context "vanilla use case" do
|
579
|
+
let(:package_name) { "chef_rpm" }
|
580
|
+
it "does nothing if the package is not installed" do
|
581
|
+
flush_cache
|
582
|
+
dnf_package.run_action(:remove)
|
583
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
584
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
585
|
+
end
|
586
|
+
|
587
|
+
it "removes the package if the package is installed" do
|
588
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
589
|
+
dnf_package.run_action(:remove)
|
590
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
591
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
592
|
+
end
|
593
|
+
|
594
|
+
it "does not remove the package twice" do
|
595
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
596
|
+
dnf_package.run_action(:remove)
|
597
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
598
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
599
|
+
dnf_package.run_action(:remove)
|
600
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
601
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
602
|
+
end
|
603
|
+
|
604
|
+
it "removes the package if the prior version package is installed" do
|
605
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
606
|
+
dnf_package.run_action(:remove)
|
607
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
608
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
609
|
+
end
|
610
|
+
|
611
|
+
it "removes the package if the i686 package is installed" do
|
612
|
+
skip "FIXME: should this be fixed or is the current behavior correct?"
|
613
|
+
preinstall("chef_rpm-1.10-1.fc24.i686.rpm")
|
614
|
+
dnf_package.run_action(:remove)
|
615
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
616
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
617
|
+
end
|
618
|
+
|
619
|
+
it "removes the package if the prior version i686 package is installed" do
|
620
|
+
skip "FIXME: should this be fixed or is the current behavior correct?"
|
621
|
+
preinstall("chef_rpm-1.2-1.fc24.i686.rpm")
|
622
|
+
dnf_package.run_action(:remove)
|
623
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
624
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
625
|
+
end
|
626
|
+
end
|
627
|
+
|
628
|
+
context "with 64-bit arch" do
|
629
|
+
let(:package_name) { "chef_rpm.x86_64" }
|
630
|
+
it "does nothing if the package is not installed" do
|
631
|
+
flush_cache
|
632
|
+
dnf_package.run_action(:remove)
|
633
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
634
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
635
|
+
end
|
636
|
+
|
637
|
+
it "removes the package if the package is installed" do
|
638
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm")
|
639
|
+
dnf_package.run_action(:remove)
|
640
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
641
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
642
|
+
end
|
643
|
+
|
644
|
+
it "removes the package if the prior version package is installed" do
|
645
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
646
|
+
dnf_package.run_action(:remove)
|
647
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
648
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
649
|
+
end
|
650
|
+
|
651
|
+
it "does nothing if the i686 package is installed" do
|
652
|
+
preinstall("chef_rpm-1.10-1.fc24.i686.rpm")
|
653
|
+
dnf_package.run_action(:remove)
|
654
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
655
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.i686")
|
656
|
+
end
|
657
|
+
|
658
|
+
it "does nothing if the prior version i686 package is installed" do
|
659
|
+
preinstall("chef_rpm-1.2-1.fc24.i686.rpm")
|
660
|
+
dnf_package.run_action(:remove)
|
661
|
+
expect(dnf_package.updated_by_last_action?).to be false
|
662
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.2-1.fc24.i686")
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
context "with 32-bit arch" do
|
667
|
+
let(:package_name) { "chef_rpm.i686" }
|
668
|
+
it "removes only the 32-bit arch if both are installed" do
|
669
|
+
preinstall("chef_rpm-1.10-1.fc24.x86_64.rpm", "chef_rpm-1.10-1.fc24.i686.rpm")
|
670
|
+
dnf_package.run_action(:remove)
|
671
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
672
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("chef_rpm-1.10-1.fc24.x86_64")
|
673
|
+
end
|
674
|
+
end
|
675
|
+
|
676
|
+
context "with no available version" do
|
677
|
+
it "works when a package is installed" do
|
678
|
+
FileUtils.rm_f "/etc/yum.repos.d/chef-dnf-localtesting.repo"
|
679
|
+
preinstall("chef_rpm-1.2-1.fc24.x86_64.rpm")
|
680
|
+
dnf_package.run_action(:remove)
|
681
|
+
expect(dnf_package.updated_by_last_action?).to be true
|
682
|
+
expect(shell_out("rpm -q chef_rpm").stdout.chomp).to eql("package chef_rpm is not installed")
|
683
|
+
end
|
684
|
+
end
|
685
|
+
end
|
686
|
+
end
|