chef 12.0.0.alpha.0-x86-mingw32 → 12.0.0.alpha.1-x86-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.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +3 -5
  3. data/lib/chef/api_client.rb +1 -1
  4. data/lib/chef/application.rb +16 -8
  5. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  6. data/lib/chef/chef_fs/command_line.rb +1 -1
  7. data/lib/chef/chef_fs/file_system.rb +1 -1
  8. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
  9. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +3 -3
  10. data/lib/chef/chef_fs/file_system/cookbook_file.rb +2 -2
  11. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -2
  12. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -4
  13. data/lib/chef/config.rb +6 -5
  14. data/lib/chef/config_fetcher.rb +1 -1
  15. data/lib/chef/cookbook/cookbook_version_loader.rb +126 -43
  16. data/lib/chef/cookbook/metadata.rb +102 -53
  17. data/lib/chef/cookbook/syntax_check.rb +1 -1
  18. data/lib/chef/cookbook_loader.rb +62 -14
  19. data/lib/chef/cookbook_site_streaming_uploader.rb +12 -1
  20. data/lib/chef/cookbook_version.rb +13 -4
  21. data/lib/chef/data_bag.rb +28 -15
  22. data/lib/chef/data_bag_item.rb +5 -7
  23. data/lib/chef/digester.rb +5 -9
  24. data/lib/chef/dsl/recipe.rb +14 -0
  25. data/lib/chef/encrypted_data_bag_item.rb +1 -0
  26. data/lib/chef/encrypted_data_bag_item/assertions.rb +57 -0
  27. data/lib/chef/encrypted_data_bag_item/decryptor.rb +52 -28
  28. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -0
  29. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -0
  30. data/lib/chef/encrypted_data_bag_item/encryptor.rb +79 -8
  31. data/lib/chef/environment.rb +1 -3
  32. data/lib/chef/exceptions.rb +18 -3
  33. data/lib/chef/formatters/base.rb +7 -0
  34. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +1 -1
  35. data/lib/chef/handler/json_file.rb +0 -1
  36. data/lib/chef/http/json_output.rb +1 -1
  37. data/lib/chef/json_compat.rb +24 -6
  38. data/lib/chef/knife/bootstrap.rb +2 -2
  39. data/lib/chef/knife/client_delete.rb +1 -1
  40. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  41. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  42. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  43. data/lib/chef/knife/cookbook_site_share.rb +2 -2
  44. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  45. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  46. data/lib/chef/knife/core/node_editor.rb +2 -3
  47. data/lib/chef/knife/core/ui.rb +2 -2
  48. data/lib/chef/knife/deps.rb +2 -3
  49. data/lib/chef/mixin/shell_out.rb +1 -1
  50. data/lib/chef/mixin/windows_architecture_helper.rb +1 -0
  51. data/lib/chef/node.rb +1 -2
  52. data/lib/chef/platform/provider_mapping.rb +33 -6
  53. data/lib/chef/provider.rb +0 -2
  54. data/lib/chef/provider/cookbook_file/content.rb +1 -1
  55. data/lib/chef/provider/cron.rb +11 -0
  56. data/lib/chef/provider/deploy.rb +3 -2
  57. data/lib/chef/provider/deploy/revision.rb +2 -2
  58. data/lib/chef/provider/env.rb +1 -1
  59. data/lib/chef/provider/env/windows.rb +5 -9
  60. data/lib/chef/provider/file.rb +84 -33
  61. data/lib/chef/provider/git.rb +2 -1
  62. data/lib/chef/provider/group/aix.rb +17 -2
  63. data/lib/chef/provider/group/dscl.rb +27 -9
  64. data/lib/chef/provider/group/pw.rb +8 -1
  65. data/lib/chef/provider/http_request.rb +4 -4
  66. data/lib/chef/provider/log.rb +4 -14
  67. data/lib/chef/provider/mount/mount.rb +2 -2
  68. data/lib/chef/provider/package/ips.rb +17 -23
  69. data/lib/chef/provider/package/paludis.rb +2 -2
  70. data/lib/chef/provider/package/rpm.rb +2 -2
  71. data/lib/chef/provider/package/rubygems.rb +2 -0
  72. data/lib/chef/provider/package/yum.rb +2 -0
  73. data/lib/chef/provider/package/zypper.rb +1 -1
  74. data/lib/chef/provider/remote_file/cache_control_data.rb +2 -2
  75. data/lib/chef/provider/service/windows.rb +87 -21
  76. data/lib/chef/provider/user/aix.rb +95 -0
  77. data/lib/chef/provider/user/dscl.rb +544 -156
  78. data/lib/chef/provider/user/useradd.rb +1 -0
  79. data/lib/chef/providers.rb +1 -0
  80. data/lib/chef/resource.rb +4 -3
  81. data/lib/chef/resource/freebsd_package.rb +10 -2
  82. data/lib/chef/resource/paludis_package.rb +1 -0
  83. data/lib/chef/resource/scm.rb +10 -0
  84. data/lib/chef/resource/user.rb +27 -0
  85. data/lib/chef/resource/windows_service.rb +53 -0
  86. data/lib/chef/resource_collection.rb +23 -12
  87. data/lib/chef/resource_reporter.rb +10 -10
  88. data/lib/chef/resources.rb +1 -0
  89. data/lib/chef/role.rb +3 -3
  90. data/lib/chef/run_list.rb +6 -3
  91. data/lib/chef/user.rb +1 -1
  92. data/lib/chef/util/diff.rb +1 -2
  93. data/lib/chef/version.rb +1 -1
  94. data/lib/chef/version_constraint.rb +4 -4
  95. data/spec/data/cookbooks/angrybash/metadata.rb +2 -0
  96. data/spec/data/cookbooks/apache2/metadata.rb +2 -0
  97. data/spec/data/cookbooks/borken/metadata.rb +2 -0
  98. data/spec/data/cookbooks/ignorken/metadata.rb +2 -0
  99. data/spec/data/cookbooks/java/metadata.rb +2 -0
  100. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -0
  101. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -0
  102. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -0
  103. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -0
  104. data/spec/data/cookbooks/preseed/metadata.rb +2 -0
  105. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -0
  106. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -0
  107. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -0
  108. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -0
  109. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +10 -0
  110. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -0
  111. data/spec/data/mac_users/10.7-8.plist.xml +559 -0
  112. data/spec/data/mac_users/10.7-8.shadow.xml +11 -0
  113. data/spec/data/mac_users/10.7.plist.xml +559 -0
  114. data/spec/data/mac_users/10.7.shadow.xml +11 -0
  115. data/spec/data/mac_users/10.8.plist.xml +559 -0
  116. data/spec/data/mac_users/10.8.shadow.xml +21 -0
  117. data/spec/data/mac_users/10.9.plist.xml +560 -0
  118. data/spec/data/mac_users/10.9.shadow.xml +21 -0
  119. data/spec/data/object_loader/environments/test.json +2 -0
  120. data/spec/data/object_loader/environments/test_json_class.json +2 -0
  121. data/spec/data/object_loader/nodes/test.json +2 -0
  122. data/spec/data/object_loader/nodes/test_json_class.json +2 -0
  123. data/spec/data/object_loader/roles/test.json +2 -0
  124. data/spec/data/object_loader/roles/test_json_class.json +2 -0
  125. data/spec/functional/resource/bff_spec.rb +1 -1
  126. data/spec/functional/resource/cron_spec.rb +20 -1
  127. data/spec/functional/resource/env_spec.rb +137 -0
  128. data/spec/functional/resource/group_spec.rb +7 -5
  129. data/spec/functional/resource/remote_file_spec.rb +12 -1
  130. data/spec/functional/resource/user/dscl_spec.rb +198 -0
  131. data/spec/functional/resource/{user_spec.rb → user/useradd_spec.rb} +175 -37
  132. data/spec/integration/client/client_spec.rb +6 -4
  133. data/spec/integration/client/ipv6_spec.rb +16 -14
  134. data/spec/integration/knife/chef_fs_data_store_spec.rb +57 -46
  135. data/spec/integration/knife/chef_repo_path_spec.rb +105 -78
  136. data/spec/integration/knife/chef_repository_file_system_spec.rb +100 -84
  137. data/spec/integration/knife/chefignore_spec.rb +76 -46
  138. data/spec/integration/knife/common_options_spec.rb +16 -21
  139. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -3
  140. data/spec/integration/knife/delete_spec.rb +66 -46
  141. data/spec/integration/knife/deps_spec.rb +145 -94
  142. data/spec/integration/knife/diff_spec.rb +176 -110
  143. data/spec/integration/knife/download_spec.rb +229 -133
  144. data/spec/integration/knife/list_spec.rb +62 -54
  145. data/spec/integration/knife/raw_spec.rb +24 -9
  146. data/spec/integration/knife/redirection_spec.rb +2 -2
  147. data/spec/integration/knife/serve_spec.rb +2 -2
  148. data/spec/integration/knife/show_spec.rb +32 -26
  149. data/spec/integration/knife/upload_spec.rb +308 -165
  150. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +10 -8
  151. data/spec/integration/solo/solo_spec.rb +22 -11
  152. data/spec/spec_helper.rb +3 -0
  153. data/spec/support/lib/chef/resource/zen_follower.rb +46 -0
  154. data/spec/support/platform_helpers.rb +12 -0
  155. data/spec/support/shared/functional/file_resource.rb +10 -0
  156. data/spec/support/shared/integration/chef_zero_support.rb +130 -0
  157. data/spec/support/shared/integration/integration_helper.rb +100 -98
  158. data/spec/support/shared/integration/knife_support.rb +0 -1
  159. data/spec/support/shared/unit/provider/file.rb +6 -4
  160. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +10 -1
  161. data/spec/unit/api_client/registration_spec.rb +83 -74
  162. data/spec/unit/application_spec.rb +32 -9
  163. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +179 -0
  164. data/spec/unit/cookbook/metadata_spec.rb +190 -150
  165. data/spec/unit/cookbook/syntax_check_spec.rb +3 -2
  166. data/spec/unit/cookbook_loader_spec.rb +114 -53
  167. data/spec/unit/{cookbook_site_streaming_uploader.rb → cookbook_site_streaming_uploader_spec.rb} +21 -1
  168. data/spec/unit/data_bag_spec.rb +88 -13
  169. data/spec/unit/deprecation_spec.rb +1 -2
  170. data/spec/unit/encrypted_data_bag_item_spec.rb +145 -9
  171. data/spec/unit/environment_spec.rb +1 -1
  172. data/spec/unit/formatters/base_spec.rb +48 -0
  173. data/spec/unit/json_compat_spec.rb +48 -17
  174. data/spec/unit/knife/client_delete_spec.rb +4 -4
  175. data/spec/unit/knife/client_show_spec.rb +15 -5
  176. data/spec/unit/knife/cookbook_site_download_spec.rb +1 -1
  177. data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
  178. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -2
  179. data/spec/unit/knife/data_bag_show_spec.rb +23 -14
  180. data/spec/unit/knife/node_show_spec.rb +32 -15
  181. data/spec/unit/knife/role_show_spec.rb +59 -0
  182. data/spec/unit/platform_spec.rb +10 -0
  183. data/spec/unit/provider/deploy_spec.rb +4 -0
  184. data/spec/unit/provider/env_spec.rb +19 -0
  185. data/spec/unit/provider/git_spec.rb +22 -2
  186. data/spec/unit/provider/group/dscl_spec.rb +38 -1
  187. data/spec/unit/provider/group/pw_spec.rb +2 -2
  188. data/spec/unit/provider/http_request_spec.rb +8 -8
  189. data/spec/unit/provider/log_spec.rb +33 -53
  190. data/spec/unit/provider/mount/mount_spec.rb +12 -3
  191. data/spec/unit/provider/package/ips_spec.rb +96 -63
  192. data/spec/unit/provider/package/paludis_spec.rb +5 -5
  193. data/spec/unit/provider/package/rpm_spec.rb +12 -0
  194. data/spec/unit/provider/package/zypper_spec.rb +28 -16
  195. data/spec/unit/provider/service/windows_spec.rb +77 -17
  196. data/spec/unit/provider/user/dscl_spec.rb +659 -264
  197. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  198. data/spec/unit/recipe_spec.rb +41 -0
  199. data/spec/unit/resource/scm_spec.rb +11 -0
  200. data/spec/unit/resource/user_spec.rb +4 -0
  201. data/spec/unit/resource/windows_service_spec.rb +46 -0
  202. data/spec/unit/resource_collection_spec.rb +33 -0
  203. data/spec/unit/resource_reporter_spec.rb +48 -0
  204. data/spec/unit/resource_spec.rb +9 -2
  205. data/spec/unit/role_spec.rb +6 -0
  206. data/spec/unit/version_constraint_spec.rb +28 -0
  207. metadata +61 -4
