chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-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/Rakefile +12 -1
- data/lib/chef/api_client.rb +130 -26
- data/lib/chef/application.rb +0 -1
- data/lib/chef/application/client.rb +8 -19
- data/lib/chef/audit/audit_reporter.rb +12 -7
- data/lib/chef/audit/logger.rb +36 -0
- data/lib/chef/audit/runner.rb +4 -2
- data/lib/chef/chef_class.rb +62 -11
- data/lib/chef/client.rb +587 -207
- data/lib/chef/config.rb +0 -1
- data/lib/chef/dsl/recipe.rb +45 -56
- data/lib/chef/dsl/resources.rb +3 -2
- data/lib/chef/event_dispatch/base.rb +7 -2
- data/lib/chef/exceptions.rb +4 -1
- data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
- data/lib/chef/formatters/doc.rb +15 -7
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
- data/lib/chef/http/authenticator.rb +7 -2
- data/lib/chef/knife.rb +16 -4
- data/lib/chef/knife/client_create.rb +55 -31
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/osc_user_create.rb +97 -0
- data/lib/chef/knife/osc_user_delete.rb +51 -0
- data/lib/chef/knife/osc_user_edit.rb +58 -0
- data/lib/chef/knife/osc_user_list.rb +47 -0
- data/lib/chef/knife/osc_user_reregister.rb +64 -0
- data/lib/chef/knife/osc_user_show.rb +54 -0
- data/lib/chef/knife/user_create.rb +95 -36
- data/lib/chef/knife/user_delete.rb +52 -2
- data/lib/chef/knife/user_edit.rb +37 -7
- data/lib/chef/knife/user_list.rb +3 -0
- data/lib/chef/knife/user_reregister.rb +39 -8
- data/lib/chef/knife/user_show.rb +30 -1
- data/lib/chef/mixin/api_version_request_handling.rb +66 -0
- data/lib/chef/mixin/convert_to_class_name.rb +10 -4
- data/lib/chef/mixin/deprecation.rb +24 -0
- data/lib/chef/mixin/powershell_out.rb +98 -0
- data/lib/chef/mixin/provides.rb +5 -18
- data/lib/chef/mixin/uris.rb +11 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
- data/lib/chef/mixin/windows_env_helper.rb +11 -2
- data/lib/chef/node_map.rb +130 -75
- data/lib/chef/osc_user.rb +194 -0
- data/lib/chef/platform/provider_mapping.rb +2 -269
- data/lib/chef/platform/provider_priority_map.rb +6 -69
- data/lib/chef/platform/query_helpers.rb +5 -0
- data/lib/chef/platform/resource_priority_map.rb +12 -15
- data/lib/chef/policy_builder/policyfile.rb +1 -0
- data/lib/chef/provider.rb +19 -0
- data/lib/chef/provider/directory.rb +3 -0
- data/lib/chef/provider/dsc_resource.rb +8 -1
- data/lib/chef/provider/file.rb +1 -0
- data/lib/chef/provider/group/aix.rb +1 -0
- data/lib/chef/provider/group/dscl.rb +1 -1
- data/lib/chef/provider/group/gpasswd.rb +1 -0
- data/lib/chef/provider/group/groupmod.rb +1 -1
- data/lib/chef/provider/group/pw.rb +1 -0
- data/lib/chef/provider/group/suse.rb +2 -0
- data/lib/chef/provider/group/usermod.rb +2 -1
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -0
- data/lib/chef/provider/ifconfig/aix.rb +1 -0
- data/lib/chef/provider/ifconfig/debian.rb +2 -0
- data/lib/chef/provider/ifconfig/redhat.rb +1 -0
- data/lib/chef/provider/lwrp_base.rb +4 -0
- data/lib/chef/provider/mount.rb +0 -1
- data/lib/chef/provider/mount/aix.rb +1 -0
- data/lib/chef/provider/mount/mount.rb +2 -0
- data/lib/chef/provider/mount/solaris.rb +2 -0
- data/lib/chef/provider/package.rb +55 -0
- data/lib/chef/provider/package/aix.rb +7 -7
- data/lib/chef/provider/package/apt.rb +3 -3
- data/lib/chef/provider/package/dpkg.rb +4 -4
- data/lib/chef/provider/package/easy_install.rb +5 -5
- data/lib/chef/provider/package/freebsd/base.rb +2 -2
- data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
- data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
- data/lib/chef/provider/package/freebsd/port.rb +4 -4
- data/lib/chef/provider/package/homebrew.rb +2 -2
- data/lib/chef/provider/package/ips.rb +4 -4
- data/lib/chef/provider/package/macports.rb +5 -6
- data/lib/chef/provider/package/openbsd.rb +4 -5
- data/lib/chef/provider/package/pacman.rb +4 -4
- data/lib/chef/provider/package/portage.rb +2 -0
- data/lib/chef/provider/package/rpm.rb +7 -8
- data/lib/chef/provider/package/rubygems.rb +5 -12
- data/lib/chef/provider/package/smartos.rb +4 -4
- data/lib/chef/provider/package/solaris.rb +7 -7
- data/lib/chef/provider/package/windows/msi.rb +1 -1
- data/lib/chef/provider/package/yum.rb +4 -6
- data/lib/chef/provider/package/zypper.rb +16 -14
- data/lib/chef/provider/powershell_script.rb +129 -47
- data/lib/chef/provider/remote_file/content.rb +4 -1
- data/lib/chef/provider/remote_file/local_file.rb +10 -4
- data/lib/chef/provider/service.rb +44 -0
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/init.rb +1 -0
- data/lib/chef/provider/service/macosx.rb +1 -1
- data/lib/chef/provider/service/windows.rb +0 -1
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/aix.rb +3 -2
- data/lib/chef/provider/user/pw.rb +1 -0
- data/lib/chef/provider/user/solaris.rb +2 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/provider_resolver.rb +87 -134
- data/lib/chef/resource.rb +274 -68
- data/lib/chef/resource/apt_package.rb +0 -2
- data/lib/chef/resource/bash.rb +0 -2
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/bff_package.rb +0 -7
- data/lib/chef/resource/breakpoint.rb +3 -6
- data/lib/chef/resource/chef_gem.rb +0 -3
- data/lib/chef/resource/cookbook_file.rb +1 -3
- data/lib/chef/resource/cron.rb +2 -4
- data/lib/chef/resource/csh.rb +0 -2
- data/lib/chef/resource/deploy.rb +9 -6
- data/lib/chef/resource/deploy_revision.rb +0 -14
- data/lib/chef/resource/directory.rb +2 -4
- data/lib/chef/resource/dpkg_package.rb +0 -5
- data/lib/chef/resource/dsc_resource.rb +2 -3
- data/lib/chef/resource/dsc_script.rb +2 -3
- data/lib/chef/resource/easy_install_package.rb +0 -7
- data/lib/chef/resource/env.rb +3 -3
- data/lib/chef/resource/erl_call.rb +2 -5
- data/lib/chef/resource/execute.rb +2 -4
- data/lib/chef/resource/file.rb +2 -4
- data/lib/chef/resource/freebsd_package.rb +0 -5
- data/lib/chef/resource/gem_package.rb +0 -3
- data/lib/chef/resource/git.rb +0 -3
- data/lib/chef/resource/group.rb +2 -4
- data/lib/chef/resource/homebrew_package.rb +0 -2
- data/lib/chef/resource/http_request.rb +3 -4
- data/lib/chef/resource/ifconfig.rb +3 -4
- data/lib/chef/resource/ips_package.rb +2 -2
- data/lib/chef/resource/link.rb +3 -5
- data/lib/chef/resource/log.rb +2 -4
- data/lib/chef/resource/lwrp_base.rb +10 -61
- data/lib/chef/resource/macosx_service.rb +1 -2
- data/lib/chef/resource/macports_package.rb +0 -7
- data/lib/chef/resource/mdadm.rb +2 -5
- data/lib/chef/resource/mount.rb +2 -4
- data/lib/chef/resource/ohai.rb +2 -4
- data/lib/chef/resource/openbsd_package.rb +0 -6
- data/lib/chef/resource/package.rb +9 -6
- data/lib/chef/resource/pacman_package.rb +0 -7
- data/lib/chef/resource/paludis_package.rb +2 -3
- data/lib/chef/resource/perl.rb +0 -3
- data/lib/chef/resource/portage_package.rb +0 -3
- data/lib/chef/resource/powershell_script.rb +1 -2
- data/lib/chef/resource/python.rb +0 -3
- data/lib/chef/resource/reboot.rb +1 -3
- data/lib/chef/resource/registry_key.rb +3 -5
- data/lib/chef/resource/remote_directory.rb +3 -5
- data/lib/chef/resource/remote_file.rb +4 -5
- data/lib/chef/resource/route.rb +3 -5
- data/lib/chef/resource/rpm_package.rb +0 -2
- data/lib/chef/resource/ruby.rb +0 -4
- data/lib/chef/resource/ruby_block.rb +2 -4
- data/lib/chef/resource/scm.rb +3 -5
- data/lib/chef/resource/script.rb +0 -3
- data/lib/chef/resource/service.rb +3 -5
- data/lib/chef/resource/smartos_package.rb +0 -9
- data/lib/chef/resource/solaris_package.rb +0 -10
- data/lib/chef/resource/subversion.rb +1 -3
- data/lib/chef/resource/template.rb +0 -4
- data/lib/chef/resource/timestamped_deploy.rb +0 -4
- data/lib/chef/resource/user.rb +2 -5
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
- data/lib/chef/resource/windows_package.rb +3 -3
- data/lib/chef/resource/windows_script.rb +2 -2
- data/lib/chef/resource/windows_service.rb +3 -3
- data/lib/chef/resource/yum_package.rb +0 -3
- data/lib/chef/resource/zypper_package.rb +27 -0
- data/lib/chef/resource_builder.rb +7 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +108 -62
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/rest.rb +1 -0
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/user.rb +193 -42
- data/lib/chef/util/backup.rb +9 -1
- data/lib/chef/util/path_helper.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/audit/runner_spec.rb +22 -42
- data/spec/functional/mixin/powershell_out_spec.rb +43 -0
- data/spec/functional/resource/execute_spec.rb +9 -2
- data/spec/functional/resource/file_spec.rb +25 -0
- data/spec/functional/resource/group_spec.rb +5 -0
- data/spec/functional/resource/link_spec.rb +5 -11
- data/spec/functional/resource/powershell_spec.rb +40 -5
- data/spec/functional/resource/user/useradd_spec.rb +10 -18
- data/spec/integration/recipes/lwrp_spec.rb +57 -0
- data/spec/integration/recipes/provider_choice.rb +2 -7
- data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
- data/spec/spec_helper.rb +1 -1
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
- data/spec/support/lib/chef/resource/cat.rb +0 -2
- data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
- data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
- data/spec/support/lib/chef/resource/with_state.rb +0 -9
- data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
- data/spec/support/lib/chef/resource/zen_master.rb +1 -6
- data/spec/support/shared/context/client.rb +277 -0
- data/spec/support/shared/examples/client.rb +53 -0
- data/spec/support/shared/functional/file_resource.rb +0 -4
- data/spec/support/shared/functional/securable_resource.rb +0 -24
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
- data/spec/support/shared/functional/windows_script.rb +1 -1
- data/spec/support/shared/unit/api_versioning.rb +77 -0
- data/spec/support/shared/unit/knife_shared.rb +40 -0
- data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
- data/spec/unit/api_client_spec.rb +189 -14
- data/spec/unit/application/client_spec.rb +0 -5
- data/spec/unit/audit/audit_reporter_spec.rb +58 -14
- data/spec/unit/audit/logger_spec.rb +42 -0
- data/spec/unit/audit/runner_spec.rb +2 -2
- data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
- data/spec/unit/client_spec.rb +58 -374
- data/spec/unit/cookbook_spec.rb +0 -9
- data/spec/unit/cookbook_version_spec.rb +0 -20
- data/spec/unit/deprecation_spec.rb +55 -0
- data/spec/unit/dsl/resources_spec.rb +85 -0
- data/spec/unit/exceptions_spec.rb +2 -2
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
- data/spec/unit/formatters/doc_spec.rb +46 -0
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
- data/spec/unit/http/authenticator_spec.rb +11 -2
- data/spec/unit/knife/client_create_spec.rb +122 -51
- data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
- data/spec/unit/knife/core/ui_spec.rb +14 -0
- data/spec/unit/knife/osc_user_create_spec.rb +93 -0
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
- data/spec/unit/knife/osc_user_list_spec.rb +37 -0
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
- data/spec/unit/knife/osc_user_show_spec.rb +46 -0
- data/spec/unit/knife/user_create_spec.rb +177 -51
- data/spec/unit/knife/user_delete_spec.rb +34 -8
- data/spec/unit/knife/user_edit_spec.rb +31 -12
- data/spec/unit/knife/user_list_spec.rb +7 -3
- data/spec/unit/knife/user_reregister_spec.rb +38 -17
- data/spec/unit/knife/user_show_spec.rb +35 -11
- data/spec/unit/knife_spec.rb +10 -4
- data/spec/unit/lwrp_spec.rb +228 -54
- data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
- data/spec/unit/mixin/command_spec.rb +1 -2
- data/spec/unit/mixin/powershell_out_spec.rb +70 -0
- data/spec/unit/mixin/uris_spec.rb +23 -11
- data/spec/unit/node_map_spec.rb +4 -1
- data/spec/unit/osc_user_spec.rb +276 -0
- data/spec/unit/platform_spec.rb +0 -60
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +199 -135
- data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
- data/spec/unit/provider/package/aix_spec.rb +16 -16
- data/spec/unit/provider/package/dpkg_spec.rb +2 -2
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
- data/spec/unit/provider/package/ips_spec.rb +22 -22
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +4 -26
- data/spec/unit/provider/package/pacman_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +14 -14
- data/spec/unit/provider/package/rubygems_spec.rb +10 -44
- data/spec/unit/provider/package/smartos_spec.rb +4 -4
- data/spec/unit/provider/package/solaris_spec.rb +11 -11
- data/spec/unit/provider/package/zypper_spec.rb +125 -90
- data/spec/unit/provider/package_spec.rb +34 -0
- data/spec/unit/provider/powershell_spec.rb +53 -11
- data/spec/unit/provider/remote_directory_spec.rb +2 -2
- data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
- data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
- data/spec/unit/provider/user_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +463 -327
- data/spec/unit/recipe_spec.rb +42 -15
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/erl_call_spec.rb +1 -1
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/ifconfig_spec.rb +10 -6
- data/spec/unit/resource/remote_file_spec.rb +5 -0
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +2 -2
- data/spec/unit/resource/template_spec.rb +1 -1
- data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
- data/spec/unit/resource/windows_service_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +99 -13
- data/spec/unit/rest_spec.rb +5 -5
- data/spec/unit/run_context_spec.rb +41 -0
- data/spec/unit/runner_spec.rb +2 -2
- data/spec/unit/user_spec.rb +406 -93
- data/tasks/maintainers.rb +69 -0
- metadata +37 -4
@@ -19,21 +19,47 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Chef::Knife::UserDelete do
|
22
|
+
let(:knife) { Chef::Knife::UserDelete.new }
|
23
|
+
let(:user) { double('user_object') }
|
24
|
+
let(:stdout) { StringIO.new }
|
25
|
+
|
22
26
|
before(:each) do
|
23
27
|
Chef::Knife::UserDelete.load_deps
|
24
|
-
|
25
|
-
|
28
|
+
knife.name_args = [ 'my_user' ]
|
29
|
+
allow(Chef::User).to receive(:load).and_return(user)
|
30
|
+
allow(user).to receive(:username).and_return('my_user')
|
31
|
+
allow(knife.ui).to receive(:stderr).and_return(stdout)
|
32
|
+
allow(knife.ui).to receive(:stdout).and_return(stdout)
|
33
|
+
end
|
34
|
+
|
35
|
+
# delete this once OSC11 support is gone
|
36
|
+
context "when the username field is not supported by the server" do
|
37
|
+
before do
|
38
|
+
allow(knife).to receive(:run_osc_11_user_delete).and_raise(SystemExit)
|
39
|
+
allow(user).to receive(:username).and_return(nil)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "displays the osc warning" do
|
43
|
+
expect(knife.ui).to receive(:warn).with(knife.osc_11_warning)
|
44
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "forwards the command to knife osc_user edit" do
|
48
|
+
expect(knife).to receive(:run_osc_11_user_delete)
|
49
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
50
|
+
end
|
26
51
|
end
|
27
52
|
|
28
53
|
it 'deletes the user' do
|
29
|
-
expect(
|
30
|
-
|
54
|
+
#expect(knife).to receive(:delete_object).with(Chef::User, 'my_user')
|
55
|
+
expect(knife).to receive(:delete_object).with('my_user')
|
56
|
+
knife.run
|
31
57
|
end
|
32
58
|
|
33
59
|
it 'prints usage and exits when a user name is not provided' do
|
34
|
-
|
35
|
-
expect(
|
36
|
-
expect(
|
37
|
-
expect {
|
60
|
+
knife.name_args = []
|
61
|
+
expect(knife).to receive(:show_usage)
|
62
|
+
expect(knife.ui).to receive(:fatal)
|
63
|
+
expect { knife.run }.to raise_error(SystemExit)
|
38
64
|
end
|
39
65
|
end
|
@@ -19,29 +19,48 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Chef::Knife::UserEdit do
|
22
|
+
let(:knife) { Chef::Knife::UserEdit.new }
|
23
|
+
|
22
24
|
before(:each) do
|
23
25
|
@stderr = StringIO.new
|
24
26
|
@stdout = StringIO.new
|
25
27
|
|
26
28
|
Chef::Knife::UserEdit.load_deps
|
27
|
-
|
28
|
-
allow(
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
allow(knife.ui).to receive(:stderr).and_return(@stderr)
|
30
|
+
allow(knife.ui).to receive(:stdout).and_return(@stdout)
|
31
|
+
knife.name_args = [ 'my_user' ]
|
32
|
+
knife.config[:disable_editing] = true
|
33
|
+
end
|
34
|
+
|
35
|
+
# delete this once OSC11 support is gone
|
36
|
+
context "when the username field is not supported by the server" do
|
37
|
+
before do
|
38
|
+
allow(knife).to receive(:run_osc_11_user_edit).and_raise(SystemExit)
|
39
|
+
allow(Chef::User).to receive(:load).and_return({"username" => nil})
|
40
|
+
end
|
41
|
+
|
42
|
+
it "displays the osc warning" do
|
43
|
+
expect(knife.ui).to receive(:warn).with(knife.osc_11_warning)
|
44
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "forwards the command to knife osc_user edit" do
|
48
|
+
expect(knife).to receive(:run_osc_11_user_edit)
|
49
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
50
|
+
end
|
32
51
|
end
|
33
52
|
|
34
53
|
it 'loads and edits the user' do
|
35
|
-
data = {
|
54
|
+
data = { "username" => "my_user" }
|
36
55
|
allow(Chef::User).to receive(:load).with("my_user").and_return(data)
|
37
|
-
expect(
|
38
|
-
|
56
|
+
expect(knife).to receive(:edit_data).with(data).and_return(data)
|
57
|
+
knife.run
|
39
58
|
end
|
40
59
|
|
41
60
|
it 'prints usage and exits when a user name is not provided' do
|
42
|
-
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect {
|
61
|
+
knife.name_args = []
|
62
|
+
expect(knife).to receive(:show_usage)
|
63
|
+
expect(knife.ui).to receive(:fatal)
|
64
|
+
expect { knife.run }.to raise_error(SystemExit)
|
46
65
|
end
|
47
66
|
end
|
@@ -19,14 +19,18 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Chef::Knife::UserList do
|
22
|
+
let(:knife) { Chef::Knife::UserList.new }
|
23
|
+
let(:stdout) { StringIO.new }
|
24
|
+
|
22
25
|
before(:each) do
|
23
26
|
Chef::Knife::UserList.load_deps
|
24
|
-
|
27
|
+
allow(knife.ui).to receive(:stderr).and_return(stdout)
|
28
|
+
allow(knife.ui).to receive(:stdout).and_return(stdout)
|
25
29
|
end
|
26
30
|
|
27
31
|
it 'lists the users' do
|
28
32
|
expect(Chef::User).to receive(:list)
|
29
|
-
expect(
|
30
|
-
|
33
|
+
expect(knife).to receive(:format_list_for_display)
|
34
|
+
knife.run
|
31
35
|
end
|
32
36
|
end
|
@@ -19,35 +19,56 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Chef::Knife::UserReregister do
|
22
|
-
|
22
|
+
let(:knife) { Chef::Knife::UserReregister.new }
|
23
|
+
let(:user_mock) { double('user_mock', :private_key => "private_key") }
|
24
|
+
let(:stdout) { StringIO.new }
|
25
|
+
|
26
|
+
before do
|
23
27
|
Chef::Knife::UserReregister.load_deps
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
allow(
|
28
|
-
|
29
|
-
|
28
|
+
knife.name_args = [ 'a_user' ]
|
29
|
+
allow(Chef::User).to receive(:load).and_return(user_mock)
|
30
|
+
allow(knife.ui).to receive(:stdout).and_return(stdout)
|
31
|
+
allow(knife.ui).to receive(:stderr).and_return(stdout)
|
32
|
+
allow(user_mock).to receive(:username).and_return('a_user')
|
33
|
+
end
|
34
|
+
|
35
|
+
# delete this once OSC11 support is gone
|
36
|
+
context "when the username field is not supported by the server" do
|
37
|
+
before do
|
38
|
+
allow(knife).to receive(:run_osc_11_user_reregister).and_raise(SystemExit)
|
39
|
+
allow(user_mock).to receive(:username).and_return(nil)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "displays the osc warning" do
|
43
|
+
expect(knife.ui).to receive(:warn).with(knife.osc_11_warning)
|
44
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "forwards the command to knife osc_user edit" do
|
48
|
+
expect(knife).to receive(:run_osc_11_user_reregister)
|
49
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
50
|
+
end
|
30
51
|
end
|
31
52
|
|
32
53
|
it 'prints usage and exits when a user name is not provided' do
|
33
|
-
|
34
|
-
expect(
|
35
|
-
expect(
|
36
|
-
expect {
|
54
|
+
knife.name_args = []
|
55
|
+
expect(knife).to receive(:show_usage)
|
56
|
+
expect(knife.ui).to receive(:fatal)
|
57
|
+
expect { knife.run }.to raise_error(SystemExit)
|
37
58
|
end
|
38
59
|
|
39
60
|
it 'reregisters the user and prints the key' do
|
40
|
-
expect(
|
41
|
-
|
42
|
-
expect(
|
61
|
+
expect(user_mock).to receive(:reregister).and_return(user_mock)
|
62
|
+
knife.run
|
63
|
+
expect(stdout.string).to match( /private_key/ )
|
43
64
|
end
|
44
65
|
|
45
66
|
it 'writes the private key to a file when --file is specified' do
|
46
|
-
expect(
|
47
|
-
|
67
|
+
expect(user_mock).to receive(:reregister).and_return(user_mock)
|
68
|
+
knife.config[:file] = '/tmp/a_file'
|
48
69
|
filehandle = StringIO.new
|
49
70
|
expect(File).to receive(:open).with('/tmp/a_file', 'w').and_yield(filehandle)
|
50
|
-
|
71
|
+
knife.run
|
51
72
|
expect(filehandle.string).to eq("private_key")
|
52
73
|
end
|
53
74
|
end
|
@@ -19,23 +19,47 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Chef::Knife::UserShow do
|
22
|
-
|
22
|
+
let(:knife) { Chef::Knife::UserShow.new }
|
23
|
+
let(:user_mock) { double('user_mock') }
|
24
|
+
let(:stdout) { StringIO.new }
|
25
|
+
|
26
|
+
before do
|
23
27
|
Chef::Knife::UserShow.load_deps
|
24
|
-
|
25
|
-
|
26
|
-
|
28
|
+
knife.name_args = [ 'my_user' ]
|
29
|
+
allow(user_mock).to receive(:username).and_return('my_user')
|
30
|
+
allow(knife.ui).to receive(:stderr).and_return(stdout)
|
31
|
+
allow(knife.ui).to receive(:stdout).and_return(stdout)
|
32
|
+
end
|
33
|
+
|
34
|
+
# delete this once OSC11 support is gone
|
35
|
+
context "when the username field is not supported by the server" do
|
36
|
+
before do
|
37
|
+
allow(knife).to receive(:run_osc_11_user_show).and_raise(SystemExit)
|
38
|
+
allow(Chef::User).to receive(:load).with('my_user').and_return(user_mock)
|
39
|
+
allow(user_mock).to receive(:username).and_return(nil)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "displays the osc warning" do
|
43
|
+
expect(knife.ui).to receive(:warn).with(knife.osc_11_warning)
|
44
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "forwards the command to knife osc_user edit" do
|
48
|
+
expect(knife).to receive(:run_osc_11_user_show)
|
49
|
+
expect{ knife.run }.to raise_error(SystemExit)
|
50
|
+
end
|
27
51
|
end
|
28
52
|
|
29
53
|
it 'loads and displays the user' do
|
30
|
-
expect(Chef::User).to receive(:load).with('my_user').and_return(
|
31
|
-
expect(
|
32
|
-
|
54
|
+
expect(Chef::User).to receive(:load).with('my_user').and_return(user_mock)
|
55
|
+
expect(knife).to receive(:format_for_display).with(user_mock)
|
56
|
+
knife.run
|
33
57
|
end
|
34
58
|
|
35
59
|
it 'prints usage and exits when a user name is not provided' do
|
36
|
-
|
37
|
-
expect(
|
38
|
-
expect(
|
39
|
-
expect {
|
60
|
+
knife.name_args = []
|
61
|
+
expect(knife).to receive(:show_usage)
|
62
|
+
expect(knife.ui).to receive(:fatal)
|
63
|
+
expect { knife.run }.to raise_error(SystemExit)
|
40
64
|
end
|
41
65
|
end
|
data/spec/unit/knife_spec.rb
CHANGED
@@ -140,7 +140,7 @@ describe Chef::Knife do
|
|
140
140
|
'X-Chef-Version' => Chef::VERSION,
|
141
141
|
"Host"=>"api.opscode.piab",
|
142
142
|
"X-REMOTE-REQUEST-ID"=>request_id,
|
143
|
-
'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::
|
143
|
+
'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION}}
|
144
144
|
|
145
145
|
let(:request_id) {"1234"}
|
146
146
|
|
@@ -399,11 +399,17 @@ describe Chef::Knife do
|
|
399
399
|
it "formats 406s (non-supported API version error) nicely" do
|
400
400
|
response = Net::HTTPNotAcceptable.new("1.1", "406", "Not Acceptable")
|
401
401
|
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
402
|
-
|
402
|
+
|
403
|
+
# set the header
|
404
|
+
response["x-ops-server-api-version"] = Chef::JSONCompat.to_json(:min_version => "0", :max_version => "1", :request_version => "10000000")
|
405
|
+
|
406
|
+
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(:error => "sad trombone"))
|
403
407
|
allow(knife).to receive(:run).and_raise(Net::HTTPServerException.new("406 Not Acceptable", response))
|
408
|
+
|
404
409
|
knife.run_with_pretty_exceptions
|
405
|
-
expect(stderr.string).to include('The
|
406
|
-
expect(stderr.string).to include(
|
410
|
+
expect(stderr.string).to include('The request that Knife sent was using API version 10000000')
|
411
|
+
expect(stderr.string).to include('The Chef server you sent the request to supports a min API verson of 0 and a max API version of 1')
|
412
|
+
expect(stderr.string).to include('Please either update your Chef client or server to be a compatible set')
|
407
413
|
end
|
408
414
|
|
409
415
|
it "formats 500s nicely" do
|
data/spec/unit/lwrp_spec.rb
CHANGED
@@ -38,7 +38,7 @@ describe "LWRP" do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def get_lwrp(name)
|
41
|
-
Chef::
|
41
|
+
Chef::ResourceResolver.resolve(name)
|
42
42
|
end
|
43
43
|
|
44
44
|
def get_lwrp_provider(name)
|
@@ -122,6 +122,23 @@ describe "LWRP" do
|
|
122
122
|
|
123
123
|
end
|
124
124
|
|
125
|
+
context "When an LWRP resource in cookbook l-w-r-p is loaded" do
|
126
|
+
before do
|
127
|
+
@tmpdir = Dir.mktmpdir("lwrp_test")
|
128
|
+
resource_path = File.join(@tmpdir, "foo.rb")
|
129
|
+
IO.write(resource_path, "default_action :create")
|
130
|
+
provider_path = File.join(@tmpdir, "foo.rb")
|
131
|
+
IO.write(provider_path, <<-EOM)
|
132
|
+
action :create do
|
133
|
+
raise "hi"
|
134
|
+
end
|
135
|
+
EOM
|
136
|
+
end
|
137
|
+
|
138
|
+
it "Can find the resource at l_w_r_p_foo" do
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
125
142
|
context "When an LWRP resource lwrp_foo is loaded" do
|
126
143
|
before do
|
127
144
|
@tmpdir = Dir.mktmpdir("lwrp_test")
|
@@ -129,7 +146,7 @@ describe "LWRP" do
|
|
129
146
|
content = IO.read(File.expand_path("../../data/lwrp/resources/foo.rb", __FILE__))
|
130
147
|
IO.write(@lwrp_path, content)
|
131
148
|
Chef::Resource::LWRPBase.build_from_file("lwrp", @lwrp_path, nil)
|
132
|
-
@original_resource = Chef::
|
149
|
+
@original_resource = Chef::ResourceResolver.resolve(:lwrp_foo)
|
133
150
|
end
|
134
151
|
|
135
152
|
after do
|
@@ -144,9 +161,9 @@ describe "LWRP" do
|
|
144
161
|
end
|
145
162
|
|
146
163
|
it "Should load the old content, and not the new" do
|
147
|
-
resource = Chef::
|
164
|
+
resource = Chef::ResourceResolver.resolve(:lwrp_foo)
|
148
165
|
expect(resource).to eq @original_resource
|
149
|
-
expect(resource.default_action).to eq(
|
166
|
+
expect(resource.default_action).to eq(:pass_buck)
|
150
167
|
expect(Chef.method_defined?(:method_created_by_override_lwrp_foo)).to be_falsey
|
151
168
|
end
|
152
169
|
end
|
@@ -160,8 +177,8 @@ describe "LWRP" do
|
|
160
177
|
end
|
161
178
|
end
|
162
179
|
|
163
|
-
it "should load the resource into a properly-named class and emit a warning
|
164
|
-
expect { Chef::Resource::LwrpFoo }.to raise_error(Chef::Exceptions::DeprecatedFeatureError)
|
180
|
+
it "should load the resource into a properly-named class and emit a warning when it is initialized" do
|
181
|
+
expect { Chef::Resource::LwrpFoo.new('hi') }.to raise_error(Chef::Exceptions::DeprecatedFeatureError)
|
165
182
|
end
|
166
183
|
|
167
184
|
it "should be resolvable with Chef::ResourceResolver.resolve(:lwrp_foo)" do
|
@@ -185,7 +202,7 @@ describe "LWRP" do
|
|
185
202
|
end
|
186
203
|
|
187
204
|
it "should set the specified action as the default action" do
|
188
|
-
expect(get_lwrp(:lwrp_foo).new("blah").action).to eq(
|
205
|
+
expect(get_lwrp(:lwrp_foo).new("blah").action).to eq(:pass_buck)
|
189
206
|
end
|
190
207
|
|
191
208
|
it "should create a method for each attribute" do
|
@@ -211,6 +228,127 @@ describe "LWRP" do
|
|
211
228
|
expect(cls.node[:penguin_name]).to eql("jackass")
|
212
229
|
end
|
213
230
|
|
231
|
+
context "resource class created" do
|
232
|
+
before do
|
233
|
+
@old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors]
|
234
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
235
|
+
end
|
236
|
+
after do
|
237
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = @old_treat_deprecation_warnings_as_errors
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should load the resource into a properly-named class" do
|
241
|
+
expect(Chef::Resource::LwrpFoo).to be_kind_of(Class)
|
242
|
+
expect(Chef::Resource::LwrpFoo <= Chef::Resource::LWRPBase).to be_truthy
|
243
|
+
end
|
244
|
+
|
245
|
+
it "get_lwrp(:lwrp_foo).new is a Chef::Resource::LwrpFoo" do
|
246
|
+
lwrp = get_lwrp(:lwrp_foo).new('hi')
|
247
|
+
expect(lwrp.kind_of?(Chef::Resource::LwrpFoo)).to be_truthy
|
248
|
+
expect(lwrp.is_a?(Chef::Resource::LwrpFoo)).to be_truthy
|
249
|
+
expect(get_lwrp(:lwrp_foo) === lwrp).to be_truthy
|
250
|
+
expect(Chef::Resource::LwrpFoo === lwrp).to be_truthy
|
251
|
+
end
|
252
|
+
|
253
|
+
it "Chef::Resource::LwrpFoo.new is a get_lwrp(:lwrp_foo)" do
|
254
|
+
lwrp = Chef::Resource::LwrpFoo.new('hi')
|
255
|
+
expect(lwrp.kind_of?(get_lwrp(:lwrp_foo))).to be_truthy
|
256
|
+
expect(lwrp.is_a?(get_lwrp(:lwrp_foo))).to be_truthy
|
257
|
+
expect(get_lwrp(:lwrp_foo) === lwrp).to be_truthy
|
258
|
+
expect(Chef::Resource::LwrpFoo === lwrp).to be_truthy
|
259
|
+
end
|
260
|
+
|
261
|
+
it "works even if LwrpFoo exists in the top level" do
|
262
|
+
module ::LwrpFoo
|
263
|
+
end
|
264
|
+
expect(Chef::Resource::LwrpFoo).not_to eq(::LwrpFoo)
|
265
|
+
end
|
266
|
+
|
267
|
+
context "with a subclass of get_lwrp(:lwrp_foo)" do
|
268
|
+
let(:subclass) do
|
269
|
+
Class.new(get_lwrp(:lwrp_foo))
|
270
|
+
end
|
271
|
+
|
272
|
+
it "subclass.new is a subclass" do
|
273
|
+
lwrp = subclass.new('hi')
|
274
|
+
expect(lwrp.kind_of?(subclass)).to be_truthy
|
275
|
+
expect(lwrp.is_a?(subclass)).to be_truthy
|
276
|
+
expect(subclass === lwrp).to be_truthy
|
277
|
+
expect(lwrp.class === subclass)
|
278
|
+
end
|
279
|
+
it "subclass.new is a Chef::Resource::LwrpFoo" do
|
280
|
+
lwrp = subclass.new('hi')
|
281
|
+
expect(lwrp.kind_of?(Chef::Resource::LwrpFoo)).to be_truthy
|
282
|
+
expect(lwrp.is_a?(Chef::Resource::LwrpFoo)).to be_truthy
|
283
|
+
expect(Chef::Resource::LwrpFoo === lwrp).to be_truthy
|
284
|
+
expect(lwrp.class === Chef::Resource::LwrpFoo)
|
285
|
+
end
|
286
|
+
it "subclass.new is a get_lwrp(:lwrp_foo)" do
|
287
|
+
lwrp = subclass.new('hi')
|
288
|
+
expect(lwrp.kind_of?(get_lwrp(:lwrp_foo))).to be_truthy
|
289
|
+
expect(lwrp.is_a?(get_lwrp(:lwrp_foo))).to be_truthy
|
290
|
+
expect(get_lwrp(:lwrp_foo) === lwrp).to be_truthy
|
291
|
+
expect(lwrp.class === get_lwrp(:lwrp_foo))
|
292
|
+
end
|
293
|
+
it "Chef::Resource::LwrpFoo.new is *not* a subclass" do
|
294
|
+
lwrp = Chef::Resource::LwrpFoo.new('hi')
|
295
|
+
expect(lwrp.kind_of?(subclass)).to be_falsey
|
296
|
+
expect(lwrp.is_a?(subclass)).to be_falsey
|
297
|
+
expect(subclass === lwrp.class).to be_falsey
|
298
|
+
expect(subclass === Chef::Resource::LwrpFoo).to be_falsey
|
299
|
+
end
|
300
|
+
it "get_lwrp(:lwrp_foo).new is *not* a subclass" do
|
301
|
+
lwrp = get_lwrp(:lwrp_foo).new('hi')
|
302
|
+
expect(lwrp.kind_of?(subclass)).to be_falsey
|
303
|
+
expect(lwrp.is_a?(subclass)).to be_falsey
|
304
|
+
expect(subclass === lwrp.class).to be_falsey
|
305
|
+
expect(subclass === get_lwrp(:lwrp_foo)).to be_falsey
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
context "with a subclass of Chef::Resource::LwrpFoo" do
|
310
|
+
let(:subclass) do
|
311
|
+
Class.new(Chef::Resource::LwrpFoo)
|
312
|
+
end
|
313
|
+
|
314
|
+
it "subclass.new is a subclass" do
|
315
|
+
lwrp = subclass.new('hi')
|
316
|
+
expect(lwrp.kind_of?(subclass)).to be_truthy
|
317
|
+
expect(lwrp.is_a?(subclass)).to be_truthy
|
318
|
+
expect(subclass === lwrp).to be_truthy
|
319
|
+
expect(lwrp.class === subclass)
|
320
|
+
end
|
321
|
+
it "subclass.new is a Chef::Resource::LwrpFoo" do
|
322
|
+
lwrp = subclass.new('hi')
|
323
|
+
expect(lwrp.kind_of?(Chef::Resource::LwrpFoo)).to be_truthy
|
324
|
+
expect(lwrp.is_a?(Chef::Resource::LwrpFoo)).to be_truthy
|
325
|
+
expect(Chef::Resource::LwrpFoo === lwrp).to be_truthy
|
326
|
+
expect(lwrp.class === Chef::Resource::LwrpFoo)
|
327
|
+
end
|
328
|
+
it "subclass.new is a get_lwrp(:lwrp_foo)" do
|
329
|
+
lwrp = subclass.new('hi')
|
330
|
+
expect(lwrp.kind_of?(get_lwrp(:lwrp_foo))).to be_truthy
|
331
|
+
expect(lwrp.is_a?(get_lwrp(:lwrp_foo))).to be_truthy
|
332
|
+
expect(get_lwrp(:lwrp_foo) === lwrp).to be_truthy
|
333
|
+
expect(lwrp.class === get_lwrp(:lwrp_foo))
|
334
|
+
end
|
335
|
+
it "Chef::Resource::LwrpFoo.new is *not* a subclass" do
|
336
|
+
lwrp = Chef::Resource::LwrpFoo.new('hi')
|
337
|
+
expect(lwrp.kind_of?(subclass)).to be_falsey
|
338
|
+
expect(lwrp.is_a?(subclass)).to be_falsey
|
339
|
+
expect(subclass === lwrp.class).to be_falsey
|
340
|
+
expect(subclass === Chef::Resource::LwrpFoo).to be_falsey
|
341
|
+
end
|
342
|
+
it "get_lwrp(:lwrp_foo).new is *not* a subclass" do
|
343
|
+
lwrp = get_lwrp(:lwrp_foo).new('hi')
|
344
|
+
expect(lwrp.kind_of?(subclass)).to be_falsey
|
345
|
+
expect(lwrp.is_a?(subclass)).to be_falsey
|
346
|
+
expect(subclass === lwrp.class).to be_falsey
|
347
|
+
expect(subclass === get_lwrp(:lwrp_foo)).to be_falsey
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
214
352
|
context "resource_name" do
|
215
353
|
let(:klass) { Class.new(Chef::Resource::LWRPBase) }
|
216
354
|
|
@@ -229,14 +367,6 @@ describe "LWRP" do
|
|
229
367
|
expect(klass.resource_name).to eq(:foo)
|
230
368
|
end
|
231
369
|
|
232
|
-
context "when creating a new instance" do
|
233
|
-
it "raises an exception if resource_name is nil" do
|
234
|
-
expect {
|
235
|
-
klass.new('blah')
|
236
|
-
}.to raise_error(Chef::Exceptions::InvalidResourceSpecification)
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
370
|
context "lazy default values" do
|
241
371
|
let(:klass) do
|
242
372
|
Class.new(Chef::Resource::LWRPBase) do
|
@@ -289,7 +419,7 @@ describe "LWRP" do
|
|
289
419
|
end
|
290
420
|
|
291
421
|
it "delegates #default_action to the parent" do
|
292
|
-
expect(child.default_action).to eq(
|
422
|
+
expect(child.default_action).to eq(:eat)
|
293
423
|
end
|
294
424
|
end
|
295
425
|
|
@@ -306,7 +436,7 @@ describe "LWRP" do
|
|
306
436
|
end
|
307
437
|
|
308
438
|
it "does not delegate #default_action to the parent" do
|
309
|
-
expect(child.default_action).to eq(
|
439
|
+
expect(child.default_action).to eq(:dont_eat)
|
310
440
|
end
|
311
441
|
end
|
312
442
|
|
@@ -335,27 +465,38 @@ describe "LWRP" do
|
|
335
465
|
end
|
336
466
|
|
337
467
|
describe "Lightweight Chef::Provider" do
|
468
|
+
|
469
|
+
let(:node) do
|
470
|
+
Chef::Node.new.tap do |n|
|
471
|
+
n.automatic[:platform] = :ubuntu
|
472
|
+
n.automatic[:platform_version] = '8.10'
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
let(:events) { Chef::EventDispatch::Dispatcher.new }
|
477
|
+
|
478
|
+
let(:run_context) { Chef::RunContext.new(node, Chef::CookbookCollection.new({}), events) }
|
479
|
+
|
480
|
+
let(:runner) { Chef::Runner.new(run_context) }
|
481
|
+
|
482
|
+
let(:lwrp_cookbok_name) { "lwrp" }
|
483
|
+
|
338
484
|
before do
|
339
|
-
@
|
340
|
-
@node.automatic[:platform] = :ubuntu
|
341
|
-
@node.automatic[:platform_version] = '8.10'
|
342
|
-
@events = Chef::EventDispatch::Dispatcher.new
|
343
|
-
@run_context = Chef::RunContext.new(@node, Chef::CookbookCollection.new({}), @events)
|
344
|
-
@runner = Chef::Runner.new(@run_context)
|
485
|
+
Chef::Provider::LWRPBase.class_eval { @loaded_lwrps = {} }
|
345
486
|
end
|
346
487
|
|
347
488
|
before(:each) do
|
348
489
|
Dir[File.expand_path(File.expand_path("../../data/lwrp/resources/*", __FILE__))].each do |file|
|
349
|
-
Chef::Resource::LWRPBase.build_from_file(
|
490
|
+
Chef::Resource::LWRPBase.build_from_file(lwrp_cookbok_name, file, run_context)
|
350
491
|
end
|
351
492
|
|
352
493
|
Dir[File.expand_path(File.expand_path("../../data/lwrp/providers/*", __FILE__))].each do |file|
|
353
|
-
Chef::Provider::LWRPBase.build_from_file(
|
494
|
+
Chef::Provider::LWRPBase.build_from_file(lwrp_cookbok_name, file, run_context)
|
354
495
|
end
|
355
496
|
end
|
356
497
|
|
357
498
|
it "should properly handle a new_resource reference" do
|
358
|
-
resource = get_lwrp(:lwrp_foo).new("morpheus",
|
499
|
+
resource = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
359
500
|
resource.monkey("bob")
|
360
501
|
resource.provider(get_lwrp_provider(:lwrp_monkey_name_printer))
|
361
502
|
|
@@ -363,11 +504,12 @@ describe "LWRP" do
|
|
363
504
|
provider.action_twiddle_thumbs
|
364
505
|
end
|
365
506
|
|
366
|
-
context "
|
507
|
+
context "provider class created" do
|
367
508
|
before do
|
368
509
|
@old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors]
|
369
510
|
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
370
511
|
end
|
512
|
+
|
371
513
|
after do
|
372
514
|
Chef::Config[:treat_deprecation_warnings_as_errors] = @old_treat_deprecation_warnings_as_errors
|
373
515
|
end
|
@@ -381,54 +523,86 @@ describe "LWRP" do
|
|
381
523
|
expect(get_lwrp_provider(:lwrp_buck_passer).instance_methods).to include(:action_pass_buck)
|
382
524
|
expect(get_lwrp_provider(:lwrp_thumb_twiddler).instance_methods).to include(:action_twiddle_thumbs)
|
383
525
|
end
|
526
|
+
|
527
|
+
it "sets itself as a provider for a resource of the same name" do
|
528
|
+
found_providers = Chef::Platform::ProviderPriorityMap.instance.list_handlers(node, :lwrp_buck_passer)
|
529
|
+
# we bypass the per-file loading to get the file to load each time,
|
530
|
+
# which creates the LWRP class repeatedly. New things get prepended to
|
531
|
+
# the list of providers.
|
532
|
+
expect(found_providers.first).to eq(get_lwrp_provider(:lwrp_buck_passer))
|
533
|
+
end
|
534
|
+
|
535
|
+
context "with a cookbook with an underscore in the name" do
|
536
|
+
|
537
|
+
let(:lwrp_cookbok_name) { "l_w_r_p" }
|
538
|
+
|
539
|
+
it "sets itself as a provider for a resource of the same name" do
|
540
|
+
found_providers = Chef::Platform::ProviderPriorityMap.instance.list_handlers(node, :l_w_r_p_buck_passer)
|
541
|
+
expect(found_providers.size).to eq(1)
|
542
|
+
expect(found_providers.last).to eq(get_lwrp_provider(:l_w_r_p_buck_passer))
|
543
|
+
end
|
544
|
+
end
|
545
|
+
|
546
|
+
context "with a cookbook with a hypen in the name" do
|
547
|
+
|
548
|
+
let(:lwrp_cookbok_name) { "l-w-r-p" }
|
549
|
+
|
550
|
+
it "sets itself as a provider for a resource of the same name" do
|
551
|
+
incorrect_providers = Chef::Platform::ProviderPriorityMap.instance.list_handlers(node, :'l-w-r-p_buck_passer')
|
552
|
+
expect(incorrect_providers).to eq([])
|
553
|
+
|
554
|
+
found_providers = Chef::Platform::ProviderPriorityMap.instance.list_handlers(node, :l_w_r_p_buck_passer)
|
555
|
+
expect(found_providers.first).to eq(get_lwrp_provider(:l_w_r_p_buck_passer))
|
556
|
+
end
|
557
|
+
end
|
384
558
|
end
|
385
559
|
|
386
560
|
it "should insert resources embedded in the provider into the middle of the resource collection" do
|
387
|
-
injector = get_lwrp(:lwrp_foo).new("morpheus",
|
561
|
+
injector = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
388
562
|
injector.action(:pass_buck)
|
389
563
|
injector.provider(get_lwrp_provider(:lwrp_buck_passer))
|
390
|
-
dummy = Chef::Resource::ZenMaster.new("keanu reeves",
|
564
|
+
dummy = Chef::Resource::ZenMaster.new("keanu reeves", run_context)
|
391
565
|
dummy.provider(Chef::Provider::Easy)
|
392
|
-
|
393
|
-
|
566
|
+
run_context.resource_collection.insert(injector)
|
567
|
+
run_context.resource_collection.insert(dummy)
|
394
568
|
|
395
|
-
Chef::Runner.new(
|
569
|
+
Chef::Runner.new(run_context).converge
|
396
570
|
|
397
|
-
expect(
|
398
|
-
expect(
|
399
|
-
expect(
|
400
|
-
expect(
|
571
|
+
expect(run_context.resource_collection[0]).to eql(injector)
|
572
|
+
expect(run_context.resource_collection[1].name).to eql('prepared_thumbs')
|
573
|
+
expect(run_context.resource_collection[2].name).to eql('twiddled_thumbs')
|
574
|
+
expect(run_context.resource_collection[3]).to eql(dummy)
|
401
575
|
end
|
402
576
|
|
403
577
|
it "should insert embedded resources from multiple providers, including from the last position, properly into the resource collection" do
|
404
|
-
injector = get_lwrp(:lwrp_foo).new("morpheus",
|
578
|
+
injector = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
405
579
|
injector.action(:pass_buck)
|
406
580
|
injector.provider(get_lwrp_provider(:lwrp_buck_passer))
|
407
581
|
|
408
|
-
injector2 = get_lwrp(:lwrp_bar).new("tank",
|
582
|
+
injector2 = get_lwrp(:lwrp_bar).new("tank", run_context)
|
409
583
|
injector2.action(:pass_buck)
|
410
584
|
injector2.provider(get_lwrp_provider(:lwrp_buck_passer_2))
|
411
585
|
|
412
|
-
dummy = Chef::Resource::ZenMaster.new("keanu reeves",
|
586
|
+
dummy = Chef::Resource::ZenMaster.new("keanu reeves", run_context)
|
413
587
|
dummy.provider(Chef::Provider::Easy)
|
414
588
|
|
415
|
-
|
416
|
-
|
417
|
-
|
589
|
+
run_context.resource_collection.insert(injector)
|
590
|
+
run_context.resource_collection.insert(dummy)
|
591
|
+
run_context.resource_collection.insert(injector2)
|
418
592
|
|
419
|
-
Chef::Runner.new(
|
593
|
+
Chef::Runner.new(run_context).converge
|
420
594
|
|
421
|
-
expect(
|
422
|
-
expect(
|
423
|
-
expect(
|
424
|
-
expect(
|
425
|
-
expect(
|
426
|
-
expect(
|
427
|
-
expect(
|
595
|
+
expect(run_context.resource_collection[0]).to eql(injector)
|
596
|
+
expect(run_context.resource_collection[1].name).to eql('prepared_thumbs')
|
597
|
+
expect(run_context.resource_collection[2].name).to eql('twiddled_thumbs')
|
598
|
+
expect(run_context.resource_collection[3]).to eql(dummy)
|
599
|
+
expect(run_context.resource_collection[4]).to eql(injector2)
|
600
|
+
expect(run_context.resource_collection[5].name).to eql('prepared_eyes')
|
601
|
+
expect(run_context.resource_collection[6].name).to eql('dried_paint_watched')
|
428
602
|
end
|
429
603
|
|
430
604
|
it "should properly handle a new_resource reference" do
|
431
|
-
resource = get_lwrp(:lwrp_foo).new("morpheus",
|
605
|
+
resource = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
432
606
|
resource.monkey("bob")
|
433
607
|
resource.provider(get_lwrp_provider(:lwrp_monkey_name_printer))
|
434
608
|
|
@@ -439,7 +613,7 @@ describe "LWRP" do
|
|
439
613
|
end
|
440
614
|
|
441
615
|
it "should properly handle an embedded Resource accessing the enclosing Provider's scope" do
|
442
|
-
resource = get_lwrp(:lwrp_foo).new("morpheus",
|
616
|
+
resource = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
443
617
|
resource.monkey("bob")
|
444
618
|
resource.provider(get_lwrp_provider(:lwrp_embedded_resource_accesses_providers_scope))
|
445
619
|
|
@@ -458,7 +632,7 @@ describe "LWRP" do
|
|
458
632
|
# Side effect of lwrp_inline_compiler provider for testing notifications.
|
459
633
|
$interior_ruby_block_2 = nil
|
460
634
|
# resource type doesn't matter, so make an existing resource type work with provider.
|
461
|
-
@resource = get_lwrp(:lwrp_foo).new("morpheus",
|
635
|
+
@resource = get_lwrp(:lwrp_foo).new("morpheus", run_context)
|
462
636
|
@resource.allowed_actions << :test
|
463
637
|
@resource.action(:test)
|
464
638
|
@resource.provider(get_lwrp_provider(:lwrp_inline_compiler))
|
@@ -466,7 +640,7 @@ describe "LWRP" do
|
|
466
640
|
|
467
641
|
it "does not add interior resources to the exterior resource collection" do
|
468
642
|
@resource.run_action(:test)
|
469
|
-
expect(
|
643
|
+
expect(run_context.resource_collection).to be_empty
|
470
644
|
end
|
471
645
|
|
472
646
|
context "when interior resources are updated" do
|