chef 11.4.4 → 11.6.0.hotfix.1

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 (504) hide show
  1. data/README.md +1 -1
  2. data/Rakefile +18 -1
  3. data/bin/chef-service-manager +37 -0
  4. data/distro/common/html/chef-client.8.html +4 -4
  5. data/distro/common/html/chef-expander.8.html +4 -4
  6. data/distro/common/html/chef-expanderctl.8.html +4 -4
  7. data/distro/common/html/chef-server-webui.8.html +4 -4
  8. data/distro/common/html/chef-server.8.html +4 -4
  9. data/distro/common/html/chef-shell.1.html +4 -4
  10. data/distro/common/html/chef-solo.8.html +12 -18
  11. data/distro/common/html/chef-solr.8.html +4 -4
  12. data/distro/common/html/knife-bootstrap.1.html +4 -4
  13. data/distro/common/html/knife-client.1.html +4 -4
  14. data/distro/common/html/knife-configure.1.html +4 -4
  15. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  16. data/distro/common/html/knife-cookbook.1.html +7 -10
  17. data/distro/common/html/knife-data-bag.1.html +7 -10
  18. data/distro/common/html/knife-environment.1.html +6 -8
  19. data/distro/common/html/knife-exec.1.html +4 -4
  20. data/distro/common/html/knife-index.1.html +4 -4
  21. data/distro/common/html/knife-node.1.html +4 -4
  22. data/distro/common/html/knife-role.1.html +4 -4
  23. data/distro/common/html/knife-search.1.html +4 -4
  24. data/distro/common/html/knife-ssh.1.html +4 -4
  25. data/distro/common/html/knife-status.1.html +4 -4
  26. data/distro/common/html/knife-tag.1.html +4 -4
  27. data/distro/common/html/knife.1.html +4 -4
  28. data/distro/common/man/man1/chef-shell.1 +1 -1
  29. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  30. data/distro/common/man/man1/knife-client.1 +1 -1
  31. data/distro/common/man/man1/knife-configure.1 +1 -1
  32. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  33. data/distro/common/man/man1/knife-cookbook.1 +2 -15
  34. data/distro/common/man/man1/knife-data-bag.1 +2 -15
  35. data/distro/common/man/man1/knife-environment.1 +2 -12
  36. data/distro/common/man/man1/knife-exec.1 +1 -1
  37. data/distro/common/man/man1/knife-index.1 +1 -1
  38. data/distro/common/man/man1/knife-node.1 +1 -1
  39. data/distro/common/man/man1/knife-role.1 +1 -1
  40. data/distro/common/man/man1/knife-search.1 +1 -1
  41. data/distro/common/man/man1/knife-ssh.1 +1 -1
  42. data/distro/common/man/man1/knife-status.1 +1 -1
  43. data/distro/common/man/man1/knife-tag.1 +1 -1
  44. data/distro/common/man/man1/knife.1 +1 -1
  45. data/distro/common/man/man8/chef-client.8 +1 -1
  46. data/distro/common/man/man8/chef-expander.8 +1 -1
  47. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  48. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  49. data/distro/common/man/man8/chef-server.8 +1 -1
  50. data/distro/common/man/man8/chef-solo.8 +4 -36
  51. data/distro/common/man/man8/chef-solr.8 +1 -1
  52. data/distro/debian/etc/init.d/chef-client +4 -2
  53. data/distro/windows/service_manager.rb +2 -146
  54. data/lib/chef.rb +1 -1
  55. data/lib/chef/application.rb +5 -12
  56. data/lib/chef/application/apply.rb +2 -0
  57. data/lib/chef/application/client.rb +12 -12
  58. data/lib/chef/application/knife.rb +2 -2
  59. data/lib/chef/application/solo.rb +4 -5
  60. data/lib/chef/application/windows_service.rb +113 -56
  61. data/lib/chef/application/windows_service_manager.rb +179 -0
  62. data/lib/chef/chef_fs.rb +2 -4
  63. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  64. data/lib/chef/chef_fs/command_line.rb +145 -93
  65. data/lib/chef/chef_fs/config.rb +205 -0
  66. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  67. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  68. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  69. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  70. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  71. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  72. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  73. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  74. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  75. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  76. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  77. data/lib/chef/chef_fs/file_system.rb +195 -127
  78. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  79. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  80. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  81. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  82. data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
  83. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  84. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  85. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  86. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  87. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
  88. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
  89. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
  90. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
  91. data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
  92. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  94. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
  95. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
  96. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
  97. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  98. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  99. data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
  100. data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
  101. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  102. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  103. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  104. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  105. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
  106. data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
  107. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  108. data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
  109. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  110. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  111. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
  112. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
  113. data/lib/chef/chef_fs/knife.rb +68 -29
  114. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  115. data/lib/chef/chef_fs/path_utils.rb +29 -3
  116. data/lib/chef/chef_fs/raw_request.rb +79 -0
  117. data/lib/chef/client.rb +46 -20
  118. data/lib/chef/config.rb +59 -61
  119. data/lib/chef/cookbook/chefignore.rb +2 -1
  120. data/lib/chef/cookbook/synchronizer.rb +8 -6
  121. data/lib/chef/cookbook/syntax_check.rb +17 -2
  122. data/lib/chef/cookbook_uploader.rb +10 -1
  123. data/lib/chef/cookbook_version.rb +0 -109
  124. data/lib/chef/data_bag.rb +15 -6
  125. data/lib/chef/deprecation/mixin/template.rb +49 -0
  126. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  127. data/lib/chef/deprecation/provider/file.rb +197 -0
  128. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  129. data/lib/chef/deprecation/provider/template.rb +63 -0
  130. data/lib/chef/deprecation/warnings.rb +38 -0
  131. data/lib/chef/encrypted_data_bag_item.rb +153 -61
  132. data/lib/chef/environment.rb +34 -3
  133. data/lib/chef/event_dispatch/base.rb +3 -0
  134. data/lib/chef/exceptions.rb +27 -2
  135. data/lib/chef/file_access_control/unix.rb +64 -7
  136. data/lib/chef/file_access_control/windows.rb +22 -11
  137. data/lib/chef/file_content_management/content_base.rb +56 -0
  138. data/lib/chef/file_content_management/deploy.rb +38 -0
  139. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  140. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  141. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  142. data/lib/chef/file_content_management/tempfile.rb +61 -0
  143. data/lib/chef/formatters/doc.rb +1 -1
  144. data/lib/chef/formatters/error_descriptor.rb +5 -4
  145. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  146. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
  147. data/lib/chef/json_compat.rb +3 -0
  148. data/lib/chef/knife.rb +12 -3
  149. data/lib/chef/knife/bootstrap.rb +46 -2
  150. data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
  151. data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
  152. data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
  153. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
  154. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
  155. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
  156. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
  157. data/lib/chef/knife/client_show.rb +2 -5
  158. data/lib/chef/knife/configure.rb +3 -3
  159. data/lib/chef/knife/cookbook_create.rb +6 -5
  160. data/lib/chef/knife/cookbook_download.rb +13 -5
  161. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  162. data/lib/chef/knife/cookbook_test.rb +1 -0
  163. data/lib/chef/knife/cookbook_upload.rb +4 -9
  164. data/lib/chef/knife/core/bootstrap_context.rb +10 -4
  165. data/lib/chef/knife/core/generic_presenter.rb +16 -0
  166. data/lib/chef/knife/core/node_editor.rb +1 -1
  167. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  168. data/lib/chef/knife/core/ui.rb +19 -4
  169. data/lib/chef/knife/delete.rb +76 -9
  170. data/lib/chef/knife/deps.rb +139 -0
  171. data/lib/chef/knife/diff.rb +22 -5
  172. data/lib/chef/knife/download.rb +16 -3
  173. data/lib/chef/knife/edit.rb +76 -0
  174. data/lib/chef/knife/environment_show.rb +2 -7
  175. data/lib/chef/knife/list.rb +91 -47
  176. data/lib/chef/knife/node_run_list_set.rb +66 -0
  177. data/lib/chef/knife/node_show.rb +1 -7
  178. data/lib/chef/knife/raw.rb +20 -64
  179. data/lib/chef/knife/role_show.rb +2 -4
  180. data/lib/chef/knife/search.rb +5 -6
  181. data/lib/chef/knife/show.rb +34 -11
  182. data/lib/chef/knife/ssh.rb +8 -0
  183. data/lib/chef/knife/upload.rb +23 -4
  184. data/lib/chef/knife/user_show.rb +2 -5
  185. data/lib/chef/knife/xargs.rb +265 -0
  186. data/lib/chef/log.rb +2 -2
  187. data/lib/chef/mixin/file_class.rb +0 -9
  188. data/lib/chef/mixin/language_include_recipe.rb +1 -1
  189. data/lib/chef/mixin/params_validate.rb +19 -9
  190. data/lib/chef/mixin/template.rb +126 -36
  191. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  192. data/lib/chef/monkey_patches/file.rb +26 -0
  193. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  194. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  195. data/lib/chef/monologger.rb +93 -0
  196. data/lib/chef/node.rb +4 -0
  197. data/lib/chef/platform.rb +4 -490
  198. data/lib/chef/platform/provider_mapping.rb +529 -0
  199. data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
  200. data/lib/chef/provider.rb +12 -9
  201. data/lib/chef/provider/batch.rb +35 -0
  202. data/lib/chef/provider/cookbook_file.rb +9 -78
  203. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  204. data/lib/chef/provider/deploy.rb +24 -20
  205. data/lib/chef/provider/deploy/revision.rb +27 -0
  206. data/lib/chef/provider/directory.rb +19 -22
  207. data/lib/chef/provider/execute.rb +22 -5
  208. data/lib/chef/provider/file.rb +299 -217
  209. data/lib/chef/provider/file/content.rb +39 -0
  210. data/lib/chef/provider/git.rb +76 -43
  211. data/lib/chef/provider/group/usermod.rb +2 -2
  212. data/lib/chef/provider/ifconfig.rb +25 -35
  213. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  214. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  215. data/lib/chef/provider/link.rb +10 -3
  216. data/lib/chef/provider/mount.rb +1 -1
  217. data/lib/chef/provider/mount/mount.rb +8 -3
  218. data/lib/chef/provider/mount/windows.rb +4 -1
  219. data/lib/chef/provider/package/portage.rb +9 -4
  220. data/lib/chef/provider/package/rubygems.rb +45 -10
  221. data/lib/chef/provider/package/smartos.rb +47 -36
  222. data/lib/chef/provider/package/yum.rb +19 -12
  223. data/lib/chef/provider/package/zypper.rb +45 -55
  224. data/lib/chef/provider/powershell_script.rb +77 -0
  225. data/lib/chef/provider/remote_directory.rb +5 -6
  226. data/lib/chef/provider/remote_file.rb +12 -108
  227. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  228. data/lib/chef/provider/remote_file/content.rb +75 -0
  229. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  230. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  231. data/lib/chef/provider/remote_file/http.rb +124 -0
  232. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  233. data/lib/chef/provider/route.rb +6 -2
  234. data/lib/chef/provider/script.rb +14 -2
  235. data/lib/chef/provider/service/macosx.rb +16 -10
  236. data/lib/chef/provider/service/solaris.rb +6 -5
  237. data/lib/chef/provider/template.rb +16 -78
  238. data/lib/chef/provider/template/content.rb +61 -0
  239. data/lib/chef/provider/user/solaris.rb +90 -0
  240. data/lib/chef/provider/user/useradd.rb +76 -63
  241. data/lib/chef/provider/windows_script.rb +73 -0
  242. data/lib/chef/providers.rb +16 -0
  243. data/lib/chef/resource.rb +23 -2
  244. data/lib/chef/resource/batch.rb +31 -0
  245. data/lib/chef/resource/conditional.rb +4 -0
  246. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  247. data/lib/chef/resource/file.rb +31 -3
  248. data/lib/chef/resource/link.rb +17 -0
  249. data/lib/chef/resource/lwrp_base.rb +1 -1
  250. data/lib/chef/resource/mount.rb +29 -2
  251. data/lib/chef/resource/powershell_script.rb +31 -0
  252. data/lib/chef/resource/remote_file.rb +47 -1
  253. data/lib/chef/resource/route.rb +1 -1
  254. data/lib/chef/resource/template.rb +145 -0
  255. data/lib/chef/resource/windows_script.rb +62 -0
  256. data/lib/chef/resource_collection.rb +45 -11
  257. data/lib/chef/resource_reporter.rb +81 -52
  258. data/lib/chef/resources.rb +2 -0
  259. data/lib/chef/rest.rb +13 -4
  260. data/lib/chef/rest/rest_request.rb +5 -1
  261. data/lib/chef/run_context/cookbook_compiler.rb +3 -3
  262. data/lib/chef/run_list/run_list_expansion.rb +1 -1
  263. data/lib/chef/run_lock.rb +7 -1
  264. data/lib/chef/runner.rb +0 -1
  265. data/lib/chef/scan_access_control.rb +6 -1
  266. data/lib/chef/search/query.rb +2 -2
  267. data/lib/chef/shell/shell_session.rb +2 -2
  268. data/lib/chef/util/backup.rb +84 -0
  269. data/lib/chef/util/diff.rb +145 -0
  270. data/lib/chef/util/file_edit.rb +1 -1
  271. data/lib/chef/util/selinux.rb +100 -0
  272. data/lib/chef/util/windows/net_user.rb +14 -1
  273. data/lib/chef/util/windows/volume.rb +2 -2
  274. data/lib/chef/version.rb +1 -1
  275. data/lib/chef/version/platform.rb +42 -0
  276. data/lib/chef/version_class.rb +1 -1
  277. data/lib/chef/version_constraint.rb +6 -5
  278. data/lib/chef/version_constraint/platform.rb +26 -0
  279. data/lib/chef/win32/api/file.rb +8 -2
  280. data/lib/chef/win32/version.rb +25 -8
  281. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  282. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  283. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  284. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  285. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  286. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  287. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  288. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  289. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  290. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  291. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  292. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  293. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  294. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  295. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  296. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  297. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  298. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  299. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  300. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  301. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  302. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  303. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  304. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  305. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  306. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  307. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  308. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  309. data/spec/data/apt/var/www/apt/db/version +4 -0
  310. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  311. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  312. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  313. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  314. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  315. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  316. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  317. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  318. data/spec/data/bootstrap/secret.erb +9 -0
  319. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  321. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  322. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  323. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  324. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  325. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  326. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  327. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  328. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  329. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  330. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  331. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  332. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  333. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  334. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  335. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  336. data/spec/data/null_config.rb +1 -0
  337. data/spec/data/partial_one.erb +1 -1
  338. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  339. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  340. data/spec/functional/knife/exec_spec.rb +2 -2
  341. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  342. data/spec/functional/resource/batch_spec.rb +64 -0
  343. data/spec/functional/resource/cookbook_file_spec.rb +2 -3
  344. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  345. data/spec/functional/resource/directory_spec.rb +2 -2
  346. data/spec/functional/resource/file_spec.rb +17 -1
  347. data/spec/functional/resource/git_spec.rb +259 -0
  348. data/spec/functional/resource/link_spec.rb +422 -388
  349. data/spec/functional/resource/package_spec.rb +297 -0
  350. data/spec/functional/resource/powershell_spec.rb +188 -0
  351. data/spec/functional/resource/registry_spec.rb +8 -4
  352. data/spec/functional/resource/remote_directory_spec.rb +2 -2
  353. data/spec/functional/resource/remote_file_spec.rb +97 -29
  354. data/spec/functional/resource/template_spec.rb +173 -17
  355. data/spec/functional/resource/user_spec.rb +547 -0
  356. data/spec/functional/run_lock_spec.rb +5 -0
  357. data/spec/functional/shell_spec.rb +2 -1
  358. data/spec/functional/win32/service_manager_spec.rb +269 -0
  359. data/spec/functional/win32/versions_spec.rb +78 -0
  360. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  361. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  362. data/spec/integration/knife/chefignore_spec.rb +271 -0
  363. data/spec/integration/knife/delete_spec.rb +944 -0
  364. data/spec/integration/knife/deps_spec.rb +648 -0
  365. data/spec/integration/knife/diff_spec.rb +536 -0
  366. data/spec/integration/knife/download_spec.rb +962 -0
  367. data/spec/integration/knife/list_spec.rb +633 -0
  368. data/spec/integration/knife/raw_spec.rb +166 -0
  369. data/spec/integration/knife/redirection_spec.rb +57 -0
  370. data/spec/integration/knife/show_spec.rb +158 -0
  371. data/spec/integration/knife/upload_spec.rb +1060 -0
  372. data/spec/integration/solo/solo_spec.rb +41 -0
  373. data/spec/spec_helper.rb +55 -1
  374. data/spec/support/chef_helpers.rb +32 -0
  375. data/spec/support/platform_helpers.rb +40 -0
  376. data/spec/support/platforms/win32/spec_service.rb +59 -0
  377. data/spec/support/shared/functional/directory_resource.rb +43 -16
  378. data/spec/support/shared/functional/file_resource.rb +661 -20
  379. data/spec/support/shared/functional/securable_resource.rb +109 -8
  380. data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
  381. data/spec/support/shared/integration/integration_helper.rb +166 -0
  382. data/spec/support/shared/integration/knife_support.rb +171 -0
  383. data/spec/support/shared/unit/execute_resource.rb +125 -0
  384. data/spec/support/shared/unit/file_system_support.rb +8 -48
  385. data/spec/support/shared/unit/provider/file.rb +609 -0
  386. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  387. data/spec/support/shared/unit/script_resource.rb +52 -0
  388. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  389. data/spec/tiny_server.rb +13 -11
  390. data/spec/unit/application/client_spec.rb +39 -1
  391. data/spec/unit/application/knife_spec.rb +12 -0
  392. data/spec/unit/application/solo_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +57 -2
  394. data/spec/unit/chef_fs/diff_spec.rb +30 -31
  395. data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
  396. data/spec/unit/chef_fs/file_system_spec.rb +2 -3
  397. data/spec/unit/client_spec.rb +20 -1
  398. data/spec/unit/config_spec.rb +70 -52
  399. data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
  400. data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
  401. data/spec/unit/cookbook_loader_spec.rb +3 -2
  402. data/spec/unit/daemon_spec.rb +7 -7
  403. data/spec/unit/data_bag_spec.rb +7 -0
  404. data/spec/unit/deprecation_spec.rb +86 -0
  405. data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
  406. data/spec/unit/environment_spec.rb +98 -0
  407. data/spec/unit/exceptions_spec.rb +6 -1
  408. data/spec/unit/file_access_control_spec.rb +21 -1
  409. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  410. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  411. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  412. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  413. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
  414. data/spec/unit/knife/bootstrap_spec.rb +128 -29
  415. data/spec/unit/knife/configure_spec.rb +42 -26
  416. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  417. data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
  418. data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
  419. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  420. data/spec/unit/knife/core/ui_spec.rb +41 -0
  421. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  422. data/spec/unit/knife_spec.rb +21 -0
  423. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
  424. data/spec/unit/mixin/params_validate_spec.rb +35 -0
  425. data/spec/unit/mixin/template_spec.rb +69 -57
  426. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  427. data/spec/unit/node_spec.rb +7 -0
  428. data/spec/unit/platform_spec.rb +15 -1
  429. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  430. data/spec/unit/provider/cookbook_file_spec.rb +26 -183
  431. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  432. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  433. data/spec/unit/provider/deploy_spec.rb +2 -2
  434. data/spec/unit/provider/directory_spec.rb +23 -23
  435. data/spec/unit/provider/execute_spec.rb +27 -1
  436. data/spec/unit/provider/file/content_spec.rb +101 -0
  437. data/spec/unit/provider/file_spec.rb +25 -484
  438. data/spec/unit/provider/git_spec.rb +224 -28
  439. data/spec/unit/provider/group/usermod_spec.rb +3 -1
  440. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  441. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  442. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  443. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  444. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  445. data/spec/unit/provider/mount_spec.rb +16 -6
  446. data/spec/unit/provider/package/portage_spec.rb +44 -0
  447. data/spec/unit/provider/package/rubygems_spec.rb +44 -1
  448. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  449. data/spec/unit/provider/package/yum_spec.rb +36 -39
  450. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  451. data/spec/unit/provider/package_spec.rb +0 -4
  452. data/spec/unit/provider/powershell_spec.rb +38 -0
  453. data/spec/unit/provider/remote_directory_spec.rb +0 -4
  454. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  455. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  456. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  457. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  458. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  459. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  460. data/spec/unit/provider/remote_file_spec.rb +33 -295
  461. data/spec/unit/provider/route_spec.rb +25 -9
  462. data/spec/unit/provider/service/macosx_spec.rb +176 -152
  463. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  464. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  465. data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
  466. data/spec/unit/provider/service_spec.rb +3 -3
  467. data/spec/unit/provider/template/content_spec.rb +78 -0
  468. data/spec/unit/provider/template_spec.rb +52 -184
  469. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  470. data/spec/unit/provider/user/useradd_spec.rb +12 -358
  471. data/spec/unit/resource/batch_spec.rb +48 -0
  472. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  473. data/spec/unit/resource/execute_spec.rb +3 -101
  474. data/spec/unit/resource/file_spec.rb +0 -5
  475. data/spec/unit/resource/group_spec.rb +9 -0
  476. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  477. data/spec/unit/resource/link_spec.rb +1 -0
  478. data/spec/unit/resource/mount_spec.rb +37 -0
  479. data/spec/unit/resource/powershell_spec.rb +48 -0
  480. data/spec/unit/resource/remote_file_spec.rb +44 -4
  481. data/spec/unit/resource/route_spec.rb +1 -1
  482. data/spec/unit/resource/script_spec.rb +13 -36
  483. data/spec/unit/resource/template_spec.rb +111 -8
  484. data/spec/unit/resource/user_spec.rb +7 -0
  485. data/spec/unit/resource_collection_spec.rb +61 -32
  486. data/spec/unit/resource_reporter_spec.rb +115 -102
  487. data/spec/unit/resource_spec.rb +170 -1
  488. data/spec/unit/rest/auth_credentials_spec.rb +2 -2
  489. data/spec/unit/rest_spec.rb +6 -2
  490. data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
  491. data/spec/unit/runner_spec.rb +1 -1
  492. data/spec/unit/scan_access_control_spec.rb +4 -2
  493. data/spec/unit/shell/shell_session_spec.rb +15 -2
  494. data/spec/unit/util/backup_spec.rb +149 -0
  495. data/spec/unit/util/diff_spec.rb +596 -0
  496. data/spec/unit/util/selinux_spec.rb +172 -0
  497. data/spec/unit/version/platform_spec.rb +61 -0
  498. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  499. data/spec/unit/version_constraint_spec.rb +5 -0
  500. metadata +233 -10
  501. data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
  502. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
  503. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
  504. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