@@ -26,7 +26,7 @@ describe Chef::Knife::CookbookSiteDownload do
26
26
  @knife.name_args = ['apache2']
27
27
  @noauth_rest = double('no auth rest')
28
28
  @stderr = StringIO.new
29
- @cookbook_api_url = 'http://cookbooks.opscode.com/api/v1/cookbooks'
29
+ @cookbook_api_url = 'https://supermarket.getchef.com/api/v1/cookbooks'
30
30
  @version = '1.0.2'
31
31
  @version_us = @version.gsub '.', '_'
32
32
  @current_data = { 'deprecated' => false,
@@ -108,11 +108,11 @@ describe Chef::Knife::CookbookSiteShare do
108
108
  File.stub(:open).and_return(true)
109
109
  end
110
110
 
111
- it 'should post the cookbook to "http://cookbooks.opscode.com"' do
112
- response_text = {:uri => 'http://cookbooks.opscode.com/cookbooks/cookbook_name'}.to_json
111
+ it 'should post the cookbook to "https://supermarket.getchef.com"' do
112
+ response_text = {:uri => 'https://supermarket.getchef.com/cookbooks/cookbook_name'}.to_json
113
113
  @upload_response.stub(:body).and_return(response_text)
114
114
  @upload_response.stub(:code).and_return(201)
115
- Chef::CookbookSiteStreamingUploader.should_receive(:post).with(/cookbooks\.opscode\.com/, anything(), anything(), anything())
115
+ Chef::CookbookSiteStreamingUploader.should_receive(:post).with(/supermarket\.getchef\.com/, anything(), anything(), anything())
116
116
  @knife.run
117
117
  end
118
118
 
@@ -21,7 +21,6 @@ require 'spec_helper'
21
21
  require 'chef/data_bag_item'
22
22
  require 'chef/encrypted_data_bag_item'
23
23
  require 'tempfile'
24
- require 'json'
25
24
 
26
25
  Chef::Knife::DataBagFromFile.load_deps
27
26
 
@@ -86,7 +85,6 @@ describe Chef::Knife::DataBagFromFile do
86
85
  end
87
86
 
88
87
  it "loads all from a folder and saves" do
89
- dir = File.dirname(@db_file.path)
90
88
  @knife.name_args = [ 'bag_name', @db_folder ]
91
89
  @knife.loader.should_receive(:load_from).with("data_bags", 'bag_name', @db_file.path).and_return(@plain_data)
92
90
  @knife.loader.should_receive(:load_from).with("data_bags", 'bag_name', @db_file2.path).and_return(@plain_data)
@@ -30,9 +30,9 @@ describe Chef::Knife::DataBagShow do
30
30
  @knife = Chef::Knife::DataBagShow.new
31
31
  @knife.config[:format] = 'json'
32
32
  @rest = double("Chef::REST")
33
- @knife.stub(:rest).and_return(@rest)
33
+ allow(@knife).to receive(:rest).and_return(@rest)
34
34
  @stdout = StringIO.new
35
- @knife.ui.stub(:stdout).and_return(@stdout)
35
+ allow(@knife.ui).to receive(:stdout).and_return(@stdout)
36
36
  end
37
37
 
38
38
 
@@ -40,24 +40,33 @@ describe Chef::Knife::DataBagShow do
40
40
  @knife.instance_variable_set(:@name_args, ['bag_o_data'])
41
41
  data_bag_contents = { "baz"=>"http://localhost:4000/data/bag_o_data/baz",
42
42
  "qux"=>"http://localhost:4000/data/bag_o_data/qux"}
43
- Chef::DataBag.should_receive(:load).and_return(data_bag_contents)
43
+ expect(Chef::DataBag).to receive(:load).and_return(data_bag_contents)
44
44
  expected = %q|[
45
45
  "baz",
46
46
  "qux"
47
47
  ]|
48
48
  @knife.run
49
- @stdout.string.strip.should == expected
49
+ expect(@stdout.string.strip).to eq(expected)
50
50
  end
51
51
 
52
52
  it "prints the contents of the data bag item when given a bag and item name" do
53
53
  @knife.instance_variable_set(:@name_args, ['bag_o_data', 'an_item'])
54
54
  data_item = Chef::DataBagItem.new.tap {|item| item.raw_data = {"id" => "an_item", "zsh" => "victory_through_tabbing"}}
55
55
 
56
- Chef::DataBagItem.should_receive(:load).with('bag_o_data', 'an_item').and_return(data_item)
56
+ expect(Chef::DataBagItem).to receive(:load).with('bag_o_data', 'an_item').and_return(data_item)
57
57
 
58
58
  @knife.run
59
- Chef::JSONCompat.from_json(@stdout.string).should == data_item.raw_data
59
+ expect(Chef::JSONCompat.from_json(@stdout.string)).to eq(data_item.raw_data)
60
+ end
61
+
62
+ it "should pretty print the data bag contents" do
63
+ @knife.instance_variable_set(:@name_args, ['bag_o_data', 'an_item'])
64
+ data_item = Chef::DataBagItem.new.tap {|item| item.raw_data = {"id" => "an_item", "zsh" => "victory_through_tabbing"}}
65
+
66
+ expect(Chef::DataBagItem).to receive(:load).with('bag_o_data', 'an_item').and_return(data_item)
60
67
 
68
+ @knife.run
69
+ expect(@stdout.string).to eql("{\n \"id\": \"an_item\",\n \"zsh\": \"victory_through_tabbing\"\n}\n")
61
70
  end
62
71
 
63
72
  describe "encrypted data bag items" do
@@ -83,29 +92,29 @@ describe Chef::Knife::DataBagShow do
83
92
  end
84
93
 
85
94
  it "prints the decrypted contents of an item when given --secret" do
86
- @knife.stub(:config).and_return({:secret => @secret})
87
- Chef::EncryptedDataBagItem.should_receive(:load).
95
+ allow(@knife).to receive(:config).and_return({:secret => @secret})
96
+ expect(Chef::EncryptedDataBagItem).to receive(:load).
88
97
  with('bag_name', 'item_name', @secret).
89
98
  and_return(Chef::EncryptedDataBagItem.new(@enc_data, @secret))
90
99
  @knife.run
91
- Chef::JSONCompat.from_json(@stdout.string).should == @plain_data
100
+ expect(Chef::JSONCompat.from_json(@stdout.string)).to eq(@plain_data)
92
101
  end
93
102
 
94
103
  it "prints the decrypted contents of an item when given --secret_file" do
95
- @knife.stub(:config).and_return({:secret_file => @secret_file.path})
96
- Chef::EncryptedDataBagItem.should_receive(:load).
104
+ allow(@knife).to receive(:config).and_return({:secret_file => @secret_file.path})
105
+ expect(Chef::EncryptedDataBagItem).to receive(:load).
97
106
  with('bag_name', 'item_name', @secret).
98
107
  and_return(Chef::EncryptedDataBagItem.new(@enc_data, @secret))
99
108
  @knife.run
100
- Chef::JSONCompat.from_json(@stdout.string).should == @plain_data
109
+ expect(Chef::JSONCompat.from_json(@stdout.string)).to eq(@plain_data)
101
110
  end
102
111
  end
103
112
 
104
113
  describe "command line parsing" do
105
114
  it "prints help if given no arguments" do
106
115
  @knife.instance_variable_set(:@name_args, [])
107
- lambda { @knife.run }.should raise_error(SystemExit)
108
- @stdout.string.should match(/^knife data bag show BAG \[ITEM\] \(options\)/)
116
+ expect { @knife.run }.to raise_error(SystemExit)
117
+ expect(@stdout.string).to match(/^knife data bag show BAG \[ITEM\] \(options\)/)
109
118
  end
110
119
  end
111
120
 
@@ -19,30 +19,47 @@
19
19
  require 'spec_helper'
20
20
 
21
21
  describe Chef::Knife::NodeShow do
22
+
23
+ let(:node) do
24
+ node = Chef::Node.new()
25
+ node.name("adam")
26
+ node.run_list = ['role[base]']
27
+ node
28
+ end
29
+
30
+ let(:knife) do
31
+ knife = Chef::Knife::NodeShow.new
32
+ knife.name_args = [ "adam" ]
33
+ knife
34
+ end
35
+
22
36
  before(:each) do
23
37
  Chef::Config[:node_name] = "webmonkey.example.com"
24
- @knife = Chef::Knife::NodeShow.new
25
- @knife.config = {
26
- :attribute => nil,
27
- :run_list => nil,
28
- :environment => nil
29
- }
30
- @knife.name_args = [ "adam" ]
31
- @knife.stub(:output).and_return(true)
32
- @node = Chef::Node.new()
33
- Chef::Node.stub(:load).and_return(@node)
34
38
  end
35
39
 
36
40
  describe "run" do
37
41
  it "should load the node" do
38
- Chef::Node.should_receive(:load).with("adam").and_return(@node)
39
- @knife.run
42
+ expect(Chef::Node).to receive(:load).with("adam").and_return(node)
43
+ allow(knife).to receive(:output).and_return(true)
44
+ knife.run
40
45
  end
41
46
 
42
47
  it "should pretty print the node, formatted for display" do
43
- @knife.should_receive(:format_for_display).with(@node).and_return("poop")
44
- @knife.should_receive(:output).with("poop")
45
- @knife.run
48
+ knife.config[:format] = nil
49
+ stdout = StringIO.new
50
+ allow(knife.ui).to receive(:stdout).and_return(stdout)
51
+ allow(Chef::Node).to receive(:load).and_return(node)
52
+ knife.run
53
+ expect(stdout.string).to eql("Node Name: adam\nEnvironment: _default\nFQDN: \nIP: \nRun List: \nRoles: \nRecipes: \nPlatform: \nTags: \n")
54
+ end
55
+
56
+ it "should pretty print json" do
57
+ knife.config[:format] = 'json'
58
+ stdout = StringIO.new
59
+ allow(knife.ui).to receive(:stdout).and_return(stdout)
60
+ expect(Chef::Node).to receive(:load).with('adam').and_return(node)
61
+ knife.run
62
+ expect(stdout.string).to eql("{\n \"name\": \"adam\",\n \"chef_environment\": \"_default\",\n \"run_list\": [\n\n]\n,\n \"normal\": {\n\n }\n}\n")
46
63
  end
47
64
  end
48
65
  end
@@ -0,0 +1,59 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@getchef.com>)
3
+ # Copyright:: Copyright (c) 2014 Lamont Granquist
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Knife::RoleShow do
22
+ let(:role) { 'base' }
23
+
24
+ let(:knife) do
25
+ knife = Chef::Knife::RoleShow.new
26
+ knife.name_args = [ role ]
27
+ knife
28
+ end
29
+
30
+ let(:role_mock) { double('role_mock') }
31
+
32
+ describe 'run' do
33
+ it 'should list the role' do
34
+ expect(Chef::Role).to receive(:load).with('base').and_return(role_mock)
35
+ expect(knife).to receive(:format_for_display).with(role_mock)
36
+ knife.run
37
+ end
38
+
39
+ it 'should pretty print json' do
40
+ knife.config[:format] = 'json'
41
+ stdout = StringIO.new
42
+ allow(knife.ui).to receive(:stdout).and_return(stdout)
43
+ fake_role_contents = {"foo"=>"bar", "baz"=>"qux"}
44
+ expect(Chef::Role).to receive(:load).with('base').and_return(fake_role_contents)
45
+ knife.run
46
+ expect(stdout.string).to eql("{\n \"foo\": \"bar\",\n \"baz\": \"qux\"\n}\n")
47
+ end
48
+
49
+ context "without a role name" do
50
+ let(:role) { }
51
+
52
+ it 'should print usage and exit when a role name is not provided' do
53
+ expect(knife).to receive(:show_usage)
54
+ expect(knife.ui).to receive(:fatal)
55
+ expect { knife.run }.to raise_error(SystemExit)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -254,6 +254,16 @@ describe Chef::Platform do
254
254
 
