chef 10.34.6 → 11.0.0.beta.0

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 (506) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +4 -12
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/shef +6 -5
  7. data/distro/common/html/chef-client.8.html +4 -4
  8. data/distro/common/html/chef-expander.8.html +4 -4
  9. data/distro/common/html/chef-expanderctl.8.html +4 -4
  10. data/distro/common/html/chef-server-webui.8.html +4 -4
  11. data/distro/common/html/chef-server.8.html +4 -4
  12. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  13. data/distro/common/html/chef-solo.8.html +18 -12
  14. data/distro/common/html/chef-solr.8.html +4 -4
  15. data/distro/common/html/knife-bootstrap.1.html +4 -4
  16. data/distro/common/html/knife-client.1.html +4 -4
  17. data/distro/common/html/knife-configure.1.html +4 -4
  18. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  19. data/distro/common/html/knife-cookbook.1.html +10 -7
  20. data/distro/common/html/knife-data-bag.1.html +10 -7
  21. data/distro/common/html/knife-environment.1.html +8 -6
  22. data/distro/common/html/knife-exec.1.html +9 -9
  23. data/distro/common/html/knife-index.1.html +4 -4
  24. data/distro/common/html/knife-node.1.html +4 -4
  25. data/distro/common/html/knife-role.1.html +4 -4
  26. data/distro/common/html/knife-search.1.html +4 -4
  27. data/distro/common/html/knife-ssh.1.html +4 -4
  28. data/distro/common/html/knife-status.1.html +4 -4
  29. data/distro/common/html/knife-tag.1.html +4 -4
  30. data/distro/common/html/knife.1.html +8 -13
  31. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  32. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  33. data/distro/common/man/man1/knife-client.1 +1 -1
  34. data/distro/common/man/man1/knife-configure.1 +1 -1
  35. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  36. data/distro/common/man/man1/knife-cookbook.1 +15 -2
  37. data/distro/common/man/man1/knife-data-bag.1 +15 -2
  38. data/distro/common/man/man1/knife-environment.1 +12 -2
  39. data/distro/common/man/man1/knife-exec.1 +4 -7
  40. data/distro/common/man/man1/knife-index.1 +1 -1
  41. data/distro/common/man/man1/knife-node.1 +1 -1
  42. data/distro/common/man/man1/knife-role.1 +1 -1
  43. data/distro/common/man/man1/knife-search.1 +1 -1
  44. data/distro/common/man/man1/knife-ssh.1 +1 -1
  45. data/distro/common/man/man1/knife-status.1 +1 -1
  46. data/distro/common/man/man1/knife-tag.1 +1 -1
  47. data/distro/common/man/man1/knife.1 +3 -6
  48. data/distro/common/man/man8/chef-client.8 +1 -1
  49. data/distro/common/man/man8/chef-expander.8 +1 -1
  50. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  51. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  52. data/distro/common/man/man8/chef-server.8 +1 -1
  53. data/distro/common/man/man8/chef-solo.8 +36 -4
  54. data/distro/common/man/man8/chef-solr.8 +1 -1
  55. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  56. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  57. data/distro/common/markdown/man1/knife.mkd +4 -9
  58. data/distro/debian/etc/default/chef-client +0 -1
  59. data/distro/debian/etc/init.d/chef-client +2 -2
  60. data/lib/chef.rb +2 -5
  61. data/lib/chef/api_client.rb +20 -130
  62. data/lib/chef/api_client/registration.rb +126 -0
  63. data/lib/chef/application.rb +71 -14
  64. data/lib/chef/application/apply.rb +160 -0
  65. data/lib/chef/application/client.rb +25 -18
  66. data/lib/chef/application/knife.rb +0 -2
  67. data/lib/chef/application/solo.rb +23 -8
  68. data/lib/chef/application/windows_service.rb +5 -2
  69. data/lib/chef/applications.rb +1 -0
  70. data/lib/chef/chef_fs.rb +11 -0
  71. data/lib/chef/chef_fs/command_line.rb +232 -0
  72. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  73. data/lib/chef/chef_fs/file_system.rb +358 -0
  74. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  75. data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
  76. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
  77. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
  78. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
  79. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
  80. data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
  81. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  82. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
  83. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
  84. data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
  85. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
  86. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  87. data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
  88. data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
  89. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  90. data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
  91. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
  92. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
  94. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
  95. data/lib/chef/chef_fs/knife.rb +77 -0
  96. data/lib/chef/chef_fs/path_utils.rb +64 -0
  97. data/lib/chef/client.rb +44 -21
  98. data/lib/chef/config.rb +52 -43
  99. data/lib/chef/cookbook/synchronizer.rb +6 -8
  100. data/lib/chef/cookbook/syntax_check.rb +61 -14
  101. data/lib/chef/cookbook_loader.rb +39 -26
  102. data/lib/chef/cookbook_uploader.rb +17 -19
  103. data/lib/chef/cookbook_version.rb +3 -302
  104. data/lib/chef/daemon.rb +3 -18
  105. data/lib/chef/data_bag.rb +4 -97
  106. data/lib/chef/data_bag_item.rb +2 -65
  107. data/lib/chef/digester.rb +73 -0
  108. data/lib/chef/dsl.rb +6 -0
  109. data/lib/chef/dsl/data_query.rb +66 -0
  110. data/lib/chef/dsl/include_attribute.rb +60 -0
  111. data/lib/chef/dsl/include_recipe.rb +42 -0
  112. data/lib/chef/dsl/platform_introspection.rb +213 -0
  113. data/lib/chef/dsl/recipe.rb +84 -0
  114. data/lib/chef/dsl/registry_helper.rb +59 -0
  115. data/lib/chef/encrypted_data_bag_item.rb +74 -19
  116. data/lib/chef/environment.rb +9 -180
  117. data/lib/chef/exceptions.rb +87 -14
  118. data/lib/chef/formatters/base.rb +4 -1
  119. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
  120. data/lib/chef/json_compat.rb +1 -97
  121. data/lib/chef/knife.rb +90 -41
  122. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  123. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  124. data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
  125. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  126. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  127. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  128. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  129. data/lib/chef/knife/configure.rb +1 -2
  130. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  131. data/lib/chef/knife/cookbook_test.rb +3 -2
  132. data/lib/chef/knife/cookbook_upload.rb +12 -7
  133. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  134. data/lib/chef/knife/core/generic_presenter.rb +26 -13
  135. data/lib/chef/knife/core/node_editor.rb +36 -16
  136. data/lib/chef/knife/core/node_presenter.rb +1 -1
  137. data/lib/chef/knife/core/text_formatter.rb +23 -37
  138. data/lib/chef/knife/core/ui.rb +15 -9
  139. data/lib/chef/knife/delete.rb +39 -0
  140. data/lib/chef/knife/diff.rb +46 -0
  141. data/lib/chef/knife/download.rb +50 -0
  142. data/lib/chef/knife/environment_show.rb +7 -0
  143. data/lib/chef/knife/exec.rb +5 -5
  144. data/lib/chef/knife/help_topics.rb +1 -1
  145. data/lib/chef/knife/index_rebuild.rb +91 -7
  146. data/lib/chef/knife/list.rb +109 -0
  147. data/lib/chef/knife/raw.rb +108 -0
  148. data/lib/chef/knife/search.rb +40 -22
  149. data/lib/chef/knife/show.rb +32 -0
  150. data/lib/chef/knife/ssh.rb +6 -2
  151. data/lib/chef/knife/upload.rb +50 -0
  152. data/lib/chef/mixin/checksum.rb +3 -3
  153. data/lib/chef/mixin/deep_merge.rb +55 -197
  154. data/lib/chef/mixin/language.rb +9 -222
  155. data/lib/chef/mixin/language_include_attribute.rb +6 -38
  156. data/lib/chef/mixin/language_include_recipe.rb +3 -35
  157. data/lib/chef/mixin/params_validate.rb +6 -19
  158. data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
  159. data/lib/chef/mixin/securable.rb +32 -7
  160. data/lib/chef/mixin/template.rb +40 -0
  161. data/lib/chef/mixins.rb +0 -4
  162. data/lib/chef/monkey_patches/net_http.rb +0 -34
  163. data/lib/chef/node.rb +133 -309
  164. data/lib/chef/node/attribute.rb +333 -473
  165. data/lib/chef/node/attribute_collections.rb +199 -0
  166. data/lib/chef/node/immutable_collections.rb +186 -0
  167. data/lib/chef/platform.rb +7 -22
  168. data/lib/chef/provider.rb +2 -49
  169. data/lib/chef/provider/breakpoint.rb +6 -6
  170. data/lib/chef/provider/cookbook_file.rb +5 -33
  171. data/lib/chef/provider/deploy.rb +2 -1
  172. data/lib/chef/provider/directory.rb +14 -17
  173. data/lib/chef/provider/file.rb +19 -52
  174. data/lib/chef/provider/group.rb +31 -51
  175. data/lib/chef/provider/group/dscl.rb +13 -53
  176. data/lib/chef/provider/group/gpasswd.rb +19 -14
  177. data/lib/chef/provider/group/groupadd.rb +1 -41
  178. data/lib/chef/provider/group/groupmod.rb +36 -46
  179. data/lib/chef/provider/group/pw.rb +16 -59
  180. data/lib/chef/provider/group/suse.rb +13 -16
  181. data/lib/chef/provider/group/usermod.rb +18 -40
  182. data/lib/chef/provider/group/windows.rb +6 -13
  183. data/lib/chef/provider/http_request.rb +25 -42
  184. data/lib/chef/provider/link.rb +2 -0
  185. data/lib/chef/provider/lwrp_base.rb +150 -0
  186. data/lib/chef/provider/package/portage.rb +4 -9
  187. data/lib/chef/provider/package/rpm.rb +2 -2
  188. data/lib/chef/provider/package/rubygems.rb +9 -41
  189. data/lib/chef/provider/package/yum.rb +12 -19
  190. data/lib/chef/provider/registry_key.rb +156 -0
  191. data/lib/chef/provider/remote_directory.rb +2 -0
  192. data/lib/chef/provider/remote_file.rb +21 -12
  193. data/lib/chef/provider/ruby_block.rb +5 -2
  194. data/lib/chef/provider/service.rb +15 -0
  195. data/lib/chef/provider/service/init.rb +9 -7
  196. data/lib/chef/provider/service/macosx.rb +15 -73
  197. data/lib/chef/provider/service/simple.rb +1 -1
  198. data/lib/chef/provider/service/solaris.rb +3 -3
  199. data/lib/chef/provider/template.rb +22 -25
  200. data/lib/chef/provider/template_finder.rb +61 -0
  201. data/lib/chef/provider/user.rb +0 -1
  202. data/lib/chef/provider/user/dscl.rb +175 -568
  203. data/lib/chef/provider/user/useradd.rb +30 -47
  204. data/lib/chef/providers.rb +3 -2
  205. data/lib/chef/recipe.rb +14 -8
  206. data/lib/chef/resource.rb +13 -154
  207. data/lib/chef/resource/group.rb +1 -11
  208. data/lib/chef/resource/http_request.rb +2 -1
  209. data/lib/chef/resource/lwrp_base.rb +127 -0
  210. data/lib/chef/resource/mount.rb +10 -11
  211. data/lib/chef/resource/registry_key.rb +86 -0
  212. data/lib/chef/resource/remote_directory.rb +6 -5
  213. data/lib/chef/resource/remote_file.rb +22 -31
  214. data/lib/chef/resource/ruby_block.rb +2 -2
  215. data/lib/chef/resource/service.rb +14 -0
  216. data/lib/chef/resource/user.rb +0 -18
  217. data/lib/chef/resource_collection.rb +25 -21
  218. data/lib/chef/resources.rb +2 -1
  219. data/lib/chef/rest.rb +50 -131
  220. data/lib/chef/rest/auth_credentials.rb +4 -20
  221. data/lib/chef/rest/rest_request.rb +2 -7
  222. data/lib/chef/role.rb +1 -97
  223. data/lib/chef/run_context.rb +108 -130
  224. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  225. data/lib/chef/run_list.rb +0 -2
  226. data/lib/chef/run_list/run_list_expansion.rb +0 -15
  227. data/lib/chef/run_lock.rb +90 -0
  228. data/lib/chef/runner.rb +28 -5
  229. data/lib/chef/sandbox.rb +15 -148
  230. data/lib/chef/scan_access_control.rb +2 -4
  231. data/lib/chef/shef/ext.rb +3 -575
  232. data/lib/chef/{shef.rb → shell.rb} +35 -40
  233. data/lib/chef/shell/ext.rb +593 -0
  234. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  235. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  236. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
  237. data/lib/chef/shell_out.rb +7 -0
  238. data/lib/chef/util/windows/net_group.rb +1 -5
  239. data/lib/chef/version.rb +3 -3
  240. data/lib/chef/win32/api/process.rb +0 -1
  241. data/lib/chef/win32/handle.rb +1 -8
  242. data/lib/chef/win32/registry.rb +371 -0
  243. data/spec/data/big_json.json +1 -2
  244. data/spec/data/big_json_plus_one.json +1 -2
  245. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  246. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  247. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  248. data/spec/data/nodes/default.rb +3 -3
  249. data/spec/data/nodes/test.example.com.rb +3 -3
  250. data/spec/data/nodes/test.rb +3 -3
  251. data/spec/data/partial_one.erb +1 -0
  252. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  253. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  254. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  255. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  256. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  257. data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
  258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  264. data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
  265. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  267. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  268. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  269. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  270. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  271. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  272. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  273. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  274. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  275. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  276. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  277. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  279. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  281. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  282. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  283. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  284. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  285. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  286. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  287. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  288. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  289. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  290. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  291. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  292. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  293. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  294. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  295. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  296. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  297. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  298. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  300. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  301. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  302. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  303. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  304. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  305. data/spec/data/shef-config.rb +7 -0
  306. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  307. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  308. data/spec/functional/knife/exec_spec.rb +2 -2
  309. data/spec/functional/knife/ssh_spec.rb +5 -1
  310. data/spec/functional/resource/cookbook_file_spec.rb +7 -19
  311. data/spec/functional/resource/directory_spec.rb +4 -0
  312. data/spec/functional/resource/file_spec.rb +56 -22
  313. data/spec/functional/resource/link_spec.rb +2 -0
  314. data/spec/functional/resource/registry_spec.rb +576 -0
  315. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  316. data/spec/functional/resource/remote_file_spec.rb +18 -0
  317. data/spec/functional/resource/template_spec.rb +23 -2
  318. data/spec/functional/run_lock_spec.rb +106 -0
  319. data/spec/functional/shell_spec.rb +100 -0
  320. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  321. data/spec/spec_helper.rb +5 -29
  322. data/spec/stress/win32/security_spec.rb +1 -1
  323. data/spec/support/chef_helpers.rb +0 -2
  324. data/spec/support/platform_helpers.rb +8 -15
  325. data/spec/support/shared/functional/directory_resource.rb +84 -22
  326. data/spec/support/shared/functional/file_resource.rb +169 -71
  327. data/spec/support/shared/functional/securable_resource.rb +143 -119
  328. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  329. data/spec/support/shared/unit/file_system_support.rb +110 -0
  330. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  331. data/spec/unit/api_client/registration_spec.rb +175 -0
  332. data/spec/unit/api_client_spec.rb +78 -156
  333. data/spec/unit/application/apply.rb +84 -0
  334. data/spec/unit/application/client_spec.rb +1 -37
  335. data/spec/unit/application/knife_spec.rb +5 -0
  336. data/spec/unit/application_spec.rb +57 -2
  337. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  338. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  339. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  340. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  341. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  342. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  343. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  344. data/spec/unit/client_spec.rb +124 -33
  345. data/spec/unit/config_spec.rb +46 -13
  346. data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
  347. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  348. data/spec/unit/cookbook_loader_spec.rb +153 -91
  349. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  350. data/spec/unit/cookbook_spec.rb +3 -20
  351. data/spec/unit/cookbook_version_spec.rb +23 -122
  352. data/spec/unit/daemon_spec.rb +3 -24
  353. data/spec/unit/data_bag_spec.rb +6 -4
  354. data/spec/unit/digester_spec.rb +50 -0
  355. data/spec/unit/dsl/data_query_spec.rb +66 -0
  356. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  357. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  358. data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
  359. data/spec/unit/environment_spec.rb +0 -130
  360. data/spec/unit/exceptions_spec.rb +2 -3
  361. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  362. data/spec/unit/json_compat_spec.rb +15 -7
  363. data/spec/unit/knife/bootstrap_spec.rb +2 -0
  364. data/spec/unit/knife/configure_spec.rb +20 -14
  365. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  366. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  367. data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
  368. data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
  369. data/spec/unit/knife/core/ui_spec.rb +156 -125
  370. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  371. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  372. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  373. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  374. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  375. data/spec/unit/knife/knife_help.rb +7 -7
  376. data/spec/unit/knife/node_edit_spec.rb +6 -33
  377. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  378. data/spec/unit/knife/ssh_spec.rb +12 -15
  379. data/spec/unit/knife/status_spec.rb +2 -2
  380. data/spec/unit/knife_spec.rb +53 -0
  381. data/spec/unit/lwrp_spec.rb +59 -42
  382. data/spec/unit/mixin/checksum_spec.rb +2 -2
  383. data/spec/unit/mixin/deep_merge_spec.rb +101 -799
  384. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  385. data/spec/unit/mixin/params_validate_spec.rb +4 -37
  386. data/spec/unit/mixin/securable_spec.rb +5 -3
  387. data/spec/unit/mixin/template_spec.rb +119 -0
  388. data/spec/unit/node/attribute_spec.rb +195 -173
  389. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  390. data/spec/unit/node_spec.rb +366 -370
  391. data/spec/unit/platform_spec.rb +9 -10
  392. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  393. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  394. data/spec/unit/provider/directory_spec.rb +96 -64
  395. data/spec/unit/provider/env_spec.rb +2 -2
  396. data/spec/unit/provider/file_spec.rb +48 -39
  397. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  398. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  399. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  400. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  401. data/spec/unit/provider/group/pw_spec.rb +15 -12
  402. data/spec/unit/provider/group/usermod_spec.rb +6 -21
  403. data/spec/unit/provider/group/windows_spec.rb +8 -0
  404. data/spec/unit/provider/group_spec.rb +6 -28
  405. data/spec/unit/provider/http_request_spec.rb +28 -69
  406. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  407. data/spec/unit/provider/ohai_spec.rb +4 -4
  408. data/spec/unit/provider/package/apt_spec.rb +0 -1
  409. data/spec/unit/provider/package/ips_spec.rb +0 -1
  410. data/spec/unit/provider/package/portage_spec.rb +0 -44
  411. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  412. data/spec/unit/provider/package/rubygems_spec.rb +1 -44
  413. data/spec/unit/provider/package/yum_spec.rb +39 -36
  414. data/spec/unit/provider/package_spec.rb +7 -5
  415. data/spec/unit/provider/registry_key_spec.rb +269 -0
  416. data/spec/unit/provider/remote_directory_spec.rb +7 -3
  417. data/spec/unit/provider/remote_file_spec.rb +36 -0
  418. data/spec/unit/provider/route_spec.rb +4 -3
  419. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  420. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  421. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  422. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  423. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  424. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  425. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  426. data/spec/unit/provider/service/macosx_spec.rb +11 -66
  427. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  428. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  429. data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
  430. data/spec/unit/provider/subversion_spec.rb +1 -1
  431. data/spec/unit/provider/template_spec.rb +35 -11
  432. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  433. data/spec/unit/provider/user/useradd_spec.rb +1 -22
  434. data/spec/unit/provider/user_spec.rb +1 -1
  435. data/spec/unit/recipe_spec.rb +10 -8
  436. data/spec/unit/registry_helper_spec.rb +374 -0
  437. data/spec/unit/resource/mount_spec.rb +0 -11
  438. data/spec/unit/resource/registry_key_spec.rb +171 -0
  439. data/spec/unit/resource/remote_file_spec.rb +21 -23
  440. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  441. data/spec/unit/resource/service_spec.rb +11 -0
  442. data/spec/unit/resource_spec.rb +4 -19
  443. data/spec/unit/rest/auth_credentials_spec.rb +2 -19
  444. data/spec/unit/rest_spec.rb +130 -284
  445. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  446. data/spec/unit/run_context_spec.rb +18 -4
  447. data/spec/unit/run_list_spec.rb +0 -209
  448. data/spec/unit/run_lock_spec.rb +37 -0
  449. data/spec/unit/runner_spec.rb +101 -2
  450. data/spec/unit/scan_access_control_spec.rb +4 -4
  451. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  452. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  453. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
  454. data/spec/unit/shell_out_spec.rb +18 -0
  455. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  456. metadata +275 -234
  457. checksums.yaml +0 -15
  458. data/README.rdoc +0 -177
  459. data/distro/common/html/knife-recipe.1.html +0 -92
  460. data/lib/chef/certificate.rb +0 -161
  461. data/lib/chef/checksum.rb +0 -167
  462. data/lib/chef/checksum_cache.rb +0 -190
  463. data/lib/chef/cookbook_version_selector.rb +0 -168
  464. data/lib/chef/couchdb.rb +0 -246
  465. data/lib/chef/index_queue/amqp_client.rb +0 -116
  466. data/lib/chef/index_queue/consumer.rb +0 -76
  467. data/lib/chef/index_queue/indexable.rb +0 -109
  468. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  469. data/lib/chef/monkey_patches/moneta.rb +0 -50
  470. data/lib/chef/monkey_patches/uri.rb +0 -70
  471. data/lib/chef/openid_registration.rb +0 -187
  472. data/lib/chef/provider/user/solaris.rb +0 -90
  473. data/lib/chef/solr_query.rb +0 -187
  474. data/lib/chef/solr_query/lucene.treetop +0 -150
  475. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  476. data/lib/chef/solr_query/query_transform.rb +0 -65
  477. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  478. data/lib/chef/webui_user.rb +0 -231
  479. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  480. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  481. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  482. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  483. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  484. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  485. data/spec/data/mac_users/10.7.plist.xml +0 -559
  486. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  487. data/spec/data/mac_users/10.8.plist.xml +0 -559
  488. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  489. data/spec/data/mac_users/10.9.plist.xml +0 -560
  490. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  491. data/spec/functional/resource/base.rb +0 -40
  492. data/spec/functional/resource/group_spec.rb +0 -343
  493. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  494. data/spec/unit/certificate_spec.rb +0 -76
  495. data/spec/unit/checksum_cache_spec.rb +0 -209
  496. data/spec/unit/checksum_spec.rb +0 -94
  497. data/spec/unit/couchdb_spec.rb +0 -274
  498. data/spec/unit/index_queue_spec.rb +0 -391
  499. data/spec/unit/mixin/language_spec.rb +0 -305
  500. data/spec/unit/openid_registration_spec.rb +0 -153
  501. data/spec/unit/provider/user/solaris_spec.rb +0 -414
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  503. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  504. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  505. data/spec/unit/solr_query_spec.rb +0 -203
  506. data/spec/unit/webui_user_spec.rb +0 -238