@@ -459,7 +459,6 @@ describe Chef::Resource do
459
459
  end
460
460
 
461
461
  describe "when invoking its action" do
462
-
463
462
  before do
464
463
  @resource = Chef::Resource.new("provided", @run_context)
465
464
  @resource.provider = Chef::Provider::SnakeOil
@@ -529,6 +528,114 @@ describe Chef::Resource do
529
528
 
530
529
  end
531
530
 
531
+ describe "should_skip?" do
532
+ before do
533
+ @resource = Chef::Resource::Cat.new("sugar", @run_context)
534
+ end
535
+
536
+ it "should return false by default" do
537
+ @resource.should_skip?(:purr).should be_false
538
+ end
539
+
540
+ it "should return false when if_only is met" do
541
+ @resource.only_if { true }
542
+ @resource.should_skip?(:purr).should be_false
543
+ end
544
+
545
+ it "should return true when if_only is not met" do
546
+ @resource.only_if { false }
547
+ @resource.should_skip?(:purr).should be_true
548
+ end
549
+
550
+ it "should return true when not_if is met" do
551
+ @resource.not_if { true }
552
+ @resource.should_skip?(:purr).should be_true
553
+ end
554
+
555
+ it "should return false when if_only is not met" do
556
+ @resource.not_if { false }
557
+ @resource.should_skip?(:purr).should be_false
558
+ end
559
+
560
+ it "should return true when if_only is met but also not_if is met" do
561
+ @resource.only_if { true }
562
+ @resource.not_if { true }
563
+ @resource.should_skip?(:purr).should be_true
564
+ end
565
+
566
+ it "should return true when one of multiple if_only's is not met" do
567
+ @resource.only_if { true }
568
+ @resource.only_if { false }
569
+ @resource.only_if { true }
570
+ @resource.should_skip?(:purr).should be_true
571
+ end
572
+
573
+ it "should return true when one of multiple not_if's is met" do
574
+ @resource.not_if { false }
575
+ @resource.not_if { true }
576
+ @resource.not_if { false }
577
+ @resource.should_skip?(:purr).should be_true
578
+ end
579
+
580
+ it "should return true when action is :nothing" do
581
+ @resource.should_skip?(:nothing).should be_true
582
+ end
583
+
584
+ it "should return true when action is :nothing ignoring only_if/not_if conditionals" do
585
+ @resource.only_if { true }
586
+ @resource.not_if { false }
587
+ @resource.should_skip?(:nothing).should be_true
588
+ end
589
+
590
+ it "should print \"skipped due to action :nothing\" message for doc formatter when action is :nothing" do
591
+ fdoc = Chef::Formatters.new(:doc, STDOUT, STDERR)
592
+ @run_context.stub!(:events).and_return(fdoc)
593
+ fdoc.should_receive(:puts).with(" (skipped due to action :nothing)")
594
+ @resource.should_skip?(:nothing)
595
+ end
596
+
597
+ end
598
+
599
+ describe "when resource action is :nothing" do
600
+ before do
601
+ @resource1 = Chef::Resource::Cat.new("sugar", @run_context)
602
+ @resource1.action = :nothing
603
+
604
+ @node.automatic_attrs[:platform] = "fubuntu"
605
+ @node.automatic_attrs[:platform_version] = '10.04'
606
+ end
607
+
608
+ it "should not run only_if/not_if conditionals (CHEF-972)" do
609
+ snitch_var1 = 0
610
+ @resource1.only_if { snitch_var1 = 1 }
611
+ @resource1.not_if { snitch_var1 = 2 }
612
+ @resource1.run_action(:nothing)
613
+ snitch_var1.should == 0
614
+ end
615
+
616
+ it "should run only_if/not_if conditionals when notified to run another action (CHEF-972)" do
617
+ snitch_var1 = snitch_var2 = 0
618
+ @runner = Chef::Runner.new(@run_context)
619
+ Chef::Platform.set(
620
+ :resource => :cat,
621
+ :provider => Chef::Provider::SnakeOil
622
+ )
623
+
624
+ @resource1.only_if { snitch_var1 = 1 }
625
+ @resource1.not_if { snitch_var2 = 2 }
626
+ @resource2 = Chef::Resource::Cat.new("coffee", @run_context)
627
+ @resource2.notifies :purr, @resource1
628
+ @resource2.action = :purr
629
+
630
+ @run_context.resource_collection << @resource1
631
+ @run_context.resource_collection << @resource2
632
+ @runner.converge
633
+
634
+ snitch_var1.should == 1
635
+ snitch_var2.should == 2
636
+ end
637
+ end
638
+
532
639
  describe "building the platform map" do
