chef 10.34.6-x86-mingw32 → 11.6.2-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 (777) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTING.md +155 -0
  3. data/README.md +89 -0
  4. data/Rakefile +18 -1
  5. data/bin/chef-apply +25 -0
  6. data/bin/chef-service-manager +37 -0
  7. data/bin/chef-shell +34 -0
  8. data/bin/shef +6 -5
  9. data/distro/common/html/chef-client.8.html +4 -4
  10. data/distro/common/html/chef-expander.8.html +4 -4
  11. data/distro/common/html/chef-expanderctl.8.html +4 -4
  12. data/distro/common/html/chef-server-webui.8.html +4 -4
  13. data/distro/common/html/chef-server.8.html +4 -4
  14. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  15. data/distro/common/html/chef-solo.8.html +4 -4
  16. data/distro/common/html/chef-solr.8.html +5 -5
  17. data/distro/common/html/knife-bootstrap.1.html +4 -4
  18. data/distro/common/html/knife-client.1.html +4 -4
  19. data/distro/common/html/knife-configure.1.html +4 -4
  20. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  21. data/distro/common/html/knife-cookbook.1.html +4 -4
  22. data/distro/common/html/knife-data-bag.1.html +4 -4
  23. data/distro/common/html/knife-environment.1.html +4 -4
  24. data/distro/common/html/knife-exec.1.html +9 -9
  25. data/distro/common/html/knife-index.1.html +4 -4
  26. data/distro/common/html/knife-node.1.html +4 -4
  27. data/distro/common/html/knife-role.1.html +4 -4
  28. data/distro/common/html/knife-search.1.html +4 -4
  29. data/distro/common/html/knife-ssh.1.html +4 -4
  30. data/distro/common/html/knife-status.1.html +4 -4
  31. data/distro/common/html/knife-tag.1.html +4 -4
  32. data/distro/common/html/knife.1.html +8 -13
  33. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  34. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  35. data/distro/common/man/man1/knife-client.1 +0 -99
  36. data/distro/common/man/man1/knife-configure.1 +1 -1
  37. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  38. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  39. data/distro/common/man/man1/knife-data-bag.1 +1 -1
  40. data/distro/common/man/man1/knife-environment.1 +0 -168
  41. data/distro/common/man/man1/knife-exec.1 +4 -7
  42. data/distro/common/man/man1/knife-index.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +1 -1
  44. data/distro/common/man/man1/knife-role.1 +1 -1
  45. data/distro/common/man/man1/knife-search.1 +1 -1
  46. data/distro/common/man/man1/knife-ssh.1 +1 -1
  47. data/distro/common/man/man1/knife-status.1 +1 -1
  48. data/distro/common/man/man1/knife-tag.1 +1 -1
  49. data/distro/common/man/man1/knife.1 +3 -6
  50. data/distro/common/man/man8/chef-client.8 +1 -1
  51. data/distro/common/man/man8/chef-expander.8 +1 -1
  52. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  53. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  54. data/distro/common/man/man8/chef-server.8 +1 -1
  55. data/distro/common/man/man8/chef-solo.8 +1 -1
  56. data/distro/common/man/man8/chef-solr.8 +1 -1
  57. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  58. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  59. data/distro/common/markdown/man1/knife.mkd +4 -9
  60. data/distro/debian/etc/default/chef-client +0 -1
  61. data/distro/debian/etc/init.d/chef-client +6 -4
  62. data/distro/windows/service_manager.rb +2 -146
  63. data/lib/chef.rb +3 -6
  64. data/lib/chef/api_client.rb +20 -130
  65. data/lib/chef/api_client/registration.rb +126 -0
  66. data/lib/chef/application.rb +68 -18
  67. data/lib/chef/application/apply.rb +162 -0
  68. data/lib/chef/application/client.rb +37 -22
  69. data/lib/chef/application/knife.rb +2 -4
  70. data/lib/chef/application/solo.rb +27 -13
  71. data/lib/chef/application/windows_service.rb +114 -54
  72. data/lib/chef/application/windows_service_manager.rb +179 -0
  73. data/lib/chef/applications.rb +1 -0
  74. data/lib/chef/chef_fs.rb +9 -0
  75. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  76. data/lib/chef/chef_fs/command_line.rb +284 -0
  77. data/lib/chef/chef_fs/config.rb +205 -0
  78. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  79. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  80. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  81. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  82. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  83. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  84. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  85. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  86. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  87. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  88. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  89. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  90. data/lib/chef/chef_fs/file_system.rb +426 -0
  91. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  92. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  93. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  94. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  95. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  96. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  97. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  98. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  99. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  100. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  101. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
  102. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
  103. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
  104. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
  105. data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
  106. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  107. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  108. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  109. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
  110. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  111. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
  112. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  113. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  114. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  115. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  116. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  117. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  118. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  119. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  120. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  121. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  122. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  123. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  124. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  125. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  126. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  127. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
  128. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
  129. data/lib/chef/chef_fs/knife.rb +116 -0
  130. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  131. data/lib/chef/chef_fs/path_utils.rb +90 -0
  132. data/lib/chef/chef_fs/raw_request.rb +79 -0
  133. data/lib/chef/client.rb +111 -34
  134. data/lib/chef/config.rb +111 -102
  135. data/lib/chef/cookbook/chefignore.rb +2 -1
  136. data/lib/chef/cookbook/metadata.rb +0 -2
  137. data/lib/chef/cookbook/syntax_check.rb +76 -14
  138. data/lib/chef/cookbook_loader.rb +39 -26
  139. data/lib/chef/cookbook_uploader.rb +16 -9
  140. data/lib/chef/cookbook_version.rb +2 -410
  141. data/lib/chef/daemon.rb +24 -19
  142. data/lib/chef/data_bag.rb +20 -104
  143. data/lib/chef/data_bag_item.rb +2 -65
  144. data/lib/chef/deprecation/mixin/template.rb +49 -0
  145. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  146. data/lib/chef/deprecation/provider/file.rb +197 -0
  147. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  148. data/lib/chef/deprecation/provider/template.rb +63 -0
  149. data/lib/chef/deprecation/warnings.rb +38 -0
  150. data/lib/chef/digester.rb +73 -0
  151. data/lib/chef/dsl.rb +6 -0
  152. data/lib/chef/dsl/data_query.rb +71 -0
  153. data/lib/chef/dsl/include_attribute.rb +63 -0
  154. data/lib/chef/dsl/include_recipe.rb +45 -0
  155. data/lib/chef/dsl/platform_introspection.rb +218 -0
  156. data/lib/chef/dsl/recipe.rb +87 -0
  157. data/lib/chef/dsl/registry_helper.rb +59 -0
  158. data/lib/chef/encrypted_data_bag_item.rb +171 -24
  159. data/lib/chef/environment.rb +39 -179
  160. data/lib/chef/event_dispatch/base.rb +3 -0
  161. data/lib/chef/exceptions.rb +107 -8
  162. data/lib/chef/file_access_control/unix.rb +64 -7
  163. data/lib/chef/file_access_control/windows.rb +22 -11
  164. data/lib/chef/file_content_management/content_base.rb +56 -0
  165. data/lib/chef/file_content_management/deploy.rb +38 -0
  166. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  167. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  168. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  169. data/lib/chef/file_content_management/tempfile.rb +61 -0
  170. data/lib/chef/formatters/base.rb +4 -1
  171. data/lib/chef/formatters/doc.rb +1 -1
  172. data/lib/chef/formatters/error_descriptor.rb +5 -4
  173. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  174. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
  175. data/lib/chef/json_compat.rb +15 -14
  176. data/lib/chef/knife.rb +99 -41
  177. data/lib/chef/knife/bootstrap.rb +46 -2
  178. data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
  179. data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
  180. data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
  181. data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
  182. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
  183. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
  184. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
  185. data/lib/chef/knife/client_show.rb +2 -5
  186. data/lib/chef/knife/configure.rb +19 -17
  187. data/lib/chef/knife/cookbook_create.rb +6 -5
  188. data/lib/chef/knife/cookbook_download.rb +13 -5
  189. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  190. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  191. data/lib/chef/knife/cookbook_test.rb +4 -2
  192. data/lib/chef/knife/cookbook_upload.rb +4 -4
  193. data/lib/chef/knife/core/bootstrap_context.rb +11 -5
  194. data/lib/chef/knife/core/generic_presenter.rb +42 -13
  195. data/lib/chef/knife/core/node_editor.rb +36 -16
  196. data/lib/chef/knife/core/node_presenter.rb +1 -1
  197. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  198. data/lib/chef/knife/core/text_formatter.rb +23 -37
  199. data/lib/chef/knife/core/ui.rb +34 -13
  200. data/lib/chef/knife/delete.rb +106 -0
  201. data/lib/chef/knife/deps.rb +139 -0
  202. data/lib/chef/knife/diff.rb +63 -0
  203. data/lib/chef/knife/download.rb +63 -0
  204. data/lib/chef/knife/edit.rb +76 -0
  205. data/lib/chef/knife/environment_show.rb +2 -0
  206. data/lib/chef/knife/exec.rb +5 -5
  207. data/lib/chef/knife/help_topics.rb +1 -1
  208. data/lib/chef/knife/index_rebuild.rb +91 -7
  209. data/lib/chef/knife/list.rb +153 -0
  210. data/lib/chef/knife/node_run_list_set.rb +66 -0
  211. data/lib/chef/knife/node_show.rb +1 -7
  212. data/lib/chef/knife/raw.rb +64 -0
  213. data/lib/chef/knife/role_show.rb +2 -4
  214. data/lib/chef/knife/search.rb +45 -28
  215. data/lib/chef/knife/show.rb +55 -0
  216. data/lib/chef/knife/ssh.rb +14 -2
  217. data/lib/chef/knife/upload.rb +69 -0
  218. data/lib/chef/knife/user_create.rb +93 -0
  219. data/lib/chef/knife/user_delete.rb +46 -0
  220. data/lib/chef/knife/user_edit.rb +53 -0
  221. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
  222. data/lib/chef/knife/user_reregister.rb +59 -0
  223. data/lib/chef/knife/user_show.rb +49 -0
  224. data/lib/chef/knife/xargs.rb +265 -0
  225. data/lib/chef/log.rb +2 -2
  226. data/lib/chef/mixin/checksum.rb +3 -3
  227. data/lib/chef/mixin/deep_merge.rb +78 -194
  228. data/lib/chef/mixin/deprecation.rb +35 -0
  229. data/lib/chef/mixin/file_class.rb +0 -9
  230. data/lib/chef/mixin/language.rb +22 -223
  231. data/lib/chef/mixin/language_include_attribute.rb +10 -36
  232. data/lib/chef/mixin/language_include_recipe.rb +7 -33
  233. data/lib/chef/mixin/params_validate.rb +0 -3
  234. data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
  235. data/lib/chef/mixin/securable.rb +32 -7
  236. data/lib/chef/mixin/template.rb +156 -26
  237. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  238. data/lib/chef/mixins.rb +1 -5
  239. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
  240. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  241. data/lib/chef/monkey_patches/net_http.rb +0 -34
  242. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  243. data/lib/chef/monologger.rb +93 -0
  244. data/lib/chef/node.rb +139 -308
  245. data/lib/chef/node/attribute.rb +367 -473
  246. data/lib/chef/node/attribute_collections.rb +206 -0
  247. data/lib/chef/node/immutable_collections.rb +186 -0
  248. data/lib/chef/platform.rb +4 -496
  249. data/lib/chef/platform/provider_mapping.rb +529 -0
  250. data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
  251. data/lib/chef/provider.rb +14 -58
  252. data/lib/chef/provider/batch.rb +35 -0
  253. data/lib/chef/provider/breakpoint.rb +6 -6
  254. data/lib/chef/provider/cookbook_file.rb +11 -80
  255. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  256. data/lib/chef/provider/deploy.rb +26 -21
  257. data/lib/chef/provider/deploy/revision.rb +27 -0
  258. data/lib/chef/provider/directory.rb +12 -18
  259. data/lib/chef/provider/execute.rb +22 -5
  260. data/lib/chef/provider/file.rb +297 -248
  261. data/lib/chef/provider/file/content.rb +39 -0
  262. data/lib/chef/provider/git.rb +76 -43
  263. data/lib/chef/provider/group.rb +31 -51
  264. data/lib/chef/provider/group/dscl.rb +13 -53
  265. data/lib/chef/provider/group/gpasswd.rb +19 -14
  266. data/lib/chef/provider/group/groupadd.rb +1 -41
  267. data/lib/chef/provider/group/groupmod.rb +36 -46
  268. data/lib/chef/provider/group/pw.rb +16 -59
  269. data/lib/chef/provider/group/suse.rb +13 -16
  270. data/lib/chef/provider/group/usermod.rb +18 -40
  271. data/lib/chef/provider/group/windows.rb +6 -13
  272. data/lib/chef/provider/http_request.rb +25 -42
  273. data/lib/chef/provider/ifconfig.rb +25 -35
  274. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  275. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  276. data/lib/chef/provider/link.rb +12 -3
  277. data/lib/chef/provider/lwrp_base.rb +150 -0
  278. data/lib/chef/provider/mount.rb +1 -1
  279. data/lib/chef/provider/mount/mount.rb +8 -3
  280. data/lib/chef/provider/mount/windows.rb +4 -1
  281. data/lib/chef/provider/package/rpm.rb +2 -2
  282. data/lib/chef/provider/package/rubygems.rb +4 -1
  283. data/lib/chef/provider/package/smartos.rb +47 -36
  284. data/lib/chef/provider/package/zypper.rb +45 -55
  285. data/lib/chef/provider/powershell_script.rb +77 -0
  286. data/lib/chef/provider/registry_key.rb +156 -0
  287. data/lib/chef/provider/remote_directory.rb +6 -5
  288. data/lib/chef/provider/remote_file.rb +13 -100
  289. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  290. data/lib/chef/provider/remote_file/content.rb +75 -0
  291. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  292. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  293. data/lib/chef/provider/remote_file/http.rb +124 -0
  294. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  295. data/lib/chef/provider/route.rb +6 -2
  296. data/lib/chef/provider/ruby_block.rb +5 -2
  297. data/lib/chef/provider/script.rb +14 -2
  298. data/lib/chef/provider/service.rb +15 -0
  299. data/lib/chef/provider/service/init.rb +9 -7
  300. data/lib/chef/provider/service/macosx.rb +29 -81
  301. data/lib/chef/provider/service/simple.rb +1 -1
  302. data/lib/chef/provider/service/solaris.rb +6 -5
  303. data/lib/chef/provider/template.rb +16 -81
  304. data/lib/chef/provider/template/content.rb +61 -0
  305. data/lib/chef/provider/template_finder.rb +61 -0
  306. data/lib/chef/provider/user.rb +0 -1
  307. data/lib/chef/provider/user/dscl.rb +175 -568
  308. data/lib/chef/provider/user/useradd.rb +50 -54
  309. data/lib/chef/provider/windows_script.rb +73 -0
  310. data/lib/chef/providers.rb +18 -1
  311. data/lib/chef/recipe.rb +14 -8
  312. data/lib/chef/resource.rb +52 -146
  313. data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
  314. data/lib/chef/resource/conditional.rb +4 -0
  315. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  316. data/lib/chef/resource/file.rb +31 -3
  317. data/lib/chef/resource/group.rb +1 -11
  318. data/lib/chef/resource/http_request.rb +2 -1
  319. data/lib/chef/resource/link.rb +17 -0
  320. data/lib/chef/resource/lwrp_base.rb +132 -0
  321. data/lib/chef/resource/mount.rb +39 -13
  322. data/lib/chef/resource/powershell_script.rb +31 -0
  323. data/lib/chef/resource/registry_key.rb +86 -0
  324. data/lib/chef/resource/remote_directory.rb +6 -5
  325. data/lib/chef/resource/remote_file.rb +62 -25
  326. data/lib/chef/resource/route.rb +1 -1
  327. data/lib/chef/resource/ruby_block.rb +2 -2
  328. data/lib/chef/resource/service.rb +14 -0
  329. data/lib/chef/resource/template.rb +145 -0
  330. data/lib/chef/resource/user.rb +0 -18
  331. data/lib/chef/resource/windows_script.rb +62 -0
  332. data/lib/chef/resource_collection.rb +69 -31
  333. data/lib/chef/resource_reporter.rb +81 -52
  334. data/lib/chef/resources.rb +4 -1
  335. data/lib/chef/rest.rb +55 -127
  336. data/lib/chef/rest/auth_credentials.rb +4 -20
  337. data/lib/chef/rest/rest_request.rb +7 -8
  338. data/lib/chef/role.rb +1 -97
  339. data/lib/chef/run_context.rb +108 -130
  340. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  341. data/lib/chef/run_list.rb +0 -2
  342. data/lib/chef/run_list/run_list_expansion.rb +1 -16
  343. data/lib/chef/run_lock.rb +96 -0
  344. data/lib/chef/runner.rb +28 -6
  345. data/lib/chef/sandbox.rb +15 -148
  346. data/lib/chef/scan_access_control.rb +8 -5
  347. data/lib/chef/search/query.rb +2 -2
  348. data/lib/chef/shef/ext.rb +3 -575
  349. data/lib/chef/{shef.rb → shell.rb} +35 -40
  350. data/lib/chef/shell/ext.rb +593 -0
  351. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  352. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  353. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
  354. data/lib/chef/shell_out.rb +7 -0
  355. data/lib/chef/user.rb +182 -0
  356. data/lib/chef/util/backup.rb +84 -0
  357. data/lib/chef/util/diff.rb +145 -0
  358. data/lib/chef/util/file_edit.rb +1 -1
  359. data/lib/chef/util/selinux.rb +100 -0
  360. data/lib/chef/util/windows/net_group.rb +1 -5
  361. data/lib/chef/util/windows/net_user.rb +14 -1
  362. data/lib/chef/util/windows/volume.rb +2 -2
  363. data/lib/chef/version.rb +1 -1
  364. data/lib/chef/version/platform.rb +42 -0
  365. data/lib/chef/version_class.rb +1 -1
  366. data/lib/chef/version_constraint.rb +6 -5
  367. data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
  368. data/lib/chef/win32/api/file.rb +8 -2
  369. data/lib/chef/win32/api/security.rb +45 -1
  370. data/lib/chef/win32/registry.rb +382 -0
  371. data/lib/chef/win32/security.rb +19 -0
  372. data/lib/chef/win32/version.rb +25 -8
  373. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  374. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  375. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  376. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  377. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  378. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  379. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  380. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  381. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  382. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  383. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  384. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  385. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  386. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  387. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  388. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  389. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  390. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  391. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  392. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  393. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  394. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  395. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  396. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  397. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  398. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  399. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  400. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  401. data/spec/data/apt/var/www/apt/db/version +4 -0
  402. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  403. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  404. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  405. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  406. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  407. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  408. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  409. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  410. data/spec/data/bootstrap/secret.erb +9 -0
  411. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  412. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  413. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  414. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  415. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  416. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  417. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  418. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  419. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  420. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  421. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  422. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  423. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  424. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  425. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  426. data/spec/data/nodes/default.rb +3 -3
  427. data/spec/data/nodes/test.example.com.rb +3 -3
  428. data/spec/data/nodes/test.rb +3 -3
  429. data/spec/data/null_config.rb +1 -0
  430. data/spec/data/partial_one.erb +1 -0
  431. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  432. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  433. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  434. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  435. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  436. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  437. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  438. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  439. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  440. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  441. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  442. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  443. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  444. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  445. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  446. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  447. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  448. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  449. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  450. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  451. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  452. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  453. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  454. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  455. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  456. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  457. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  458. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  459. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  460. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  461. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  462. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  463. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  464. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  465. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  466. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  467. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  468. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  469. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  470. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  471. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  472. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  473. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  474. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  475. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  476. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  477. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  478. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  479. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  480. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  481. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  482. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  483. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  484. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  485. data/spec/data/shef-config.rb +10 -0
  486. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  487. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  488. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  489. data/spec/functional/knife/exec_spec.rb +3 -3
  490. data/spec/functional/knife/smoke_test.rb +34 -0
  491. data/spec/functional/knife/ssh_spec.rb +5 -1
  492. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  493. data/spec/functional/resource/batch_spec.rb +64 -0
  494. data/spec/functional/resource/cookbook_file_spec.rb +15 -9
  495. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  496. data/spec/functional/resource/directory_spec.rb +5 -1
  497. data/spec/functional/resource/file_spec.rb +71 -21
  498. data/spec/functional/resource/git_spec.rb +259 -0
  499. data/spec/functional/resource/link_spec.rb +424 -388
  500. data/spec/functional/resource/package_spec.rb +297 -0
  501. data/spec/functional/resource/powershell_spec.rb +188 -0
  502. data/spec/functional/resource/registry_spec.rb +576 -0
  503. data/spec/functional/resource/remote_directory_spec.rb +143 -37
  504. data/spec/functional/resource/remote_file_spec.rb +99 -13
  505. data/spec/functional/resource/template_spec.rb +180 -3
  506. data/spec/functional/resource/user_spec.rb +547 -0
  507. data/spec/functional/run_lock_spec.rb +243 -0
  508. data/spec/functional/shell_spec.rb +102 -0
  509. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  510. data/spec/functional/win32/security_spec.rb +37 -0
  511. data/spec/functional/win32/service_manager_spec.rb +269 -0
  512. data/spec/functional/win32/versions_spec.rb +78 -0
  513. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  514. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  515. data/spec/integration/knife/chefignore_spec.rb +271 -0
  516. data/spec/integration/knife/delete_spec.rb +944 -0
  517. data/spec/integration/knife/deps_spec.rb +648 -0
  518. data/spec/integration/knife/diff_spec.rb +536 -0
  519. data/spec/integration/knife/download_spec.rb +962 -0
  520. data/spec/integration/knife/list_spec.rb +633 -0
  521. data/spec/integration/knife/raw_spec.rb +166 -0
  522. data/spec/integration/knife/redirection_spec.rb +57 -0
  523. data/spec/integration/knife/show_spec.rb +158 -0
  524. data/spec/integration/knife/upload_spec.rb +1060 -0
  525. data/spec/integration/solo/solo_spec.rb +41 -0
  526. data/spec/spec_helper.rb +49 -13
  527. data/spec/stress/win32/security_spec.rb +1 -1
  528. data/spec/support/chef_helpers.rb +33 -3
  529. data/spec/support/lib/chef/resource/cat.rb +3 -5
  530. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  531. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  532. data/spec/support/platform_helpers.rb +46 -13
  533. data/spec/support/platforms/win32/spec_service.rb +59 -0
  534. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  535. data/spec/support/shared/functional/directory_resource.rb +129 -38
  536. data/spec/support/shared/functional/file_resource.rb +837 -71
  537. data/spec/support/shared/functional/securable_resource.rb +189 -58
  538. data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
  539. data/spec/support/shared/integration/integration_helper.rb +166 -0
  540. data/spec/support/shared/integration/knife_support.rb +171 -0
  541. data/spec/support/shared/unit/execute_resource.rb +125 -0
  542. data/spec/support/shared/unit/file_system_support.rb +70 -0
  543. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  544. data/spec/support/shared/unit/provider/file.rb +609 -0
  545. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  546. data/spec/support/shared/unit/script_resource.rb +52 -0
  547. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  548. data/spec/tiny_server.rb +13 -11
  549. data/spec/unit/api_client/registration_spec.rb +172 -0
  550. data/spec/unit/api_client_spec.rb +78 -156
  551. data/spec/unit/application/apply.rb +84 -0
  552. data/spec/unit/application/client_spec.rb +16 -14
  553. data/spec/unit/application/knife_spec.rb +17 -0
  554. data/spec/unit/application/solo_spec.rb +1 -1
  555. data/spec/unit/application_spec.rb +113 -3
  556. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  557. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  558. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  559. data/spec/unit/chef_fs/file_system_spec.rb +135 -0
  560. data/spec/unit/client_spec.rb +195 -23
  561. data/spec/unit/config_spec.rb +102 -51
  562. data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
  563. data/spec/unit/cookbook_loader_spec.rb +154 -91
  564. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  565. data/spec/unit/cookbook_spec.rb +3 -20
  566. data/spec/unit/cookbook_version_spec.rb +23 -122
  567. data/spec/unit/daemon_spec.rb +24 -19
  568. data/spec/unit/data_bag_spec.rb +13 -4
  569. data/spec/unit/deprecation_spec.rb +86 -0
  570. data/spec/unit/digester_spec.rb +50 -0
  571. data/spec/unit/dsl/data_query_spec.rb +66 -0
  572. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  573. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  574. data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
  575. data/spec/unit/environment_spec.rb +94 -126
  576. data/spec/unit/exceptions_spec.rb +8 -4
  577. data/spec/unit/file_access_control_spec.rb +21 -1
  578. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  579. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  580. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  581. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  582. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
  583. data/spec/unit/json_compat_spec.rb +8 -0
  584. data/spec/unit/knife/bootstrap_spec.rb +130 -29
  585. data/spec/unit/knife/configure_spec.rb +64 -45
  586. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  587. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  588. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  589. data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
  590. data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  592. data/spec/unit/knife/core/ui_spec.rb +196 -124
  593. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  594. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  596. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  597. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  598. data/spec/unit/knife/knife_help.rb +7 -7
  599. data/spec/unit/knife/node_edit_spec.rb +6 -33
  600. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  601. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  602. data/spec/unit/knife/ssh_spec.rb +12 -15
  603. data/spec/unit/knife/status_spec.rb +2 -2
  604. data/spec/unit/knife/user_create_spec.rb +86 -0
  605. data/spec/unit/knife/user_delete_spec.rb +39 -0
  606. data/spec/unit/knife/user_edit_spec.rb +42 -0
  607. data/spec/unit/knife/user_list_spec.rb +32 -0
  608. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  609. data/spec/unit/knife/user_show_spec.rb +41 -0
  610. data/spec/unit/knife_spec.rb +74 -0
  611. data/spec/unit/lwrp_spec.rb +102 -60
  612. data/spec/unit/mixin/checksum_spec.rb +2 -2
  613. data/spec/unit/mixin/deep_merge_spec.rb +130 -791
  614. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  615. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
  616. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  617. data/spec/unit/mixin/securable_spec.rb +5 -3
  618. data/spec/unit/mixin/template_spec.rb +145 -14
  619. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  620. data/spec/unit/node/attribute_spec.rb +273 -173
  621. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  622. data/spec/unit/node_spec.rb +418 -370
  623. data/spec/unit/platform_spec.rb +21 -8
  624. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  625. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  626. data/spec/unit/provider/cookbook_file_spec.rb +26 -187
  627. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  628. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  629. data/spec/unit/provider/deploy_spec.rb +2 -2
  630. data/spec/unit/provider/directory_spec.rb +99 -67
  631. data/spec/unit/provider/env_spec.rb +2 -2
  632. data/spec/unit/provider/execute_spec.rb +27 -1
  633. data/spec/unit/provider/file/content_spec.rb +101 -0
  634. data/spec/unit/provider/file_spec.rb +25 -475
  635. data/spec/unit/provider/git_spec.rb +224 -28
  636. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  637. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  638. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  639. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  640. data/spec/unit/provider/group/pw_spec.rb +15 -12
  641. data/spec/unit/provider/group/usermod_spec.rb +9 -22
  642. data/spec/unit/provider/group/windows_spec.rb +8 -0
  643. data/spec/unit/provider/group_spec.rb +6 -28
  644. data/spec/unit/provider/http_request_spec.rb +28 -69
  645. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  646. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  647. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  648. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  649. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  650. data/spec/unit/provider/mount_spec.rb +16 -6
  651. data/spec/unit/provider/ohai_spec.rb +4 -4
  652. data/spec/unit/provider/package/apt_spec.rb +0 -1
  653. data/spec/unit/provider/package/ips_spec.rb +0 -1
  654. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  655. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  656. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  657. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  658. data/spec/unit/provider/package_spec.rb +7 -9
  659. data/spec/unit/provider/powershell_spec.rb +38 -0
  660. data/spec/unit/provider/registry_key_spec.rb +269 -0
  661. data/spec/unit/provider/remote_directory_spec.rb +7 -7
  662. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  663. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  664. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  665. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  666. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  667. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  668. data/spec/unit/provider/remote_file_spec.rb +33 -259
  669. data/spec/unit/provider/route_spec.rb +29 -12
  670. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  671. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  672. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  673. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  674. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  675. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  676. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  677. data/spec/unit/provider/service/macosx_spec.rb +176 -207
  678. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  679. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  680. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  681. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  682. data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
  683. data/spec/unit/provider/service_spec.rb +3 -3
  684. data/spec/unit/provider/subversion_spec.rb +1 -1
  685. data/spec/unit/provider/template/content_spec.rb +78 -0
  686. data/spec/unit/provider/template_spec.rb +52 -160
  687. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  688. data/spec/unit/provider/user/solaris_spec.rb +39 -373
  689. data/spec/unit/provider/user/useradd_spec.rb +12 -379
  690. data/spec/unit/provider/user_spec.rb +1 -1
  691. data/spec/unit/recipe_spec.rb +10 -8
  692. data/spec/unit/registry_helper_spec.rb +376 -0
  693. data/spec/unit/resource/batch_spec.rb +48 -0
  694. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  695. data/spec/unit/resource/execute_spec.rb +3 -101
  696. data/spec/unit/resource/file_spec.rb +0 -5
  697. data/spec/unit/resource/group_spec.rb +9 -0
  698. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  699. data/spec/unit/resource/link_spec.rb +1 -0
  700. data/spec/unit/resource/mount_spec.rb +37 -11
  701. data/spec/unit/resource/powershell_spec.rb +48 -0
  702. data/spec/unit/resource/registry_key_spec.rb +171 -0
  703. data/spec/unit/resource/remote_file_spec.rb +63 -25
  704. data/spec/unit/resource/route_spec.rb +1 -1
  705. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  706. data/spec/unit/resource/script_spec.rb +13 -36
  707. data/spec/unit/resource/service_spec.rb +11 -0
  708. data/spec/unit/resource/template_spec.rb +111 -8
  709. data/spec/unit/resource/user_spec.rb +7 -0
  710. data/spec/unit/resource_collection_spec.rb +61 -32
  711. data/spec/unit/resource_reporter_spec.rb +115 -102
  712. data/spec/unit/resource_spec.rb +197 -5
  713. data/spec/unit/rest/auth_credentials_spec.rb +4 -21
  714. data/spec/unit/rest_spec.rb +134 -284
  715. data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
  716. data/spec/unit/run_context_spec.rb +18 -4
  717. data/spec/unit/run_list_spec.rb +0 -209
  718. data/spec/unit/run_lock_spec.rb +37 -0
  719. data/spec/unit/runner_spec.rb +102 -3
  720. data/spec/unit/scan_access_control_spec.rb +8 -6
  721. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  722. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  723. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
  724. data/spec/unit/shell_out_spec.rb +18 -0
  725. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  726. data/spec/unit/user_spec.rb +255 -0
  727. data/spec/unit/util/backup_spec.rb +149 -0
  728. data/spec/unit/util/diff_spec.rb +596 -0
  729. data/spec/unit/util/selinux_spec.rb +172 -0
  730. data/spec/unit/version/platform_spec.rb +61 -0
  731. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  732. data/spec/unit/version_constraint_spec.rb +5 -0
  733. metadata +493 -264
  734. data/README.rdoc +0 -177
  735. data/distro/common/html/knife-recipe.1.html +0 -92
  736. data/lib/chef/certificate.rb +0 -161
  737. data/lib/chef/checksum.rb +0 -167
  738. data/lib/chef/checksum_cache.rb +0 -190
  739. data/lib/chef/cookbook_version_selector.rb +0 -168
  740. data/lib/chef/couchdb.rb +0 -246
  741. data/lib/chef/index_queue/amqp_client.rb +0 -116
  742. data/lib/chef/index_queue/consumer.rb +0 -76
  743. data/lib/chef/index_queue/indexable.rb +0 -109
  744. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  745. data/lib/chef/monkey_patches/dir.rb +0 -36
  746. data/lib/chef/monkey_patches/moneta.rb +0 -50
  747. data/lib/chef/monkey_patches/uri.rb +0 -70
  748. data/lib/chef/openid_registration.rb +0 -187
  749. data/lib/chef/solr_query.rb +0 -187
  750. data/lib/chef/solr_query/lucene.treetop +0 -150
  751. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  752. data/lib/chef/solr_query/query_transform.rb +0 -65
  753. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  754. data/lib/chef/webui_user.rb +0 -231
  755. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  756. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  757. data/spec/data/mac_users/10.7.plist.xml +0 -559
  758. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  759. data/spec/data/mac_users/10.8.plist.xml +0 -559
  760. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  761. data/spec/data/mac_users/10.9.plist.xml +0 -560
  762. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  763. data/spec/functional/resource/base.rb +0 -40
  764. data/spec/functional/resource/group_spec.rb +0 -343
  765. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  766. data/spec/unit/certificate_spec.rb +0 -76
  767. data/spec/unit/checksum_cache_spec.rb +0 -209
  768. data/spec/unit/checksum_spec.rb +0 -94
  769. data/spec/unit/couchdb_spec.rb +0 -274
  770. data/spec/unit/index_queue_spec.rb +0 -391
  771. data/spec/unit/mixin/language_spec.rb +0 -305
  772. data/spec/unit/openid_registration_spec.rb +0 -153
  773. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  774. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  775. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  776. data/spec/unit/solr_query_spec.rb +0 -203
  777. data/spec/unit/webui_user_spec.rb +0 -238
