chef 10.34.6 → 11.0.0.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +4 -12
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/shef +6 -5
  7. data/distro/common/html/chef-client.8.html +4 -4
  8. data/distro/common/html/chef-expander.8.html +4 -4
  9. data/distro/common/html/chef-expanderctl.8.html +4 -4
  10. data/distro/common/html/chef-server-webui.8.html +4 -4
  11. data/distro/common/html/chef-server.8.html +4 -4
  12. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  13. data/distro/common/html/chef-solo.8.html +18 -12
  14. data/distro/common/html/chef-solr.8.html +4 -4
  15. data/distro/common/html/knife-bootstrap.1.html +4 -4
  16. data/distro/common/html/knife-client.1.html +4 -4
  17. data/distro/common/html/knife-configure.1.html +4 -4
  18. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  19. data/distro/common/html/knife-cookbook.1.html +10 -7
  20. data/distro/common/html/knife-data-bag.1.html +10 -7
  21. data/distro/common/html/knife-environment.1.html +8 -6
  22. data/distro/common/html/knife-exec.1.html +9 -9
  23. data/distro/common/html/knife-index.1.html +4 -4
  24. data/distro/common/html/knife-node.1.html +4 -4
  25. data/distro/common/html/knife-role.1.html +4 -4
  26. data/distro/common/html/knife-search.1.html +4 -4
  27. data/distro/common/html/knife-ssh.1.html +4 -4
  28. data/distro/common/html/knife-status.1.html +4 -4
  29. data/distro/common/html/knife-tag.1.html +4 -4
  30. data/distro/common/html/knife.1.html +8 -13
  31. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  32. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  33. data/distro/common/man/man1/knife-client.1 +1 -1
  34. data/distro/common/man/man1/knife-configure.1 +1 -1
  35. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  36. data/distro/common/man/man1/knife-cookbook.1 +15 -2
  37. data/distro/common/man/man1/knife-data-bag.1 +15 -2
  38. data/distro/common/man/man1/knife-environment.1 +12 -2
  39. data/distro/common/man/man1/knife-exec.1 +4 -7
  40. data/distro/common/man/man1/knife-index.1 +1 -1
  41. data/distro/common/man/man1/knife-node.1 +1 -1
  42. data/distro/common/man/man1/knife-role.1 +1 -1
  43. data/distro/common/man/man1/knife-search.1 +1 -1
  44. data/distro/common/man/man1/knife-ssh.1 +1 -1
  45. data/distro/common/man/man1/knife-status.1 +1 -1
  46. data/distro/common/man/man1/knife-tag.1 +1 -1
  47. data/distro/common/man/man1/knife.1 +3 -6
  48. data/distro/common/man/man8/chef-client.8 +1 -1
  49. data/distro/common/man/man8/chef-expander.8 +1 -1
  50. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  51. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  52. data/distro/common/man/man8/chef-server.8 +1 -1
  53. data/distro/common/man/man8/chef-solo.8 +36 -4
  54. data/distro/common/man/man8/chef-solr.8 +1 -1
  55. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  56. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  57. data/distro/common/markdown/man1/knife.mkd +4 -9
  58. data/distro/debian/etc/default/chef-client +0 -1
  59. data/distro/debian/etc/init.d/chef-client +2 -2
  60. data/lib/chef.rb +2 -5
  61. data/lib/chef/api_client.rb +20 -130
  62. data/lib/chef/api_client/registration.rb +126 -0
  63. data/lib/chef/application.rb +71 -14
  64. data/lib/chef/application/apply.rb +160 -0
  65. data/lib/chef/application/client.rb +25 -18
  66. data/lib/chef/application/knife.rb +0 -2
  67. data/lib/chef/application/solo.rb +23 -8
  68. data/lib/chef/application/windows_service.rb +5 -2
  69. data/lib/chef/applications.rb +1 -0
  70. data/lib/chef/chef_fs.rb +11 -0
  71. data/lib/chef/chef_fs/command_line.rb +232 -0
  72. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  73. data/lib/chef/chef_fs/file_system.rb +358 -0
  74. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  75. data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
  76. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
  77. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
  78. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
  79. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
  80. data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
  81. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  82. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
  83. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
  84. data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
  85. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
  86. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  87. data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
  88. data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
  89. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  90. data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
  91. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
  92. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
  94. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
  95. data/lib/chef/chef_fs/knife.rb +77 -0
  96. data/lib/chef/chef_fs/path_utils.rb +64 -0
  97. data/lib/chef/client.rb +44 -21
  98. data/lib/chef/config.rb +52 -43
  99. data/lib/chef/cookbook/synchronizer.rb +6 -8
  100. data/lib/chef/cookbook/syntax_check.rb +61 -14
  101. data/lib/chef/cookbook_loader.rb +39 -26
  102. data/lib/chef/cookbook_uploader.rb +17 -19
  103. data/lib/chef/cookbook_version.rb +3 -302
  104. data/lib/chef/daemon.rb +3 -18
  105. data/lib/chef/data_bag.rb +4 -97
  106. data/lib/chef/data_bag_item.rb +2 -65
  107. data/lib/chef/digester.rb +73 -0
  108. data/lib/chef/dsl.rb +6 -0
  109. data/lib/chef/dsl/data_query.rb +66 -0
  110. data/lib/chef/dsl/include_attribute.rb +60 -0
  111. data/lib/chef/dsl/include_recipe.rb +42 -0
  112. data/lib/chef/dsl/platform_introspection.rb +213 -0
  113. data/lib/chef/dsl/recipe.rb +84 -0
  114. data/lib/chef/dsl/registry_helper.rb +59 -0
  115. data/lib/chef/encrypted_data_bag_item.rb +74 -19
  116. data/lib/chef/environment.rb +9 -180
  117. data/lib/chef/exceptions.rb +87 -14
  118. data/lib/chef/formatters/base.rb +4 -1
  119. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
  120. data/lib/chef/json_compat.rb +1 -97
  121. data/lib/chef/knife.rb +90 -41
  122. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  123. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  124. data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
  125. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  126. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  127. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  128. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  129. data/lib/chef/knife/configure.rb +1 -2
  130. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  131. data/lib/chef/knife/cookbook_test.rb +3 -2
  132. data/lib/chef/knife/cookbook_upload.rb +12 -7
  133. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  134. data/lib/chef/knife/core/generic_presenter.rb +26 -13
  135. data/lib/chef/knife/core/node_editor.rb +36 -16
  136. data/lib/chef/knife/core/node_presenter.rb +1 -1
  137. data/lib/chef/knife/core/text_formatter.rb +23 -37
  138. data/lib/chef/knife/core/ui.rb +15 -9
  139. data/lib/chef/knife/delete.rb +39 -0
  140. data/lib/chef/knife/diff.rb +46 -0
  141. data/lib/chef/knife/download.rb +50 -0
  142. data/lib/chef/knife/environment_show.rb +7 -0
  143. data/lib/chef/knife/exec.rb +5 -5
  144. data/lib/chef/knife/help_topics.rb +1 -1
  145. data/lib/chef/knife/index_rebuild.rb +91 -7
  146. data/lib/chef/knife/list.rb +109 -0
  147. data/lib/chef/knife/raw.rb +108 -0
  148. data/lib/chef/knife/search.rb +40 -22
  149. data/lib/chef/knife/show.rb +32 -0
  150. data/lib/chef/knife/ssh.rb +6 -2
  151. data/lib/chef/knife/upload.rb +50 -0
  152. data/lib/chef/mixin/checksum.rb +3 -3
  153. data/lib/chef/mixin/deep_merge.rb +55 -197
  154. data/lib/chef/mixin/language.rb +9 -222
  155. data/lib/chef/mixin/language_include_attribute.rb +6 -38
  156. data/lib/chef/mixin/language_include_recipe.rb +3 -35
  157. data/lib/chef/mixin/params_validate.rb +6 -19
  158. data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
  159. data/lib/chef/mixin/securable.rb +32 -7
  160. data/lib/chef/mixin/template.rb +40 -0
  161. data/lib/chef/mixins.rb +0 -4
  162. data/lib/chef/monkey_patches/net_http.rb +0 -34
  163. data/lib/chef/node.rb +133 -309
  164. data/lib/chef/node/attribute.rb +333 -473
  165. data/lib/chef/node/attribute_collections.rb +199 -0
  166. data/lib/chef/node/immutable_collections.rb +186 -0
  167. data/lib/chef/platform.rb +7 -22
  168. data/lib/chef/provider.rb +2 -49
  169. data/lib/chef/provider/breakpoint.rb +6 -6
  170. data/lib/chef/provider/cookbook_file.rb +5 -33
  171. data/lib/chef/provider/deploy.rb +2 -1
  172. data/lib/chef/provider/directory.rb +14 -17
  173. data/lib/chef/provider/file.rb +19 -52
  174. data/lib/chef/provider/group.rb +31 -51
  175. data/lib/chef/provider/group/dscl.rb +13 -53
  176. data/lib/chef/provider/group/gpasswd.rb +19 -14
  177. data/lib/chef/provider/group/groupadd.rb +1 -41
  178. data/lib/chef/provider/group/groupmod.rb +36 -46
  179. data/lib/chef/provider/group/pw.rb +16 -59
  180. data/lib/chef/provider/group/suse.rb +13 -16
  181. data/lib/chef/provider/group/usermod.rb +18 -40
  182. data/lib/chef/provider/group/windows.rb +6 -13
  183. data/lib/chef/provider/http_request.rb +25 -42
  184. data/lib/chef/provider/link.rb +2 -0
  185. data/lib/chef/provider/lwrp_base.rb +150 -0
  186. data/lib/chef/provider/package/portage.rb +4 -9
  187. data/lib/chef/provider/package/rpm.rb +2 -2
  188. data/lib/chef/provider/package/rubygems.rb +9 -41
  189. data/lib/chef/provider/package/yum.rb +12 -19
  190. data/lib/chef/provider/registry_key.rb +156 -0
  191. data/lib/chef/provider/remote_directory.rb +2 -0
  192. data/lib/chef/provider/remote_file.rb +21 -12
  193. data/lib/chef/provider/ruby_block.rb +5 -2
  194. data/lib/chef/provider/service.rb +15 -0
  195. data/lib/chef/provider/service/init.rb +9 -7
  196. data/lib/chef/provider/service/macosx.rb +15 -73
  197. data/lib/chef/provider/service/simple.rb +1 -1
  198. data/lib/chef/provider/service/solaris.rb +3 -3
  199. data/lib/chef/provider/template.rb +22 -25
  200. data/lib/chef/provider/template_finder.rb +61 -0
  201. data/lib/chef/provider/user.rb +0 -1
  202. data/lib/chef/provider/user/dscl.rb +175 -568
  203. data/lib/chef/provider/user/useradd.rb +30 -47
  204. data/lib/chef/providers.rb +3 -2
  205. data/lib/chef/recipe.rb +14 -8
  206. data/lib/chef/resource.rb +13 -154
  207. data/lib/chef/resource/group.rb +1 -11
  208. data/lib/chef/resource/http_request.rb +2 -1
  209. data/lib/chef/resource/lwrp_base.rb +127 -0
  210. data/lib/chef/resource/mount.rb +10 -11
  211. data/lib/chef/resource/registry_key.rb +86 -0
  212. data/lib/chef/resource/remote_directory.rb +6 -5
  213. data/lib/chef/resource/remote_file.rb +22 -31
  214. data/lib/chef/resource/ruby_block.rb +2 -2
  215. data/lib/chef/resource/service.rb +14 -0
  216. data/lib/chef/resource/user.rb +0 -18
  217. data/lib/chef/resource_collection.rb +25 -21
  218. data/lib/chef/resources.rb +2 -1
  219. data/lib/chef/rest.rb +50 -131
  220. data/lib/chef/rest/auth_credentials.rb +4 -20
  221. data/lib/chef/rest/rest_request.rb +2 -7
  222. data/lib/chef/role.rb +1 -97
  223. data/lib/chef/run_context.rb +108 -130
  224. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  225. data/lib/chef/run_list.rb +0 -2
  226. data/lib/chef/run_list/run_list_expansion.rb +0 -15
  227. data/lib/chef/run_lock.rb +90 -0
  228. data/lib/chef/runner.rb +28 -5
  229. data/lib/chef/sandbox.rb +15 -148
  230. data/lib/chef/scan_access_control.rb +2 -4
  231. data/lib/chef/shef/ext.rb +3 -575
  232. data/lib/chef/{shef.rb → shell.rb} +35 -40
  233. data/lib/chef/shell/ext.rb +593 -0
  234. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  235. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  236. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
  237. data/lib/chef/shell_out.rb +7 -0
  238. data/lib/chef/util/windows/net_group.rb +1 -5
  239. data/lib/chef/version.rb +3 -3
  240. data/lib/chef/win32/api/process.rb +0 -1
  241. data/lib/chef/win32/handle.rb +1 -8
  242. data/lib/chef/win32/registry.rb +371 -0
  243. data/spec/data/big_json.json +1 -2
  244. data/spec/data/big_json_plus_one.json +1 -2
  245. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  246. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  247. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  248. data/spec/data/nodes/default.rb +3 -3
  249. data/spec/data/nodes/test.example.com.rb +3 -3
  250. data/spec/data/nodes/test.rb +3 -3
  251. data/spec/data/partial_one.erb +1 -0
  252. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  253. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  254. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  255. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  256. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  257. data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
  258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  264. data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
  265. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  267. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  268. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  269. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  270. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  271. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  272. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  273. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  274. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  275. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  276. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  277. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  279. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  281. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  282. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  283. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  284. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  285. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  286. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  287. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  288. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  289. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  290. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  291. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  292. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  293. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  294. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  295. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  296. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  297. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  298. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  300. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  301. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  302. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  303. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  304. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  305. data/spec/data/shef-config.rb +7 -0
  306. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  307. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  308. data/spec/functional/knife/exec_spec.rb +2 -2
  309. data/spec/functional/knife/ssh_spec.rb +5 -1
  310. data/spec/functional/resource/cookbook_file_spec.rb +7 -19
  311. data/spec/functional/resource/directory_spec.rb +4 -0
  312. data/spec/functional/resource/file_spec.rb +56 -22
  313. data/spec/functional/resource/link_spec.rb +2 -0
  314. data/spec/functional/resource/registry_spec.rb +576 -0
  315. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  316. data/spec/functional/resource/remote_file_spec.rb +18 -0
  317. data/spec/functional/resource/template_spec.rb +23 -2
  318. data/spec/functional/run_lock_spec.rb +106 -0
  319. data/spec/functional/shell_spec.rb +100 -0
  320. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  321. data/spec/spec_helper.rb +5 -29
  322. data/spec/stress/win32/security_spec.rb +1 -1
  323. data/spec/support/chef_helpers.rb +0 -2
  324. data/spec/support/platform_helpers.rb +8 -15
  325. data/spec/support/shared/functional/directory_resource.rb +84 -22
  326. data/spec/support/shared/functional/file_resource.rb +169 -71
  327. data/spec/support/shared/functional/securable_resource.rb +143 -119
  328. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  329. data/spec/support/shared/unit/file_system_support.rb +110 -0
  330. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  331. data/spec/unit/api_client/registration_spec.rb +175 -0
  332. data/spec/unit/api_client_spec.rb +78 -156
  333. data/spec/unit/application/apply.rb +84 -0
  334. data/spec/unit/application/client_spec.rb +1 -37
  335. data/spec/unit/application/knife_spec.rb +5 -0
  336. data/spec/unit/application_spec.rb +57 -2
  337. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  338. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  339. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  340. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  341. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  342. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  343. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  344. data/spec/unit/client_spec.rb +124 -33
  345. data/spec/unit/config_spec.rb +46 -13
  346. data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
  347. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  348. data/spec/unit/cookbook_loader_spec.rb +153 -91
  349. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  350. data/spec/unit/cookbook_spec.rb +3 -20
  351. data/spec/unit/cookbook_version_spec.rb +23 -122
  352. data/spec/unit/daemon_spec.rb +3 -24
  353. data/spec/unit/data_bag_spec.rb +6 -4
  354. data/spec/unit/digester_spec.rb +50 -0
  355. data/spec/unit/dsl/data_query_spec.rb +66 -0
  356. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  357. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  358. data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
  359. data/spec/unit/environment_spec.rb +0 -130
  360. data/spec/unit/exceptions_spec.rb +2 -3
  361. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  362. data/spec/unit/json_compat_spec.rb +15 -7
  363. data/spec/unit/knife/bootstrap_spec.rb +2 -0
  364. data/spec/unit/knife/configure_spec.rb +20 -14
  365. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  366. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  367. data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
  368. data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
  369. data/spec/unit/knife/core/ui_spec.rb +156 -125
  370. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  371. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  372. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  373. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  374. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  375. data/spec/unit/knife/knife_help.rb +7 -7
  376. data/spec/unit/knife/node_edit_spec.rb +6 -33
  377. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  378. data/spec/unit/knife/ssh_spec.rb +12 -15
  379. data/spec/unit/knife/status_spec.rb +2 -2
  380. data/spec/unit/knife_spec.rb +53 -0
  381. data/spec/unit/lwrp_spec.rb +59 -42
  382. data/spec/unit/mixin/checksum_spec.rb +2 -2
  383. data/spec/unit/mixin/deep_merge_spec.rb +101 -799
  384. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  385. data/spec/unit/mixin/params_validate_spec.rb +4 -37
  386. data/spec/unit/mixin/securable_spec.rb +5 -3
  387. data/spec/unit/mixin/template_spec.rb +119 -0
  388. data/spec/unit/node/attribute_spec.rb +195 -173
  389. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  390. data/spec/unit/node_spec.rb +366 -370
  391. data/spec/unit/platform_spec.rb +9 -10
  392. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  393. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  394. data/spec/unit/provider/directory_spec.rb +96 -64
  395. data/spec/unit/provider/env_spec.rb +2 -2
  396. data/spec/unit/provider/file_spec.rb +48 -39
  397. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  398. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  399. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  400. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  401. data/spec/unit/provider/group/pw_spec.rb +15 -12
  402. data/spec/unit/provider/group/usermod_spec.rb +6 -21
  403. data/spec/unit/provider/group/windows_spec.rb +8 -0
  404. data/spec/unit/provider/group_spec.rb +6 -28
  405. data/spec/unit/provider/http_request_spec.rb +28 -69
  406. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  407. data/spec/unit/provider/ohai_spec.rb +4 -4
  408. data/spec/unit/provider/package/apt_spec.rb +0 -1
  409. data/spec/unit/provider/package/ips_spec.rb +0 -1
  410. data/spec/unit/provider/package/portage_spec.rb +0 -44
  411. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  412. data/spec/unit/provider/package/rubygems_spec.rb +1 -44
  413. data/spec/unit/provider/package/yum_spec.rb +39 -36
  414. data/spec/unit/provider/package_spec.rb +7 -5
  415. data/spec/unit/provider/registry_key_spec.rb +269 -0
  416. data/spec/unit/provider/remote_directory_spec.rb +7 -3
  417. data/spec/unit/provider/remote_file_spec.rb +36 -0
  418. data/spec/unit/provider/route_spec.rb +4 -3
  419. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  420. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  421. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  422. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  423. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  424. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  425. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  426. data/spec/unit/provider/service/macosx_spec.rb +11 -66
  427. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  428. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  429. data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
  430. data/spec/unit/provider/subversion_spec.rb +1 -1
  431. data/spec/unit/provider/template_spec.rb +35 -11
  432. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  433. data/spec/unit/provider/user/useradd_spec.rb +1 -22
  434. data/spec/unit/provider/user_spec.rb +1 -1
  435. data/spec/unit/recipe_spec.rb +10 -8
  436. data/spec/unit/registry_helper_spec.rb +374 -0
  437. data/spec/unit/resource/mount_spec.rb +0 -11
  438. data/spec/unit/resource/registry_key_spec.rb +171 -0
  439. data/spec/unit/resource/remote_file_spec.rb +21 -23
  440. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  441. data/spec/unit/resource/service_spec.rb +11 -0
  442. data/spec/unit/resource_spec.rb +4 -19
  443. data/spec/unit/rest/auth_credentials_spec.rb +2 -19
  444. data/spec/unit/rest_spec.rb +130 -284
  445. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  446. data/spec/unit/run_context_spec.rb +18 -4
  447. data/spec/unit/run_list_spec.rb +0 -209
  448. data/spec/unit/run_lock_spec.rb +37 -0
  449. data/spec/unit/runner_spec.rb +101 -2
  450. data/spec/unit/scan_access_control_spec.rb +4 -4
  451. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  452. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  453. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
  454. data/spec/unit/shell_out_spec.rb +18 -0
  455. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  456. metadata +275 -234
  457. checksums.yaml +0 -15
  458. data/README.rdoc +0 -177
  459. data/distro/common/html/knife-recipe.1.html +0 -92
  460. data/lib/chef/certificate.rb +0 -161
  461. data/lib/chef/checksum.rb +0 -167
  462. data/lib/chef/checksum_cache.rb +0 -190
  463. data/lib/chef/cookbook_version_selector.rb +0 -168
  464. data/lib/chef/couchdb.rb +0 -246
  465. data/lib/chef/index_queue/amqp_client.rb +0 -116
  466. data/lib/chef/index_queue/consumer.rb +0 -76
  467. data/lib/chef/index_queue/indexable.rb +0 -109
  468. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  469. data/lib/chef/monkey_patches/moneta.rb +0 -50
  470. data/lib/chef/monkey_patches/uri.rb +0 -70
  471. data/lib/chef/openid_registration.rb +0 -187
  472. data/lib/chef/provider/user/solaris.rb +0 -90
  473. data/lib/chef/solr_query.rb +0 -187
  474. data/lib/chef/solr_query/lucene.treetop +0 -150
  475. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  476. data/lib/chef/solr_query/query_transform.rb +0 -65
  477. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  478. data/lib/chef/webui_user.rb +0 -231
  479. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  480. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  481. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  482. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  483. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  484. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  485. data/spec/data/mac_users/10.7.plist.xml +0 -559
  486. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  487. data/spec/data/mac_users/10.8.plist.xml +0 -559
  488. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  489. data/spec/data/mac_users/10.9.plist.xml +0 -560
  490. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  491. data/spec/functional/resource/base.rb +0 -40
  492. data/spec/functional/resource/group_spec.rb +0 -343
  493. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  494. data/spec/unit/certificate_spec.rb +0 -76
  495. data/spec/unit/checksum_cache_spec.rb +0 -209
  496. data/spec/unit/checksum_spec.rb +0 -94
  497. data/spec/unit/couchdb_spec.rb +0 -274
  498. data/spec/unit/index_queue_spec.rb +0 -391
  499. data/spec/unit/mixin/language_spec.rb +0 -305
  500. data/spec/unit/openid_registration_spec.rb +0 -153
  501. data/spec/unit/provider/user/solaris_spec.rb +0 -414
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  503. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  504. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  505. data/spec/unit/solr_query_spec.rb +0 -203
  506. data/spec/unit/webui_user_spec.rb +0 -238