533
640
 
534
641
  it 'adds mappings for a single platform' do
@@ -590,6 +697,68 @@ describe Chef::Resource do
590
697
  end
591
698
 
592
699
  end
700
+
701
+ describe "when creating notifications" do
702
+
703
+ describe "with a string resource spec" do
704
+
705
+ it "creates a delayed notification when timing is not specified" do
706
+ @resource.notifies(:run, "execute[foo]")
707
+ @run_context.delayed_notification_collection.should have(1).notifications
708
+ end
709
+
710
+ it "creates a delayed notification when :delayed is not specified" do
711
+ @resource.notifies(:run, "execute[foo]", :delayed)
712
+ @run_context.delayed_notification_collection.should have(1).notifications
713
+ end
714
+
715
+ it "creates an immediate notification when :immediate is specified" do
716
+ @resource.notifies(:run, "execute[foo]", :immediate)
717
+ @run_context.immediate_notification_collection.should have(1).notifications
718
+ end
719
+
720
+ it "creates an immediate notification when :immediately is specified" do
721
+ @resource.notifies(:run, "execute[foo]", :immediately)
722
+ @run_context.immediate_notification_collection.should have(1).notifications
723
+ end
724
+
725
+ describe "with a syntax error in the resource spec" do
726
+
727
+ it "raises an exception immmediately" do
728
+ lambda do
729
+ @resource.notifies(:run, "typo[missing-closing-bracket")
730
+ end.should raise_error(Chef::Exceptions::InvalidResourceSpecification)
731
+ end
732
+ end
733
+ end
734
+
735
+ describe "with a resource reference" do
736
+ before do
737
+ @notified_resource = Chef::Resource.new("punk", @run_context)
738
+ end
739
+
740
+ it "creates a delayed notification when timing is not specified" do
741
+ @resource.notifies(:run, @notified_resource)
742
+ @run_context.delayed_notification_collection.should have(1).notifications
743
+ end
744
+
745
+ it "creates a delayed notification when :delayed is not specified" do
746
+ @resource.notifies(:run, @notified_resource, :delayed)
747
+ @run_context.delayed_notification_collection.should have(1).notifications
748
+ end
749
+
750
+ it "creates an immediate notification when :immediate is specified" do
751
+ @resource.notifies(:run, @notified_resource, :immediate)
752
+ @run_context.immediate_notification_collection.should have(1).notifications
753
+ end
754
+
755
+ it "creates an immediate notification when :immediately is specified" do
756
+ @resource.notifies(:run, @notified_resource, :immediately)
757
+ @run_context.immediate_notification_collection.should have(1).notifications
758
+ end
759
+ end
760
+
761
+ end
593
762
  end