255
255
  end
256
256
 
257
+ it "does not overwrite the platform map when using :default platform" do
258
+ Chef::Platform.set(
259
+ :resource => :file,
260
+ :platform => :default,
261
+ :provider => "new school"
262
+ )
263
+ Chef::Platform.platforms[:default][:file].should eql("new school")
264
+ Chef::Platform.platforms[:default][:cat].should eql("nice")
265
+ end
266
+
257
267
  end
258
268
 
259
269
  context "while testing the configured platform data" do
@@ -192,6 +192,7 @@ describe Chef::Provider::Deploy do
192
192
  FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/releases/5")
193
193
  @provider.run_action(:rollback)
194
194
  @provider.release_path.should eql("/my/deploy/dir/releases/3")
195
+ @provider.shared_path.should eql("/my/deploy/dir/shared")
195
196
  end
196
197
 
197
198
  it "sets the release path to the specified release, symlinks, and rm's any newer releases on rollback" do
@@ -203,6 +204,7 @@ describe Chef::Provider::Deploy do
203
204
  FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
204
205
  @provider.run_action(:rollback)
205
206
  @provider.release_path.should eql("/my/deploy/dir/releases/20040700000000")
207
+ @provider.shared_path.should eql("/my/deploy/dir/shared")
206
208
  end