@@ -0,0 +1,84 @@
1
+ #
2
+ # Author:: Bryan W. Berry (<bryan.berry@gmail.com>)
3
+ # Copyright:: Copyright (c) 2012 Bryan W. Berry
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
+ require 'spec_helper'
19
+
20
+ describe Chef::Application::Apply do
21
+
22
+ before do
23
+ @original_config = Chef::Config.configuration
24
+ @app = Chef::Application::Recipe.new
25
+ @app.stub!(:configure_logging).and_return(true)
26
+ @recipe_text = "package 'nyancat'"
27
+ Chef::Config[:solo] = true
28
+ end
29
+
30
+ after do
31
+ Chef::Config[:solo] = nil
32
+ Chef::Config.configuration.replace(@original_config)
33
+ Chef::Config[:solo] = false
34
+ end
35
+
36
+
37
+ describe "configuring the application" do
38
+ it "should set solo mode to true" do
39
+ @app.reconfigure
40
+ Chef::Config[:solo].should be_true
41
+ end
42
+ end
43
+ describe "read_recipe_file" do
44
+ before do
45
+ @recipe_file_name = "foo.rb"
46
+ @recipe_path = File.expand_path("foo.rb")
47
+ @recipe_file = mock("Tempfile (mock)", :read => @recipe_text)
48
+ @app.stub!(:open).with(@recipe_path).and_return(@recipe_file)
49
+ File.stub!(:exist?).with("foo.rb").and_return(true)
50
+ Chef::Application.stub!(:fatal!).and_return(true)
51
+ end
52
+ it "should read text properly" do
53
+ @app.read_recipe_file(@recipe_file_name)[0].should == @recipe_text
54
+ end
55
+ it "should return a file_handle" do
56
+ @app.read_recipe_file(@recipe_file_name)[1].should be_instance_of(RSpec::Mocks::Mock)
57
+ end
58
+ describe "when recipe doesn't exist" do
59
+ before do
60
+ File.stub!(:exist?).with(@recipe_file_name).and_return(false)
61
+ end
62
+ it "should raise a fatal" do
63
+ Chef::Application.should_receive(:fatal!)
64
+ @app.read_recipe_file(@recipe_file_name)
65
+ end
66
+ end
67
+ end
68
+ describe "temp_recipe_file" do
69
+ before do
70
+ @app.instance_variable_set(:@recipe_text, @recipe_text)
71
+ @app.temp_recipe_file
72
+ @recipe_fh = @app.instance_variable_get(:@recipe_fh)
73
+ end
74
+ it "should open a tempfile" do
75
+ @recipe_fh.path.should match(/.*recipe-temporary-file.*/)
76
+ end
77
+ it "should write recipe text to the tempfile" do
78
+ @recipe_fh.read.should == @recipe_text
79
+ end
80
+ it "should save the filename for later use" do
81
+ @recipe_fh.path.should == @app.instance_variable_get(:@recipe_filename)
82
+ end
83
+ end
84
+ end
@@ -19,7 +19,7 @@ require 'spec_helper'
19
19
 