594
763
 
595
764
  describe Chef::Resource::Notification do
@@ -298,7 +298,7 @@ describe Chef::REST::RESTRequest do
298
298
  Chef::Config[:http_proxy] = "http://proxy.example.com:3128"
299
299
  Chef::Config[:https_proxy] = "http://sproxy.example.com:3129"
300
300
  Chef::Config[:http_proxy_user] = nil
301
- Chef::Config[:https_proxy_pass] = nil
301
+ Chef::Config[:http_proxy_pass] = nil
302
302
  Chef::Config[:https_proxy_user] = nil
303
303
  Chef::Config[:https_proxy_pass] = nil
304
304
  Chef::Config[:no_proxy] = nil
@@ -308,7 +308,7 @@ describe Chef::REST::RESTRequest do
308
308
  Chef::Config[:http_proxy] = nil
309
309
  Chef::Config[:https_proxy] = nil
310
310
  Chef::Config[:http_proxy_user] = nil
311
- Chef::Config[:https_proxy_pass] = nil
311
+ Chef::Config[:http_proxy_pass] = nil
312
312
  Chef::Config[:https_proxy_user] = nil
313
313
  Chef::Config[:https_proxy_pass] = nil
314
314
  Chef::Config[:no_proxy] = nil
@@ -347,8 +347,12 @@ describe Chef::REST do
347
347
  @http_client.stub!(:request).and_yield(http_response).and_return(http_response)
