chef 10.34.6 → 11.0.0.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +4 -12
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/shef +6 -5
  7. data/distro/common/html/chef-client.8.html +4 -4
  8. data/distro/common/html/chef-expander.8.html +4 -4
  9. data/distro/common/html/chef-expanderctl.8.html +4 -4
  10. data/distro/common/html/chef-server-webui.8.html +4 -4
  11. data/distro/common/html/chef-server.8.html +4 -4
  12. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  13. data/distro/common/html/chef-solo.8.html +18 -12
  14. data/distro/common/html/chef-solr.8.html +4 -4
  15. data/distro/common/html/knife-bootstrap.1.html +4 -4
  16. data/distro/common/html/knife-client.1.html +4 -4
  17. data/distro/common/html/knife-configure.1.html +4 -4
  18. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  19. data/distro/common/html/knife-cookbook.1.html +10 -7
  20. data/distro/common/html/knife-data-bag.1.html +10 -7
  21. data/distro/common/html/knife-environment.1.html +8 -6
  22. data/distro/common/html/knife-exec.1.html +9 -9
  23. data/distro/common/html/knife-index.1.html +4 -4
  24. data/distro/common/html/knife-node.1.html +4 -4
  25. data/distro/common/html/knife-role.1.html +4 -4
  26. data/distro/common/html/knife-search.1.html +4 -4
  27. data/distro/common/html/knife-ssh.1.html +4 -4
  28. data/distro/common/html/knife-status.1.html +4 -4
  29. data/distro/common/html/knife-tag.1.html +4 -4
  30. data/distro/common/html/knife.1.html +8 -13
  31. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  32. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  33. data/distro/common/man/man1/knife-client.1 +1 -1
  34. data/distro/common/man/man1/knife-configure.1 +1 -1
  35. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  36. data/distro/common/man/man1/knife-cookbook.1 +15 -2
  37. data/distro/common/man/man1/knife-data-bag.1 +15 -2
  38. data/distro/common/man/man1/knife-environment.1 +12 -2
  39. data/distro/common/man/man1/knife-exec.1 +4 -7
  40. data/distro/common/man/man1/knife-index.1 +1 -1
  41. data/distro/common/man/man1/knife-node.1 +1 -1
  42. data/distro/common/man/man1/knife-role.1 +1 -1
  43. data/distro/common/man/man1/knife-search.1 +1 -1
  44. data/distro/common/man/man1/knife-ssh.1 +1 -1
  45. data/distro/common/man/man1/knife-status.1 +1 -1
  46. data/distro/common/man/man1/knife-tag.1 +1 -1
  47. data/distro/common/man/man1/knife.1 +3 -6
  48. data/distro/common/man/man8/chef-client.8 +1 -1
  49. data/distro/common/man/man8/chef-expander.8 +1 -1
  50. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  51. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  52. data/distro/common/man/man8/chef-server.8 +1 -1
  53. data/distro/common/man/man8/chef-solo.8 +36 -4
  54. data/distro/common/man/man8/chef-solr.8 +1 -1
  55. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  56. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  57. data/distro/common/markdown/man1/knife.mkd +4 -9
  58. data/distro/debian/etc/default/chef-client +0 -1
  59. data/distro/debian/etc/init.d/chef-client +2 -2
  60. data/lib/chef.rb +2 -5
  61. data/lib/chef/api_client.rb +20 -130
  62. data/lib/chef/api_client/registration.rb +126 -0
  63. data/lib/chef/application.rb +71 -14
  64. data/lib/chef/application/apply.rb +160 -0
  65. data/lib/chef/application/client.rb +25 -18
  66. data/lib/chef/application/knife.rb +0 -2
  67. data/lib/chef/application/solo.rb +23 -8
  68. data/lib/chef/application/windows_service.rb +5 -2
  69. data/lib/chef/applications.rb +1 -0
  70. data/lib/chef/chef_fs.rb +11 -0
  71. data/lib/chef/chef_fs/command_line.rb +232 -0
  72. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  73. data/lib/chef/chef_fs/file_system.rb +358 -0
  74. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  75. data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
  76. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
  77. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
  78. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
  79. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
  80. data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
  81. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  82. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
  83. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
  84. data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
  85. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
  86. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  87. data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
  88. data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
  89. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  90. data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
  91. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
  92. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
  94. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
  95. data/lib/chef/chef_fs/knife.rb +77 -0
  96. data/lib/chef/chef_fs/path_utils.rb +64 -0
  97. data/lib/chef/client.rb +44 -21
  98. data/lib/chef/config.rb +52 -43
  99. data/lib/chef/cookbook/synchronizer.rb +6 -8
  100. data/lib/chef/cookbook/syntax_check.rb +61 -14
  101. data/lib/chef/cookbook_loader.rb +39 -26
  102. data/lib/chef/cookbook_uploader.rb +17 -19
  103. data/lib/chef/cookbook_version.rb +3 -302
  104. data/lib/chef/daemon.rb +3 -18
  105. data/lib/chef/data_bag.rb +4 -97
  106. data/lib/chef/data_bag_item.rb +2 -65
  107. data/lib/chef/digester.rb +73 -0
  108. data/lib/chef/dsl.rb +6 -0
  109. data/lib/chef/dsl/data_query.rb +66 -0
  110. data/lib/chef/dsl/include_attribute.rb +60 -0
  111. data/lib/chef/dsl/include_recipe.rb +42 -0
  112. data/lib/chef/dsl/platform_introspection.rb +213 -0
  113. data/lib/chef/dsl/recipe.rb +84 -0
  114. data/lib/chef/dsl/registry_helper.rb +59 -0
  115. data/lib/chef/encrypted_data_bag_item.rb +74 -19
  116. data/lib/chef/environment.rb +9 -180
  117. data/lib/chef/exceptions.rb +87 -14
  118. data/lib/chef/formatters/base.rb +4 -1
  119. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
  120. data/lib/chef/json_compat.rb +1 -97
  121. data/lib/chef/knife.rb +90 -41
  122. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  123. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  124. data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
  125. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  126. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  127. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  128. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  129. data/lib/chef/knife/configure.rb +1 -2
  130. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  131. data/lib/chef/knife/cookbook_test.rb +3 -2
  132. data/lib/chef/knife/cookbook_upload.rb +12 -7
  133. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  134. data/lib/chef/knife/core/generic_presenter.rb +26 -13
  135. data/lib/chef/knife/core/node_editor.rb +36 -16
  136. data/lib/chef/knife/core/node_presenter.rb +1 -1
  137. data/lib/chef/knife/core/text_formatter.rb +23 -37
  138. data/lib/chef/knife/core/ui.rb +15 -9
  139. data/lib/chef/knife/delete.rb +39 -0
  140. data/lib/chef/knife/diff.rb +46 -0
  141. data/lib/chef/knife/download.rb +50 -0
  142. data/lib/chef/knife/environment_show.rb +7 -0
  143. data/lib/chef/knife/exec.rb +5 -5
  144. data/lib/chef/knife/help_topics.rb +1 -1
  145. data/lib/chef/knife/index_rebuild.rb +91 -7
  146. data/lib/chef/knife/list.rb +109 -0
  147. data/lib/chef/knife/raw.rb +108 -0
  148. data/lib/chef/knife/search.rb +40 -22
  149. data/lib/chef/knife/show.rb +32 -0
  150. data/lib/chef/knife/ssh.rb +6 -2
  151. data/lib/chef/knife/upload.rb +50 -0
  152. data/lib/chef/mixin/checksum.rb +3 -3
  153. data/lib/chef/mixin/deep_merge.rb +55 -197
  154. data/lib/chef/mixin/language.rb +9 -222
  155. data/lib/chef/mixin/language_include_attribute.rb +6 -38
  156. data/lib/chef/mixin/language_include_recipe.rb +3 -35
  157. data/lib/chef/mixin/params_validate.rb +6 -19
  158. data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
  159. data/lib/chef/mixin/securable.rb +32 -7
  160. data/lib/chef/mixin/template.rb +40 -0
  161. data/lib/chef/mixins.rb +0 -4
  162. data/lib/chef/monkey_patches/net_http.rb +0 -34
  163. data/lib/chef/node.rb +133 -309
  164. data/lib/chef/node/attribute.rb +333 -473
  165. data/lib/chef/node/attribute_collections.rb +199 -0
  166. data/lib/chef/node/immutable_collections.rb +186 -0
  167. data/lib/chef/platform.rb +7 -22
  168. data/lib/chef/provider.rb +2 -49
  169. data/lib/chef/provider/breakpoint.rb +6 -6
  170. data/lib/chef/provider/cookbook_file.rb +5 -33
  171. data/lib/chef/provider/deploy.rb +2 -1
  172. data/lib/chef/provider/directory.rb +14 -17
  173. data/lib/chef/provider/file.rb +19 -52
  174. data/lib/chef/provider/group.rb +31 -51
  175. data/lib/chef/provider/group/dscl.rb +13 -53
  176. data/lib/chef/provider/group/gpasswd.rb +19 -14
  177. data/lib/chef/provider/group/groupadd.rb +1 -41
  178. data/lib/chef/provider/group/groupmod.rb +36 -46
  179. data/lib/chef/provider/group/pw.rb +16 -59
  180. data/lib/chef/provider/group/suse.rb +13 -16
  181. data/lib/chef/provider/group/usermod.rb +18 -40
  182. data/lib/chef/provider/group/windows.rb +6 -13
  183. data/lib/chef/provider/http_request.rb +25 -42
  184. data/lib/chef/provider/link.rb +2 -0
  185. data/lib/chef/provider/lwrp_base.rb +150 -0
  186. data/lib/chef/provider/package/portage.rb +4 -9
  187. data/lib/chef/provider/package/rpm.rb +2 -2
  188. data/lib/chef/provider/package/rubygems.rb +9 -41
  189. data/lib/chef/provider/package/yum.rb +12 -19
  190. data/lib/chef/provider/registry_key.rb +156 -0
  191. data/lib/chef/provider/remote_directory.rb +2 -0
  192. data/lib/chef/provider/remote_file.rb +21 -12
  193. data/lib/chef/provider/ruby_block.rb +5 -2
  194. data/lib/chef/provider/service.rb +15 -0
  195. data/lib/chef/provider/service/init.rb +9 -7
  196. data/lib/chef/provider/service/macosx.rb +15 -73
  197. data/lib/chef/provider/service/simple.rb +1 -1
  198. data/lib/chef/provider/service/solaris.rb +3 -3
  199. data/lib/chef/provider/template.rb +22 -25
  200. data/lib/chef/provider/template_finder.rb +61 -0
  201. data/lib/chef/provider/user.rb +0 -1
  202. data/lib/chef/provider/user/dscl.rb +175 -568
  203. data/lib/chef/provider/user/useradd.rb +30 -47
  204. data/lib/chef/providers.rb +3 -2
  205. data/lib/chef/recipe.rb +14 -8
  206. data/lib/chef/resource.rb +13 -154
  207. data/lib/chef/resource/group.rb +1 -11
  208. data/lib/chef/resource/http_request.rb +2 -1
  209. data/lib/chef/resource/lwrp_base.rb +127 -0
  210. data/lib/chef/resource/mount.rb +10 -11
  211. data/lib/chef/resource/registry_key.rb +86 -0
  212. data/lib/chef/resource/remote_directory.rb +6 -5
  213. data/lib/chef/resource/remote_file.rb +22 -31
  214. data/lib/chef/resource/ruby_block.rb +2 -2
  215. data/lib/chef/resource/service.rb +14 -0
  216. data/lib/chef/resource/user.rb +0 -18
  217. data/lib/chef/resource_collection.rb +25 -21
  218. data/lib/chef/resources.rb +2 -1
  219. data/lib/chef/rest.rb +50 -131
  220. data/lib/chef/rest/auth_credentials.rb +4 -20
  221. data/lib/chef/rest/rest_request.rb +2 -7
  222. data/lib/chef/role.rb +1 -97
  223. data/lib/chef/run_context.rb +108 -130
  224. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  225. data/lib/chef/run_list.rb +0 -2
  226. data/lib/chef/run_list/run_list_expansion.rb +0 -15
  227. data/lib/chef/run_lock.rb +90 -0
  228. data/lib/chef/runner.rb +28 -5
  229. data/lib/chef/sandbox.rb +15 -148
  230. data/lib/chef/scan_access_control.rb +2 -4
  231. data/lib/chef/shef/ext.rb +3 -575
  232. data/lib/chef/{shef.rb → shell.rb} +35 -40
  233. data/lib/chef/shell/ext.rb +593 -0
  234. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  235. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  236. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
  237. data/lib/chef/shell_out.rb +7 -0
  238. data/lib/chef/util/windows/net_group.rb +1 -5
  239. data/lib/chef/version.rb +3 -3
  240. data/lib/chef/win32/api/process.rb +0 -1
  241. data/lib/chef/win32/handle.rb +1 -8
  242. data/lib/chef/win32/registry.rb +371 -0
  243. data/spec/data/big_json.json +1 -2
  244. data/spec/data/big_json_plus_one.json +1 -2
  245. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  246. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  247. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  248. data/spec/data/nodes/default.rb +3 -3
  249. data/spec/data/nodes/test.example.com.rb +3 -3
  250. data/spec/data/nodes/test.rb +3 -3
  251. data/spec/data/partial_one.erb +1 -0
  252. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  253. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  254. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  255. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  256. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  257. data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
  258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  264. data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
  265. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  267. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  268. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  269. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  270. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  271. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  272. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  273. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  274. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  275. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  276. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  277. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  279. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  281. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  282. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  283. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  284. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  285. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  286. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  287. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  288. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  289. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  290. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  291. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  292. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  293. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  294. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  295. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  296. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  297. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  298. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  300. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  301. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  302. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  303. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  304. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  305. data/spec/data/shef-config.rb +7 -0
  306. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  307. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  308. data/spec/functional/knife/exec_spec.rb +2 -2
  309. data/spec/functional/knife/ssh_spec.rb +5 -1
  310. data/spec/functional/resource/cookbook_file_spec.rb +7 -19
  311. data/spec/functional/resource/directory_spec.rb +4 -0
  312. data/spec/functional/resource/file_spec.rb +56 -22
  313. data/spec/functional/resource/link_spec.rb +2 -0
  314. data/spec/functional/resource/registry_spec.rb +576 -0
  315. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  316. data/spec/functional/resource/remote_file_spec.rb +18 -0
  317. data/spec/functional/resource/template_spec.rb +23 -2
  318. data/spec/functional/run_lock_spec.rb +106 -0
  319. data/spec/functional/shell_spec.rb +100 -0
  320. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  321. data/spec/spec_helper.rb +5 -29
  322. data/spec/stress/win32/security_spec.rb +1 -1
  323. data/spec/support/chef_helpers.rb +0 -2
  324. data/spec/support/platform_helpers.rb +8 -15
  325. data/spec/support/shared/functional/directory_resource.rb +84 -22
  326. data/spec/support/shared/functional/file_resource.rb +169 -71
  327. data/spec/support/shared/functional/securable_resource.rb +143 -119
  328. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  329. data/spec/support/shared/unit/file_system_support.rb +110 -0
  330. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  331. data/spec/unit/api_client/registration_spec.rb +175 -0
  332. data/spec/unit/api_client_spec.rb +78 -156
  333. data/spec/unit/application/apply.rb +84 -0
  334. data/spec/unit/application/client_spec.rb +1 -37
  335. data/spec/unit/application/knife_spec.rb +5 -0
  336. data/spec/unit/application_spec.rb +57 -2
  337. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  338. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  339. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  340. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  341. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  342. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  343. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  344. data/spec/unit/client_spec.rb +124 -33
  345. data/spec/unit/config_spec.rb +46 -13
  346. data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
  347. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  348. data/spec/unit/cookbook_loader_spec.rb +153 -91
  349. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  350. data/spec/unit/cookbook_spec.rb +3 -20
  351. data/spec/unit/cookbook_version_spec.rb +23 -122
  352. data/spec/unit/daemon_spec.rb +3 -24
  353. data/spec/unit/data_bag_spec.rb +6 -4
  354. data/spec/unit/digester_spec.rb +50 -0
  355. data/spec/unit/dsl/data_query_spec.rb +66 -0
  356. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  357. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  358. data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
  359. data/spec/unit/environment_spec.rb +0 -130
  360. data/spec/unit/exceptions_spec.rb +2 -3
  361. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  362. data/spec/unit/json_compat_spec.rb +15 -7
  363. data/spec/unit/knife/bootstrap_spec.rb +2 -0
  364. data/spec/unit/knife/configure_spec.rb +20 -14
  365. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  366. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  367. data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
  368. data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
  369. data/spec/unit/knife/core/ui_spec.rb +156 -125
  370. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  371. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  372. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  373. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  374. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  375. data/spec/unit/knife/knife_help.rb +7 -7
  376. data/spec/unit/knife/node_edit_spec.rb +6 -33
  377. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  378. data/spec/unit/knife/ssh_spec.rb +12 -15
  379. data/spec/unit/knife/status_spec.rb +2 -2
  380. data/spec/unit/knife_spec.rb +53 -0
  381. data/spec/unit/lwrp_spec.rb +59 -42
  382. data/spec/unit/mixin/checksum_spec.rb +2 -2
  383. data/spec/unit/mixin/deep_merge_spec.rb +101 -799
  384. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  385. data/spec/unit/mixin/params_validate_spec.rb +4 -37
  386. data/spec/unit/mixin/securable_spec.rb +5 -3
  387. data/spec/unit/mixin/template_spec.rb +119 -0
  388. data/spec/unit/node/attribute_spec.rb +195 -173
  389. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  390. data/spec/unit/node_spec.rb +366 -370
  391. data/spec/unit/platform_spec.rb +9 -10
  392. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  393. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  394. data/spec/unit/provider/directory_spec.rb +96 -64
  395. data/spec/unit/provider/env_spec.rb +2 -2
  396. data/spec/unit/provider/file_spec.rb +48 -39
  397. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  398. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  399. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  400. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  401. data/spec/unit/provider/group/pw_spec.rb +15 -12
  402. data/spec/unit/provider/group/usermod_spec.rb +6 -21
  403. data/spec/unit/provider/group/windows_spec.rb +8 -0
  404. data/spec/unit/provider/group_spec.rb +6 -28
  405. data/spec/unit/provider/http_request_spec.rb +28 -69
  406. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  407. data/spec/unit/provider/ohai_spec.rb +4 -4
  408. data/spec/unit/provider/package/apt_spec.rb +0 -1
  409. data/spec/unit/provider/package/ips_spec.rb +0 -1
  410. data/spec/unit/provider/package/portage_spec.rb +0 -44
  411. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  412. data/spec/unit/provider/package/rubygems_spec.rb +1 -44
  413. data/spec/unit/provider/package/yum_spec.rb +39 -36
  414. data/spec/unit/provider/package_spec.rb +7 -5
  415. data/spec/unit/provider/registry_key_spec.rb +269 -0
  416. data/spec/unit/provider/remote_directory_spec.rb +7 -3
  417. data/spec/unit/provider/remote_file_spec.rb +36 -0
  418. data/spec/unit/provider/route_spec.rb +4 -3
  419. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  420. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  421. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  422. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  423. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  424. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  425. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  426. data/spec/unit/provider/service/macosx_spec.rb +11 -66
  427. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  428. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  429. data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
  430. data/spec/unit/provider/subversion_spec.rb +1 -1
  431. data/spec/unit/provider/template_spec.rb +35 -11
  432. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  433. data/spec/unit/provider/user/useradd_spec.rb +1 -22
  434. data/spec/unit/provider/user_spec.rb +1 -1
  435. data/spec/unit/recipe_spec.rb +10 -8
  436. data/spec/unit/registry_helper_spec.rb +374 -0
  437. data/spec/unit/resource/mount_spec.rb +0 -11
  438. data/spec/unit/resource/registry_key_spec.rb +171 -0
  439. data/spec/unit/resource/remote_file_spec.rb +21 -23
  440. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  441. data/spec/unit/resource/service_spec.rb +11 -0
  442. data/spec/unit/resource_spec.rb +4 -19
  443. data/spec/unit/rest/auth_credentials_spec.rb +2 -19
  444. data/spec/unit/rest_spec.rb +130 -284
  445. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  446. data/spec/unit/run_context_spec.rb +18 -4
  447. data/spec/unit/run_list_spec.rb +0 -209
  448. data/spec/unit/run_lock_spec.rb +37 -0
  449. data/spec/unit/runner_spec.rb +101 -2
  450. data/spec/unit/scan_access_control_spec.rb +4 -4
  451. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  452. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  453. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
  454. data/spec/unit/shell_out_spec.rb +18 -0
  455. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  456. metadata +275 -234
  457. checksums.yaml +0 -15
  458. data/README.rdoc +0 -177
  459. data/distro/common/html/knife-recipe.1.html +0 -92
  460. data/lib/chef/certificate.rb +0 -161
  461. data/lib/chef/checksum.rb +0 -167
  462. data/lib/chef/checksum_cache.rb +0 -190
  463. data/lib/chef/cookbook_version_selector.rb +0 -168
  464. data/lib/chef/couchdb.rb +0 -246
  465. data/lib/chef/index_queue/amqp_client.rb +0 -116
  466. data/lib/chef/index_queue/consumer.rb +0 -76
  467. data/lib/chef/index_queue/indexable.rb +0 -109
  468. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  469. data/lib/chef/monkey_patches/moneta.rb +0 -50
  470. data/lib/chef/monkey_patches/uri.rb +0 -70
  471. data/lib/chef/openid_registration.rb +0 -187
  472. data/lib/chef/provider/user/solaris.rb +0 -90
  473. data/lib/chef/solr_query.rb +0 -187
  474. data/lib/chef/solr_query/lucene.treetop +0 -150
  475. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  476. data/lib/chef/solr_query/query_transform.rb +0 -65
  477. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  478. data/lib/chef/webui_user.rb +0 -231
  479. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  480. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  481. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  482. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  483. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  484. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  485. data/spec/data/mac_users/10.7.plist.xml +0 -559
  486. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  487. data/spec/data/mac_users/10.8.plist.xml +0 -559
  488. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  489. data/spec/data/mac_users/10.9.plist.xml +0 -560
  490. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  491. data/spec/functional/resource/base.rb +0 -40
  492. data/spec/functional/resource/group_spec.rb +0 -343
  493. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  494. data/spec/unit/certificate_spec.rb +0 -76
  495. data/spec/unit/checksum_cache_spec.rb +0 -209
  496. data/spec/unit/checksum_spec.rb +0 -94
  497. data/spec/unit/couchdb_spec.rb +0 -274
  498. data/spec/unit/index_queue_spec.rb +0 -391
  499. data/spec/unit/mixin/language_spec.rb +0 -305
  500. data/spec/unit/openid_registration_spec.rb +0 -153
  501. data/spec/unit/provider/user/solaris_spec.rb +0 -414
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  503. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  504. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  505. data/spec/unit/solr_query_spec.rb +0 -203
  506. data/spec/unit/webui_user_spec.rb +0 -238