207
209
 
208
210
  it "sets the release path to the penultimate release, symlinks, and rm's the last release on rollback" do
@@ -216,6 +218,7 @@ describe Chef::Provider::Deploy do
216
218
  FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
217
219
  @provider.run_action(:rollback)
218
220
  @provider.release_path.should eql("/my/deploy/dir/releases/20040700000000")
221
+ @provider.shared_path.should eql("/my/deploy/dir/shared")
219
222
  end
220
223
 
221
224
  describe "if there are no releases to fallback to" do
@@ -255,6 +258,7 @@ describe Chef::Provider::Deploy do
255
258
  FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
256
259
  @provider.run_action(:rollback)
257
260
  @provider.release_path.should eql("/my/deploy/dir/releases/20040700000000")
261
+ @provider.shared_path.should eql("/my/deploy/dir/shared")
258
262
  end
259
263
  end
260
264
 
@@ -229,4 +229,23 @@ describe Chef::Provider::Env do
229
229
  @provider.compare_value.should be_true
230
230
  end
231
231
  end
232
+
233
+ describe "modify_env" do
234
+ before(:each) do
235
+ @provider.stub(:create_env).and_return(true)
236
+ @new_resource.delim ";"
237
+
238
+ @current_resource = Chef::Resource::Env.new("FOO")
239
+ @current_resource.value "C:/foo/bin"
240
+ @provider.current_resource = @current_resource
241
+ end
242
+
243
+ it "should not modify the variable passed to the resource" do
244
+ new_value = "C:/bar/bin"
245
+ passed_value = new_value.dup
246
+ @new_resource.value(passed_value)
247
+ @provider.modify_env
248
+ passed_value.should == new_value
249
+ end
250
+ end
232
251
  end