348
348
 
349
349
  lambda { @rest.api_request(:GET, @url) }.should raise_error(Chef::Exceptions::RedirectLimitExceeded)
350
+
351
+ [:PUT, :POST, :DELETE].each do |method|
352
+ lambda { @rest.api_request(method, @url) }.should raise_error(Chef::Exceptions::InvalidRedirect)
353
+ end
350
354
  end
351
- end
355
+ end
352
356
 
353
357
  it "should return `false` when response is 304 NotModified" do
354
358
  http_response = Net::HTTPNotModified.new("1.1", "304", "it's the same as when you asked 5 minutes ago")
@@ -493,7 +497,7 @@ describe Chef::REST do
493
497
 
494
498
  it "closes and unlinks the tempfile when the response is a redirect" do
495
499
  Tempfile.rspec_reset
496
- tempfile = mock("die", :path => "/tmp/ragefist", :close => true, :binmode => nil)
500
+ tempfile = mock("die", :path => "/tmp/ragefist", :close => true, :binmode => true)
497
501
  tempfile.should_receive(:close!).at_least(2).times
498
502
  Tempfile.stub!(:new).with("chef-rest").and_return(tempfile)
499
503
 
@@ -178,4 +178,13 @@ describe Chef::RunContext::CookbookCompiler do
178
178
  # Tests for this behavior are in RunContext's tests