20
20
  describe Chef::Application::Client, "reconfigure" do
21
21
  before do
22
- @original_config = Chef::Config.configuration.dup
22
+ @original_config = Chef::Config.configuration
23
23
 
24
24
  @app = Chef::Application::Client.new
25
25
  @app.stub!(:configure_opt_parser).and_return(true)
@@ -134,39 +134,3 @@ describe Chef::Application::Client, "setup_application" do
134
134
  Chef::Config[:solo] = false
135
135
  end
136
136
  end
137
-
138
- describe Chef::Application::Client, "run_application", :unix_only do
139
- before do
140
- Chef::Config[:daemonize] = true
141
- Chef::Config[:interval] = 10
142
-
143
- @pipe = IO.pipe
144
- @app = Chef::Application::Client.new
145
- Chef::Daemon.stub!(:daemonize).and_return(true)
146
- @app.stub(:run_chef_client) do
147
- @pipe[1].puts 'started'
148
- sleep 1
149
- @pipe[1].puts 'finished'
150
- end
151
- end
152
-
153
- it "should exit gracefully when sent SIGTERM" do
154
- pid = fork do
155
- begin
156
- @app.run_application
157
- rescue SystemExit # expected
158
- rescue Exception => e
159
- $stderr.puts e
160
- $stderr.puts e.backtrace
161
- ensure
162
- exit!
163
- end
164
- end
165
- IO.select([@pipe[0]], nil, nil, 10).should_not be_nil
166
- @pipe[0].gets.should == "started\n"
167
- Process.kill("TERM", pid)
168
- Process.wait
169
- IO.select([@pipe[0]], nil, nil, 0).should_not be_nil
170
- @pipe[0].gets.should == "finished\n"
171
- end
172
- end
@@ -23,6 +23,11 @@ describe Chef::Application::Knife do
23
23
 