@@ -195,6 +195,26 @@ SHAS
195
195
  @provider.clone
196
196
  end
197
197
  end
198
+ context "with a specific home" do
199
+ let (:override_home) do
200
+ {"HOME" => "/home/masterNinja"}
201
+ end
202
+ let(:overrided_options) do
203
+ {
204
+ :user => deploy_user,
205
+ :environment => { "GIT_SSH" => wrapper, "HOME" => "/home/masterNinja" },
206
+ :log_tag => "git[web2.0 app]"
207
+ }
208
+ end
209
+ before do
210
+ @resource.environment(override_home)
211
+ end
212
+ before { @resource.environment(override_home) }
213
+ it "clones a repo with amended git options with specific home" do
214
+ @provider.should_receive(:shell_out!).with(expected_cmd, overrided_options)
215
+ @provider.clone
216
+ end
217
+ end
198
218
  end
199
219
 
200
220
  it "runs a clone command with escaped destination" do
@@ -224,8 +244,8 @@ SHAS
224
244
  @provider.clone
225
245
  end
226
246
 
227
- it "runs a checkout command with default options" do
228
- expected_cmd = 'git checkout -b deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
247
+ it "runs a checkout command with default options and uses -B to reset branches if necessary" do
248
+ expected_cmd = 'git checkout -B deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
229
249
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
230
250
  :log_tag => "git[web2.0 app]")