179
179
  end
180
180
 
181
+ describe "listing cookbook order" do
182
+ it "should return an array of cookbook names as symbols without duplicates" do
183
+ node.run_list("test-with-circular-deps::default", "circular-dep1::default", "circular-dep2::default")
184
+
185
+ compiler.cookbook_order.should == [:"circular-dep2",
186
+ :"circular-dep1",
187
+ :"test-with-circular-deps"]
188
+ end
189
+ end
181
190
  end
@@ -360,7 +360,7 @@ E
360
360
  end
361
361
 
362
362
  it "should check a resource's only_if and not_if if notified by another resource" do
363
- @first_resource.action = :nothing
363
+ @first_resource.action = :buy
364
364
 
365
365
  only_if_called_times = 0
366
366
  @first_resource.only_if {only_if_called_times += 1; true}
@@ -21,7 +21,8 @@ require 'chef/scan_access_control'
21
21
  describe Chef::ScanAccessControl do
22
22
 
23
23
  before do
24
- @new_resource = Chef::Resource::File.new("/tmp/foo/bar/baz/qux")
24
+ @new_resource = Chef::Resource::File.new("/tmp/foo/bar/baz/link")
25
+ @real_file = "/tmp/foo/bar/real/file"
25
26
  @current_resource = Chef::Resource::File.new(@new_resource.path)