@@ -21,394 +21,60 @@
21
21
  require 'spec_helper'
22
22
 
23
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
24
 
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
25
+ subject(:provider) do
26
+ p = described_class.new(@new_resource, @run_context)
27
+ p.current_resource = @current_resource
240
28
 
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
29
+ # Prevent the useradd-based provider tests from trying to write /etc/shadow
30
+ p.stub!(:write_shadow_file)
31
+ p
246
32
  end
247
33
 
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
34
+ supported_useradd_options = {
35
+ 'comment' => "-c",
36
+ 'gid' => "-g",
37
+ 'uid' => "-u",
38
+ 'shell' => "-s"
39
+ }
261
40
 
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
41
+ include_examples "a useradd-based user provider", supported_useradd_options
269
42
 
270
- describe "when checking the lock" do
43
+ describe "when we want to set a password" do
271
44
  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
45
+ @node = Chef::Node.new
46
+ @events = Chef::EventDispatch::Dispatcher.new
47
+ @run_context = Chef::RunContext.new(@node, {}, @events)
297
48
 
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
49
+ @new_resource = Chef::Resource::User.new("adam", @run_context)
50
+ @current_resource = Chef::Resource::User.new("adam", @run_context)
330
51
 
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
52
+ @new_resource.password "hocus-pocus"
339
53
 
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
54
+ # Let these tests run #write_shadow_file
55
+ provider.unstub!(:write_shadow_file)
345
56
  end