231
251
  @provider.checkout
@@ -240,6 +240,7 @@ describe Chef::Provider::Group::Dscl do
240
240
  @provider.load_current_resource
241
241
  @provider.define_resource_requirements
242
242
  end
243
+
243
244
  it "raises an error if the required binary /usr/bin/dscl doesn't exist" do
244
245
  File.should_receive(:exists?).with("/usr/bin/dscl").and_return(false)
245
246
 
@@ -251,7 +252,7 @@ describe Chef::Provider::Group::Dscl do
251
252
  lambda { @provider.process_resource_requirements }.should_not raise_error
252
253
  end
253
254
  end
254
-
255
+
255
256
  describe "when creating the group" do
256
257
  it "creates the group, password field, gid, and sets group membership" do
257
258
  @provider.should_receive(:set_gid).and_return(true)
@@ -294,3 +295,39 @@ describe Chef::Provider::Group::Dscl do
294
295
  end
295
296
  end
296
297
  end
298
+
299
+ describe 'Test DSCL loading' do
300
+ before do
301
+ @node = Chef::Node.new
302
+ @events = Chef::EventDispatch::Dispatcher.new
303
+ @run_context = Chef::RunContext.new(@node, {}, @events)
304
+ @new_resource = Chef::Resource::Group.new("aj")
305
+ @provider = Chef::Provider::Group::Dscl.new(@new_resource, @run_context)
306
+ @output = <<-EOF
307
+ AppleMetaNodeLocation: /Local/Default
308
+ Comment:
309
+ Test Group
310
+ GeneratedUID: AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
311
+ NestedGroups: AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAB
312
+ Password: *
313
+ PrimaryGroupID: 999
314
+ RealName:
315
+ TestGroup
316
+ RecordName: com.apple.aj
317
+ RecordType: dsRecTypeStandard:Groups
318
+ GroupMembership: waka bar
319
+ EOF
320
+ @provider.stub(:safe_dscl).with("read /Groups/aj").and_return(@output)
321
+ @current_resource = @provider.load_current_resource
322
+
323
+ end
324
+
325
+ it 'should parse gid properly' do
326
+ File.stub(:exists?).and_return(true)
327
+ @current_resource.gid.should eq("999")
328
+ end
329
+ it 'should parse members properly' do
330
+ File.stub(:exists?).and_return(true)
331
+ @current_resource.members.should eq(['waka', 'bar'])
332
+ end
333
+ end
@@ -49,7 +49,7 @@ describe Chef::Provider::Group::Pw do
49
49
  describe "when creating a group" do