24
24
  before(:all) do
25
25
  class NoopKnifeCommand < Chef::Knife
26
+ option :opt_with_default,
27
+ :short => "-D VALUE",
28
+ :long => "-optwithdefault VALUE",
29
+ :default => "default-value"
30
+
26
31
  def run
27
32
  end
28
33
  end
@@ -20,12 +20,17 @@ require 'spec_helper'
20
20
 
21
21
  describe Chef::Application do
22
22
  before do
23
+ @original_conf = Chef::Config.configuration
23
24
  Chef::Log.logger = Logger.new(StringIO.new)
24
25
  @app = Chef::Application.new
25
26
  Dir.stub!(:chdir).and_return(0)
26
27
  @app.stub!(:reconfigure)
27
28
  end
28
29
 
30
+ after do
31
+ Chef::Config.configuration.replace(@original_conf)
32
+ end
33
+
29
34
  describe "reconfigure" do
30
35
  before do
31
36
  @app = Chef::Application.new
@@ -170,14 +175,14 @@ describe Chef::Application do
170
175
  end
171
176
  end
172
177
 
173
- describe "configure_logging" do
178
+ describe "when configuring the logger" do
174
179
  before do
175
180
  @app = Chef::Application.new
176
181
  Chef::Log.stub!(:init)