26
27
  @scanner = Chef::ScanAccessControl.new(@new_resource, @current_resource)
27
28
  end
@@ -49,7 +50,8 @@ describe Chef::ScanAccessControl do
49
50
 
50
51
  before do
51
52
  @stat = mock("File::Stat for #{@new_resource.path}", :uid => 0, :gid => 0, :mode => 00100644)
52
- File.should_receive(:stat).with(@new_resource.path).and_return(@stat)
53
+ File.should_receive(:realpath).with(@new_resource.path).and_return(@real_file)
54
+ File.should_receive(:stat).with(@real_file).and_return(@stat)
53
55
  File.should_receive(:exist?).with(@new_resource.path).and_return(true)
54
56
  end
55
57
 
@@ -47,6 +47,19 @@ describe Shell::ShellSession do
47
47
 
48
48
  end
49
49
 
50
+ describe Shell::ClientSession do
51
+ it "builds the node's run_context with the proper environment" do
52
+ @session = Shell::ClientSession.instance
53
+ @node = Chef::Node.build("foo")
54
+ @session.node = @node
55
+ @session.instance_variable_set(:@client, stub(:sync_cookbooks => {}))
56
+ @expansion = Chef::RunList::RunListExpansion.new(@node.chef_environment, [])
57
+
58
+ @node.run_list.should_receive(:expand).with(@node.chef_environment).and_return(@expansion)
59
+ @session.rebuild_context
60
+ end
61
+ end
62
+
50
63
  describe Shell::StandAloneSession do
51
64
  before do
52
65
  @session = Shell::StandAloneSession.instance
@@ -109,7 +122,7 @@ describe Shell::SoloSession do
109
122
  @session.resource_collection.should include(kitteh)
110
123
  end
111
124
 
112
- it "returns definitions from it's compilation object" do
125
+ it "returns definitions from its compilation object" do
113
126
  @session.definitions.should == @run_context.definitions
114
127
  end
115
128
 
@@ -119,7 +132,7 @@ describe Shell::SoloSession do
119
132
  #pending "1) keep attribs in an ivar 2) pass them to the node 3) feed them to the node on reset"
120
133
  end
121
134
 
122
- it "generates it's resource collection from the compiled cookbooks and the ad hoc recipe" do
135
+ it "generates its resource collection from the compiled cookbooks and the ad hoc recipe" do
123
136
  @session.stub!(:node_built?).and_return(true)
124
137
  kitteh_cat = Chef::Resource::Cat.new("kitteh")
125
138
  @run_context.resource_collection << kitteh_cat