346
- end
347
57
 
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
58
+ it "should use its own shadow file writer to set the password" do
59
+ provider.should_receive(:write_shadow_file)
60
+ provider.stub!(:shell_out!).and_return(true)
61
+ provider.manage_user
352
62
  end
353
- end
354
63
 
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
64
+ it "should write out a modified version of the password file" do
65
+ password_file = Tempfile.new("shadow")
66
+ password_file.puts "adam:existingpassword:15441::::::"
67
+ password_file.close
68
+ provider.password_file = password_file.path
69
+ provider.stub!(:shell_out!).and_return(true)
70
+ # may not be able to write to /etc for tests...
71
+ temp_file = Tempfile.new("shadow")
72
+ Tempfile.stub!(:new).with("shadow", "/etc").and_return(temp_file)
73
+ @new_resource.password "verysecurepassword"
74
+ provider.manage_user
75
+ ::File.open(password_file.path, "r").read.should =~ /adam:verysecurepassword:/
76
+ password_file.unlink
359
77
  end
360
78
  end
361
79
 
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
80
  end
@@ -21,387 +21,20 @@
21
21
  require 'spec_helper'
22
22
 
23
23
  describe Chef::Provider::User::Useradd 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
24
 
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::Useradd.new(@new_resource, @run_context)
51
- @provider.current_resource = @current_resource
25
+ subject(:provider) do
26
+ p = described_class.new(@new_resource, @run_context)
27
+ p.current_resource = @current_resource
28
+ p
52
29
  end