177
- Chef::Log.stub!(:level=)
178
182
  end
179
183
 
180
184
  it "should initialise the chef logger" do
185
+ Chef::Log.stub!(:level=)
181
186
  Chef::Log.should_receive(:init).with(Chef::Config[:log_location]).and_return(true)
182
187
  @app.configure_logging
183
188
  end
@@ -187,6 +192,56 @@ describe Chef::Application do
187
192
  @app.configure_logging
188
193
  end
189
194
 
195
+ context "and log_level is :auto" do
196
+ before do
197
+ Chef::Config[:log_level] = :auto
198
+ end
199
+
200
+ context "and STDOUT is to a tty" do
201
+ before do
202
+ STDOUT.stub!(:tty?).and_return(true)
203
+ end
204
+
205
+ it "configures the log level to :warn" do
206
+ @app.configure_logging
207
+ Chef::Log.level.should == :warn
208
+ end
209
+
210
+ context "and force_logger is configured" do
211
+ before do
212
+ Chef::Config[:force_logger] = true
213
+ end
214
+
215
+ it "configures the log level to info" do
216
+ @app.configure_logging
217
+ Chef::Log.level.should == :info
218
+ end
219
+ end
220
+ end
221
+
222
+ context "and STDOUT is not to a tty" do
223
+ before do
224
+ STDOUT.stub!(:tty?).and_return(false)
225
+ end
226
+
227
+ it "configures the log level to :info" do
228
+ @app.configure_logging
229
+ Chef::Log.level.should == :info
230
+ end
231
+
232
+ context "and force_formatter is configured" do
233
+ before do
234
+ Chef::Config[:force_formatter] = true
235
+ end
236
+ it "sets the log level to :warn" do
237
+ @app.configure_logging
238
+ Chef::Log.level.should == :warn
239
+ end
240
+ end
241
+ end
242
+
243
+
244
+ end
190
245
  end
