chef 12.0.0.alpha.0 → 12.0.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +3 -5
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/application.rb +16 -8
- 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.rb +1 -1
- data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +3 -3
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -4
- data/lib/chef/config.rb +6 -5
- data/lib/chef/config_fetcher.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +126 -43
- data/lib/chef/cookbook/metadata.rb +102 -53
- data/lib/chef/cookbook/syntax_check.rb +1 -1
- data/lib/chef/cookbook_loader.rb +62 -14
- data/lib/chef/cookbook_site_streaming_uploader.rb +12 -1
- data/lib/chef/cookbook_version.rb +13 -4
- data/lib/chef/data_bag.rb +28 -15
- data/lib/chef/data_bag_item.rb +5 -7
- data/lib/chef/digester.rb +5 -9
- data/lib/chef/dsl/recipe.rb +14 -0
- data/lib/chef/encrypted_data_bag_item.rb +1 -0
- data/lib/chef/encrypted_data_bag_item/assertions.rb +57 -0
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +52 -28
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -0
- data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -0
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +79 -8
- data/lib/chef/environment.rb +1 -3
- data/lib/chef/exceptions.rb +18 -3
- data/lib/chef/formatters/base.rb +7 -0
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +1 -1
- data/lib/chef/handler/json_file.rb +0 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/json_compat.rb +24 -6
- data/lib/chef/knife/bootstrap.rb +2 -2
- data/lib/chef/knife/client_delete.rb +1 -1
- data/lib/chef/knife/cookbook_site_download.rb +1 -1
- data/lib/chef/knife/cookbook_site_list.rb +1 -1
- data/lib/chef/knife/cookbook_site_search.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +2 -2
- data/lib/chef/knife/cookbook_site_show.rb +3 -3
- data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
- data/lib/chef/knife/core/node_editor.rb +2 -3
- data/lib/chef/knife/core/ui.rb +2 -2
- data/lib/chef/knife/deps.rb +2 -3
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/mixin/windows_architecture_helper.rb +1 -0
- data/lib/chef/node.rb +1 -2
- data/lib/chef/platform/provider_mapping.rb +33 -6
- data/lib/chef/provider.rb +0 -2
- data/lib/chef/provider/cookbook_file/content.rb +1 -1
- data/lib/chef/provider/cron.rb +11 -0
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +2 -2
- data/lib/chef/provider/env.rb +1 -1
- data/lib/chef/provider/env/windows.rb +5 -9
- data/lib/chef/provider/file.rb +84 -33
- data/lib/chef/provider/git.rb +2 -1
- data/lib/chef/provider/group/aix.rb +17 -2
- data/lib/chef/provider/group/dscl.rb +27 -9
- data/lib/chef/provider/group/pw.rb +8 -1
- data/lib/chef/provider/http_request.rb +4 -4
- data/lib/chef/provider/log.rb +4 -14
- data/lib/chef/provider/mount/mount.rb +2 -2
- data/lib/chef/provider/package/ips.rb +17 -23
- data/lib/chef/provider/package/paludis.rb +2 -2
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +2 -0
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/remote_file/cache_control_data.rb +2 -2
- data/lib/chef/provider/service/windows.rb +87 -21
- data/lib/chef/provider/user/aix.rb +95 -0
- data/lib/chef/provider/user/dscl.rb +544 -156
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource.rb +4 -3
- data/lib/chef/resource/freebsd_package.rb +10 -2
- data/lib/chef/resource/paludis_package.rb +1 -0
- data/lib/chef/resource/scm.rb +10 -0
- data/lib/chef/resource/user.rb +27 -0
- data/lib/chef/resource/windows_service.rb +53 -0
- data/lib/chef/resource_collection.rb +23 -12
- data/lib/chef/resource_reporter.rb +10 -10
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +3 -3
- data/lib/chef/run_list.rb +6 -3
- data/lib/chef/user.rb +1 -1
- data/lib/chef/util/diff.rb +1 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_constraint.rb +4 -4
- data/spec/data/cookbooks/angrybash/metadata.rb +2 -0
- data/spec/data/cookbooks/apache2/metadata.rb +2 -0
- data/spec/data/cookbooks/borken/metadata.rb +2 -0
- data/spec/data/cookbooks/ignorken/metadata.rb +2 -0
- data/spec/data/cookbooks/java/metadata.rb +2 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -0
- data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -0
- data/spec/data/cookbooks/preseed/metadata.rb +2 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -0
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +10 -0
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -0
- data/spec/data/mac_users/10.7-8.plist.xml +559 -0
- data/spec/data/mac_users/10.7-8.shadow.xml +11 -0
- data/spec/data/mac_users/10.7.plist.xml +559 -0
- data/spec/data/mac_users/10.7.shadow.xml +11 -0
- data/spec/data/mac_users/10.8.plist.xml +559 -0
- data/spec/data/mac_users/10.8.shadow.xml +21 -0
- data/spec/data/mac_users/10.9.plist.xml +560 -0
- data/spec/data/mac_users/10.9.shadow.xml +21 -0
- data/spec/data/object_loader/environments/test.json +2 -0
- data/spec/data/object_loader/environments/test_json_class.json +2 -0
- data/spec/data/object_loader/nodes/test.json +2 -0
- data/spec/data/object_loader/nodes/test_json_class.json +2 -0
- data/spec/data/object_loader/roles/test.json +2 -0
- data/spec/data/object_loader/roles/test_json_class.json +2 -0
- data/spec/functional/resource/bff_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +20 -1
- data/spec/functional/resource/env_spec.rb +137 -0
- data/spec/functional/resource/group_spec.rb +7 -5
- data/spec/functional/resource/remote_file_spec.rb +12 -1
- data/spec/functional/resource/user/dscl_spec.rb +198 -0
- data/spec/functional/resource/{user_spec.rb → user/useradd_spec.rb} +175 -37
- data/spec/integration/client/client_spec.rb +6 -4
- data/spec/integration/client/ipv6_spec.rb +16 -14
- data/spec/integration/knife/chef_fs_data_store_spec.rb +57 -46
- data/spec/integration/knife/chef_repo_path_spec.rb +105 -78
- data/spec/integration/knife/chef_repository_file_system_spec.rb +100 -84
- data/spec/integration/knife/chefignore_spec.rb +76 -46
- data/spec/integration/knife/common_options_spec.rb +16 -21
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -3
- data/spec/integration/knife/delete_spec.rb +66 -46
- data/spec/integration/knife/deps_spec.rb +145 -94
- data/spec/integration/knife/diff_spec.rb +176 -110
- data/spec/integration/knife/download_spec.rb +229 -133
- data/spec/integration/knife/list_spec.rb +62 -54
- data/spec/integration/knife/raw_spec.rb +24 -9
- data/spec/integration/knife/redirection_spec.rb +2 -2
- data/spec/integration/knife/serve_spec.rb +2 -2
- data/spec/integration/knife/show_spec.rb +32 -26
- data/spec/integration/knife/upload_spec.rb +308 -165
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +10 -8
- data/spec/integration/solo/solo_spec.rb +22 -11
- data/spec/spec_helper.rb +3 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +46 -0
- data/spec/support/platform_helpers.rb +12 -0
- data/spec/support/shared/functional/file_resource.rb +10 -0
- data/spec/support/shared/integration/chef_zero_support.rb +130 -0
- data/spec/support/shared/integration/integration_helper.rb +100 -98
- data/spec/support/shared/integration/knife_support.rb +0 -1
- data/spec/support/shared/unit/provider/file.rb +6 -4
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +10 -1
- data/spec/unit/api_client/registration_spec.rb +83 -74
- data/spec/unit/application_spec.rb +32 -9
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +179 -0
- data/spec/unit/cookbook/metadata_spec.rb +190 -150
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -2
- data/spec/unit/cookbook_loader_spec.rb +114 -53
- data/spec/unit/{cookbook_site_streaming_uploader.rb → cookbook_site_streaming_uploader_spec.rb} +21 -1
- data/spec/unit/data_bag_spec.rb +88 -13
- data/spec/unit/deprecation_spec.rb +1 -2
- data/spec/unit/encrypted_data_bag_item_spec.rb +145 -9
- data/spec/unit/environment_spec.rb +1 -1
- data/spec/unit/formatters/base_spec.rb +48 -0
- data/spec/unit/json_compat_spec.rb +48 -17
- data/spec/unit/knife/client_delete_spec.rb +4 -4
- data/spec/unit/knife/client_show_spec.rb +15 -5
- data/spec/unit/knife/cookbook_site_download_spec.rb +1 -1
- data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
- data/spec/unit/knife/data_bag_from_file_spec.rb +0 -2
- data/spec/unit/knife/data_bag_show_spec.rb +23 -14
- data/spec/unit/knife/node_show_spec.rb +32 -15
- data/spec/unit/knife/role_show_spec.rb +59 -0
- data/spec/unit/platform_spec.rb +10 -0
- data/spec/unit/provider/deploy_spec.rb +4 -0
- data/spec/unit/provider/env_spec.rb +19 -0
- data/spec/unit/provider/git_spec.rb +22 -2
- data/spec/unit/provider/group/dscl_spec.rb +38 -1
- data/spec/unit/provider/group/pw_spec.rb +2 -2
- data/spec/unit/provider/http_request_spec.rb +8 -8
- data/spec/unit/provider/log_spec.rb +33 -53
- data/spec/unit/provider/mount/mount_spec.rb +12 -3
- data/spec/unit/provider/package/ips_spec.rb +96 -63
- data/spec/unit/provider/package/paludis_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +12 -0
- data/spec/unit/provider/package/zypper_spec.rb +28 -16
- data/spec/unit/provider/service/windows_spec.rb +77 -17
- data/spec/unit/provider/user/dscl_spec.rb +659 -264
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/recipe_spec.rb +41 -0
- data/spec/unit/resource/scm_spec.rb +11 -0
- data/spec/unit/resource/user_spec.rb +4 -0
- data/spec/unit/resource/windows_service_spec.rb +46 -0
- data/spec/unit/resource_collection_spec.rb +33 -0
- data/spec/unit/resource_reporter_spec.rb +48 -0
- data/spec/unit/resource_spec.rb +9 -2
- data/spec/unit/role_spec.rb +6 -0
- data/spec/unit/version_constraint_spec.rb +28 -0
- metadata +61 -4
@@ -20,80 +20,60 @@ require 'spec_helper'
|
|
20
20
|
|
21
21
|
describe Chef::Provider::Log::ChefLog do
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
let(:log_str) { "this is my test string to log" }
|
24
|
+
|
25
|
+
let(:node) { Chef::Node.new }
|
26
|
+
|
27
|
+
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
28
|
+
|
29
|
+
let(:run_context) { Chef::RunContext.new(node, {}, events) }
|
30
|
+
|
31
|
+
let(:new_resource) { Chef::Resource::Log.new(log_str) }
|
32
|
+
|
33
|
+
let(:provider) { Chef::Provider::Log::ChefLog.new(new_resource, run_context) }
|
29
34
|
|
30
35
|
it "should be registered with the default platform hash" do
|
31
|
-
Chef::Platform.platforms[:default][:log].
|
36
|
+
expect(Chef::Platform.platforms[:default][:log]).not_to be_nil
|
32
37
|
end
|
33
38
|
|
34
39
|
it "should write the string to the Chef::Log object at default level (info)" do
|
35
|
-
|
36
|
-
|
37
|
-
Chef::Log.should_receive(:info).with(@log_str).and_return(true)
|
38
|
-
@provider.action_write
|
40
|
+
expect(Chef::Log).to receive(:info).with(log_str).and_return(true)
|
41
|
+
provider.run_action(:write)
|
39
42
|
end
|
40
43
|
|
41
44
|
it "should write the string to the Chef::Log object at debug level" do
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
Chef::Log.should_receive(:debug).with(@log_str).and_return(true)
|
46
|
-
@provider.action_write
|
45
|
+
new_resource.level :debug
|
46
|
+
expect(Chef::Log).to receive(:debug).with(log_str).and_return(true)
|
47
|
+
provider.run_action(:write)
|
47
48
|
end
|
48
49
|
|
49
50
|
it "should write the string to the Chef::Log object at info level" do
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
Chef::Log.should_receive(:info).with(@log_str).and_return(true)
|
54
|
-
@provider.action_write
|
51
|
+
new_resource.level :info
|
52
|
+
expect(Chef::Log).to receive(:info).with(log_str).and_return(true)
|
53
|
+
provider.run_action(:write)
|
55
54
|
end
|
56
55
|
|
57
56
|
it "should write the string to the Chef::Log object at warn level" do
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
Chef::Log.should_receive(:warn).with(@log_str).and_return(true)
|
62
|
-
@provider.action_write
|
57
|
+
new_resource.level :warn
|
58
|
+
expect(Chef::Log).to receive(:warn).with(log_str).and_return(true)
|
59
|
+
provider.run_action(:write)
|
63
60
|
end
|
64
61
|
|
65
62
|
it "should write the string to the Chef::Log object at error level" do
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
Chef::Log.should_receive(:error).with(@log_str).and_return(true)
|
70
|
-
@provider.action_write
|
63
|
+
new_resource.level :error
|
64
|
+
expect(Chef::Log).to receive(:error).with(log_str).and_return(true)
|
65
|
+
provider.run_action(:write)
|
71
66
|
end
|
72
67
|
|
73
68
|
it "should write the string to the Chef::Log object at fatal level" do
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
Chef::Log.should_receive(:fatal).with(@log_str).and_return(true)
|
78
|
-
@provider.action_write
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should not update the resource if the message was not written to the log" do
|
82
|
-
Chef::Log.level = :fatal
|
83
|
-
@new_resource = Chef::Resource::Log.new(@log_str)
|
84
|
-
@new_resource.level :info
|
85
|
-
@provider = Chef::Provider::Log::ChefLog.new(@new_resource, @run_context)
|
86
|
-
@provider.action_write
|
87
|
-
@new_resource.updated.should be_false
|
69
|
+
new_resource.level :fatal
|
70
|
+
expect(Chef::Log).to receive(:fatal).with(log_str).and_return(true)
|
71
|
+
provider.run_action(:write)
|
88
72
|
end
|
89
73
|
|
90
|
-
it "should
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
@provider = Chef::Provider::Log::ChefLog.new(@new_resource, @run_context)
|
95
|
-
@provider.action_write
|
96
|
-
@new_resource.updated.should be_true
|
74
|
+
it "should print the string in why-run mode" do
|
75
|
+
Chef::Config[:why_run] = true
|
76
|
+
expect(Chef::Log).to receive(:info).with(log_str).and_return(true)
|
77
|
+
provider.run_action(:write)
|
97
78
|
end
|
98
|
-
|
99
79
|
end
|
@@ -125,11 +125,17 @@ describe Chef::Provider::Mount::Mount do
|
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should set mounted true if the mount point is found in the mounts list" do
|
128
|
-
@provider.stub(:shell_out!).and_return(OpenStruct.new(:stdout =>
|
128
|
+
@provider.stub(:shell_out!).and_return(OpenStruct.new(:stdout => "/dev/sdz1 on /tmp/foo type ext3 (rw)\n"))
|
129
129
|
@provider.load_current_resource()
|
130
130
|
@provider.current_resource.mounted.should be_true
|
131
131
|
end
|
132
132
|
|
133
|
+
it "should set mounted false if another mount point beginning with the same path is found in the mounts list" do
|
134
|
+
@provider.stub(:shell_out!).and_return(OpenStruct.new(:stdout => "/dev/sdz1 on /tmp/foobar type ext3 (rw)\n"))
|
135
|
+
@provider.load_current_resource()
|
136
|
+
@provider.current_resource.mounted.should be_false
|
137
|
+
end
|
138
|
+
|
133
139
|
it "should set mounted true if the symlink target of the device is found in the mounts list" do
|
134
140
|
# expand the target path to correct specs on Windows
|
135
141
|
target = ::File.expand_path('/dev/mapper/target')
|
@@ -437,14 +443,17 @@ describe Chef::Provider::Mount::Mount do
|
|
437
443
|
@current_resource.stub(:enabled).and_return(true)
|
438
444
|
fstab_read = ["/dev/sdz1 /tmp/foo ext3 defaults 1 2\n",
|
439
445
|
"/dev/sdy1 /tmp/foo ext3 defaults 1 2\n",
|
440
|
-
"/dev/sdz1 /tmp/foo ext3 defaults 1 2\n"
|
446
|
+
"/dev/sdz1 /tmp/foo ext3 defaults 1 2\n",
|
447
|
+
"/dev/sdz1 /tmp/foobar ext3 defaults 1 2\n"]
|
441
448
|
|
442
449
|
fstab_write = StringIO.new
|
443
450
|
::File.stub(:readlines).with("/etc/fstab").and_return(fstab_read)
|
444
451
|
::File.stub(:open).with("/etc/fstab", "w").and_yield(fstab_write)
|
445
452
|
|
446
453
|
@provider.disable_fs
|
447
|
-
fstab_write.string.should == "/dev/sdz1 /tmp/foo ext3 defaults 1 2\n
|
454
|
+
fstab_write.string.should == "/dev/sdz1 /tmp/foo ext3 defaults 1 2\n" +
|
455
|
+
"/dev/sdy1 /tmp/foo ext3 defaults 1 2\n" +
|
456
|
+
"/dev/sdz1 /tmp/foobar ext3 defaults 1 2\n"
|
448
457
|
end
|
449
458
|
|
450
459
|
it "should not disable if enabled is false" do
|
@@ -30,54 +30,70 @@ describe Chef::Provider::Package::Ips do
|
|
30
30
|
@current_resource = Chef::Resource::Package.new("crypto/gnupg", @run_context)
|
31
31
|
Chef::Resource::Package.stub(:new).and_return(@current_resource)
|
32
32
|
@provider = Chef::Provider::Package::Ips.new(@new_resource, @run_context)
|
33
|
+
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
def local_output
|
36
|
+
stdin = StringIO.new
|
37
|
+
stdout = ''
|
38
|
+
stderr =<<-PKG_STATUS
|
39
|
+
pkg: info: no packages matching the following patterns you specified are
|
40
|
+
installed on the system. Try specifying -r to query remotely:
|
41
|
+
|
42
|
+
crypto/gnupg
|
43
|
+
PKG_STATUS
|
44
|
+
return OpenStruct.new(:stdout => stdout,:stdin => stdin,:stderr => stderr,:status => @status,:exitstatus => 1)
|
45
|
+
end
|
46
|
+
|
47
|
+
def remote_output
|
48
|
+
|
49
|
+
stdout = <<-PKG_STATUS
|
50
|
+
Name: security/sudo
|
51
|
+
Summary: sudo - authority delegation tool
|
52
|
+
State: Not Installed
|
53
|
+
Publisher: omnios
|
54
|
+
Version: 1.8.4.1 (1.8.4p1)
|
45
55
|
Build Release: 5.11
|
46
|
-
Branch: 0.
|
47
|
-
Packaging Date:
|
48
|
-
Size:
|
49
|
-
FMRI: pkg://
|
56
|
+
Branch: 0.151002
|
57
|
+
Packaging Date: April 1, 2012 05:55:52 PM
|
58
|
+
Size: 2.57 MB
|
59
|
+
FMRI: pkg://omnios/security/sudo@1.8.4.1,5.11-0.151002:20120401T175552Z
|
50
60
|
PKG_STATUS
|
51
|
-
|
52
|
-
|
61
|
+
stdin = StringIO.new
|
62
|
+
stderr = ''
|
63
|
+
return OpenStruct.new(:stdout => stdout,:stdin => stdin,:stderr => stderr,:status => @status,:exitstatus => 0)
|
53
64
|
end
|
54
65
|
|
55
66
|
context "when loading current resource" do
|
56
67
|
it "should create a current resource with the name of the new_resource" do
|
57
|
-
@provider.should_receive(:shell_out
|
68
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
69
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
58
70
|
Chef::Resource::Package.should_receive(:new).and_return(@current_resource)
|
59
71
|
@provider.load_current_resource
|
60
72
|
end
|
61
73
|
|
62
74
|
it "should set the current resources package name to the new resources package name" do
|
63
|
-
@provider.should_receive(:shell_out
|
64
|
-
@
|
75
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
76
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
65
77
|
@provider.load_current_resource
|
78
|
+
@current_resource.package_name.should == @new_resource.package_name
|
66
79
|
end
|
67
80
|
|
68
81
|
it "should run pkg info with the package name" do
|
69
|
-
@provider.should_receive(:shell_out
|
82
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
83
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
70
84
|
@provider.load_current_resource
|
71
85
|
end
|
72
86
|
|
73
87
|
it "should set the installed version to nil on the current resource if package state is not installed" do
|
74
|
-
@provider.should_receive(:shell_out
|
75
|
-
@
|
88
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
89
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
76
90
|
@provider.load_current_resource
|
91
|
+
@current_resource.version.should be_nil
|
77
92
|
end
|
78
93
|
|
79
94
|
it "should set the installed version if package has one" do
|
80
|
-
|
95
|
+
local = local_output
|
96
|
+
local.stdout = <<-INSTALLED
|
81
97
|
Name: crypto/gnupg
|
82
98
|
Summary: GNU Privacy Guard
|
83
99
|
Description: A complete and free implementation of the OpenPGP Standard as
|
@@ -92,14 +108,15 @@ Packaging Date: October 19, 2011 09:14:50 AM
|
|
92
108
|
Size: 8.07 MB
|
93
109
|
FMRI: pkg://solaris/crypto/gnupg@2.0.17,5.11-0.175.0.0.0.2.537:20111019T091450Z
|
94
110
|
INSTALLED
|
95
|
-
@provider.should_receive(:shell_out
|
111
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local)
|
112
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
96
113
|
@provider.load_current_resource
|
97
114
|
@current_resource.version.should == "2.0.17"
|
98
|
-
@provider.candidate_version.should eql("2.0.17")
|
99
115
|
end
|
100
116
|
|
101
|
-
it "should return the current
|
102
|
-
@provider.should_receive(:shell_out
|
117
|
+
it "should return the current resource" do
|
118
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
119
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output)
|
103
120
|
@provider.load_current_resource.should eql(@current_resource)
|
104
121
|
end
|
105
122
|
end
|
@@ -121,8 +138,9 @@ INSTALLED
|
|
121
138
|
@provider.install_package("crypto/gnupg", "2.0.17")
|
122
139
|
end
|
123
140
|
|
124
|
-
it "should not
|
125
|
-
|
141
|
+
it "should not include the human-readable version in the candidate_version" do
|
142
|
+
remote = remote_output
|
143
|
+
remote.stdout = <<-PKG_STATUS
|
126
144
|
Name: security/sudo
|
127
145
|
Summary: sudo - authority delegation tool
|
128
146
|
State: Not Installed
|
@@ -134,49 +152,64 @@ Packaging Date: April 1, 2012 05:55:52 PM
|
|
134
152
|
Size: 2.57 MB
|
135
153
|
FMRI: pkg://omnios/security/sudo@1.8.4.1,5.11-0.151002:20120401T175552Z
|
136
154
|
PKG_STATUS
|
137
|
-
@provider.should_receive(:
|
138
|
-
|
139
|
-
|
140
|
-
@
|
155
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local_output)
|
156
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote)
|
157
|
+
@provider.load_current_resource
|
158
|
+
@current_resource.version.should be_nil
|
159
|
+
@provider.candidate_version.should eql("1.8.4.1")
|
141
160
|
end
|
142
161
|
|
143
|
-
it "should not
|
144
|
-
|
145
|
-
|
146
|
-
|
162
|
+
it "should not upgrade the package if it is already installed" do
|
163
|
+
local = local_output
|
164
|
+
local.stdout = <<-INSTALLED
|
165
|
+
Name: crypto/gnupg
|
166
|
+
Summary: GNU Privacy Guard
|
167
|
+
Description: A complete and free implementation of the OpenPGP Standard as
|
168
|
+
defined by RFC4880.
|
169
|
+
Category: Applications/System Utilities
|
170
|
+
State: Installed
|
171
|
+
Publisher: solaris
|
172
|
+
Version: 2.0.17
|
173
|
+
Build Release: 5.11
|
174
|
+
Branch: 0.175.0.0.0.2.537
|
175
|
+
Packaging Date: October 19, 2011 09:14:50 AM
|
176
|
+
Size: 8.07 MB
|
177
|
+
FMRI: pkg://solaris/crypto/gnupg@2.0.17,5.11-0.175.0.0.0.2.537:20111019T091450Z
|
178
|
+
INSTALLED
|
179
|
+
remote = remote_output
|
180
|
+
remote.stdout = <<-REMOTE
|
181
|
+
Name: crypto/gnupg
|
182
|
+
Summary: GNU Privacy Guard
|
183
|
+
Description: A complete and free implementation of the OpenPGP Standard as
|
184
|
+
defined by RFC4880.
|
185
|
+
Category: Applications/System Utilities
|
147
186
|
State: Not Installed
|
148
|
-
Publisher:
|
149
|
-
Version:
|
187
|
+
Publisher: solaris
|
188
|
+
Version: 2.0.18
|
150
189
|
Build Release: 5.11
|
151
|
-
Branch: 0.
|
152
|
-
Packaging Date:
|
153
|
-
Size:
|
154
|
-
FMRI: pkg://
|
155
|
-
|
156
|
-
|
190
|
+
Branch: 0.175.0.0.0.2.537
|
191
|
+
Packaging Date: October 19, 2011 09:14:50 AM
|
192
|
+
Size: 8.07 MB
|
193
|
+
FMRI: pkg://solaris/crypto/gnupg@2.0.18,5.11-0.175.0.0.0.2.537:20111019T091450Z
|
194
|
+
REMOTE
|
195
|
+
|
196
|
+
@provider.should_receive(:shell_out).with("pkg info #{@new_resource.package_name}").and_return(local)
|
197
|
+
@provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote)
|
157
198
|
@provider.load_current_resource
|
158
|
-
@
|
159
|
-
@provider.
|
199
|
+
@provider.should_receive(:install_package).exactly(0).times
|
200
|
+
@provider.action_install
|
160
201
|
end
|
161
202
|
|
162
|
-
context "
|
203
|
+
context "when accept_license is true" do
|
163
204
|
before do
|
164
|
-
@new_resource
|
165
|
-
@current_resource = Chef::Resource::IpsPackage.new("crypto/gnupg", @run_context)
|
166
|
-
@provider = Chef::Provider::Package::Ips.new(@new_resource, @run_context)
|
205
|
+
@new_resource.stub(:accept_license).and_return(true)
|
167
206
|
end
|
168
207
|
|
169
|
-
|
170
|
-
|
171
|
-
@
|
172
|
-
|
173
|
-
|
174
|
-
it "should run pkg install with the --accept flag" do
|
175
|
-
@provider.should_receive(:run_command_with_systems_locale).with({
|
176
|
-
:command => "pkg install -q --accept crypto/gnupg@2.0.17"
|
177
|
-
})
|
178
|
-
@provider.install_package("crypto/gnupg", "2.0.17")
|
179
|
-
end
|
208
|
+
it "should run pkg install with the --accept flag" do
|
209
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
210
|
+
:command => "pkg install -q --accept crypto/gnupg@2.0.17"
|
211
|
+
})
|
212
|
+
@provider.install_package("crypto/gnupg", "2.0.17")
|
180
213
|
end
|
181
214
|
end
|
182
215
|
end
|
@@ -59,7 +59,7 @@ PKG_STATUS
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should run pkg info with the package name" do
|
62
|
-
@provider.should_receive(:shell_out!).with("cave -L warning print-ids -m \"*/#{@new_resource.package_name.split('/').last}\" -f \"%c/%p %v %r\n\"").and_return(@shell_out)
|
62
|
+
@provider.should_receive(:shell_out!).with("cave -L warning print-ids -M none -m \"*/#{@new_resource.package_name.split('/').last}\" -f \"%c/%p %v %r\n\"").and_return(@shell_out)
|
63
63
|
@provider.load_current_resource
|
64
64
|
end
|
65
65
|
|
@@ -86,13 +86,13 @@ INSTALLED
|
|
86
86
|
|
87
87
|
context "when installing a package" do
|
88
88
|
it "should run pkg install with the package name and version" do
|
89
|
-
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"")
|
89
|
+
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
90
90
|
@provider.install_package("net/ntp", "4.2.6_p5-r2")
|
91
91
|
end
|
92
92
|
|
93
93
|
|
94
94
|
it "should run pkg install with the package name and version and options if specified" do
|
95
|
-
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x --preserve-world \"=net/ntp-4.2.6_p5-r2\"")
|
95
|
+
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x --preserve-world \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
96
96
|
@new_resource.stub(:options).and_return("--preserve-world")
|
97
97
|
@provider.install_package("net/ntp", "4.2.6_p5-r2")
|
98
98
|
end
|
@@ -102,7 +102,7 @@ INSTALLED
|
|
102
102
|
sys-process/lsof 4.87 arbor
|
103
103
|
sys-process/lsof 4.87 x86_64
|
104
104
|
PKG_STATUS
|
105
|
-
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=sys-process/lsof-4.87\"")
|
105
|
+
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=sys-process/lsof-4.87\"", {:timeout=>@new_resource.timeout})
|
106
106
|
@provider.install_package("sys-process/lsof", "4.87")
|
107
107
|
end
|
108
108
|
|
@@ -120,7 +120,7 @@ PKG_STATUS
|
|
120
120
|
|
121
121
|
context "when upgrading a package" do
|
122
122
|
it "should run pkg install with the package name and version" do
|
123
|
-
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"")
|
123
|
+
@provider.should_receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
124
124
|
@provider.upgrade_package("net/ntp", "4.2.6_p5-r2")
|
125
125
|
end
|
126
126
|
end
|
@@ -80,6 +80,18 @@ describe Chef::Provider::Package::Rpm do
|
|
80
80
|
@provider.stub(:popen4).and_return(status)
|
81
81
|
lambda { @provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package)
|
82
82
|
end
|
83
|
+
|
84
|
+
it "should not detect the package name as version when not installed" do
|
85
|
+
@status = double("Status", :exitstatus => -1)
|
86
|
+
@stdout = StringIO.new("package openssh-askpass is not installed")
|
87
|
+
@new_resource = Chef::Resource::Package.new("openssh-askpass")
|
88
|
+
@new_resource.source 'openssh-askpass'
|
89
|
+
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
90
|
+
@provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
91
|
+
@provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status)
|
92
|
+
@provider.load_current_resource
|
93
|
+
@provider.current_resource.version.should be_nil
|
94
|
+
end
|
83
95
|
end
|
84
96
|
|
85
97
|
describe "after the current resource is loaded" do
|
@@ -146,25 +146,37 @@ describe Chef::Provider::Package::Zypper do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
describe "remove_package" do
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
149
|
+
|
150
|
+
context "when package version is not explicitly specified" do
|
151
|
+
it "should run zypper remove with the package name" do
|
152
|
+
Chef::Config.stub(:[]).with(:zypper_check_gpg).and_return(true)
|
153
|
+
@provider.should_receive(:shell_out!).with(
|
154
|
+
"zypper --non-interactive remove emacs")
|
155
|
+
@provider.remove_package("emacs", nil)
|
156
|
+
end
|
154
157
|
end
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
+
|
159
|
+
context "when package version is explicitly specified" do
|
160
|
+
it "should run zypper remove with the package name" do
|
161
|
+
Chef::Config.stub(:[]).with(:zypper_check_gpg).and_return(true)
|
162
|
+
@provider.should_receive(:shell_out!).with(
|
163
|
+
"zypper --non-interactive remove emacs=1.0")
|
164
|
+
@provider.remove_package("emacs", "1.0")
|
165
|
+
end
|
166
|
+
it "should run zypper remove without gpg checks" do
|
167
|
+
Chef::Config.stub(:[]).with(:zypper_check_gpg).and_return(false)
|
168
|
+
@provider.should_receive(:shell_out!).with(
|
169
|
+
"zypper --non-interactive --no-gpg-checks remove emacs=1.0")
|
170
|
+
@provider.remove_package("emacs", "1.0")
|
171
|
+
end
|
172
|
+
it "should warn about gpg checks on zypper remove" do
|
173
|
+
Chef::Log.should_receive(:warn).with(
|
174
|
+
/All packages will be installed without gpg signature checks/)
|
175
|
+
@provider.should_receive(:shell_out!).with(
|
158
176
|
"zypper --non-interactive --no-gpg-checks remove emacs=1.0")
|
159
|
-
@provider.remove_package("emacs", "1.0")
|
160
|
-
end
|
161
|
-
it "should warn about gpg checks on zypper remove" do
|
162
|
-
Chef::Log.should_receive(:warn).with(
|
163
|
-
/All packages will be installed without gpg signature checks/)
|
164
|
-
@provider.should_receive(:shell_out!).with(
|
165
|
-
"zypper --non-interactive --no-gpg-checks remove emacs=1.0")
|
166
177
|
|
167
|
-
|
178
|
+
@provider.remove_package("emacs", "1.0")
|
179
|
+
end
|
168
180
|
end
|
169
181
|
end
|
170
182
|
|