53
30
 
54
- describe "when setting option" do
55
- field_list = {
56
- 'comment' => "-c",
57
- 'gid' => "-g",
58
- 'uid' => "-u",
59
- 'shell' => "-s",
60
- 'password' => "-p"
61
- }
31
+ supported_useradd_options = {
32
+ 'comment' => "-c",
33
+ 'gid' => "-g",
34
+ 'uid' => "-u",
35
+ 'shell' => "-s",
36
+ 'password' => "-p"
37
+ }
62
38
 
63
- field_list.each do |attribute, option|
64
- it "should check for differences in #{attribute} between the new and current resources" do
65
- @current_resource.should_receive(attribute)
66
- @new_resource.should_receive(attribute)
67
- @provider.universal_options
68
- end
69
-
70
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil" do
71
- @new_resource.stub!(attribute).and_return("hola")
72
- @provider.universal_options.should eql(" #{option} 'hola'")
73
- end
74
-
75
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil, without homedir management" do
76
- @new_resource.stub!(:supports).and_return({:manage_home => false,
77
- :non_unique => false})
78
- @new_resource.stub!(attribute).and_return("hola")
79
- @provider.universal_options.should eql(" #{option} 'hola'")
80
- end
81
-
82
- it "should set the option for #{attribute} if the new resources #{attribute} is not nil, without homedir management (using real attributes)" do
83
- @new_resource.stub!(:manage_home).and_return(false)
84
- @new_resource.stub!(:non_unique).and_return(false)
85
- @new_resource.stub!(attribute).and_return("hola")
86
- @provider.universal_options.should eql(" #{option} 'hola'")
87
- end
88
- end
89
-
90
- it "should combine all the possible options" do
91
- match_string = ""
92
- field_list.sort{ |a,b| a[0] <=> b[0] }.each do |attribute, option|
93
- @new_resource.stub!(attribute).and_return("hola")
94
- match_string << " #{option} 'hola'"
95
- end
96
- @provider.universal_options.should eql(match_string)
97
- end
98
-
99
- describe "when we want to create a system user" do
100
- before do
101
- @new_resource.manage_home(true)
102
- @new_resource.non_unique(false)
103
- end
104
-
105
- it "should set useradd -r" do
106
- @new_resource.system(true)
107
- @provider.useradd_options.should == " -r"
108
- end
109
- end
110
-
111
- describe "when the resource has a different home directory and supports home directory management" do
112
- before do
113
- @new_resource.stub!(:home).and_return("/wowaweea")
114
- @new_resource.stub!(:supports).and_return({:manage_home => true,
115
- :non_unique => false})
116
- end
117
-
118
- it "should set -m -d /homedir" do
119
- @provider.universal_options.should == " -m -d '/wowaweea'"
120
- @provider.useradd_options.should == ""
121
- end
122
- end
123
-
124
- describe "when the resource has a different home directory and supports home directory management (using real attributes)" do
125
- before do
126
- @new_resource.stub!(:home).and_return("/wowaweea")
127
- @new_resource.stub!(:manage_home).and_return(true)
128
- @new_resource.stub!(:non_unique).and_return(false)
129
- end
130
-
131
- it "should set -m -d /homedir" do
132
- @provider.universal_options.should eql(" -m -d '/wowaweea'")
133
- @provider.useradd_options.should == ""
134
- end
135
- end
136
-
137
- describe "when the resource supports non_unique ids" do
138
- before do
139
- @new_resource.stub!(:supports).and_return({:manage_home => false,
140
- :non_unique => true})
141
- end
142
-
143
- it "should set -m -o" do
144
- @provider.universal_options.should eql(" -o")
145
- end
146
- end
147
-
148
- describe "when the resource supports non_unique ids (using real attributes)" do
149
- before do
150
- @new_resource.stub!(:manage_home).and_return(false)
151
- @new_resource.stub!(:non_unique).and_return(true)
152
- end
153
-
154
- it "should set -m -o" do
155
- @provider.universal_options.should eql(" -o")
156
- end
157
- end
158
- end
159
-
160
- describe "when creating a user" do
161
- before(:each) do
162
- @current_resource = Chef::Resource::User.new(@new_resource.name, @run_context)
163
- @current_resource.username(@new_resource.username)
164
- @provider.current_resource = @current_resource
165
- @provider.new_resource.manage_home true
166
- @provider.new_resource.home "/Users/mud"
167
- @provider.new_resource.gid '23'
168
- end
169
-
170
- it "runs useradd with the computed command options" do
171
- command = "useradd -c 'Adam Jacob' -g '23' -p 'abracadabra' -s '/usr/bin/zsh' -u '1000' -m -d '/Users/mud' adam"
172
- @provider.should_receive(:run_command).with({ :command => command }).and_return(true)
173
- @provider.create_user
174
- end
175
-
176
- describe "and home is not specified for new system user resource" do
177
-
178
- before do
179
- @provider.new_resource.system true
180
- # there is no public API to set attribute's value to nil
181
- @provider.new_resource.instance_variable_set("@home", nil)
182
- end
183
-
184
- it "should not include -m or -d in the command options" do
185
- command = "useradd -c 'Adam Jacob' -g '23' -p 'abracadabra' -s '/usr/bin/zsh' -u '1000' -r adam"
186
- @provider.should_receive(:run_command).with({ :command => command }).and_return(true)
187
- @provider.create_user
188
- end
189
-
190
- end
191
-
192
- end
193
-
194
- describe "when managing a user" do
195
- before(:each) do
196
- @provider.new_resource.manage_home true
197
- @provider.new_resource.home "/Users/mud"
198
- @provider.new_resource.gid '23'
199
- end
200
-
201
- # CHEF-3423, -m must come before the username
202
- it "runs usermod with the computed command options" do
203
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' -m -d '/Users/mud' adam" }).and_return(true)
204
- @provider.manage_user
205
- end
206
-
207
- it "does not set the -r option to usermod" do
208
- @new_resource.system(true)
209
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' -m -d '/Users/mud' adam" }).and_return(true)
210
- @provider.manage_user
211
- end
212
-
213
- it "CHEF-3429: does not set -m if we aren't changing the home directory" do
214
- @provider.should_receive(:updating_home?).and_return(false)
215
- @provider.should_receive(:run_command).with({ :command => "usermod -g '23' adam" }).and_return(true)
216
- @provider.manage_user
217
- end
218
- end
219
-
220
- describe "when removing a user" do
221
-
222
- it "should run userdel with the new resources user name" do
223
- @provider.should_receive(:run_command).with({ :command => "userdel #{@new_resource.username}" }).and_return(true)
224
- @provider.remove_user
225
- end
226
-
227
- it "should run userdel with the new resources user name and -r if manage_home is true" do
228
- @new_resource.stub!(:supports).and_return({ :manage_home => true,
229
- :non_unique => false})
230
- @provider.should_receive(:run_command).with({ :command => "userdel -r #{@new_resource.username}"}).and_return(true)
231
- @provider.remove_user
232
- end
233
-
234
- it "should run userdel with the new resources user name if non_unique is true" do
235
- @new_resource.stub!(:supports).and_return({ :manage_home => false,
236
- :non_unique => true})
237
- @provider.should_receive(:run_command).with({ :command => "userdel #{@new_resource.username}"}).and_return(true)
238
- @provider.remove_user
239
- end
240
- end
241
-
242
- describe "when checking the lock" do
243
- before(:each) do
244
- # @node = Chef::Node.new
245
- # @new_resource = mock("Chef::Resource::User",
246
- # :nil_object => true,
247
- # :username => "adam"
248
- # )
249
- @status = mock("Status", :exitstatus => 0)
250
- #@provider = Chef::Provider::User::Useradd.new(@node, @new_resource)
251
- @provider.stub!(:popen4).and_return(@status)
252
- @stdin = mock("STDIN", :nil_object => true)
253
- @stdout = mock("STDOUT", :nil_object => true)
254
- @stdout.stub!(:gets).and_return("root P 09/02/2008 0 99999 7 -1")
255
- @stderr = mock("STDERR", :nil_object => true)
256
- @pid = mock("PID", :nil_object => true)
257
- end
258
-
259
- it "should call passwd -S to check the lock status" do
260
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}").and_return(@status)
261
- @provider.check_lock
262
- end
263
-
264
- it "should get the first line of passwd -S STDOUT" do
265
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
266
- @stdout.should_receive(:gets).and_return("root P 09/02/2008 0 99999 7 -1")
267
- @provider.check_lock
268
- end
269
-
270
- it "should return false if status begins with P" do
271
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
272
- @provider.check_lock.should eql(false)
273
- end
274
-
275
- it "should return false if status begins with N" do
276
- @stdout.stub!(:gets).and_return("root N")
277
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
278
- @provider.check_lock.should eql(false)
279
- end
280
-
281
- it "should return true if status begins with L" do
282
- @stdout.stub!(:gets).and_return("root L")
283
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
284
- @provider.check_lock.should eql(true)
285
- end
286
-
287
- it "should raise a Chef::Exceptions::User if passwd -S fails on anything other than redhat/centos" do
288
- @node.automatic_attrs[:platform] = 'ubuntu'
289
- @status.should_receive(:exitstatus).and_return(1)
290
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
291
- end
292
-
293
- ['redhat', 'centos'].each do |os|
294
- 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
295
- @node.automatic_attrs[:platform] = os
296
- @stdout.stub!(:gets).and_return("passwd-0.73-1\n")
297
- @status.should_receive(:exitstatus).twice.and_return(1)
298
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}")
299
- @provider.should_receive(:popen4).with("rpm -q passwd").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
300
- lambda { @provider.check_lock }.should_not raise_error(Chef::Exceptions::User)
301
- end
302
-
303
- 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
304
- @node.automatic_attrs[:platform] = os
305
- @stdout.stub!(:gets).and_return("passwd-0.73-2\n")
306
- @status.should_receive(:exitstatus).twice.and_return(1)
307
- @provider.should_receive(:popen4).with("passwd -S #{@new_resource.username}")
308
- @provider.should_receive(:popen4).with("rpm -q passwd").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
309
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
310
- end
311
-
312
- it "should raise a Chef::Exceptions::User if passwd -S exits with something other than 0 or 1 on #{os}" do
313
- @node.automatic_attrs[:platform] = os
314
- @status.should_receive(:exitstatus).twice.and_return(2)
315
- lambda { @provider.check_lock }.should raise_error(Chef::Exceptions::User)
316
- end
317
- end
318
-
319
- context "when in why run mode" do
320
- before do
321
- @stdout.stub!(:gets).and_return(nil)
322
- @stderr.stub!(:gets).and_return("passwd: user 'chef-test' does not exist")
323
- @provider.should_receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
324
- Chef::Config[:why_run] = true
325
- end
326
-
327
- after do
328
- Chef::Config[:why_run] = false
329
- end
330
-
331
- it "should return false if the user does not exist" do
332
- @provider.check_lock.should eql(false)
333
- end
334
-
335
- it "should not raise an error if the user does not exist" do
336
- lambda { @provider.check_lock }.should_not raise_error
337
- end
338
- end
339
- end
340
-
341
- describe "when locking the user" do
342
- it "should run usermod -L with the new resources username" do
343
- @provider.should_receive(:run_command).with({ :command => "usermod -L #{@new_resource.username}"})
344
- @provider.lock_user
345
- end
346
- end
347
-
348
- describe "when unlocking the user" do
349
- it "should run usermod -L with the new resources username" do
350
- @provider.should_receive(:run_command).with({ :command => "usermod -U #{@new_resource.username}"})
351
- @provider.unlock_user
352
- end
353
- end
354
-
355
- describe "when checking if home needs updating" do
356
- [
357
- {
358
- "action" => "should return false if home matches",
359
- "current_resource_home" => [ "/home/laurent" ],
360
- "new_resource_home" => [ "/home/laurent" ],
361
- "expected_result" => false
362
- },
363
- {
364
- "action" => "should return true if home doesn't match",
365
- "current_resource_home" => [ "/home/laurent" ],
366
- "new_resource_home" => [ "/something/else" ],
367
- "expected_result" => true
368
- },
369
- {
370
- "action" => "should return false if home only differs by trailing slash",
371
- "current_resource_home" => [ "/home/laurent" ],
372
- "new_resource_home" => [ "/home/laurent/", "/home/laurent" ],
373
- "expected_result" => false
374
- },
375
- {
376
- "action" => "should return false if home is an equivalent path",
377
- "current_resource_home" => [ "/home/laurent" ],
378
- "new_resource_home" => [ "/home/./laurent", "/home/laurent" ],
379
- "expected_result" => false
380
- },
381
- ].each do |home_check|
382
- it home_check["action"] do
383
- @provider.current_resource.home home_check["current_resource_home"].first
384
- @current_home_mock = mock("Pathname")
385
- @provider.new_resource.home home_check["new_resource_home"].first
386
- @new_home_mock = mock("Pathname")
387
-
388
- Pathname.should_receive(:new).with(@current_resource.home).and_return(@current_home_mock)
389
- @current_home_mock.should_receive(:cleanpath).and_return(home_check["current_resource_home"].last)
390
- Pathname.should_receive(:new).with(@new_resource.home).and_return(@new_home_mock)
391
- @new_home_mock.should_receive(:cleanpath).and_return(home_check["new_resource_home"].last)
392
-
393
- @provider.updating_home?.should == home_check["expected_result"]
394
- end
395
- end
396
- it "should return true if the current home does not exist but a home is specified by the new resource" do
397
- @new_resource = Chef::Resource::User.new("adam", @run_context)
398
- @current_resource = Chef::Resource::User.new("adam", @run_context)
399
- @provider = Chef::Provider::User::Useradd.new(@new_resource, @run_context)
400
- @provider.current_resource = @current_resource
401
- @current_resource.home nil
402
- @new_resource.home "/home/kitten"
403
-
404
- @provider.updating_home?.should == true
405
- end
406
- end
39
+ include_examples "a useradd-based user provider", supported_useradd_options
407
40
  end