@@ -1,76 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'spec_helper'
20
-
21
- require 'chef/certificate'
22
- require 'ostruct'
23
- require 'tempfile'
24
-
25
- class FakeFile
26
- attr_accessor :data
27
-
28
- def write(arg)
29
- @data = arg
30
- end
31
- end
32
-
33
- describe Chef::Certificate do
34
- describe "generate_signing_ca" do
35
- before(:each) do
36
- Chef::Config[:signing_ca_user] = nil
37
- Chef::Config[:signing_ca_group] = nil
38
- FileUtils.stub!(:mkdir_p).and_return(true)
39
- FileUtils.stub!(:chown).and_return(true)
40
- File.stub!(:open).and_return(true)
41
- File.stub!(:exists?).and_return(false)
42
- @ca_cert = FakeFile.new
43
- @ca_key = FakeFile.new
44
- end
45
-
46
- it "should generate a ca certificate" do
47
- File.should_receive(:open).with(Chef::Config[:signing_ca_cert], "w").and_yield(@ca_cert)
48
- Chef::Certificate.generate_signing_ca
49
- @ca_cert.data.should =~ /BEGIN CERTIFICATE/
50
- end
51
-
52
- it "should generate an RSA private key" do
53
- File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
54
- FileUtils.should_not_receive(:chown)
55
- Chef::Certificate.generate_signing_ca
56
- @ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
57
- end
58
-
59
- it "should generate an RSA private key with user and group" do
60
- Chef::Config[:signing_ca_user] = "funky"
61
- Chef::Config[:signing_ca_group] = "fresh"
62
- File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
63
- FileUtils.should_receive(:chown).with(Chef::Config[:signing_ca_user], Chef::Config[:signing_ca_group], Chef::Config[:signing_ca_key])
64
- Chef::Certificate.generate_signing_ca
65
- @ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
66
- end
67
- end
68
-
69
- describe "generate_keypair" do
70
- it "should return a client certificate" do
71
- public_key, private_key = Chef::Certificate.gen_keypair("oasis")
72
- public_key.to_s.should =~ /(BEGIN RSA PUBLIC KEY|BEGIN PUBLIC KEY)/
73
- private_key.to_s.should =~ /BEGIN RSA PRIVATE KEY/
74
- end
75
- end
76
- end
@@ -1,209 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Daniel DeLeo (<dan@kallistec.com>)
4
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
5
- # Copyright:: Copyright (c) 2009 Daniel DeLeo
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require 'spec_helper'
22
-
23
- describe Chef::ChecksumCache do
24
- before(:each) do
25
- Chef::Config[:cache_type] = "Memory"
26
- Chef::Config[:cache_options] = { }
27
- @cache = Chef::ChecksumCache.instance
28
- @cache.reset!
29
- end
30
-
31
- describe "loading the moneta backend" do
32
- it "should build a Chef::ChecksumCache object" do
33
- @cache.should be_a_kind_of(Chef::ChecksumCache)
34
- end
35
-
36
- it "should set up a Moneta Cache adaptor" do
37
- @cache.moneta.should be_a_kind_of(Moneta::Memory)
38
- end
39
-
40
- it "should raise an exception if it cannot load the moneta adaptor" do
41
- Chef::Log.should_receive(:fatal).with(/^Could not load Moneta back end/)
42
- lambda {
43
- c = Chef::ChecksumCache.instance.reset!('WTF')
44
- }.should raise_error(LoadError)
45
- end
46
- end
47
-
48
- describe "when caching checksums of cookbook files and templates" do
49
-
50
- before do
51
- @cache.reset!("Memory", {})
52
- end
53
-
54
- it "proxies the class method checksum_for_file to the instance" do
55
- @cache.should_receive(:checksum_for_file).with("a_file_or_a_fail")
56
- Chef::ChecksumCache.checksum_for_file("a_file_or_a_fail")
57
- end
58
-
59
- it "returns a cached checksum value" do
60
- @cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
61
- fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(12345))
62
- File.should_receive(:stat).with("riseofthemachines").and_return(fstat)
63
- @cache.checksum_for_file("riseofthemachines").should == "123abc"
64
- end
65
-
66
- it "gives nil for a cache miss" do
67
- @cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
68
- fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
69
- @cache.lookup_checksum("chef-file-riseofthemachines", fstat).should be_nil
70
- end
71
-
72
- it "treats a non-matching mtime as a cache miss" do
73
- @cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
74
- fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
75
- @cache.lookup_checksum("chef-file-riseofthemachines", fstat).should be_nil
76
- end
77
-
78
- it "computes a checksum of a file" do
79
- fixture_file = CHEF_SPEC_DATA + "/checksum/random.txt"
80
- expected = "09ee9c8cc70501763563bcf9c218d71b2fbf4186bf8e1e0da07f0f42c80a3394"
81
- @cache.send(:checksum_file, fixture_file, Digest::SHA256.new).should == expected
82
- end
83
-
84
- it "computes a checksum and stores it in the cache" do
85
- fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
86
- @cache.should_receive(:checksum_file).with("riseofthemachines", an_instance_of(Digest::SHA256)).and_return("ohai2uChefz")
87
- @cache.generate_checksum("chef-file-riseofthemachines", "riseofthemachines", fstat).should == "ohai2uChefz"
88
- @cache.lookup_checksum("chef-file-riseofthemachines", fstat).should == "ohai2uChefz"
89
- end
90
-
91
- it "returns a generated checksum if there is no cached value" do
92
- fixture_file = CHEF_SPEC_DATA + "/checksum/random.txt"
93
- expected = "09ee9c8cc70501763563bcf9c218d71b2fbf4186bf8e1e0da07f0f42c80a3394"
94
- @cache.checksum_for_file(fixture_file).should == expected
95
- end
96
-
97
- it "generates a key from a file name" do
98
- file = "/this/is/a/test/random.rb"
99
- @cache.generate_key(file).should == "chef-file--this-is-a-test-random-rb"
100
- end
101
-
102
- it "generates a key from a file name and group" do
103
- file = "/this/is/a/test/random.rb"
104
- @cache.generate_key(file, "spec").should == "spec-file--this-is-a-test-random-rb"
105
- end
106
-
107
- it "returns a cached checksum value using a user defined key" do
108
- key = @cache.generate_key("riseofthemachines", "specs")
109
- @cache.moneta[key] = {"mtime" => "12345", "checksum" => "123abc"}
110
- fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(12345))
111
- File.should_receive(:stat).with("riseofthemachines").and_return(fstat)
112
- @cache.checksum_for_file("riseofthemachines", key).should == "123abc"
113
- end
114
-
115
- it "generates a checksum from a non-file IO object" do
116
- io = StringIO.new("riseofthemachines\nriseofthechefs\n")
117
- expected_md5 = '0e157ac1e2dd73191b76067fb6b4bceb'
118
- @cache.generate_md5_checksum(io).should == expected_md5
119
- end
120
-
121
- end
122
-
123
- describe "when cleaning up after outdated checksums" do
124
-
125
- before do
126
- Chef::ChecksumCache.reset_cache_validity
127
- end
128
-
129
- it "initially has no valid cached checksums" do
130
- Chef::ChecksumCache.valid_cached_checksums.should be_empty
131
- end
132
-
133
- it "adds a checksum to the list of valid cached checksums when it's created" do
134
- @cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
135
- Chef::ChecksumCache.valid_cached_checksums.should have(1).valid_checksum
136
- end
137
-
138
- it "adds a checksum to the list of valid cached checksums when it's read" do
139
- @cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
140
- Chef::ChecksumCache.reset_cache_validity
141
- @cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
142
- Chef::ChecksumCache.valid_cached_checksums.should have(1).valid_checksum
143
- end
144
-
145
- context "with an existing set of cached checksums" do
146
- before do
147
- Chef::Config[:cache_type] = "BasicFile"
148
- Chef::Config[:cache_options] = {:path => File.join(CHEF_SPEC_DATA, "checksum_cache")}
149
-
150
- @expected_cached_checksums = ["chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0",
151
- "chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0",
152
- "chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0",
153
- "chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0",
154
- "chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0",
155
- "chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0",
156
- "chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0",
157
- "chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0",
158
- "chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0",
159
- "chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0",
160
- "chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0",
161
- "chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0",
162
- "chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0",
163
- "chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0",
164
- "chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0",
165
- "chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0",
166
- "chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0"]
167
- @expected_cached_checksums.sort!
168
- end
169
-
170
- after do
171
- Chef::Config[:cache_type] = "Memory"
172
- Chef::Config[:cache_options] = { }
173
- @cache = Chef::ChecksumCache.instance
174
- @cache.reset!
175
- end
176
-
177
- it "lists all of the cached checksums in the cache directory" do
178
- Chef::ChecksumCache.all_cached_checksums.keys.sort.should == @expected_cached_checksums
179
- end
180
-
181
- it "clears all of the checksums not marked valid from the checksums directory" do
182
- valid_cksum_key = "chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0"
183
- valid_cksum_file = File.join(CHEF_SPEC_DATA, "checksum_cache", valid_cksum_key)
184
- @expected_cached_checksums.delete(valid_cksum_key)
185
-
186
- Chef::ChecksumCache.valid_cached_checksums << valid_cksum_key
187
-
188
- Chef::ChecksumCache.should_not_receive(:remove_unused_checksum).with(valid_cksum_file)
189
- @expected_cached_checksums.each do |cksum_key|
190
- full_path_to_cksum = File.join(CHEF_SPEC_DATA, "checksum_cache", cksum_key)
191
- Chef::ChecksumCache.should_receive(:remove_unused_checksum).with(full_path_to_cksum)
192
- end
193
-
194
- Chef::ChecksumCache.cleanup_checksum_cache
195
- end
196
-
197
- it "cleans all 0byte checksum files when it encounters a Marshal error" do
198
- @cache.moneta.stub!(:fetch).and_raise(ArgumentError)
199
- # This cache file is 0 bytes, raises an argument error when
200
- # attempting to Marshal.load
201
- File.should_receive(:unlink).with(File.join(CHEF_SPEC_DATA, "checksum_cache", "chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0"))
202
- @cache.lookup_checksum("chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0", "foo")
203
- end
204
- end
205
-
206
- end
207
-
208
- end
209
-
@@ -1,94 +0,0 @@
1
- #
2
- # Author:: Daniel DeLeo (<dan@opscode.com>)
3
- # Copyright:: Copyright (c) 2010 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 'chef/checksum'
21
-
22
- describe Chef::Checksum do
23
-
24
- before do
25
- Chef::Log.logger = Logger.new(StringIO.new)
26
-
27
- @now = Time.now
28
-
29
- Time.stub!(:now).and_return(@now)
30
-
31
- @checksum_of_the_file = "3fafecfb15585ede6b840158cbc2f399"
32
- @checksum = Chef::Checksum.new(@checksum_of_the_file)
33
- end
34
-
35
- it "has no original committed file location" do
36
- @checksum.original_committed_file_location.should be_nil
37
- end
38
-
39
- it "has the MD5 checksum of the file it represents" do
40
- @checksum.checksum.should == @checksum_of_the_file
41
- end
42
-
43
- it "stores the time it was created" do
44
- @checksum.create_time.should == @now.iso8601
45
- end
46
-
47
- it "commits a sandbox file from a given location to the checksum repo location" do
48
- @checksum.storage.should_receive(:commit).with("/tmp/arbitrary_file_location")
49
- @checksum.should_receive(:cdb_save)
50
- @checksum.commit_sandbox_file("/tmp/arbitrary_file_location")
51
- @checksum.original_committed_file_location.should == "/tmp/arbitrary_file_location"
52
- end
53
-
54
- it "reverts committing a sandbox file" do
55
- @checksum.storage.should_receive(:commit).with("/tmp/arbitrary_file_location")
56
- @checksum.should_receive(:cdb_save)
57
- @checksum.commit_sandbox_file("/tmp/arbitrary_file_location")
58
- @checksum.original_committed_file_location.should == "/tmp/arbitrary_file_location"
59
-
60
- @checksum.storage.should_receive(:revert).with("/tmp/arbitrary_file_location")
61
- @checksum.should_receive(:cdb_destroy)
62
- @checksum.revert_sandbox_file_commit
63
- end
64
-
65
- it "raises an error when trying to revert a checksum that was not previously committed" do
66
- lambda {@checksum.revert_sandbox_file_commit}.should raise_error(Chef::Exceptions::IllegalChecksumRevert)
67
- end
68
-
69
- it "deletes the file and its document from couchdb" do
70
- @checksum.should_receive(:cdb_destroy)
71
- @checksum.storage.should_receive(:purge)
72
- @checksum.purge
73
- end
74
-
75
- describe "when converted to json" do
76
- before do
77
- @checksum_as_json = @checksum.to_json
78
- @checksum_as_hash_from_json = Chef::JSONCompat.from_json(@checksum_as_json, :create_additions => false)
79
- end
80
-
81
- it "contains the file's MD5 checksum" do
82
- @checksum_as_hash_from_json["checksum"].should == @checksum_of_the_file
83
- end
84
-
85
- it "contains the creation time" do
86
- @checksum_as_hash_from_json["create_time"].should == @now.iso8601
87
- end
88
-
89
- it "uses the file's MD5 checksum for its 'name' property" do
90
- @checksum_as_hash_from_json["name"].should == @checksum_of_the_file
91
- end
92
- end
93
-
94
- end
@@ -1,274 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'spec_helper'
20
-
21
- describe Chef::CouchDB do
22
- before(:each) do
23
- Chef::Config[:couchdb_database] = "chef"
24
- @rest = mock("Chef::REST")
25
- @rest.stub!(:run_request).and_return({"couchdb" => "Welcome", "version" =>"0.9.0"})
26
- @rest.stub!(:url).and_return("http://localhost:5984")
27
- Chef::REST.stub!(:new).and_return(@rest)
28
- @couchdb = Chef::CouchDB.new
29
- end
30
-
31
- describe "new" do
32
- it "should create a new Chef::REST object from the default url" do
33
- old_url = Chef::Config[:couchdb_url]
34
- Chef::Config[:couchdb_url] = "http://monkey"
35
- Chef::REST.should_receive(:new).with("http://monkey", nil, nil)
36
- Chef::CouchDB.new
37
- Chef::Config[:couchdb_url] = old_url
38
- end
39
-
40
- it "should create a new Chef::REST object from a provided url" do
41
- Chef::REST.should_receive(:new).with("http://monkeypants", nil, nil)
42
- Chef::CouchDB.new("http://monkeypants")
43
- end
44
- end
45
-
46
- describe "create_db" do
47
- before(:each) do
48
- @couchdb.stub!(:create_design_document).and_return(true)
49
- end
50
-
51
- it "should get a list of current databases" do
52
- @rest.should_receive(:get_rest).and_return(["chef"])
53
- @couchdb.create_db
54
- end
55
-
56
- it "should create the chef database if it does not exist" do
57
- @rest.stub!(:get_rest).and_return([])
58
- @rest.should_receive(:put_rest).with("chef", {}).and_return(true)
59
- @couchdb.create_db
60
- end
61
-
62
- it "should not create the chef database if it does exist" do
63
- @rest.stub!(:get_rest).and_return(["chef"])
64
- @rest.should_not_receive(:put_rest)
65
- @couchdb.create_db
66
- end
67
-
68
- it "should return 'chef'" do
69
- @rest.should_receive(:get_rest).with("_all_dbs").and_return(%w{chef})
70
- @couchdb.create_db.should eql("chef")
71
- end
72
- end
73
-
74
- describe "create_design_document" do
75
- before(:each) do
76
- @mock_design = {
77
- "version" => 1,
78
- "_rev" => 1
79
- }
80
- @mock_data = {
81
- "version" => 1,
82
- "language" => "javascript",
83
- "views" => {
84
- "all" => {
85
- "map" => <<-EOJS
86
- function(doc) {
87
- if (doc.chef_type == "node") {
88
- emit(doc.name, doc);
89
- }
90
- }
91
- EOJS
92
- },
93
- }
94
- }
95
- @rest.stub!(:get_rest).and_return(@mock_design)
96
- @rest.stub!(:put_rest).and_return(true)
97
- @couchdb.stub!(:create_db).and_return(true)
98
- end
99
-
100
- def do_create_design_document
101
- @couchdb.create_design_document("bob", @mock_data)
102
- end
103
-
104
- it "should fetch the existing design document" do
105
- @rest.should_receive(:get_rest).with("chef/_design/bob")
106
- do_create_design_document
107
- end
108
-
109
- it "should populate the _rev in the new design if the versions dont match" do
110
- @mock_data["version"] = 2
111
- do_create_design_document
112
- @mock_data["_rev"].should eql(1)
113
- end
114
-
115
- it "should create the view if it requires updating" do
116
- @mock_data["version"] = 2
117
- @rest.should_receive(:put_rest).with("chef/_design%2Fbob", @mock_data)
118
- do_create_design_document
119
- end
120
-
121
- it "should not create the view if it does not require updating" do
122
- @mock_data["version"] = 1
123
- @rest.should_not_receive(:put_rest)
124
- do_create_design_document
125
- end
126
- end
127
-
128
- describe "store" do
129
- before(:each) do
130
- @mock_results = {
131
- "rows" => [
132
- "id" => 'a0934635-e111-45d9-8223-cb58e1c9434c'
133
- ]
134
- }
135
- @couchdb.stub!(:get_view).with("id_map", "name_to_id", :key => [ "node", "bob" ]).and_return(@mock_results)
136
- end
137
-
138
- it "should put the object into couchdb with a pre-existing GUID" do
139
- item_to_store = {}
140
- item_to_store.should_receive(:add_to_index)
141
- @rest.should_receive(:put_rest).with("chef/#{@mock_results["rows"][0]["id"]}", item_to_store).and_return(true)
142
- @couchdb.store("node", "bob", item_to_store)
143
- end
144
-
145
- it "should put the object into couchdb with a new GUID" do
146
- @mock_results = { "rows" => [] }
147
- item_to_store = {}
148
- item_to_store.should_receive(:add_to_index).with(:database => "chef", :id => "aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx", :type => "node")
149
- @couchdb.stub!(:get_view).with("id_map", "name_to_id", :key => [ "node", "bob" ]).and_return(@mock_results)
150
- UUIDTools::UUID.stub!(:random_create).and_return("aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx")
151
- @rest.should_receive(:put_rest).with("chef/aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx", item_to_store).and_return(true)
152
- @couchdb.store("node", "bob", item_to_store)
153
- end
154
-
155
- end
156
-
157
- describe "when fetching the database status" do
158
- it "gets couchdb's version string'" do
159
- @rest.should_receive(:get_rest).with('/').and_return({"couchdb" => "Welcome","version" => "1.0.1"})
160
- @couchdb.server_stats.should == {"couchdb" => "Welcome","version" => "1.0.1"}
161
- end
162
-
163
- it "gets database stats" do
164
- db_stats = {"db_name" => "opscode_account","doc_count" => 206,"doc_del_count" => 1,"update_seq" => 208,"purge_seq" => 0,
165
- "compact_running" => false,"disk_size" => 122969,"instance_start_time" => "1298070021394804","disk_format_version" => 5,"committed_update_seq" => 208}
166
- @rest.should_receive(:get_rest).with('/chef').and_return(db_stats)
167
- @couchdb.db_stats.should == db_stats
168
- end
169
-
170
- end
171
-
172
- describe "load" do
173
- before(:each) do
174
- @mock_node = Chef::Node.new()
175
- @mock_node.name("bob")
176
- @couchdb.stub!(:find_by_name).with("node", "bob").and_return(@mock_node)
177
- end
178
-
179
- it "should load the object from couchdb" do
180
- @couchdb.load("node", "bob").should eql(@mock_node)
181
- end
182
- end
183
-
184
- describe "delete" do
185
- before(:each) do
186
- @mock_current = {
187
- "version" => 1,
188
- "_rev" => 1
189
- }
190
- @rest.stub!(:get_rest).and_return(@mock_current)
191
- @rest.stub!(:delete_rest).and_return(true)
192
- @node = Chef::Node.new()
193
- @node.name("bob")
194
- @node.couchdb_rev = 15
195
- @couchdb.stub!(:find_by_name).with("node", "bob", true).and_return([ @node, "ax" ])
196
- end
197
-
198
- def do_delete(rev=nil)
199
- @couchdb.delete("node", "bob", rev)
200
- end
201
-
202
- it "should remove the object from couchdb with a specific revision" do
203
- @node.should_receive(:delete_from_index)
204
- @rest.should_receive(:delete_rest).with("chef/ax?rev=1")
205
- do_delete(1)
206
- end
207
-
208
- it "should remove the object from couchdb based on the couchdb_rev of the current obj" do
209
- @node.should_receive(:delete_from_index)
210
- @rest.should_receive(:delete_rest).with("chef/ax?rev=15")
211
- do_delete
212
- end
213
- end
214
-
215
- describe "list" do
216
- before(:each) do
217
- Chef::Config.stub!(:[]).with(:couchdb_database).and_return("chef")
218
- @mock_response = {"rows" => []}
219
- end
220
-
221
- describe "on couchdb 0.9+" do
222
- before do
223
- Chef::Config.stub!(:[]).with(:couchdb_version).and_return(0.9)
224
- end
225
-
226
- it "should get the view for all objects if inflate is true" do
227
- @rest.should_receive(:get_rest).with("chef/_design/node/_view/all").and_return(@mock_response)
228
- @couchdb.list("node", true)
229
- end
230
-
231
- it "should get the view for just the object id's if inflate is false" do
232
- @rest.should_receive(:get_rest).with("chef/_design/node/_view/all_id").and_return(@mock_response)
233
- @couchdb.list("node", false)
234
- end
235
- end
236
- end
237
-
238
- describe "has_key?" do
239
- it "should return true if the object exists" do
240
- @couchdb.stub!(:find_by_name).with("node", "bob").and_return(true)
241
- @couchdb.has_key?("node", "bob").should eql(true)
242
- end
243
-
244
- it "should return false if the object does not exist" do
245
- @couchdb.stub!(:find_by_name).and_raise(Chef::Exceptions::CouchDBNotFound)
246
- @couchdb.has_key?("node", "bob").should eql(false)
247
- end
248
- end
249
-
250
- describe "get_view" do
251
- it "should construct a call to the view for the proper design document" do
252
- @rest.should_receive(:get_rest).with("chef/_design/nodes/_view/mastodon")
253
- @couchdb.get_view("nodes", "mastodon")
254
- end
255
-
256
- it "should allow arguments to the view" do
257
- @rest.should_receive(:get_rest).with("chef/_design/nodes/_view/mastodon?startkey=%22dont%20stay%22")
258
- @couchdb.get_view("nodes", "mastodon", :startkey => "dont stay")
259
- end
260
-
261
- end
262
-
263
- describe "view_uri" do
264
- it "should output an appropriately formed view URI" do
265
- @couchdb.should_receive(:view_uri).with("nodes", "all").and_return("chef/_design/nodes/_view/all")
266
- @couchdb.view_uri("nodes", "all")
267
- end
268
- end
269
-
270
- end
271
-
272
-
273
-
274
-