50
50
  it "should run pw groupadd with the return of set_options and set_members_option" do
51
51
  @new_resource.gid(23)
52
- @provider.should_receive(:run_command).with({ :command => "pw groupadd wheel -g '23'" }).and_return(true)
52
+ @provider.should_receive(:run_command).with({ :command => "pw groupadd wheel -g '23' -M root,aj" }).and_return(true)
53
53
  @provider.create_group
54
54
  end
55
55
  end
@@ -113,7 +113,7 @@ describe Chef::Provider::Group::Pw do
113
113
  @provider.set_members_options
114
114
  end
115
115
 
116
- it "should set the -M option with the members joined by ','" do
116
+ it "should set the -m option with the members joined by ','" do
117
117
  @provider.set_members_options.should eql([ " -m all,your,base" ])
118
118
  end
119
119
  end
@@ -53,13 +53,13 @@ describe Chef::Provider::HttpRequest do
53
53
 
54
54
  it "should inflate a message block at runtime" do
55
55
  @new_resource.message { "return" }
56
- @http.should_receive(:get).with("http://www.opscode.com/?message=return", {})
56
+ @http.should_receive(:get).with("http://www.opscode.com/", {})
57
57
  @provider.run_action(:get)
58
58
  @new_resource.should be_updated
59
59
  end