191
246
 
192
247
  describe "class method: fatal!" do
@@ -36,7 +36,7 @@ describe Chef::Checksum::Storage::Filesystem do
36
36
  @storage.file_location.should == "/var/chef/checksums/3f/3fafecfb15585ede6b840158cbc2f399"
37
37
  end
38
38
 
39
- it "has the path to the file's subdirectory in the checksum repo" do
39
+ it "has the path the the file's subdirectory in the checksum repo" do
40
40
  @storage.checksum_repo_directory.should == "/var/chef/checksums/3f"
41
41
  end
42
42
 
@@ -0,0 +1,328 @@
1
+ #
2
+ # Author:: John Keiser (<jkeiser@opscode.com>)
3
+ # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'support/shared/unit/file_system_support'
21
+ require 'chef/chef_fs/file_pattern'
22
+ require 'chef/chef_fs/command_line'
23
+
24
+ # Removes the date stamp from the diff and replaces it with ' DATE'
25
+ # example match: "/dev/null\t2012-10-16 16:15:54.000000000 +0000"
26
+ # windows match: "--- /dev/null\tTue Oct 16 18:04:34 2012"
27
+ def remove_date(diff)
28
+ diff.gsub(/([+-]{3}.*)\t.*/, '\1 DATE')
29
+ end
30
+
31
+ describe 'diff', :uses_diff => true do
32
+ include FileSystemSupport
33
+
34
+ context 'with two filesystems with all types of difference' do
35
+ let(:a) {
36
+ memory_fs('a', {
37
+ :both_dirs => {
38
+ :sub_both_dirs => { :subsub => nil },
39
+ :sub_both_files => nil,
40
+ :sub_both_files_different => "a\n",
41
+ :sub_both_dirs_empty => {},
42
+ :sub_dirs_empty_in_a_filled_in_b => {},
43
+ :sub_dirs_empty_in_b_filled_in_a => { :subsub => nil },
44
+ :sub_a_only_dir => { :subsub => nil },
45
+ :sub_a_only_file => nil,
46
+ :sub_dir_in_a_file_in_b => {},
47
+ :sub_file_in_a_dir_in_b => nil
48
+ },
49
+ :both_files => nil,
50
+ :both_files_different => "a\n",
51
+ :both_dirs_empty => {},
52
+ :dirs_empty_in_a_filled_in_b => {},
53
+ :dirs_empty_in_b_filled_in_a => { :subsub => nil },
54
+ :dirs_in_a_cannot_be_in_b => {},
55
+ :file_in_a_cannot_be_in_b => nil,
56
+ :a_only_dir => { :subsub => nil },
57
+ :a_only_file => nil,
58
+ :dir_in_a_file_in_b => {},
59
+ :file_in_a_dir_in_b => nil
60
+ }, /cannot_be_in_a/)
61
+ }
62
+ let(:b) {
63
+ memory_fs('b', {
64
+ :both_dirs => {
65
+ :sub_both_dirs => { :subsub => nil },
66
+ :sub_both_files => nil,
67
+ :sub_both_files_different => "b\n",
68
+ :sub_both_dirs_empty => {},
69
+ :sub_dirs_empty_in_a_filled_in_b => { :subsub => nil },
70
+ :sub_dirs_empty_in_b_filled_in_a => {},
71
+ :sub_b_only_dir => { :subsub => nil },
72
+ :sub_b_only_file => nil,
73
+ :sub_dir_in_a_file_in_b => nil,
74
+ :sub_file_in_a_dir_in_b => {}
75
+ },
76
+ :both_files => nil,
77
+ :both_files_different => "b\n",
78
+ :both_dirs_empty => {},
79
+ :dirs_empty_in_a_filled_in_b => { :subsub => nil },
80
+ :dirs_empty_in_b_filled_in_a => {},
81
+ :dirs_in_b_cannot_be_in_a => {},
82
+ :file_in_b_cannot_be_in_a => nil,
83
+ :b_only_dir => { :subsub => nil },
84
+ :b_only_file => nil,
85
+ :dir_in_a_file_in_b => nil,
86
+ :file_in_a_dir_in_b => {}
87
+ }, /cannot_be_in_b/)
88
+ }
89
+ it 'Chef::ChefFS::CommandLine.diff(/)' do
90
+ results = []
91
+ Chef::ChefFS::CommandLine.diff(pattern('/'), a, b, nil, nil) do |diff|
92
+ results << remove_date(diff)
93
+ end
94
+ results.should =~ [
95
+ 'diff --knife a/both_dirs/sub_both_files_different b/both_dirs/sub_both_files_different
96
+ --- a/both_dirs/sub_both_files_different DATE
97
+ +++ b/both_dirs/sub_both_files_different DATE
98
+ @@ -1 +1 @@
99
+ -a
100
+ +b
101
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
102
+ new file
103
+ --- /dev/null DATE
104
+ +++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
105
+ @@ -0,0 +1 @@
106
+ +subsub
107
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
108
+ deleted file
109
+ --- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
110
+ +++ /dev/null DATE
111
+ @@ -1 +0,0 @@
112
+ -subsub
113
+ ','Only in a/both_dirs: sub_a_only_dir
114
+ ','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
115
+ deleted file
116
+ --- a/both_dirs/sub_a_only_file DATE
117
+ +++ /dev/null DATE
118
+ @@ -1 +0,0 @@
119
+ -sub_a_only_file
120
+ ','File b/both_dirs/sub_dir_in_a_file_in_b is a directory while file b/both_dirs/sub_dir_in_a_file_in_b is a regular file
121
+ ','File a/both_dirs/sub_file_in_a_dir_in_b is a regular file while file a/both_dirs/sub_file_in_a_dir_in_b is a directory
122
+ ','Only in b/both_dirs: sub_b_only_dir
123
+ ','diff --knife a/both_dirs/sub_b_only_file b/both_dirs/sub_b_only_file
124
+ new file
125
+ --- /dev/null DATE
126
+ +++ b/both_dirs/sub_b_only_file DATE
127
+ @@ -0,0 +1 @@
128
+ +sub_b_only_file
129
+ ','diff --knife a/both_files_different b/both_files_different
130
+ --- a/both_files_different DATE
131
+ +++ b/both_files_different DATE
132
+ @@ -1 +1 @@
133
+ -a
134
+ +b
135
+ ','diff --knife a/dirs_empty_in_a_filled_in_b/subsub b/dirs_empty_in_a_filled_in_b/subsub
136
+ new file
137
+ --- /dev/null DATE
138
+ +++ b/dirs_empty_in_a_filled_in_b/subsub DATE
139
+ @@ -0,0 +1 @@
140
+ +subsub
141
+ ','diff --knife a/dirs_empty_in_b_filled_in_a/subsub b/dirs_empty_in_b_filled_in_a/subsub
142
+ deleted file
143
+ --- a/dirs_empty_in_b_filled_in_a/subsub DATE
144
+ +++ /dev/null DATE
145
+ @@ -1 +0,0 @@
146
+ -subsub
147
+ ','Only in a: a_only_dir
148
+ ','diff --knife a/a_only_file b/a_only_file
149
+ deleted file
150
+ --- a/a_only_file DATE
151
+ +++ /dev/null DATE
152
+ @@ -1 +0,0 @@
153
+ -a_only_file
154
+ ','File b/dir_in_a_file_in_b is a directory while file b/dir_in_a_file_in_b is a regular file
155
+ ','File a/file_in_a_dir_in_b is a regular file while file a/file_in_a_dir_in_b is a directory
156
+ ','Only in b: b_only_dir
157
+ ','diff --knife a/b_only_file b/b_only_file
158
+ new file
159
+ --- /dev/null DATE
160
+ +++ b/b_only_file DATE
161
+ @@ -0,0 +1 @@
162
+ +b_only_file
163
+ ' ]
164
+ end
165
+ it 'Chef::ChefFS::CommandLine.diff(/both_dirs)' do
166
+ results = []
167
+ Chef::ChefFS::CommandLine.diff(pattern('/both_dirs'), a, b, nil, nil) do |diff|
168
+ results << remove_date(diff)
169
+ end
170
+ results.should =~ [
171
+ 'diff --knife a/both_dirs/sub_both_files_different b/both_dirs/sub_both_files_different
172
+ --- a/both_dirs/sub_both_files_different DATE
173
+ +++ b/both_dirs/sub_both_files_different DATE
174
+ @@ -1 +1 @@
175
+ -a
176
+ +b
177
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
178
+ new file
179
+ --- /dev/null DATE
180
+ +++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
181
+ @@ -0,0 +1 @@
182
+ +subsub
183
+ ','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
184
+ deleted file
185
+ --- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
186
+ +++ /dev/null DATE
187
+ @@ -1 +0,0 @@
188
+ -subsub
189
+ ','Only in a/both_dirs: sub_a_only_dir
190
+ ','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
191
+ deleted file
192
+ --- a/both_dirs/sub_a_only_file DATE
193
+ +++ /dev/null DATE
194
+ @@ -1 +0,0 @@
195
+ -sub_a_only_file
196
+ ','File b/both_dirs/sub_dir_in_a_file_in_b is a directory while file b/both_dirs/sub_dir_in_a_file_in_b is a regular file
197
+ ','File a/both_dirs/sub_file_in_a_dir_in_b is a regular file while file a/both_dirs/sub_file_in_a_dir_in_b is a directory
198
+ ','Only in b/both_dirs: sub_b_only_dir
199
+ ','diff --knife a/both_dirs/sub_b_only_file b/both_dirs/sub_b_only_file
200
+ new file
201
+ --- /dev/null DATE
202
+ +++ b/both_dirs/sub_b_only_file DATE
203
+ @@ -0,0 +1 @@
204
+ +sub_b_only_file
205
+ ' ]
206
+ end
207
+ it 'Chef::ChefFS::CommandLine.diff(/) with depth 1' do
208
+ results = []
209
+ Chef::ChefFS::CommandLine.diff(pattern('/'), a, b, 1, nil) do |diff|
210
+ results << remove_date(diff)
211
+ end
212
+ results.should =~ [
213
+ 'Common subdirectories: /both_dirs
214
+ ','diff --knife a/both_files_different b/both_files_different
215
+ --- a/both_files_different DATE
216
+ +++ b/both_files_different DATE
217
+ @@ -1 +1 @@
218
+ -a
219
+ +b
220
+ ','Common subdirectories: /both_dirs_empty
221
+ ','Common subdirectories: /dirs_empty_in_b_filled_in_a
222
+ ','Common subdirectories: /dirs_empty_in_a_filled_in_b
223
+ ','Only in a: a_only_dir
224
+ ','diff --knife a/a_only_file b/a_only_file
225
+ deleted file
226
+ --- a/a_only_file DATE
227
+ +++ /dev/null DATE
228
+ @@ -1 +0,0 @@
229
+ -a_only_file
230
+ ','File b/dir_in_a_file_in_b is a directory while file b/dir_in_a_file_in_b is a regular file
231
+ ','File a/file_in_a_dir_in_b is a regular file while file a/file_in_a_dir_in_b is a directory
232
+ ','Only in b: b_only_dir
233
+ ','diff --knife a/b_only_file b/b_only_file
234
+ new file
235
+ --- /dev/null DATE
236
+ +++ b/b_only_file DATE
237
+ @@ -0,0 +1 @@
238
+ +b_only_file
239
+ ' ]
240
+ end
241
+ it 'Chef::ChefFS::CommandLine.diff(/*_*) with depth 0' do
242
+ results = []
243
+ Chef::ChefFS::CommandLine.diff(pattern('/*_*'), a, b, 0, nil) do |diff|
244
+ results << remove_date(diff)
245
+ end
246
+ results.should =~ [
247
+ 'Common subdirectories: /both_dirs
248
+ ','diff --knife a/both_files_different b/both_files_different
249
+ --- a/both_files_different DATE
250
+ +++ b/both_files_different DATE
251
+ @@ -1 +1 @@
252
+ -a
253
+ +b
254
+ ','Common subdirectories: /both_dirs_empty
255
+ ','Common subdirectories: /dirs_empty_in_b_filled_in_a
256
+ ','Common subdirectories: /dirs_empty_in_a_filled_in_b
257
+ ','Only in a: a_only_dir
258
+ ','diff --knife a/a_only_file b/a_only_file
259
+ deleted file
260
+ --- a/a_only_file DATE
261
+ +++ /dev/null DATE
262
+ @@ -1 +0,0 @@
263
+ -a_only_file
264
+ ','File b/dir_in_a_file_in_b is a directory while file b/dir_in_a_file_in_b is a regular file
265
+ ','File a/file_in_a_dir_in_b is a regular file while file a/file_in_a_dir_in_b is a directory
266
+ ','Only in b: b_only_dir
267
+ ','diff --knife a/b_only_file b/b_only_file
268
+ new file
269
+ --- /dev/null DATE
270
+ +++ b/b_only_file DATE
271
+ @@ -0,0 +1 @@
272
+ +b_only_file
273
+ ' ]
274
+ end
275
+ it 'Chef::ChefFS::CommandLine.diff(/) in name-only mode' do
276
+ results = []
277
+ Chef::ChefFS::CommandLine.diff(pattern('/'), a, b, nil, :name_only) do |diff|
278
+ results << remove_date(diff)
279
+ end
280
+ results.should =~ [
281
+ "b/both_dirs/sub_both_files_different\n",
282
+ "b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub\n",
283
+ "b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub\n",
284
+ "b/both_dirs/sub_a_only_dir\n",
285
+ "b/both_dirs/sub_a_only_file\n",
286
+ "b/both_dirs/sub_b_only_dir\n",
287
+ "b/both_dirs/sub_b_only_file\n",
288
+ "b/both_dirs/sub_dir_in_a_file_in_b\n",
289
+ "b/both_dirs/sub_file_in_a_dir_in_b\n",
290
+ "b/both_files_different\n",
291
+ "b/dirs_empty_in_b_filled_in_a/subsub\n",
292
+ "b/dirs_empty_in_a_filled_in_b/subsub\n",
293
+ "b/a_only_dir\n",
294
+ "b/a_only_file\n",
295
+ "b/b_only_dir\n",
296
+ "b/b_only_file\n",
297
+ "b/dir_in_a_file_in_b\n",
298
+ "b/file_in_a_dir_in_b\n"
299
+ ]
300
+ end
301
+ it 'Chef::ChefFS::CommandLine.diff(/) in name-status mode' do
302
+ results = []
303
+ Chef::ChefFS::CommandLine.diff(pattern('/'), a, b, nil, :name_status) do |diff|
304
+ results << remove_date(diff)
305
+ end
306
+ results.should =~ [
307
+ "M\tb/both_dirs/sub_both_files_different\n",
308
+ "D\tb/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub\n",
309
+ "A\tb/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub\n",
310
+ "D\tb/both_dirs/sub_a_only_dir\n",
311
+ "D\tb/both_dirs/sub_a_only_file\n",
312
+ "A\tb/both_dirs/sub_b_only_dir\n",
313
+ "A\tb/both_dirs/sub_b_only_file\n",
314
+ "T\tb/both_dirs/sub_dir_in_a_file_in_b\n",
315
+ "T\tb/both_dirs/sub_file_in_a_dir_in_b\n",
316
+ "M\tb/both_files_different\n",
317
+ "D\tb/dirs_empty_in_b_filled_in_a/subsub\n",
318
+ "A\tb/dirs_empty_in_a_filled_in_b/subsub\n",
319
+ "D\tb/a_only_dir\n",
320
+ "D\tb/a_only_file\n",
321
+ "A\tb/b_only_dir\n",
322
+ "A\tb/b_only_file\n",
323
+ "T\tb/dir_in_a_file_in_b\n",
324
+ "T\tb/file_in_a_dir_in_b\n"
325
+ ]
326
+ end
327
+ end
328
+ end