@@ -1,153 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
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::OpenIDRegistration, "initialize" do
22
- it "should return a new Chef::OpenIDRegistration object" do
23
- Chef::OpenIDRegistration.new.should be_kind_of(Chef::OpenIDRegistration)
24
- end
25
- end
26
-
27
- describe Chef::OpenIDRegistration, "set_password" do
28
- it "should generate a salt for this object" do
29
- oreg = Chef::OpenIDRegistration.new
30
- oreg.salt.should eql(nil)
31
- oreg.set_password("foolio")
32
- oreg.salt.should_not eql(nil)
33
- end
34
-
35
- it "should encrypt the password with the salt and the plaintext password" do
36
- oreg = Chef::OpenIDRegistration.new
37
- oreg.set_password("foolio")
38
- oreg.password.should_not eql(nil)
39
- end
40
- end
41
-
42
- describe Chef::OpenIDRegistration, "to_json" do
43
- it "should serialize itself as json" do
44
- oreg = Chef::OpenIDRegistration.new
45
- oreg.set_password("monkey")
46
- json = oreg.to_json
47
- %w{json_class chef_type name salt password validated}.each do |verify|
48
- json.should =~ /#{verify}/
49
- end
50
- end
51
- end
52
-
53
- describe Chef::OpenIDRegistration, "from_json" do
54
- it "should serialize itself as json" do
55
- oreg = Chef::OpenIDRegistration.new()
56
- oreg.name = "foobar"
57
- oreg.set_password("monkey")
58
- oreg_json = oreg.to_json
59
- nreg = Chef::JSONCompat.from_json(oreg_json)
60
- nreg.should be_a_kind_of(Chef::OpenIDRegistration)
61
- %w{name salt password validated}.each do |verify|
62
- nreg.send(verify.to_sym).should eql(oreg.send(verify.to_sym))
63
- end
64
- end
65
- end
66
-
67
- describe Chef::OpenIDRegistration, "list" do
68
- before(:each) do
69
- @mock_couch = mock("Chef::CouchDB")
70
- @mock_couch.stub!(:list).and_return({
71
- "rows" => [
72
- {
73
- "value" => "a",
74
- "key" => "avenue"
75
- }
76
- ]
77
- })
78
- Chef::CouchDB.stub!(:new).and_return(@mock_couch)
79
- end
80
-
81
- it "should retrieve a list of nodes from CouchDB" do
82
- Chef::OpenIDRegistration.list.should eql(["avenue"])
83
- end
84
-
85
- it "should return just the ids if inflate is false" do
86
- Chef::OpenIDRegistration.list(false).should eql(["avenue"])
87
- end
88
-
89
- it "should return the full objects if inflate is true" do
90
- Chef::OpenIDRegistration.list(true).should eql(["a"])
91
- end
92
- end
93
-
94
- describe Chef::OpenIDRegistration, "load" do
95
- it "should load a registration from couchdb by name" do
96
- @mock_couch = mock("Chef::CouchDB")
97
- Chef::CouchDB.stub!(:new).and_return(@mock_couch)
98
- @mock_couch.should_receive(:load).with("openid_registration", "coffee").and_return(true)
99
- Chef::OpenIDRegistration.load("coffee")
100
- end
101
- end
102
-
103
- describe Chef::OpenIDRegistration, "destroy" do
104
- it "should delete this registration from couchdb" do
105
- @mock_couch = mock("Chef::CouchDB")
106
- @mock_couch.should_receive(:delete).with("openid_registration", "bob", 1).and_return(true)
107
- Chef::CouchDB.stub!(:new).and_return(@mock_couch)
108
- reg = Chef::OpenIDRegistration.new
109
- reg.name = "bob"
110
- reg.couchdb_rev = 1
111
- reg.destroy
112
- end
113
- end
114
-
115
- describe Chef::OpenIDRegistration, "save" do
116
- before(:each) do
117
- @mock_couch = mock("Chef::CouchDB")
118
- Chef::CouchDB.stub!(:new).and_return(@mock_couch)
119
- @reg = Chef::OpenIDRegistration.new
120
- @reg.name = "bob"
121
- @reg.couchdb_rev = 1
122
- end
123
-
124
- it "should save the registration to couchdb" do
125
- @mock_couch.should_receive(:store).with("openid_registration", "bob", @reg).and_return({ "rev" => 33 })
126
- @reg.save
127
- end
128
-
129
- it "should store the new couchdb_rev" do
130
- @mock_couch.stub!(:store).with("openid_registration", "bob", @reg).and_return({ "rev" => 33 })
131
- @reg.save
132
- @reg.couchdb_rev.should eql(33)
133
- end
134
- end
135
-
136
- describe Chef::OpenIDRegistration, "create_design_document" do
137
- it "should create our design document" do
138
- mock_couch = mock("Chef::CouchDB")
139
- mock_couch.should_receive(:create_design_document).with("registrations", Chef::OpenIDRegistration::DESIGN_DOCUMENT)
140
- Chef::CouchDB.stub!(:new).and_return(mock_couch)
141
- Chef::OpenIDRegistration.create_design_document
142
- end
143
- end
144
-
145
- describe Chef::OpenIDRegistration, "has_key?" do
146
- it "should check with CouchDB for a registration with this key" do
147
- @mock_couch = mock("Chef::CouchDB")
148
- @mock_couch.should_receive(:has_key?).with("openid_registration", "bob").and_return(true)
149
- Chef::CouchDB.stub!(:new).and_return(@mock_couch)
150
- Chef::OpenIDRegistration.has_key?("bob")
151
- end
152
- end
153
-
@@ -1,414 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Daniel DeLeo (<dan@opscode.com>)
4
- # Copyright:: Copyright (c) 2008, 2010 Opscode, Inc.
5
- #
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require 'spec_helper'
22
-
23
- describe Chef::Provider::User::Solaris do
24
- before(:each) do
25
- @node = Chef::Node.new
26
- @events = Chef::EventDispatch::Dispatcher.new
27
- @run_context = Chef::RunContext.new(@node, {}, @events)
28
-
29
- @new_resource = Chef::Resource::User.new("adam", @run_context)
30
- @new_resource.comment "Adam Jacob"
31
- @new_resource.uid 1000
32
- @new_resource.gid 1000
33
- @new_resource.home "/home/adam"
34
- @new_resource.shell "/usr/bin/zsh"
35
- @new_resource.password "abracadabra"
36
- @new_resource.system false
37
- @new_resource.manage_home false
38
- @new_resource.non_unique false
39
- @current_resource = Chef::Resource::User.new("adam", @run_context)
40
- @current_resource.comment "Adam Jacob"
41
- @current_resource.uid 1000
42
- @current_resource.gid 1000
43
- @current_resource.home "/home/adam"
44
- @current_resource.shell "/usr/bin/zsh"
45
- @current_resource.password "abracadabra"
46
- @current_resource.system false
47
- @current_resource.manage_home false
48
- @current_resource.non_unique false
49
- @current_resource.supports({:manage_home => false, :non_unique => false})
50
- @provider = Chef::Provider::User::Solaris.new(@new_resource, @run_context)
51
- @provider.current_resource = @current_resource
52
- end
53
-
54
- describe "when setting option" do
55
- field_list = {
56
- 'comment' => "-c",
57
- 'gid' => "-g",
58
- 'uid' => "-u",
59
- 'shell' => "-s"
60
- }
61
-
62
- field_list.each do |attribute, option|
63
- it "should check for differences in #{attribute} between the new and current resources" do
64
- @current_resource.should_receive(attribute)
65
- @new_resource.should_receive(attribute)
66
- @provider.universal_options
67
- end
68
-
69
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil" do
70
- @new_resource.stub!(attribute).and_return("hola")
71
- @provider.universal_options.should eql(" #{option} 'hola'")
72
- end
73
-
74
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil, without homedir management" do
75
- @new_resource.stub!(:supports).and_return({:manage_home => false,
76
- :non_unique => false})
77
- @new_resource.stub!(attribute).and_return("hola")
78
- @provider.universal_options.should eql(" #{option} 'hola'")
79
- end
80
-
81
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil, without homedir management (using real attributes)" do
82
- @new_resource.stub!(:manage_home).and_return(false)
83
- @new_resource.stub!(:non_unique).and_return(false)
84
- @new_resource.stub!(attribute).and_return("hola")
85
- @provider.universal_options.should eql(" #{option} 'hola'")
86
- end
87
- end
88
-
89
- it "should combine all the possible options" do
90
- match_string = ""
91
- field_list.sort{ |a,b| a[0] <=> b[0] }.each do |attribute, option|
92
- @new_resource.stub!(attribute).and_return("hola")
93
- match_string << " #{option} 'hola'"
94
- end
95
- @provider.universal_options.should eql(match_string)
96
- end
97
-
98
- describe "when we want to set a password" do
99
- before do
100
- @new_resource.password "hocus-pocus"
101
- end
102
-
103
- it "should use its own shadow file writer to set the password" do
104
- @provider.should_receive(:write_shadow_file)
105
- @provider.stub!(:run_command).and_return(true)
106
- @provider.manage_user
107
- end
108
-
109
- it "should write out a modified version of the password file" do
110
- password_file = Tempfile.new("shadow")
111
- password_file.puts "adam:existingpassword:15441::::::"
112
- password_file.close
113
- @provider.password_file = password_file.path
114
- @provider.stub!(:run_command).and_return(true)
115
- # may not be able to write to /etc for tests...
116
- temp_file = Tempfile.new("shadow")
117
- Tempfile.stub!(:new).with("shadow", "/etc").and_return(temp_file)
118
- @new_resource.password "verysecurepassword"
119
- @provider.manage_user
120
- ::File.open(password_file.path, "r").read.should =~ /adam:verysecurepassword:/
121
- password_file.unlink
122
- end
123
- end
124
-
125
- describe "when we want to create a system user" do
126
- before do
127
- @new_resource.manage_home(true)
128
- @new_resource.non_unique(false)
129
- end
130
-
131
- it "should set useradd -r" do
132
- @new_resource.system(true)
133
- @provider.useradd_options.should == " -r"
134
- end
135
- end
136
-
137
- describe "when the resource has a different home directory and supports home directory management" do
138
- before do
139
- @new_resource.stub!(:home).and_return("/wowaweea")
140
- @new_resource.stub!(:supports).and_return({:manage_home => true,
141
- :non_unique => false})
142
- end
143
-
144
- it "should set -m -d /homedir" do
145
- @provider.universal_options.should == " -m -d '/wowaweea'"
146
- @provider.useradd_options.should == ""
147
- end
148
- end
149
-
150
- describe "when the resource has a different home directory and supports home directory management (using real attributes)" do
151
- before do
152
- @new_resource.stub!(:home).and_return("/wowaweea")
153
- @new_resource.stub!(:manage_home).and_return(true)
154
- @new_resource.stub!(:non_unique).and_return(false)
155
- end
156
-
157
- it "should set -m -d /homedir" do
158
- @provider.universal_options.should eql(" -m -d '/wowaweea'")
159
- @provider.useradd_options.should == ""
160
- end
161
- end
162
-
163
- describe "when the resource supports non_unique ids" do
164
- before do
165
- @new_resource.stub!(:supports).and_return({:manage_home => false,
166
- :non_unique => true})
167
- end
168
-
169
- it "should set -m -o" do
170
- @provider.universal_options.should eql(" -o")
171
- end
172
- end
173
-
174
- describe "when the resource supports non_unique ids (using real attributes)" do
175
- before do
176
- @new_resource.stub!(:manage_home).and_return(false)
177
- @new_resource.stub!(:non_unique).and_return(true)
178
- end
179
-
180
- it "should set -m -o" do
181
- @provider.universal_options.should eql(" -o")
182
- end
183
- end
184
- end
185
-
186
- describe "when creating a user" do
187
- before(:each) do
188
- @current_resource = Chef::Resource::User.new(@new_resource.name, @run_context)
189
- @current_resource.username(@new_resource.username)
190
- @provider.current_resource = @current_resource
191
- @provider.new_resource.manage_home true
192
- @provider.new_resource.home "/Users/mud"
193
- @provider.new_resource.gid '23'
194
- end
195
-
196
- it "runs useradd with the computed command options" do
197
- command = "useradd -c 'Adam Jacob' -g '23' -s '/usr/bin/zsh' -u '1000' -m -d '/Users/mud' adam"
198
- @provider.should_receive(:run_command).with({ :command => command }).and_return(true)
199
- @provider.should_receive(:manage_password).and_return(nil)
200
- @provider.create_user
201
- end
202
-
203
- describe "and home is not specified for new system user resource" do
204
-
205
- before do
206
- @provider.new_resource.system true
207
- # there is no public API to set attribute's value to nil
208
- @provider.new_resource.instance_variable_set("@home", nil)
209
- end
210
-
211
- it "should not include -m or -d in the command options" do
212
- command = "useradd -c 'Adam Jacob' -g '23' -s '/usr/bin/zsh' -u '1000' -r adam"
213
- @provider.should_receive(:run_command).with({ :command => command }).and_return(true)
214
- @provider.should_receive(:manage_password).and_return(nil)
215
- @provider.create_user
216
- end
217
-
218
- end
219
-
220
- end
221
-
222
- describe "when managing a user" do
223
- before(:each) do
224
- @provider.new_resource.manage_home true
225
- @provider.new_resource.home "/Users/mud"
226
- @provider.new_resource.gid '23'
227
- end
228
-
229
- # CHEF-3423, -m must come before the username
230
- it "runs usermod with the computed command options" do
231
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' -m -d '/Users/mud' adam" }).and_return(true)
232
- @provider.manage_user
233
- end
234
-
235
- it "does not set the -r option to usermod" do
236
- @new_resource.system(true)
237
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' -m -d '/Users/mud' adam" }).and_return(true)
238
- @provider.manage_user
239
- end
240
-
241
- it "CHEF-3429: does not set -m if we aren't changing the home directory" do
242
- @provider.should_receive(:updating_home?).and_return(false)
243
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' adam" }).and_return(true)
244
- @provider.manage_user
245
- end
246
- end
247
-
248
- describe "when removing a user" do
249
-
250
- it "should run userdel with the new resources user name" do
251
- @provider.should_receive(:run_command).with({ :command => "userdel #{@new_resource.username}" }).and_return(true)
252
- @provider.remove_user
253
- end
254
-
255
- it "should run userdel with the new resources user name and -r if manage_home is true" do
256
- @new_resource.stub!(:supports).and_return({ :manage_home => true,
257
- :non_unique => false})
258
- @provider.should_receive(:run_command).with({ :command => "userdel -r #{@new_resource.username}"}).and_return(true)
259
- @provider.remove_user
260
- end
261
-
262
- it "should run userdel with the new resources user name if non_unique is true" do
263
- @new_resource.stub!(:supports).and_return({ :manage_home => false,
264
- :non_unique => true})
265
- @provider.should_receive(:run_command).with({ :command => "userdel #{@new_resource.username}"}).and_return(true)
266
- @provider.remove_user
267
- end
268
- end
269
-
270
- describe "when checking the lock" do
271
- before(:each) do
272
- # @node = Chef::Node.new
273
- # @new_resource = mock("Chef::Resource::User",
274
- # :nil_object => true,
275
- # :username => "adam"
276
- # )
277
- @status = mock("Status", :exitstatus => 0)
278
- #@provider = Chef::Provider::User::Useradd.new(@node, @new_resource)
279
- @provider.stub!(:popen4).and_return(@status)
280
- @stdin = mock("STDIN", :nil_object => true)
281
- @stdout = mock("STDOUT", :nil_object => true)
282
- @stdout.stub!(:gets).and_return("root P 09/02/2008 0 99999 7 -1")
283
- @stderr = mock("STDERR", :nil_object => true)
284
- @pid = mock("PID", :nil_object => true)
285
- end
286
-
287
- it "should call passwd -S to check the lock status" do
288
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}").and_return(@status)
289
- @provider.check_lock
290
- end
291
-
292
- it "should get the first line of passwd -S STDOUT" do
293
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
294
- @stdout.should_receive(:gets).and_return("root P 09/02/2008 0 99999 7 -1")
295
- @provider.check_lock
296
- end
297
-
298
- it "should return false if status begins with P" do
299
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
300
- @provider.check_lock.should eql(false)
301
- end
302
-
303
- it "should return false if status begins with N" do
304
- @stdout.stub!(:gets).and_return("root N")
305
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
306
- @provider.check_lock.should eql(false)
307
- end
308
-
309
- it "should return true if status begins with L" do
310
- @stdout.stub!(:gets).and_return("root L")
311
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
312
- @provider.check_lock.should eql(true)
313
- end
314
-
315
- it "should raise a Chef::Exceptions::User if passwd -S fails on anything other than redhat/centos" do
316
- @node.automatic_attrs[:platform] = 'ubuntu'
317
- @status.should_receive(:exitstatus).and_return(1)
318
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
319
- end
320
-
321
- ['redhat', 'centos'].each do |os|
322
- it "should not raise a Chef::Exceptions::User if passwd -S exits with 1 on #{os} and the passwd package is version 0.73-1" do
323
- @node.automatic_attrs[:platform] = os
324
- @stdout.stub!(:gets).and_return("passwd-0.73-1\n")
325
- @status.should_receive(:exitstatus).twice.and_return(1)
326
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}")
327
- @provider.should_receive(:popen4).with("rpm -q passwd").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
328
- lambda { @provider.check_lock }.should_not raise_error(Chef::Exceptions::User)
329
- end
330
-
331
- it "should raise a Chef::Exceptions::User if passwd -S exits with 1 on #{os} and the passwd package is not version 0.73-1" do
332
- @node.automatic_attrs[:platform] = os
333
- @stdout.stub!(:gets).and_return("passwd-0.73-2\n")
334
- @status.should_receive(:exitstatus).twice.and_return(1)
335
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}")
336
- @provider.should_receive(:popen4).with("rpm -q passwd").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
337
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
338
- end
339
-
340
- it "should raise a Chef::Exceptions::User if passwd -S exits with something other than 0 or 1 on #{os}" do
341
- @node.automatic_attrs[:platform] = os
342
- @status.should_receive(:exitstatus).twice.and_return(2)
343
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
344
- end
345
- end
346
- end
347
-
348
- describe "when locking the user" do
349
- it "should run usermod -L with the new resources username" do
350
- @provider.should_receive(:run_command).with({ :command => "usermod -L #{@new_resource.username}"})
351
- @provider.lock_user
352
- end
353
- end
354
-
355
- describe "when unlocking the user" do
356
- it "should run usermod -L with the new resources username" do
357
- @provider.should_receive(:run_command).with({ :command => "usermod -U #{@new_resource.username}"})
358
- @provider.unlock_user
359
- end
360
- end
361
-
362
- describe "when checking if home needs updating" do
363
- [
364
- {
365
- "action" => "should return false if home matches",
366
- "current_resource_home" => [ "/home/laurent" ],
367
- "new_resource_home" => [ "/home/laurent" ],
368
- "expected_result" => false
369
- },
370
- {
371
- "action" => "should return true if home doesn't match",
372
- "current_resource_home" => [ "/home/laurent" ],
373
- "new_resource_home" => [ "/something/else" ],
374
- "expected_result" => true
375
- },
376
- {
377
- "action" => "should return false if home only differs by trailing slash",
378
- "current_resource_home" => [ "/home/laurent" ],
379
- "new_resource_home" => [ "/home/laurent/", "/home/laurent" ],
380
- "expected_result" => false
381
- },
382
- {
383
- "action" => "should return false if home is an equivalent path",
384
- "current_resource_home" => [ "/home/laurent" ],
385
- "new_resource_home" => [ "/home/./laurent", "/home/laurent" ],
386
- "expected_result" => false
387
- },
388
- ].each do |home_check|
389
- it home_check["action"] do
390
- @provider.current_resource.home home_check["current_resource_home"].first
391
- @current_home_mock = mock("Pathname")
392
- @provider.new_resource.home home_check["new_resource_home"].first
393
- @new_home_mock = mock("Pathname")
394
-
395
- Pathname.should_receive(:new).with(@current_resource.home).and_return(@current_home_mock)
396
- @current_home_mock.should_receive(:cleanpath).and_return(home_check["current_resource_home"].last)
397
- Pathname.should_receive(:new).with(@new_resource.home).and_return(@new_home_mock)
398
- @new_home_mock.should_receive(:cleanpath).and_return(home_check["new_resource_home"].last)
399
-
400
- @provider.updating_home?.should == home_check["expected_result"]
401
- end
402
- end
403
- it "should return true if the current home does not exist but a home is specified by the new resource" do
404
- @new_resource = Chef::Resource::User.new("adam", @run_context)
405
- @current_resource = Chef::Resource::User.new("adam", @run_context)
406
- @provider = Chef::Provider::User::Solaris.new(@new_resource, @run_context)
407
- @provider.current_resource = @current_resource
408
- @current_resource.home nil
409
- @new_resource.home "/home/kitten"
410
-
411
- @provider.updating_home?.should == true
412
- end
413
- end
414
- end