@@ -0,0 +1,149 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 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
+
20
+ require 'spec_helper'
21
+ require 'tmpdir'
22
+
23
+ describe Chef::Util::Backup do
24
+ before(:all) do
25
+ @original_config = Chef::Config.configuration
26
+ end
27
+
28
+ after(:all) do
29
+ Chef::Config.configuration.replace(@original_config)
30
+ end
31
+
32
+ let (:tempfile) do
33
+ Tempfile.new("chef-util-backup-spec-test")
34
+ end
35
+
36
+ before(:each) do
37
+ @new_resource = mock("new_resource")
38
+ @new_resource.should_receive(:path).at_least(:once).and_return(tempfile.path)
39
+ @backup = Chef::Util::Backup.new(@new_resource)
40
+ end
41
+
42
+ it "should store the resource passed to new as new_resource" do
43
+ @backup.new_resource.should eql(@new_resource)
44
+ end
45
+
46
+ describe "for cases when we don't want to back anything up" do
47
+
48
+ before(:each) do
49
+ @backup.should_not_receive(:do_backup)
50
+ end
51
+
52
+ it "should not attempt to backup a file if :backup is false" do
53
+ @new_resource.should_receive(:backup).at_least(:once).and_return(false)
54
+ @backup.backup!
55
+ end
56
+
57
+ it "should not attempt to backup a file if :backup == 0" do
58
+ @new_resource.should_receive(:backup).at_least(:once).and_return(0)
59
+ @backup.backup!
60
+ end
61
+
62
+ it "should not attempt to backup a file if it does not exist" do
63
+ @new_resource.should_receive(:backup).at_least(:once).and_return(1)
64
+ File.should_receive(:exist?).with(tempfile.path).at_least(:once).and_return(false)
65
+ @backup.backup!
66
+ end
67
+
68
+ end
69
+
70
+ describe "for cases when we want to back things up" do
71
+ before(:each) do
72
+ @backup.should_receive(:do_backup)
73
+ end
74
+
75
+ describe "when the number of backups is specified as 1" do
76
+ before(:each) do
77
+ @new_resource.should_receive(:backup).at_least(:once).and_return(1)
78
+ end
79
+
80
+ it "should not delete anything if this is the only backup" do
81
+ @backup.should_receive(:sorted_backup_files).and_return(['a'])
82
+ @backup.should_not_receive(:delete_backup)
83
+ @backup.backup!
84
+ end
85
+
86
+ it "should keep only 1 backup copy" do
87
+ @backup.should_receive(:sorted_backup_files).and_return(['a', 'b', 'c'])
88
+ @backup.should_receive(:delete_backup).with('b')
89
+ @backup.should_receive(:delete_backup).with('c')
90
+ @backup.backup!
91
+ end
92
+ end
93
+
94
+ describe "when the number of backups is specified as 2" do
95
+ before(:each) do
96
+ @new_resource.should_receive(:backup).at_least(:once).and_return(2)
97
+ end
98
+
99
+ it "should not delete anything if we only have one other backup" do
100
+ @backup.should_receive(:sorted_backup_files).and_return(['a', 'b'])
101
+ @backup.should_not_receive(:delete_backup)
102
+ @backup.backup!
103
+ end
104
+
105
+ it "should keep only 2 backup copies" do
106
+ @backup.should_receive(:sorted_backup_files).and_return(['a', 'b', 'c', 'd'])
107
+ @backup.should_receive(:delete_backup).with('c')
108
+ @backup.should_receive(:delete_backup).with('d')
109
+ @backup.backup!
110
+ end
111
+ end
112
+ end
113
+
114
+ describe "backup_filename" do
115
+ it "should return a timestamped path" do
116
+ @backup.should_receive(:path).and_return('/a/b/c.txt')
117
+ @backup.send(:backup_filename).should =~ %r|^/a/b/c.txt.chef-\d{14}$|
118
+ end
119
+ it "should strip the drive letter off for windows" do
120
+ @backup.should_receive(:path).and_return('c:\a\b\c.txt')
121
+ @backup.send(:backup_filename).should =~ %r|^\\a\\b\\c.txt.chef-\d{14}$|
122
+ end
123
+ it "should strip the drive letter off for windows (with forwardslashes)" do
124
+ @backup.should_receive(:path).and_return('c:/a/b/c.txt')
125
+ @backup.send(:backup_filename).should =~ %r|^/a/b/c.txt.chef-\d{14}$|
126
+ end
127
+ end
128
+
129
+ describe "backup_path" do
130
+ it "uses the file's directory when Chef::Config[:file_backup_path] is nil" do
131
+ @backup.should_receive(:path).and_return('/a/b/c.txt')
132
+ Chef::Config[:file_backup_path] = nil
133
+ @backup.send(:backup_path).should =~ %r|^/a/b/c.txt.chef-\d{14}$|
134
+ end
135
+
136
+ it "uses the configured Chef::Config[:file_backup_path]" do
137
+ @backup.should_receive(:path).and_return('/a/b/c.txt')
138
+ Chef::Config[:file_backup_path] = '/backupdir'
139
+ @backup.send(:backup_path).should =~ %r|^/backupdir[\\/]+a/b/c.txt.chef-\d{14}$|
140
+ end
141
+
142
+ it "uses the configured Chef::Config[:file_backup_path] and strips the drive on windows" do
143
+ @backup.should_receive(:path).and_return('c:\\a\\b\\c.txt')
144
+ Chef::Config[:file_backup_path] = 'c:\backupdir'
145
+ @backup.send(:backup_path).should =~ %r|^c:\\backupdir[\\/]+a\\b\\c.txt.chef-\d{14}$|
146
+ end
147
+ end
148
+
149
+ end