60
60
 
61
61
  it "should run a GET request" do
62
- @http.should_receive(:get).with("http://www.opscode.com/?message=is cool", {})
62
+ @http.should_receive(:get).with("http://www.opscode.com/", {})
63
63
  @provider.run_action(:get)
64
64
  @new_resource.should be_updated
65
65
  end
@@ -112,25 +112,25 @@ describe Chef::Provider::HttpRequest do
112
112
 
113
113
  it "should inflate a message block at runtime" do
114
114
  @new_resource.message { "return" }
115
- @http.should_receive(:head).with("http://www.opscode.com/?message=return", {}).and_return(nil)
115
+ @http.should_receive(:head).with("http://www.opscode.com/", {}).and_return(nil)
116
116
  @provider.run_action(:head)
117
117
  @new_resource.should be_updated
118
118
  end
119
119
 
120
120
  it "should run a HEAD request" do
121
- @http.should_receive(:head).with("http://www.opscode.com/?message=is cool", {}).and_return(nil)
121
+ @http.should_receive(:head).with("http://www.opscode.com/", {}).and_return(nil)
122
122
  @provider.run_action(:head)
123
123
  @new_resource.should be_updated
124
124
  end
125
125
 
126
126
  it "should update a HEAD request with empty string response body (CHEF-4762)" do
127
- @http.should_receive(:head).with("http://www.opscode.com/?message=is cool", {}).and_return("")
127
+ @http.should_receive(:head).with("http://www.opscode.com/", {}).and_return("")
128
128
  @provider.run_action(:head)
129
129
  @new_resource.should be_updated
130
130
  end
131
131
 
132
132
  it "should update a HEAD request with nil response body (CHEF-4762)" do
133
- @http.should_receive(:head).with("http://www.opscode.com/?message=is cool", {}).and_return(nil)
133
+ @http.should_receive(:head).with("http://www.opscode.com/", {}).and_return(nil)
134
134
  @provider.run_action(:head)
135
135
  @new_resource.should be_updated
136
136
  end
@@ -138,14 +138,14 @@ describe Chef::Provider::HttpRequest do
138
138
  it "should not update a HEAD request if a not modified response (CHEF-4762)" do
139
139
  if_modified_since = File.mtime(__FILE__).httpdate
140
140
  @new_resource.headers "If-Modified-Since" => if_modified_since
141
- @http.should_receive(:head).with("http://www.opscode.com/?message=is cool", {"If-Modified-Since" => if_modified_since}).and_return(false)
141
+ @http.should_receive(:head).with("http://www.opscode.com/", {"If-Modified-Since" => if_modified_since}).and_return(false)
142
142
  @provider.run_action(:head)
143
143
  @new_resource.should_not be_updated
144
144
  end
145
145
 
146
146
  it "should run a HEAD request with If-Modified-Since header" do
147
147
  @new_resource.headers "If-Modified-Since" => File.mtime(__FILE__).httpdate
148
- @http.should_receive(:head).with("http://www.opscode.com/?message=is cool", @new_resource.headers)
148
+ @http.should_receive(:head).with("http://www.opscode.com/", @new_resource.headers)
149
149
  @provider.run_action(:head)
150
150
  end
151
151