chef 12.4.0.rc.0-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1709) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +212 -0
  3. data/LICENSE +201 -0
  4. data/README.md +134 -0
  5. data/Rakefile +160 -0
  6. data/bin/chef-apply +25 -0
  7. data/bin/chef-client +26 -0
  8. data/bin/chef-service-manager +37 -0
  9. data/bin/chef-shell +37 -0
  10. data/bin/chef-solo +25 -0
  11. data/bin/chef-windows-service +35 -0
  12. data/bin/knife +26 -0
  13. data/distro/common/html/_sources/ctl_chef_client.txt +36 -0
  14. data/distro/common/html/_sources/ctl_chef_server.txt +341 -0
  15. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -0
  16. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -0
  17. data/distro/common/html/_sources/index.txt +135 -0
  18. data/distro/common/html/_sources/knife.txt +74 -0
  19. data/distro/common/html/_sources/knife_bootstrap.txt +56 -0
  20. data/distro/common/html/_sources/knife_client.txt +151 -0
  21. data/distro/common/html/_sources/knife_common_options.txt +6 -0
  22. data/distro/common/html/_sources/knife_configure.txt +29 -0
  23. data/distro/common/html/_sources/knife_cookbook.txt +236 -0
  24. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -0
  25. data/distro/common/html/_sources/knife_data_bag.txt +160 -0
  26. data/distro/common/html/_sources/knife_delete.txt +26 -0
  27. data/distro/common/html/_sources/knife_deps.txt +61 -0
  28. data/distro/common/html/_sources/knife_diff.txt +34 -0
  29. data/distro/common/html/_sources/knife_download.txt +44 -0
  30. data/distro/common/html/_sources/knife_edit.txt +26 -0
  31. data/distro/common/html/_sources/knife_environment.txt +158 -0
  32. data/distro/common/html/_sources/knife_exec.txt +47 -0
  33. data/distro/common/html/_sources/knife_index_rebuild.txt +21 -0
  34. data/distro/common/html/_sources/knife_list.txt +33 -0
  35. data/distro/common/html/_sources/knife_node.txt +250 -0
  36. data/distro/common/html/_sources/knife_raw.txt +35 -0
  37. data/distro/common/html/_sources/knife_recipe_list.txt +23 -0
  38. data/distro/common/html/_sources/knife_role.txt +157 -0
  39. data/distro/common/html/_sources/knife_search.txt +53 -0
  40. data/distro/common/html/_sources/knife_serve.txt +19 -0
  41. data/distro/common/html/_sources/knife_show.txt +27 -0
  42. data/distro/common/html/_sources/knife_ssh.txt +43 -0
  43. data/distro/common/html/_sources/knife_ssl_check.txt +41 -0
  44. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -0
  45. data/distro/common/html/_sources/knife_status.txt +37 -0
  46. data/distro/common/html/_sources/knife_tag.txt +69 -0
  47. data/distro/common/html/_sources/knife_upload.txt +49 -0
  48. data/distro/common/html/_sources/knife_user.txt +127 -0
  49. data/distro/common/html/_sources/knife_using.txt +43 -0
  50. data/distro/common/html/_sources/knife_xargs.txt +30 -0
  51. data/distro/common/html/_static/ajax-loader.gif +0 -0
  52. data/distro/common/html/_static/basic.css +537 -0
  53. data/distro/common/html/_static/chef.ico +0 -0
  54. data/distro/common/html/_static/chef_html_logo.png +0 -0
  55. data/distro/common/html/_static/comment-bright.png +0 -0
  56. data/distro/common/html/_static/comment-close.png +0 -0
  57. data/distro/common/html/_static/comment.png +0 -0
  58. data/distro/common/html/_static/contents.png +0 -0
  59. data/distro/common/html/_static/doctools.js +238 -0
  60. data/distro/common/html/_static/down-pressed.png +0 -0
  61. data/distro/common/html/_static/down.png +0 -0
  62. data/distro/common/html/_static/file.png +0 -0
  63. data/distro/common/html/_static/guide.css +505 -0
  64. data/distro/common/html/_static/jquery.js +2 -0
  65. data/distro/common/html/_static/minus.png +0 -0
  66. data/distro/common/html/_static/navigation.png +0 -0
  67. data/distro/common/html/_static/plus.png +0 -0
  68. data/distro/common/html/_static/pygments.css +62 -0
  69. data/distro/common/html/_static/searchtools.js +622 -0
  70. data/distro/common/html/_static/underscore.js +31 -0
  71. data/distro/common/html/_static/up-pressed.png +0 -0
  72. data/distro/common/html/_static/up.png +0 -0
  73. data/distro/common/html/_static/websupport.js +808 -0
  74. data/distro/common/html/ctl_chef_client.html +270 -0
  75. data/distro/common/html/ctl_chef_server.html +728 -0
  76. data/distro/common/html/ctl_chef_shell.html +163 -0
  77. data/distro/common/html/ctl_chef_solo.html +194 -0
  78. data/distro/common/html/index.html +202 -0
  79. data/distro/common/html/knife.html +170 -0
  80. data/distro/common/html/knife_bootstrap.html +285 -0
  81. data/distro/common/html/knife_client.html +285 -0
  82. data/distro/common/html/knife_common_options.html +96 -0
  83. data/distro/common/html/knife_configure.html +105 -0
  84. data/distro/common/html/knife_cookbook.html +487 -0
  85. data/distro/common/html/knife_cookbook_site.html +375 -0
  86. data/distro/common/html/knife_data_bag.html +374 -0
  87. data/distro/common/html/knife_delete.html +93 -0
  88. data/distro/common/html/knife_deps.html +143 -0
  89. data/distro/common/html/knife_diff.html +123 -0
  90. data/distro/common/html/knife_download.html +145 -0
  91. data/distro/common/html/knife_edit.html +89 -0
  92. data/distro/common/html/knife_environment.html +326 -0
  93. data/distro/common/html/knife_exec.html +220 -0
  94. data/distro/common/html/knife_index_rebuild.html +83 -0
  95. data/distro/common/html/knife_list.html +114 -0
  96. data/distro/common/html/knife_node.html +458 -0
  97. data/distro/common/html/knife_raw.html +110 -0
  98. data/distro/common/html/knife_recipe_list.html +91 -0
  99. data/distro/common/html/knife_role.html +295 -0
  100. data/distro/common/html/knife_search.html +203 -0
  101. data/distro/common/html/knife_serve.html +79 -0
  102. data/distro/common/html/knife_show.html +104 -0
  103. data/distro/common/html/knife_ssh.html +177 -0
  104. data/distro/common/html/knife_ssl_check.html +151 -0
  105. data/distro/common/html/knife_ssl_fetch.html +151 -0
  106. data/distro/common/html/knife_status.html +144 -0
  107. data/distro/common/html/knife_tag.html +138 -0
  108. data/distro/common/html/knife_upload.html +153 -0
  109. data/distro/common/html/knife_user.html +242 -0
  110. data/distro/common/html/knife_using.html +210 -0
  111. data/distro/common/html/knife_xargs.html +122 -0
  112. data/distro/common/html/objects.inv +0 -0
  113. data/distro/common/html/search.html +82 -0
  114. data/distro/common/html/searchindex.js +1 -0
  115. data/distro/common/man/man1/README.md +58 -0
  116. data/distro/common/man/man1/chef-shell.1 +194 -0
  117. data/distro/common/man/man1/knife-bootstrap.1 +215 -0
  118. data/distro/common/man/man1/knife-client.1 +443 -0
  119. data/distro/common/man/man1/knife-configure.1 +161 -0
  120. data/distro/common/man/man1/knife-cookbook-site.1 +552 -0
  121. data/distro/common/man/man1/knife-cookbook.1 +770 -0
  122. data/distro/common/man/man1/knife-data-bag.1 +617 -0
  123. data/distro/common/man/man1/knife-delete.1 +127 -0
  124. data/distro/common/man/man1/knife-deps.1 +246 -0
  125. data/distro/common/man/man1/knife-diff.1 +226 -0
  126. data/distro/common/man/man1/knife-download.1 +258 -0
  127. data/distro/common/man/man1/knife-edit.1 +121 -0
  128. data/distro/common/man/man1/knife-environment.1 +508 -0
  129. data/distro/common/man/man1/knife-exec.1 +362 -0
  130. data/distro/common/man/man1/knife-index-rebuild.1 +63 -0
  131. data/distro/common/man/man1/knife-list.1 +174 -0
  132. data/distro/common/man/man1/knife-node.1 +716 -0
  133. data/distro/common/man/man1/knife-raw.1 +172 -0
  134. data/distro/common/man/man1/knife-recipe-list.1 +85 -0
  135. data/distro/common/man/man1/knife-role.1 +426 -0
  136. data/distro/common/man/man1/knife-search.1 +359 -0
  137. data/distro/common/man/man1/knife-serve.1 +109 -0
  138. data/distro/common/man/man1/knife-show.1 +160 -0
  139. data/distro/common/man/man1/knife-ssh.1 +284 -0
  140. data/distro/common/man/man1/knife-ssl-check.1 +207 -0
  141. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -0
  142. data/distro/common/man/man1/knife-status.1 +234 -0
  143. data/distro/common/man/man1/knife-tag.1 +189 -0
  144. data/distro/common/man/man1/knife-upload.1 +280 -0
  145. data/distro/common/man/man1/knife-user.1 +356 -0
  146. data/distro/common/man/man1/knife-xargs.1 +189 -0
  147. data/distro/common/man/man1/knife.1 +332 -0
  148. data/distro/common/man/man8/chef-apply.8 +86 -0
  149. data/distro/common/man/man8/chef-client.8 +398 -0
  150. data/distro/common/man/man8/chef-solo.8 +260 -0
  151. data/distro/common/markdown/README +3 -0
  152. data/distro/common/markdown/man1/chef-shell.mkd +195 -0
  153. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -0
  154. data/distro/common/markdown/man1/knife-client.mkd +103 -0
  155. data/distro/common/markdown/man1/knife-configure.mkd +70 -0
  156. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
  157. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
  158. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -0
  159. data/distro/common/markdown/man1/knife-environment.mkd +151 -0
  160. data/distro/common/markdown/man1/knife-exec.mkd +42 -0
  161. data/distro/common/markdown/man1/knife-index.mkd +30 -0
  162. data/distro/common/markdown/man1/knife-node.mkd +130 -0
  163. data/distro/common/markdown/man1/knife-role.mkd +85 -0
  164. data/distro/common/markdown/man1/knife-search.mkd +180 -0
  165. data/distro/common/markdown/man1/knife-ssh.mkd +69 -0
  166. data/distro/common/markdown/man1/knife-status.mkd +36 -0
  167. data/distro/common/markdown/man1/knife-tag.mkd +39 -0
  168. data/distro/common/markdown/man1/knife.mkd +213 -0
  169. data/distro/common/markdown/man8/chef-client.mkd +73 -0
  170. data/distro/common/markdown/man8/chef-expander.mkd +81 -0
  171. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -0
  172. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
  173. data/distro/common/markdown/man8/chef-server.mkd +120 -0
  174. data/distro/common/markdown/man8/chef-solo.mkd +107 -0
  175. data/distro/common/markdown/man8/chef-solr.mkd +89 -0
  176. data/ext/win32-eventlog/Rakefile +54 -0
  177. data/ext/win32-eventlog/chef-log.man +56 -0
  178. data/lib/chef.rb +35 -0
  179. data/lib/chef/api_client.rb +226 -0
  180. data/lib/chef/api_client/registration.rb +163 -0
  181. data/lib/chef/application.rb +415 -0
  182. data/lib/chef/application/apply.rb +196 -0
  183. data/lib/chef/application/client.rb +481 -0
  184. data/lib/chef/application/knife.rb +202 -0
  185. data/lib/chef/application/solo.rb +313 -0
  186. data/lib/chef/application/windows_service.rb +323 -0
  187. data/lib/chef/application/windows_service_manager.rb +196 -0
  188. data/lib/chef/applications.rb +4 -0
  189. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  190. data/lib/chef/audit/audit_reporter.rb +169 -0
  191. data/lib/chef/audit/control_group_data.rb +140 -0
  192. data/lib/chef/audit/rspec_formatter.rb +37 -0
  193. data/lib/chef/audit/runner.rb +192 -0
  194. data/lib/chef/chef_class.rb +130 -0
  195. data/lib/chef/chef_fs.rb +9 -0
  196. data/lib/chef/chef_fs/chef_fs_data_store.rb +482 -0
  197. data/lib/chef/chef_fs/command_line.rb +285 -0
  198. data/lib/chef/chef_fs/config.rb +255 -0
  199. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  200. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +37 -0
  201. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  202. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  203. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  204. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +202 -0
  205. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  206. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -0
  207. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  208. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +30 -0
  209. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -0
  210. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -0
  211. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  212. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  213. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -0
  214. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  215. data/lib/chef/chef_fs/file_system.rb +429 -0
  216. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  217. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  218. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  219. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  220. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +52 -0
  221. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  222. data/lib/chef/chef_fs/file_system/chef_repository_file_system_acls_dir.rb +37 -0
  223. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +109 -0
  224. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +87 -0
  225. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +89 -0
  226. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  227. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +92 -0
  228. data/lib/chef/chef_fs/file_system/chef_repository_file_system_policies_dir.rb +38 -0
  229. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +192 -0
  230. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +159 -0
  231. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +224 -0
  232. data/lib/chef/chef_fs/file_system/cookbook_file.rb +82 -0
  233. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  234. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  235. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  236. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +164 -0
  237. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  238. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +73 -0
  239. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  240. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  241. data/lib/chef/chef_fs/file_system/file_system_entry.rb +108 -0
  242. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  243. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  244. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  245. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  246. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  247. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +49 -0
  248. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  249. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  250. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  251. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  252. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +42 -0
  253. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  254. data/lib/chef/chef_fs/file_system/org_entry.rb +34 -0
  255. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +59 -0
  256. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +58 -0
  257. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +115 -0
  258. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +185 -0
  259. data/lib/chef/chef_fs/knife.rb +133 -0
  260. data/lib/chef/chef_fs/parallelizer.rb +105 -0
  261. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -0
  262. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +281 -0
  263. data/lib/chef/chef_fs/path_utils.rb +95 -0
  264. data/lib/chef/client.rb +546 -0
  265. data/lib/chef/config.rb +54 -0
  266. data/lib/chef/config_fetcher.rb +64 -0
  267. data/lib/chef/cookbook/chefignore.rb +75 -0
  268. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  269. data/lib/chef/cookbook/cookbook_version_loader.rb +301 -0
  270. data/lib/chef/cookbook/file_system_file_vendor.rb +59 -0
  271. data/lib/chef/cookbook/file_vendor.rb +72 -0
  272. data/lib/chef/cookbook/metadata.rb +757 -0
  273. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  274. data/lib/chef/cookbook/synchronizer.rb +293 -0
  275. data/lib/chef/cookbook/syntax_check.rb +260 -0
  276. data/lib/chef/cookbook_loader.rb +182 -0
  277. data/lib/chef/cookbook_manifest.rb +289 -0
  278. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  279. data/lib/chef/cookbook_uploader.rb +156 -0
  280. data/lib/chef/cookbook_version.rb +623 -0
  281. data/lib/chef/daemon.rb +131 -0
  282. data/lib/chef/data_bag.rb +169 -0
  283. data/lib/chef/data_bag_item.rb +215 -0
  284. data/lib/chef/deprecation/mixin/template.rb +49 -0
  285. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  286. data/lib/chef/deprecation/provider/file.rb +198 -0
  287. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  288. data/lib/chef/deprecation/provider/template.rb +63 -0
  289. data/lib/chef/deprecation/warnings.rb +39 -0
  290. data/lib/chef/digester.rb +70 -0
  291. data/lib/chef/dsl.rb +6 -0
  292. data/lib/chef/dsl/audit.rb +51 -0
  293. data/lib/chef/dsl/data_query.rb +89 -0
  294. data/lib/chef/dsl/definitions.rb +44 -0
  295. data/lib/chef/dsl/include_attribute.rb +63 -0
  296. data/lib/chef/dsl/include_recipe.rb +44 -0
  297. data/lib/chef/dsl/platform_introspection.rb +260 -0
  298. data/lib/chef/dsl/powershell.rb +29 -0
  299. data/lib/chef/dsl/reboot_pending.rb +64 -0
  300. data/lib/chef/dsl/recipe.rb +196 -0
  301. data/lib/chef/dsl/registry_helper.rb +59 -0
  302. data/lib/chef/dsl/resources.rb +28 -0
  303. data/lib/chef/encrypted_data_bag_item.rb +155 -0
  304. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -0
  305. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  306. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -0
  307. data/lib/chef/encrypted_data_bag_item/decryptor.rb +225 -0
  308. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -0
  309. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -0
  310. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -0
  311. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -0
  312. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -0
  313. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -0
  314. data/lib/chef/environment.rb +319 -0
  315. data/lib/chef/event_dispatch/base.rb +363 -0
  316. data/lib/chef/event_dispatch/dispatcher.rb +42 -0
  317. data/lib/chef/event_dispatch/events_output_stream.rb +29 -0
  318. data/lib/chef/event_loggers/base.rb +62 -0
  319. data/lib/chef/event_loggers/windows_eventlog.rb +101 -0
  320. data/lib/chef/exceptions.rb +465 -0
  321. data/lib/chef/file_access_control.rb +75 -0
  322. data/lib/chef/file_access_control/unix.rb +290 -0
  323. data/lib/chef/file_access_control/windows.rb +335 -0
  324. data/lib/chef/file_cache.rb +221 -0
  325. data/lib/chef/file_content_management/content_base.rb +56 -0
  326. data/lib/chef/file_content_management/deploy.rb +38 -0
  327. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  328. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  329. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  330. data/lib/chef/file_content_management/tempfile.rb +96 -0
  331. data/lib/chef/formatters/base.rb +228 -0
  332. data/lib/chef/formatters/doc.rb +338 -0
  333. data/lib/chef/formatters/error_descriptor.rb +67 -0
  334. data/lib/chef/formatters/error_inspectors.rb +19 -0
  335. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +146 -0
  336. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +118 -0
  337. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -0
  338. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +80 -0
  339. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +127 -0
  340. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +145 -0
  341. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +127 -0
  342. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +120 -0
  343. data/lib/chef/formatters/error_mapper.rb +85 -0
  344. data/lib/chef/formatters/indentable_output_stream.rb +165 -0
  345. data/lib/chef/formatters/minimal.rb +235 -0
  346. data/lib/chef/guard_interpreter.rb +32 -0
  347. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +42 -0
  348. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +132 -0
  349. data/lib/chef/handler.rb +235 -0
  350. data/lib/chef/handler/error_report.rb +33 -0
  351. data/lib/chef/handler/json_file.rb +63 -0
  352. data/lib/chef/http.rb +414 -0
  353. data/lib/chef/http/auth_credentials.rb +57 -0
  354. data/lib/chef/http/authenticator.rb +96 -0
  355. data/lib/chef/http/basic_client.rb +169 -0
  356. data/lib/chef/http/cookie_jar.rb +31 -0
  357. data/lib/chef/http/cookie_manager.rb +59 -0
  358. data/lib/chef/http/decompressor.rb +144 -0
  359. data/lib/chef/http/http_request.rb +187 -0
  360. data/lib/chef/http/json_input.rb +73 -0
  361. data/lib/chef/http/json_output.rb +78 -0
  362. data/lib/chef/http/json_to_model_output.rb +34 -0
  363. data/lib/chef/http/remote_request_id.rb +46 -0
  364. data/lib/chef/http/simple.rb +22 -0
  365. data/lib/chef/http/socketless_chef_zero_client.rb +207 -0
  366. data/lib/chef/http/ssl_policies.rb +130 -0
  367. data/lib/chef/http/validate_content_length.rb +110 -0
  368. data/lib/chef/json_compat.rb +163 -0
  369. data/lib/chef/key.rb +271 -0
  370. data/lib/chef/knife.rb +571 -0
  371. data/lib/chef/knife/bootstrap.rb +394 -0
  372. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  373. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  374. data/lib/chef/knife/bootstrap/templates/README.md +12 -0
  375. data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +76 -0
  376. data/lib/chef/knife/bootstrap/templates/chef-aix.erb +72 -0
  377. data/lib/chef/knife/bootstrap/templates/chef-full.erb +231 -0
  378. data/lib/chef/knife/client_bulk_delete.rb +104 -0
  379. data/lib/chef/knife/client_create.rb +87 -0
  380. data/lib/chef/knife/client_delete.rb +60 -0
  381. data/lib/chef/knife/client_edit.rb +45 -0
  382. data/lib/chef/knife/client_key_create.rb +67 -0
  383. data/lib/chef/knife/client_key_delete.rb +76 -0
  384. data/lib/chef/knife/client_key_edit.rb +80 -0
  385. data/lib/chef/knife/client_key_list.rb +69 -0
  386. data/lib/chef/knife/client_key_show.rb +76 -0
  387. data/lib/chef/knife/client_list.rb +42 -0
  388. data/lib/chef/knife/client_reregister.rb +59 -0
  389. data/lib/chef/knife/client_show.rb +49 -0
  390. data/lib/chef/knife/configure.rb +171 -0
  391. data/lib/chef/knife/configure_client.rb +50 -0
  392. data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
  393. data/lib/chef/knife/cookbook_create.rb +448 -0
  394. data/lib/chef/knife/cookbook_delete.rb +151 -0
  395. data/lib/chef/knife/cookbook_download.rb +145 -0
  396. data/lib/chef/knife/cookbook_list.rb +47 -0
  397. data/lib/chef/knife/cookbook_metadata.rb +108 -0
  398. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  399. data/lib/chef/knife/cookbook_show.rb +102 -0
  400. data/lib/chef/knife/cookbook_site_download.rb +109 -0
  401. data/lib/chef/knife/cookbook_site_install.rb +188 -0
  402. data/lib/chef/knife/cookbook_site_list.rb +62 -0
  403. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  404. data/lib/chef/knife/cookbook_site_share.rb +170 -0
  405. data/lib/chef/knife/cookbook_site_show.rb +60 -0
  406. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  407. data/lib/chef/knife/cookbook_site_vendor.rb +46 -0
  408. data/lib/chef/knife/cookbook_test.rb +96 -0
  409. data/lib/chef/knife/cookbook_upload.rb +311 -0
  410. data/lib/chef/knife/core/bootstrap_context.rb +187 -0
  411. data/lib/chef/knife/core/cookbook_scm_repo.rb +160 -0
  412. data/lib/chef/knife/core/generic_presenter.rb +223 -0
  413. data/lib/chef/knife/core/node_editor.rb +109 -0
  414. data/lib/chef/knife/core/node_presenter.rb +137 -0
  415. data/lib/chef/knife/core/object_loader.rb +114 -0
  416. data/lib/chef/knife/core/status_presenter.rb +157 -0
  417. data/lib/chef/knife/core/subcommand_loader.rb +222 -0
  418. data/lib/chef/knife/core/text_formatter.rb +86 -0
  419. data/lib/chef/knife/core/ui.rb +276 -0
  420. data/lib/chef/knife/data_bag_create.rb +77 -0
  421. data/lib/chef/knife/data_bag_delete.rb +51 -0
  422. data/lib/chef/knife/data_bag_edit.rb +77 -0
  423. data/lib/chef/knife/data_bag_from_file.rb +113 -0
  424. data/lib/chef/knife/data_bag_list.rb +46 -0
  425. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  426. data/lib/chef/knife/data_bag_show.rb +69 -0
  427. data/lib/chef/knife/delete.rb +108 -0
  428. data/lib/chef/knife/deps.rb +140 -0
  429. data/lib/chef/knife/diff.rb +69 -0
  430. data/lib/chef/knife/download.rb +69 -0
  431. data/lib/chef/knife/edit.rb +73 -0
  432. data/lib/chef/knife/environment_compare.rb +127 -0
  433. data/lib/chef/knife/environment_create.rb +53 -0
  434. data/lib/chef/knife/environment_delete.rb +45 -0
  435. data/lib/chef/knife/environment_edit.rb +45 -0
  436. data/lib/chef/knife/environment_from_file.rb +83 -0
  437. data/lib/chef/knife/environment_list.rb +42 -0
  438. data/lib/chef/knife/environment_show.rb +48 -0
  439. data/lib/chef/knife/exec.rb +87 -0
  440. data/lib/chef/knife/help.rb +103 -0
  441. data/lib/chef/knife/help_topics.rb +4 -0
  442. data/lib/chef/knife/index_rebuild.rb +134 -0
  443. data/lib/chef/knife/key_create.rb +108 -0
  444. data/lib/chef/knife/key_create_base.rb +50 -0
  445. data/lib/chef/knife/key_delete.rb +55 -0
  446. data/lib/chef/knife/key_edit.rb +114 -0
  447. data/lib/chef/knife/key_edit_base.rb +55 -0
  448. data/lib/chef/knife/key_list.rb +88 -0
  449. data/lib/chef/knife/key_list_base.rb +45 -0
  450. data/lib/chef/knife/key_show.rb +53 -0
  451. data/lib/chef/knife/list.rb +156 -0
  452. data/lib/chef/knife/node_bulk_delete.rb +80 -0
  453. data/lib/chef/knife/node_create.rb +50 -0
  454. data/lib/chef/knife/node_delete.rb +47 -0
  455. data/lib/chef/knife/node_edit.rb +72 -0
  456. data/lib/chef/knife/node_environment_set.rb +54 -0
  457. data/lib/chef/knife/node_from_file.rb +51 -0
  458. data/lib/chef/knife/node_list.rb +46 -0
  459. data/lib/chef/knife/node_run_list_add.rb +104 -0
  460. data/lib/chef/knife/node_run_list_remove.rb +56 -0
  461. data/lib/chef/knife/node_run_list_set.rb +66 -0
  462. data/lib/chef/knife/node_show.rb +67 -0
  463. data/lib/chef/knife/raw.rb +102 -0
  464. data/lib/chef/knife/recipe_list.rb +32 -0
  465. data/lib/chef/knife/role_bulk_delete.rb +70 -0
  466. data/lib/chef/knife/role_create.rb +55 -0
  467. data/lib/chef/knife/role_delete.rb +47 -0
  468. data/lib/chef/knife/role_edit.rb +48 -0
  469. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  470. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  471. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  472. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  473. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  474. data/lib/chef/knife/role_from_file.rb +56 -0
  475. data/lib/chef/knife/role_list.rb +43 -0
  476. data/lib/chef/knife/role_run_list_add.rb +86 -0
  477. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  478. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  479. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  480. data/lib/chef/knife/role_run_list_set.rb +70 -0
  481. data/lib/chef/knife/role_show.rb +52 -0
  482. data/lib/chef/knife/search.rb +201 -0
  483. data/lib/chef/knife/serve.rb +48 -0
  484. data/lib/chef/knife/show.rb +56 -0
  485. data/lib/chef/knife/ssh.rb +539 -0
  486. data/lib/chef/knife/ssl_check.rb +277 -0
  487. data/lib/chef/knife/ssl_fetch.rb +158 -0
  488. data/lib/chef/knife/status.rb +97 -0
  489. data/lib/chef/knife/tag_create.rb +52 -0
  490. data/lib/chef/knife/tag_delete.rb +60 -0
  491. data/lib/chef/knife/tag_list.rb +47 -0
  492. data/lib/chef/knife/upload.rb +71 -0
  493. data/lib/chef/knife/user_create.rb +93 -0
  494. data/lib/chef/knife/user_delete.rb +46 -0
  495. data/lib/chef/knife/user_edit.rb +53 -0
  496. data/lib/chef/knife/user_key_create.rb +69 -0
  497. data/lib/chef/knife/user_key_delete.rb +76 -0
  498. data/lib/chef/knife/user_key_edit.rb +80 -0
  499. data/lib/chef/knife/user_key_list.rb +69 -0
  500. data/lib/chef/knife/user_key_show.rb +76 -0
  501. data/lib/chef/knife/user_list.rb +42 -0
  502. data/lib/chef/knife/user_reregister.rb +59 -0
  503. data/lib/chef/knife/user_show.rb +49 -0
  504. data/lib/chef/knife/xargs.rb +267 -0
  505. data/lib/chef/local_mode.rb +121 -0
  506. data/lib/chef/log.rb +50 -0
  507. data/lib/chef/log/syslog.rb +46 -0
  508. data/lib/chef/log/winevt.rb +99 -0
  509. data/lib/chef/mash.rb +225 -0
  510. data/lib/chef/mixin/checksum.rb +32 -0
  511. data/lib/chef/mixin/command.rb +192 -0
  512. data/lib/chef/mixin/command/unix.rb +220 -0
  513. data/lib/chef/mixin/command/windows.rb +72 -0
  514. data/lib/chef/mixin/convert_to_class_name.rb +120 -0
  515. data/lib/chef/mixin/create_path.rb +73 -0
  516. data/lib/chef/mixin/deep_merge.rb +140 -0
  517. data/lib/chef/mixin/deprecation.rb +100 -0
  518. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  519. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -0
  520. data/lib/chef/mixin/file_class.rb +37 -0
  521. data/lib/chef/mixin/from_file.rb +50 -0
  522. data/lib/chef/mixin/get_source_from_package.rb +43 -0
  523. data/lib/chef/mixin/homebrew_user.rb +68 -0
  524. data/lib/chef/mixin/language.rb +48 -0
  525. data/lib/chef/mixin/language_include_attribute.rb +35 -0
  526. data/lib/chef/mixin/language_include_recipe.rb +32 -0
  527. data/lib/chef/mixin/params_validate.rb +242 -0
  528. data/lib/chef/mixin/path_sanity.rb +68 -0
  529. data/lib/chef/mixin/powershell_type_coercions.rb +82 -0
  530. data/lib/chef/mixin/provides.rb +40 -0
  531. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -0
  532. data/lib/chef/mixin/securable.rb +199 -0
  533. data/lib/chef/mixin/shell_out.rb +117 -0
  534. data/lib/chef/mixin/template.rb +215 -0
  535. data/lib/chef/mixin/unformatter.rb +32 -0
  536. data/lib/chef/mixin/uris.rb +33 -0
  537. data/lib/chef/mixin/which.rb +37 -0
  538. data/lib/chef/mixin/why_run.rb +332 -0
  539. data/lib/chef/mixin/windows_architecture_helper.rb +136 -0
  540. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  541. data/lib/chef/mixin/wstring.rb +31 -0
  542. data/lib/chef/mixin/xml_escape.rb +140 -0
  543. data/lib/chef/mixins.rb +14 -0
  544. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  545. data/lib/chef/monkey_patches/net_http.rb +60 -0
  546. data/lib/chef/monologger.rb +90 -0
  547. data/lib/chef/nil_argument.rb +3 -0
  548. data/lib/chef/node.rb +573 -0
  549. data/lib/chef/node/attribute.rb +586 -0
  550. data/lib/chef/node/attribute_collections.rb +323 -0
  551. data/lib/chef/node/immutable_collections.rb +219 -0
  552. data/lib/chef/node_map.rb +146 -0
  553. data/lib/chef/null_logger.rb +72 -0
  554. data/lib/chef/org.rb +148 -0
  555. data/lib/chef/platform.rb +30 -0
  556. data/lib/chef/platform/provider_mapping.rb +481 -0
  557. data/lib/chef/platform/provider_priority_map.rb +92 -0
  558. data/lib/chef/platform/query_helpers.rb +55 -0
  559. data/lib/chef/platform/rebooter.rb +54 -0
  560. data/lib/chef/platform/resource_priority_map.rb +37 -0
  561. data/lib/chef/platform/service_helpers.rb +142 -0
  562. data/lib/chef/policy_builder.rb +49 -0
  563. data/lib/chef/policy_builder/expand_node_object.rb +251 -0
  564. data/lib/chef/policy_builder/policyfile.rb +387 -0
  565. data/lib/chef/provider.rb +228 -0
  566. data/lib/chef/provider/batch.rb +37 -0
  567. data/lib/chef/provider/breakpoint.rb +38 -0
  568. data/lib/chef/provider/cookbook_file.rb +53 -0
  569. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  570. data/lib/chef/provider/cron.rb +263 -0
  571. data/lib/chef/provider/cron/aix.rb +50 -0
  572. data/lib/chef/provider/cron/solaris.rb +22 -0
  573. data/lib/chef/provider/cron/unix.rb +83 -0
  574. data/lib/chef/provider/deploy.rb +479 -0
  575. data/lib/chef/provider/deploy/revision.rb +109 -0
  576. data/lib/chef/provider/deploy/timestamped.rb +34 -0
  577. data/lib/chef/provider/directory.rb +137 -0
  578. data/lib/chef/provider/dsc_resource.rb +157 -0
  579. data/lib/chef/provider/dsc_script.rb +185 -0
  580. data/lib/chef/provider/env.rb +169 -0
  581. data/lib/chef/provider/env/windows.rb +72 -0
  582. data/lib/chef/provider/erl_call.rb +108 -0
  583. data/lib/chef/provider/execute.rb +104 -0
  584. data/lib/chef/provider/file.rb +494 -0
  585. data/lib/chef/provider/file/content.rb +39 -0
  586. data/lib/chef/provider/git.rb +334 -0
  587. data/lib/chef/provider/group.rb +183 -0
  588. data/lib/chef/provider/group/aix.rb +85 -0
  589. data/lib/chef/provider/group/dscl.rb +170 -0
  590. data/lib/chef/provider/group/gpasswd.rb +57 -0
  591. data/lib/chef/provider/group/groupadd.rb +137 -0
  592. data/lib/chef/provider/group/groupmod.rb +128 -0
  593. data/lib/chef/provider/group/pw.rb +139 -0
  594. data/lib/chef/provider/group/suse.rb +60 -0
  595. data/lib/chef/provider/group/usermod.rb +90 -0
  596. data/lib/chef/provider/group/windows.rb +98 -0
  597. data/lib/chef/provider/http_request.rb +122 -0
  598. data/lib/chef/provider/ifconfig.rb +223 -0
  599. data/lib/chef/provider/ifconfig/aix.rb +97 -0
  600. data/lib/chef/provider/ifconfig/debian.rb +82 -0
  601. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  602. data/lib/chef/provider/link.rb +159 -0
  603. data/lib/chef/provider/log.rb +57 -0
  604. data/lib/chef/provider/lwrp_base.rb +168 -0
  605. data/lib/chef/provider/mdadm.rb +92 -0
  606. data/lib/chef/provider/mount.rb +170 -0
  607. data/lib/chef/provider/mount/aix.rb +179 -0
  608. data/lib/chef/provider/mount/mount.rb +268 -0
  609. data/lib/chef/provider/mount/solaris.rb +269 -0
  610. data/lib/chef/provider/mount/windows.rb +86 -0
  611. data/lib/chef/provider/ohai.rb +49 -0
  612. data/lib/chef/provider/package.rb +495 -0
  613. data/lib/chef/provider/package/aix.rb +136 -0
  614. data/lib/chef/provider/package/apt.rb +184 -0
  615. data/lib/chef/provider/package/dpkg.rb +149 -0
  616. data/lib/chef/provider/package/easy_install.rb +134 -0
  617. data/lib/chef/provider/package/freebsd/base.rb +89 -0
  618. data/lib/chef/provider/package/freebsd/pkg.rb +114 -0
  619. data/lib/chef/provider/package/freebsd/pkgng.rb +78 -0
  620. data/lib/chef/provider/package/freebsd/port.rb +60 -0
  621. data/lib/chef/provider/package/homebrew.rb +136 -0
  622. data/lib/chef/provider/package/ips.rb +90 -0
  623. data/lib/chef/provider/package/macports.rb +100 -0
  624. data/lib/chef/provider/package/openbsd.rb +138 -0
  625. data/lib/chef/provider/package/pacman.rb +106 -0
  626. data/lib/chef/provider/package/paludis.rb +88 -0
  627. data/lib/chef/provider/package/portage.rb +139 -0
  628. data/lib/chef/provider/package/rpm.rb +125 -0
  629. data/lib/chef/provider/package/rubygems.rb +593 -0
  630. data/lib/chef/provider/package/smartos.rb +94 -0
  631. data/lib/chef/provider/package/solaris.rb +139 -0
  632. data/lib/chef/provider/package/windows.rb +170 -0
  633. data/lib/chef/provider/package/windows/msi.rb +69 -0
  634. data/lib/chef/provider/package/yum-dump.py +307 -0
  635. data/lib/chef/provider/package/yum.rb +1401 -0
  636. data/lib/chef/provider/package/zypper.rb +130 -0
  637. data/lib/chef/provider/powershell_script.rb +94 -0
  638. data/lib/chef/provider/reboot.rb +70 -0
  639. data/lib/chef/provider/registry_key.rb +155 -0
  640. data/lib/chef/provider/remote_directory.rb +193 -0
  641. data/lib/chef/provider/remote_file.rb +53 -0
  642. data/lib/chef/provider/remote_file/cache_control_data.rb +163 -0
  643. data/lib/chef/provider/remote_file/content.rb +78 -0
  644. data/lib/chef/provider/remote_file/fetcher.rb +55 -0
  645. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  646. data/lib/chef/provider/remote_file/http.rb +117 -0
  647. data/lib/chef/provider/remote_file/local_file.rb +54 -0
  648. data/lib/chef/provider/remote_file/network_file.rb +48 -0
  649. data/lib/chef/provider/resource_update.rb +52 -0
  650. data/lib/chef/provider/route.rb +229 -0
  651. data/lib/chef/provider/ruby_block.rb +44 -0
  652. data/lib/chef/provider/script.rb +84 -0
  653. data/lib/chef/provider/service.rb +173 -0
  654. data/lib/chef/provider/service/aix.rb +129 -0
  655. data/lib/chef/provider/service/aixinit.rb +117 -0
  656. data/lib/chef/provider/service/arch.rb +118 -0
  657. data/lib/chef/provider/service/debian.rb +185 -0
  658. data/lib/chef/provider/service/freebsd.rb +195 -0
  659. data/lib/chef/provider/service/gentoo.rb +71 -0
  660. data/lib/chef/provider/service/init.rb +93 -0
  661. data/lib/chef/provider/service/insserv.rb +61 -0
  662. data/lib/chef/provider/service/invokercd.rb +43 -0
  663. data/lib/chef/provider/service/macosx.rb +246 -0
  664. data/lib/chef/provider/service/openbsd.rb +216 -0
  665. data/lib/chef/provider/service/redhat.rb +84 -0
  666. data/lib/chef/provider/service/simple.rb +174 -0
  667. data/lib/chef/provider/service/solaris.rb +91 -0
  668. data/lib/chef/provider/service/systemd.rb +141 -0
  669. data/lib/chef/provider/service/upstart.rb +243 -0
  670. data/lib/chef/provider/service/windows.rb +360 -0
  671. data/lib/chef/provider/subversion.rb +215 -0
  672. data/lib/chef/provider/template.rb +65 -0
  673. data/lib/chef/provider/template/content.rb +60 -0
  674. data/lib/chef/provider/template_finder.rb +61 -0
  675. data/lib/chef/provider/user.rb +214 -0
  676. data/lib/chef/provider/user/aix.rb +95 -0
  677. data/lib/chef/provider/user/dscl.rb +700 -0
  678. data/lib/chef/provider/user/pw.rb +113 -0
  679. data/lib/chef/provider/user/solaris.rb +91 -0
  680. data/lib/chef/provider/user/useradd.rb +162 -0
  681. data/lib/chef/provider/user/windows.rb +126 -0
  682. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -0
  683. data/lib/chef/provider/windows_script.rb +74 -0
  684. data/lib/chef/provider_resolver.rb +211 -0
  685. data/lib/chef/providers.rb +138 -0
  686. data/lib/chef/recipe.rb +129 -0
  687. data/lib/chef/request_id.rb +37 -0
  688. data/lib/chef/reserved_names.rb +9 -0
  689. data/lib/chef/resource.rb +1187 -0
  690. data/lib/chef/resource/apt_package.rb +45 -0
  691. data/lib/chef/resource/bash.rb +35 -0
  692. data/lib/chef/resource/batch.rb +33 -0
  693. data/lib/chef/resource/bff_package.rb +34 -0
  694. data/lib/chef/resource/breakpoint.rb +36 -0
  695. data/lib/chef/resource/chef_gem.rb +70 -0
  696. data/lib/chef/resource/conditional.rb +127 -0
  697. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  698. data/lib/chef/resource/cookbook_file.rb +51 -0
  699. data/lib/chef/resource/cron.rb +218 -0
  700. data/lib/chef/resource/csh.rb +35 -0
  701. data/lib/chef/resource/deploy.rb +434 -0
  702. data/lib/chef/resource/deploy_revision.rb +45 -0
  703. data/lib/chef/resource/directory.rb +64 -0
  704. data/lib/chef/resource/dpkg_package.rb +35 -0
  705. data/lib/chef/resource/dsc_resource.rb +83 -0
  706. data/lib/chef/resource/dsc_script.rb +139 -0
  707. data/lib/chef/resource/easy_install_package.rb +58 -0
  708. data/lib/chef/resource/env.rb +65 -0
  709. data/lib/chef/resource/erl_call.rb +88 -0
  710. data/lib/chef/resource/execute.rb +166 -0
  711. data/lib/chef/resource/file.rb +152 -0
  712. data/lib/chef/resource/file/verification.rb +122 -0
  713. data/lib/chef/resource/freebsd_package.rb +66 -0
  714. data/lib/chef/resource/gem_package.rb +59 -0
  715. data/lib/chef/resource/git.rb +47 -0
  716. data/lib/chef/resource/group.rb +105 -0
  717. data/lib/chef/resource/homebrew_package.rb +47 -0
  718. data/lib/chef/resource/http_request.rb +67 -0
  719. data/lib/chef/resource/ifconfig.rb +148 -0
  720. data/lib/chef/resource/ips_package.rb +44 -0
  721. data/lib/chef/resource/link.rb +108 -0
  722. data/lib/chef/resource/log.rb +78 -0
  723. data/lib/chef/resource/lwrp_base.rb +184 -0
  724. data/lib/chef/resource/macosx_service.rb +59 -0
  725. data/lib/chef/resource/macports_package.rb +32 -0
  726. data/lib/chef/resource/mdadm.rb +107 -0
  727. data/lib/chef/resource/mount.rb +181 -0
  728. data/lib/chef/resource/ohai.rb +55 -0
  729. data/lib/chef/resource/openbsd_package.rb +51 -0
  730. data/lib/chef/resource/package.rb +104 -0
  731. data/lib/chef/resource/pacman_package.rb +34 -0
  732. data/lib/chef/resource/paludis_package.rb +36 -0
  733. data/lib/chef/resource/perl.rb +35 -0
  734. data/lib/chef/resource/portage_package.rb +34 -0
  735. data/lib/chef/resource/powershell_script.rb +51 -0
  736. data/lib/chef/resource/python.rb +34 -0
  737. data/lib/chef/resource/reboot.rb +50 -0
  738. data/lib/chef/resource/registry_key.rb +146 -0
  739. data/lib/chef/resource/remote_directory.rb +125 -0
  740. data/lib/chef/resource/remote_file.rb +150 -0
  741. data/lib/chef/resource/resource_notification.rb +109 -0
  742. data/lib/chef/resource/route.rb +139 -0
  743. data/lib/chef/resource/rpm_package.rb +44 -0
  744. data/lib/chef/resource/ruby.rb +35 -0
  745. data/lib/chef/resource/ruby_block.rb +55 -0
  746. data/lib/chef/resource/scm.rb +188 -0
  747. data/lib/chef/resource/script.rb +77 -0
  748. data/lib/chef/resource/service.rb +191 -0
  749. data/lib/chef/resource/smartos_package.rb +37 -0
  750. data/lib/chef/resource/solaris_package.rb +43 -0
  751. data/lib/chef/resource/subversion.rb +41 -0
  752. data/lib/chef/resource/template.rb +219 -0
  753. data/lib/chef/resource/timestamped_deploy.rb +30 -0
  754. data/lib/chef/resource/user.rb +163 -0
  755. data/lib/chef/resource/whyrun_safe_ruby_block.rb +31 -0
  756. data/lib/chef/resource/windows_package.rb +100 -0
  757. data/lib/chef/resource/windows_script.rb +61 -0
  758. data/lib/chef/resource/windows_service.rb +71 -0
  759. data/lib/chef/resource/yum_package.rb +65 -0
  760. data/lib/chef/resource_builder.rb +137 -0
  761. data/lib/chef/resource_collection.rb +89 -0
  762. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  763. data/lib/chef/resource_collection/resource_list.rb +89 -0
  764. data/lib/chef/resource_collection/resource_set.rb +170 -0
  765. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  766. data/lib/chef/resource_definition.rb +68 -0
  767. data/lib/chef/resource_definition_list.rb +38 -0
  768. data/lib/chef/resource_reporter.rb +322 -0
  769. data/lib/chef/resource_resolver.rb +111 -0
  770. data/lib/chef/resources.rb +89 -0
  771. data/lib/chef/rest.rb +208 -0
  772. data/lib/chef/role.rb +274 -0
  773. data/lib/chef/run_context.rb +310 -0
  774. data/lib/chef/run_context/cookbook_compiler.rb +292 -0
  775. data/lib/chef/run_list.rb +166 -0
  776. data/lib/chef/run_list/run_list_expansion.rb +191 -0
  777. data/lib/chef/run_list/run_list_item.rb +99 -0
  778. data/lib/chef/run_list/versioned_recipe_list.rb +86 -0
  779. data/lib/chef/run_lock.rb +188 -0
  780. data/lib/chef/run_status.rb +125 -0
  781. data/lib/chef/runner.rb +117 -0
  782. data/lib/chef/sandbox.rb +20 -0
  783. data/lib/chef/scan_access_control.rb +138 -0
  784. data/lib/chef/search/query.rb +152 -0
  785. data/lib/chef/server_api.rb +44 -0
  786. data/lib/chef/shell.rb +323 -0
  787. data/lib/chef/shell/ext.rb +593 -0
  788. data/lib/chef/shell/model_wrapper.rb +120 -0
  789. data/lib/chef/shell/shell_rest.rb +28 -0
  790. data/lib/chef/shell/shell_session.rb +298 -0
  791. data/lib/chef/shell_out.rb +13 -0
  792. data/lib/chef/tasks/chef_repo.rake +201 -0
  793. data/lib/chef/user.rb +183 -0
  794. data/lib/chef/util/backup.rb +86 -0
  795. data/lib/chef/util/diff.rb +184 -0
  796. data/lib/chef/util/dsc/configuration_generator.rb +139 -0
  797. data/lib/chef/util/dsc/lcm_output_parser.rb +137 -0
  798. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  799. data/lib/chef/util/dsc/resource_info.rb +26 -0
  800. data/lib/chef/util/dsc/resource_store.rb +110 -0
  801. data/lib/chef/util/editor.rb +92 -0
  802. data/lib/chef/util/file_edit.rb +100 -0
  803. data/lib/chef/util/path_helper.rb +26 -0
  804. data/lib/chef/util/powershell/cmdlet.rb +170 -0
  805. data/lib/chef/util/powershell/cmdlet_result.rb +61 -0
  806. data/lib/chef/util/powershell/ps_credential.rb +38 -0
  807. data/lib/chef/util/selinux.rb +92 -0
  808. data/lib/chef/util/threaded_job_queue.rb +61 -0
  809. data/lib/chef/util/windows.rb +56 -0
  810. data/lib/chef/util/windows/net_group.rb +106 -0
  811. data/lib/chef/util/windows/net_use.rb +121 -0
  812. data/lib/chef/util/windows/net_user.rb +169 -0
  813. data/lib/chef/util/windows/volume.rb +59 -0
  814. data/lib/chef/version.rb +34 -0
  815. data/lib/chef/version/platform.rb +44 -0
  816. data/lib/chef/version_class.rb +70 -0
  817. data/lib/chef/version_constraint.rb +118 -0
  818. data/lib/chef/version_constraint/platform.rb +26 -0
  819. data/lib/chef/whitelist.rb +86 -0
  820. data/lib/chef/win32/api.rb +368 -0
  821. data/lib/chef/win32/api/crypto.rb +63 -0
  822. data/lib/chef/win32/api/error.rb +921 -0
  823. data/lib/chef/win32/api/file.rb +551 -0
  824. data/lib/chef/win32/api/installer.rb +166 -0
  825. data/lib/chef/win32/api/memory.rb +105 -0
  826. data/lib/chef/win32/api/net.rb +204 -0
  827. data/lib/chef/win32/api/process.rb +42 -0
  828. data/lib/chef/win32/api/psapi.rb +51 -0
  829. data/lib/chef/win32/api/security.rb +435 -0
  830. data/lib/chef/win32/api/synchronization.rb +89 -0
  831. data/lib/chef/win32/api/system.rb +215 -0
  832. data/lib/chef/win32/api/unicode.rb +178 -0
  833. data/lib/chef/win32/crypto.rb +49 -0
  834. data/lib/chef/win32/error.rb +73 -0
  835. data/lib/chef/win32/eventlog.rb +31 -0
  836. data/lib/chef/win32/file.rb +188 -0
  837. data/lib/chef/win32/file/info.rb +100 -0
  838. data/lib/chef/win32/handle.rb +55 -0
  839. data/lib/chef/win32/memory.rb +101 -0
  840. data/lib/chef/win32/mutex.rb +117 -0
  841. data/lib/chef/win32/net.rb +190 -0
  842. data/lib/chef/win32/process.rb +84 -0
  843. data/lib/chef/win32/registry.rb +381 -0
  844. data/lib/chef/win32/security.rb +603 -0
  845. data/lib/chef/win32/security/ace.rb +123 -0
  846. data/lib/chef/win32/security/acl.rb +103 -0
  847. data/lib/chef/win32/security/securable_object.rb +109 -0
  848. data/lib/chef/win32/security/security_descriptor.rb +93 -0
  849. data/lib/chef/win32/security/sid.rb +266 -0
  850. data/lib/chef/win32/security/token.rb +72 -0
  851. data/lib/chef/win32/unicode.rb +55 -0
  852. data/lib/chef/win32/version.rb +162 -0
  853. data/lib/chef/workstation_config_loader.rb +178 -0
  854. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  855. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  856. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  857. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  858. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  859. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  860. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  861. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  862. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  863. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  864. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  865. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  866. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  867. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  868. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  869. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  870. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  871. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  872. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  873. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  874. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  875. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  876. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  877. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  878. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  879. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  880. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  881. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  882. data/spec/data/apt/var/www/apt/db/version +4 -0
  883. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  884. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  885. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  886. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  887. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  888. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  889. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  890. data/spec/data/bad-config.rb +1 -0
  891. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  892. data/spec/data/bootstrap/no_proxy.erb +2 -0
  893. data/spec/data/bootstrap/secret.erb +9 -0
  894. data/spec/data/bootstrap/test-hints.erb +12 -0
  895. data/spec/data/bootstrap/test.erb +1 -0
  896. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  897. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  898. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +3 -0
  899. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -0
  900. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +1 -0
  901. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +1 -0
  902. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +1 -0
  903. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +1 -0
  904. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +1 -0
  905. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +1 -0
  906. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  907. data/spec/data/checksum/random.txt +1 -0
  908. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -0
  909. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  910. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -0
  911. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -0
  912. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -0
  913. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -0
  914. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -0
  915. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -0
  916. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -0
  917. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -0
  918. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -0
  919. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -0
  920. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -0
  921. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -0
  922. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -0
  923. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -0
  924. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -0
  925. data/spec/data/config.rb +6 -0
  926. data/spec/data/cookbooks/angrybash/metadata.rb +2 -0
  927. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
  928. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
  929. data/spec/data/cookbooks/apache2/metadata.rb +2 -0
  930. data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
  931. data/spec/data/cookbooks/borken/metadata.rb +2 -0
  932. data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
  933. data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
  934. data/spec/data/cookbooks/chefignore +8 -0
  935. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  936. data/spec/data/cookbooks/ignorken/metadata.rb +2 -0
  937. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  938. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  939. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  940. data/spec/data/cookbooks/java/files/default/java.response +2 -0
  941. data/spec/data/cookbooks/java/metadata.rb +2 -0
  942. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -0
  943. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -0
  944. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -0
  945. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -0
  946. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
  947. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
  948. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
  949. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  950. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  951. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  952. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -0
  953. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
  954. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
  955. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  956. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
  957. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
  958. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
  959. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  960. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  961. data/spec/data/cookbooks/openldap/metadata.rb +8 -0
  962. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -0
  963. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
  964. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
  965. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -0
  966. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  967. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  968. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  969. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  970. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
  971. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
  972. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  973. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
  974. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  975. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -0
  976. data/spec/data/cookbooks/preseed/metadata.rb +2 -0
  977. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -0
  978. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  979. data/spec/data/definitions/test.rb +5 -0
  980. data/spec/data/environment-config.rb +5 -0
  981. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  982. data/spec/data/fileedit/blank +0 -0
  983. data/spec/data/fileedit/hosts +4 -0
  984. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  985. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  986. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  987. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  988. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  989. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -0
  990. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -0
  991. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -0
  992. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -0
  993. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +10 -0
  994. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -0
  995. data/spec/data/kitchen/chefignore +6 -0
  996. data/spec/data/kitchen/openldap/attributes/default.rb +3 -0
  997. data/spec/data/kitchen/openldap/attributes/robinson.rb +3 -0
  998. data/spec/data/kitchen/openldap/definitions/client.rb +3 -0
  999. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +3 -0
  1000. data/spec/data/kitchen/openldap/recipes/gigantor.rb +3 -0
  1001. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +3 -0
  1002. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -0
  1003. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  1004. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  1005. data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
  1006. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
  1007. data/spec/data/knife_subcommand/test_yourself.rb +21 -0
  1008. data/spec/data/lwrp/providers/buck_passer.rb +28 -0
  1009. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -0
  1010. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -0
  1011. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  1012. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -0
  1013. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -0
  1014. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -0
  1015. data/spec/data/lwrp/resources/bar.rb +2 -0
  1016. data/spec/data/lwrp/resources/foo.rb +4 -0
  1017. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -0
  1018. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
  1019. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -0
  1020. data/spec/data/lwrp_override/resources/foo.rb +10 -0
  1021. data/spec/data/mac_users/10.7-8.plist.xml +559 -0
  1022. data/spec/data/mac_users/10.7-8.shadow.xml +11 -0
  1023. data/spec/data/mac_users/10.7.plist.xml +559 -0
  1024. data/spec/data/mac_users/10.7.shadow.xml +11 -0
  1025. data/spec/data/mac_users/10.8.plist.xml +559 -0
  1026. data/spec/data/mac_users/10.8.shadow.xml +21 -0
  1027. data/spec/data/mac_users/10.9.plist.xml +560 -0
  1028. data/spec/data/mac_users/10.9.shadow.xml +21 -0
  1029. data/spec/data/metadata/quick_start/metadata.rb +19 -0
  1030. data/spec/data/nested.json +2 -0
  1031. data/spec/data/nodes/default.rb +15 -0
  1032. data/spec/data/nodes/test.example.com.rb +17 -0
  1033. data/spec/data/nodes/test.rb +15 -0
  1034. data/spec/data/null_config.rb +1 -0
  1035. data/spec/data/object_loader/environments/test.json +7 -0
  1036. data/spec/data/object_loader/environments/test.rb +2 -0
  1037. data/spec/data/object_loader/environments/test_json_class.json +8 -0
  1038. data/spec/data/object_loader/nodes/test.json +7 -0
  1039. data/spec/data/object_loader/nodes/test.rb +2 -0
  1040. data/spec/data/object_loader/nodes/test_json_class.json +8 -0
  1041. data/spec/data/object_loader/roles/test.json +7 -0
  1042. data/spec/data/object_loader/roles/test.rb +2 -0
  1043. data/spec/data/object_loader/roles/test_json_class.json +8 -0
  1044. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  1045. data/spec/data/old_home_dir/my-dot-vim +0 -0
  1046. data/spec/data/partial_one.erb +1 -0
  1047. data/spec/data/recipes.tgz +0 -0
  1048. data/spec/data/recipes/test.rb +7 -0
  1049. data/spec/data/remote_directory_data/remote_dir_file.txt +1 -0
  1050. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +1 -0
  1051. data/spec/data/remote_file/nyan_cat.png +0 -0
  1052. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  1053. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  1054. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  1055. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  1056. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  1057. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  1058. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  1059. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  1060. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  1061. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  1062. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  1063. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  1064. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  1065. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  1066. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  1067. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  1068. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  1069. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  1070. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  1071. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  1072. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  1073. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  1074. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  1075. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  1076. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  1077. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  1078. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  1079. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  1080. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  1081. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  1082. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  1083. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  1084. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  1085. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  1086. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  1087. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  1088. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  1089. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  1090. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  1091. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  1092. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  1093. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  1094. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  1095. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  1096. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  1097. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  1098. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  1099. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  1100. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  1101. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  1102. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -0
  1103. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -0
  1104. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -0
  1105. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  1106. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  1107. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -0
  1108. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -0
  1109. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -0
  1110. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  1111. data/spec/data/run_context/nodes/run_context.rb +5 -0
  1112. data/spec/data/search_queries_to_transform.txt +98 -0
  1113. data/spec/data/shef-config.rb +10 -0
  1114. data/spec/data/ssl/5e707473.0 +18 -0
  1115. data/spec/data/ssl/chef-rspec.cert +27 -0
  1116. data/spec/data/ssl/chef-rspec.key +27 -0
  1117. data/spec/data/ssl/key.pem +15 -0
  1118. data/spec/data/ssl/private_key.pem +27 -0
  1119. data/spec/data/ssl/private_key_with_whitespace.pem +32 -0
  1120. data/spec/data/standalone_cookbook/Gemfile +1 -0
  1121. data/spec/data/standalone_cookbook/chefignore +9 -0
  1122. data/spec/data/standalone_cookbook/recipes/default.rb +3 -0
  1123. data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +1 -0
  1124. data/spec/data/templates/seattle.txt +1 -0
  1125. data/spec/data/trusted_certs/example.crt +22 -0
  1126. data/spec/data/trusted_certs/intermediate.pem +27 -0
  1127. data/spec/data/trusted_certs/opscode.pem +60 -0
  1128. data/spec/data/trusted_certs/root.pem +22 -0
  1129. data/spec/functional/application_spec.rb +58 -0
  1130. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  1131. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  1132. data/spec/functional/assets/chefinittest +34 -0
  1133. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  1134. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  1135. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  1136. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  1137. data/spec/functional/assets/testchefsubsys +11 -0
  1138. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  1139. data/spec/functional/audit/runner_spec.rb +137 -0
  1140. data/spec/functional/dsl/reboot_pending_spec.rb +121 -0
  1141. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  1142. data/spec/functional/event_loggers/windows_eventlog_spec.rb +96 -0
  1143. data/spec/functional/file_content_management/deploy_strategies_spec.rb +230 -0
  1144. data/spec/functional/http/simple_spec.rb +140 -0
  1145. data/spec/functional/knife/configure_spec.rb +38 -0
  1146. data/spec/functional/knife/cookbook_delete_spec.rb +157 -0
  1147. data/spec/functional/knife/exec_spec.rb +55 -0
  1148. data/spec/functional/knife/smoke_test.rb +34 -0
  1149. data/spec/functional/knife/ssh_spec.rb +268 -0
  1150. data/spec/functional/mixin/shell_out_spec.rb +48 -0
  1151. data/spec/functional/notifications_spec.rb +169 -0
  1152. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  1153. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -0
  1154. data/spec/functional/rebooter_spec.rb +105 -0
  1155. data/spec/functional/resource/aix_service_spec.rb +139 -0
  1156. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  1157. data/spec/functional/resource/base.rb +30 -0
  1158. data/spec/functional/resource/bash_spec.rb +88 -0
  1159. data/spec/functional/resource/batch_spec.rb +30 -0
  1160. data/spec/functional/resource/bff_spec.rb +122 -0
  1161. data/spec/functional/resource/cookbook_file_spec.rb +81 -0
  1162. data/spec/functional/resource/cron_spec.rb +172 -0
  1163. data/spec/functional/resource/deploy_revision_spec.rb +881 -0
  1164. data/spec/functional/resource/directory_spec.rb +43 -0
  1165. data/spec/functional/resource/dsc_resource_spec.rb +93 -0
  1166. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  1167. data/spec/functional/resource/env_spec.rb +192 -0
  1168. data/spec/functional/resource/execute_spec.rb +147 -0
  1169. data/spec/functional/resource/file_spec.rb +143 -0
  1170. data/spec/functional/resource/git_spec.rb +259 -0
  1171. data/spec/functional/resource/group_spec.rb +433 -0
  1172. data/spec/functional/resource/ifconfig_spec.rb +163 -0
  1173. data/spec/functional/resource/link_spec.rb +614 -0
  1174. data/spec/functional/resource/mount_spec.rb +212 -0
  1175. data/spec/functional/resource/ohai_spec.rb +65 -0
  1176. data/spec/functional/resource/package_spec.rb +390 -0
  1177. data/spec/functional/resource/powershell_spec.rb +477 -0
  1178. data/spec/functional/resource/reboot_spec.rb +103 -0
  1179. data/spec/functional/resource/registry_spec.rb +561 -0
  1180. data/spec/functional/resource/remote_directory_spec.rb +220 -0
  1181. data/spec/functional/resource/remote_file_spec.rb +240 -0
  1182. data/spec/functional/resource/rpm_spec.rb +123 -0
  1183. data/spec/functional/resource/template_spec.rb +212 -0
  1184. data/spec/functional/resource/user/dscl_spec.rb +198 -0
  1185. data/spec/functional/resource/user/useradd_spec.rb +713 -0
  1186. data/spec/functional/resource/user/windows_spec.rb +125 -0
  1187. data/spec/functional/resource/windows_service_spec.rb +98 -0
  1188. data/spec/functional/rest_spec.rb +94 -0
  1189. data/spec/functional/run_lock_spec.rb +286 -0
  1190. data/spec/functional/shell_spec.rb +147 -0
  1191. data/spec/functional/tiny_server_spec.rb +78 -0
  1192. data/spec/functional/util/path_helper_spec.rb +37 -0
  1193. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  1194. data/spec/functional/version_spec.rb +35 -0
  1195. data/spec/functional/win32/crypto_spec.rb +57 -0
  1196. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  1197. data/spec/functional/win32/security_spec.rb +100 -0
  1198. data/spec/functional/win32/service_manager_spec.rb +221 -0
  1199. data/spec/functional/win32/sid_spec.rb +55 -0
  1200. data/spec/functional/win32/versions_spec.rb +117 -0
  1201. data/spec/integration/client/client_spec.rb +370 -0
  1202. data/spec/integration/client/ipv6_spec.rb +135 -0
  1203. data/spec/integration/knife/chef_fs_data_store_spec.rb +370 -0
  1204. data/spec/integration/knife/chef_repo_path_spec.rb +888 -0
  1205. data/spec/integration/knife/chef_repository_file_system_spec.rb +292 -0
  1206. data/spec/integration/knife/chefignore_spec.rb +300 -0
  1207. data/spec/integration/knife/common_options_spec.rb +155 -0
  1208. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -0
  1209. data/spec/integration/knife/delete_spec.rb +1003 -0
  1210. data/spec/integration/knife/deps_spec.rb +706 -0
  1211. data/spec/integration/knife/diff_spec.rb +602 -0
  1212. data/spec/integration/knife/download_spec.rb +1170 -0
  1213. data/spec/integration/knife/list_spec.rb +865 -0
  1214. data/spec/integration/knife/raw_spec.rb +242 -0
  1215. data/spec/integration/knife/redirection_spec.rb +52 -0
  1216. data/spec/integration/knife/serve_spec.rb +57 -0
  1217. data/spec/integration/knife/show_spec.rb +167 -0
  1218. data/spec/integration/knife/upload_spec.rb +1391 -0
  1219. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +78 -0
  1220. data/spec/integration/recipes/provider_choice.rb +41 -0
  1221. data/spec/integration/recipes/recipe_dsl_spec.rb +259 -0
  1222. data/spec/integration/solo/solo_spec.rb +143 -0
  1223. data/spec/rcov.opts +2 -0
  1224. data/spec/scripts/ssl-serve.rb +52 -0
  1225. data/spec/spec_helper.rb +219 -0
  1226. data/spec/stress/win32/file_spec.rb +37 -0
  1227. data/spec/stress/win32/memory_spec.rb +22 -0
  1228. data/spec/stress/win32/security_spec.rb +69 -0
  1229. data/spec/support/chef_helpers.rb +96 -0
  1230. data/spec/support/key_helpers.rb +104 -0
  1231. data/spec/support/lib/chef/provider/easy.rb +35 -0
  1232. data/spec/support/lib/chef/provider/snakeoil.rb +41 -0
  1233. data/spec/support/lib/chef/resource/cat.rb +40 -0
  1234. data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
  1235. data/spec/support/lib/chef/resource/with_state.rb +37 -0
  1236. data/spec/support/lib/chef/resource/zen_follower.rb +41 -0
  1237. data/spec/support/lib/chef/resource/zen_master.rb +47 -0
  1238. data/spec/support/lib/library_load_order.rb +22 -0
  1239. data/spec/support/matchers/leak.rb +96 -0
  1240. data/spec/support/mock/constant.rb +52 -0
  1241. data/spec/support/mock/platform.rb +25 -0
  1242. data/spec/support/pedant/Gemfile +3 -0
  1243. data/spec/support/pedant/Gemfile.lock +67 -0
  1244. data/spec/support/pedant/pedant_config.rb +129 -0
  1245. data/spec/support/pedant/run_pedant.rb +63 -0
  1246. data/spec/support/pedant/stickywicket.pem +27 -0
  1247. data/spec/support/platform_helpers.rb +184 -0
  1248. data/spec/support/platforms/prof/gc.rb +54 -0
  1249. data/spec/support/platforms/prof/win32.rb +46 -0
  1250. data/spec/support/platforms/win32/spec_service.rb +59 -0
  1251. data/spec/support/shared/context/config.rb +21 -0
  1252. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  1253. data/spec/support/shared/functional/directory_resource.rb +176 -0
  1254. data/spec/support/shared/functional/file_resource.rb +1056 -0
  1255. data/spec/support/shared/functional/http.rb +249 -0
  1256. data/spec/support/shared/functional/knife.rb +37 -0
  1257. data/spec/support/shared/functional/securable_resource.rb +571 -0
  1258. data/spec/support/shared/functional/securable_resource_with_reporting.rb +398 -0
  1259. data/spec/support/shared/functional/win32_service.rb +60 -0
  1260. data/spec/support/shared/functional/windows_script.rb +165 -0
  1261. data/spec/support/shared/integration/app_server_support.rb +42 -0
  1262. data/spec/support/shared/integration/integration_helper.rb +148 -0
  1263. data/spec/support/shared/integration/knife_support.rb +173 -0
  1264. data/spec/support/shared/matchers/exit_with_code.rb +32 -0
  1265. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  1266. data/spec/support/shared/shared_examples.rb +14 -0
  1267. data/spec/support/shared/unit/api_error_inspector.rb +192 -0
  1268. data/spec/support/shared/unit/execute_resource.rb +128 -0
  1269. data/spec/support/shared/unit/file_system_support.rb +70 -0
  1270. data/spec/support/shared/unit/platform_introspector.rb +184 -0
  1271. data/spec/support/shared/unit/provider/file.rb +840 -0
  1272. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +434 -0
  1273. data/spec/support/shared/unit/resource/static_provider_resolution.rb +66 -0
  1274. data/spec/support/shared/unit/script_resource.rb +98 -0
  1275. data/spec/support/shared/unit/windows_script_resource.rb +81 -0
  1276. data/spec/tiny_server.rb +203 -0
  1277. data/spec/unit/api_client/registration_spec.rb +274 -0
  1278. data/spec/unit/api_client_spec.rb +348 -0
  1279. data/spec/unit/application/agent_spec.rb +0 -0
  1280. data/spec/unit/application/apply_spec.rb +110 -0
  1281. data/spec/unit/application/client_spec.rb +420 -0
  1282. data/spec/unit/application/knife_spec.rb +177 -0
  1283. data/spec/unit/application/server_spec.rb +0 -0
  1284. data/spec/unit/application/solo_spec.rb +185 -0
  1285. data/spec/unit/application_spec.rb +544 -0
  1286. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  1287. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  1288. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  1289. data/spec/unit/audit/rspec_formatter_spec.rb +29 -0
  1290. data/spec/unit/audit/runner_spec.rb +145 -0
  1291. data/spec/unit/chef_class_spec.rb +91 -0
  1292. data/spec/unit/chef_fs/config_spec.rb +110 -0
  1293. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -0
  1294. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  1295. data/spec/unit/chef_fs/file_pattern_spec.rb +525 -0
  1296. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -0
  1297. data/spec/unit/chef_fs/file_system_spec.rb +148 -0
  1298. data/spec/unit/chef_fs/parallelizer.rb +482 -0
  1299. data/spec/unit/chef_spec.rb +25 -0
  1300. data/spec/unit/client_spec.rb +839 -0
  1301. data/spec/unit/config_fetcher_spec.rb +97 -0
  1302. data/spec/unit/cookbook/chefignore_spec.rb +49 -0
  1303. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +187 -0
  1304. data/spec/unit/cookbook/file_vendor_spec.rb +98 -0
  1305. data/spec/unit/cookbook/metadata_spec.rb +787 -0
  1306. data/spec/unit/cookbook/synchronizer_spec.rb +521 -0
  1307. data/spec/unit/cookbook/syntax_check_spec.rb +214 -0
  1308. data/spec/unit/cookbook_loader_spec.rb +291 -0
  1309. data/spec/unit/cookbook_manifest_spec.rb +244 -0
  1310. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -0
  1311. data/spec/unit/cookbook_spec.rb +75 -0
  1312. data/spec/unit/cookbook_uploader_spec.rb +200 -0
  1313. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  1314. data/spec/unit/cookbook_version_spec.rb +364 -0
  1315. data/spec/unit/daemon_spec.rb +174 -0
  1316. data/spec/unit/data_bag_item_spec.rb +324 -0
  1317. data/spec/unit/data_bag_spec.rb +260 -0
  1318. data/spec/unit/deprecation_spec.rb +98 -0
  1319. data/spec/unit/digester_spec.rb +50 -0
  1320. data/spec/unit/dsl/audit_spec.rb +43 -0
  1321. data/spec/unit/dsl/data_query_spec.rb +106 -0
  1322. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  1323. data/spec/unit/dsl/reboot_pending_spec.rb +94 -0
  1324. data/spec/unit/dsl/recipe_spec.rb +82 -0
  1325. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  1326. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  1327. data/spec/unit/encrypted_data_bag_item_spec.rb +437 -0
  1328. data/spec/unit/environment_spec.rb +470 -0
  1329. data/spec/unit/event_dispatch/dispatcher_spec.rb +61 -0
  1330. data/spec/unit/exceptions_spec.rb +130 -0
  1331. data/spec/unit/file_access_control_spec.rb +308 -0
  1332. data/spec/unit/file_cache_spec.rb +114 -0
  1333. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  1334. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  1335. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  1336. data/spec/unit/formatters/base_spec.rb +48 -0
  1337. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +75 -0
  1338. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +239 -0
  1339. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +129 -0
  1340. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -0
  1341. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +27 -0
  1342. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +27 -0
  1343. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +193 -0
  1344. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +93 -0
  1345. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +147 -0
  1346. data/spec/unit/guard_interpreter_spec.rb +41 -0
  1347. data/spec/unit/handler/json_file_spec.rb +64 -0
  1348. data/spec/unit/handler_spec.rb +215 -0
  1349. data/spec/unit/http/authenticator_spec.rb +69 -0
  1350. data/spec/unit/http/basic_client_spec.rb +129 -0
  1351. data/spec/unit/http/http_request_spec.rb +91 -0
  1352. data/spec/unit/http/json_input_spec.rb +128 -0
  1353. data/spec/unit/http/simple_spec.rb +32 -0
  1354. data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -0
  1355. data/spec/unit/http/ssl_policies_spec.rb +170 -0
  1356. data/spec/unit/http/validate_content_length_spec.rb +192 -0
  1357. data/spec/unit/http_spec.rb +92 -0
  1358. data/spec/unit/json_compat_spec.rb +97 -0
  1359. data/spec/unit/key_spec.rb +634 -0
  1360. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  1361. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  1362. data/spec/unit/knife/bootstrap_spec.rb +641 -0
  1363. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -0
  1364. data/spec/unit/knife/client_create_spec.rb +116 -0
  1365. data/spec/unit/knife/client_delete_spec.rb +83 -0
  1366. data/spec/unit/knife/client_edit_spec.rb +40 -0
  1367. data/spec/unit/knife/client_list_spec.rb +34 -0
  1368. data/spec/unit/knife/client_reregister_spec.rb +62 -0
  1369. data/spec/unit/knife/client_show_spec.rb +52 -0
  1370. data/spec/unit/knife/configure_client_spec.rb +84 -0
  1371. data/spec/unit/knife/configure_spec.rb +243 -0
  1372. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +89 -0
  1373. data/spec/unit/knife/cookbook_create_spec.rb +260 -0
  1374. data/spec/unit/knife/cookbook_delete_spec.rb +239 -0
  1375. data/spec/unit/knife/cookbook_download_spec.rb +238 -0
  1376. data/spec/unit/knife/cookbook_list_spec.rb +88 -0
  1377. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -0
  1378. data/spec/unit/knife/cookbook_metadata_spec.rb +179 -0
  1379. data/spec/unit/knife/cookbook_show_spec.rb +223 -0
  1380. data/spec/unit/knife/cookbook_site_download_spec.rb +151 -0
  1381. data/spec/unit/knife/cookbook_site_install_spec.rb +195 -0
  1382. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -0
  1383. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -0
  1384. data/spec/unit/knife/cookbook_test_spec.rb +84 -0
  1385. data/spec/unit/knife/cookbook_upload_spec.rb +329 -0
  1386. data/spec/unit/knife/core/bootstrap_context_spec.rb +227 -0
  1387. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -0
  1388. data/spec/unit/knife/core/object_loader_spec.rb +81 -0
  1389. data/spec/unit/knife/core/subcommand_loader_spec.rb +224 -0
  1390. data/spec/unit/knife/core/ui_spec.rb +577 -0
  1391. data/spec/unit/knife/data_bag_create_spec.rb +109 -0
  1392. data/spec/unit/knife/data_bag_edit_spec.rb +127 -0
  1393. data/spec/unit/knife/data_bag_from_file_spec.rb +172 -0
  1394. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  1395. data/spec/unit/knife/data_bag_show_spec.rb +123 -0
  1396. data/spec/unit/knife/environment_compare_spec.rb +112 -0
  1397. data/spec/unit/knife/environment_create_spec.rb +91 -0
  1398. data/spec/unit/knife/environment_delete_spec.rb +71 -0
  1399. data/spec/unit/knife/environment_edit_spec.rb +79 -0
  1400. data/spec/unit/knife/environment_from_file_spec.rb +90 -0
  1401. data/spec/unit/knife/environment_list_spec.rb +54 -0
  1402. data/spec/unit/knife/environment_show_spec.rb +52 -0
  1403. data/spec/unit/knife/index_rebuild_spec.rb +128 -0
  1404. data/spec/unit/knife/key_create_spec.rb +224 -0
  1405. data/spec/unit/knife/key_delete_spec.rb +135 -0
  1406. data/spec/unit/knife/key_edit_spec.rb +267 -0
  1407. data/spec/unit/knife/key_helper.rb +74 -0
  1408. data/spec/unit/knife/key_list_spec.rb +216 -0
  1409. data/spec/unit/knife/key_show_spec.rb +126 -0
  1410. data/spec/unit/knife/knife_help.rb +92 -0
  1411. data/spec/unit/knife/node_bulk_delete_spec.rb +97 -0
  1412. data/spec/unit/knife/node_delete_spec.rb +68 -0
  1413. data/spec/unit/knife/node_edit_spec.rb +115 -0
  1414. data/spec/unit/knife/node_environment_set_spec.rb +80 -0
  1415. data/spec/unit/knife/node_from_file_spec.rb +59 -0
  1416. data/spec/unit/knife/node_list_spec.rb +63 -0
  1417. data/spec/unit/knife/node_run_list_add_spec.rb +148 -0
  1418. data/spec/unit/knife/node_run_list_remove_spec.rb +89 -0
  1419. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  1420. data/spec/unit/knife/node_show_spec.rb +65 -0
  1421. data/spec/unit/knife/raw_spec.rb +43 -0
  1422. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -0
  1423. data/spec/unit/knife/role_create_spec.rb +80 -0
  1424. data/spec/unit/knife/role_delete_spec.rb +67 -0
  1425. data/spec/unit/knife/role_edit_spec.rb +79 -0
  1426. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  1427. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  1428. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  1429. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  1430. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  1431. data/spec/unit/knife/role_from_file_spec.rb +69 -0
  1432. data/spec/unit/knife/role_list_spec.rb +56 -0
  1433. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  1434. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  1435. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  1436. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  1437. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  1438. data/spec/unit/knife/role_show_spec.rb +59 -0
  1439. data/spec/unit/knife/ssh_spec.rb +410 -0
  1440. data/spec/unit/knife/ssl_check_spec.rb +232 -0
  1441. data/spec/unit/knife/ssl_fetch_spec.rb +184 -0
  1442. data/spec/unit/knife/status_spec.rb +108 -0
  1443. data/spec/unit/knife/tag_create_spec.rb +23 -0
  1444. data/spec/unit/knife/tag_delete_spec.rb +25 -0
  1445. data/spec/unit/knife/tag_list_spec.rb +23 -0
  1446. data/spec/unit/knife/user_create_spec.rb +88 -0
  1447. data/spec/unit/knife/user_delete_spec.rb +39 -0
  1448. data/spec/unit/knife/user_edit_spec.rb +47 -0
  1449. data/spec/unit/knife/user_list_spec.rb +32 -0
  1450. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  1451. data/spec/unit/knife/user_show_spec.rb +41 -0
  1452. data/spec/unit/knife_spec.rb +492 -0
  1453. data/spec/unit/log/syslog_spec.rb +53 -0
  1454. data/spec/unit/log/winevt_spec.rb +55 -0
  1455. data/spec/unit/log_spec.rb +24 -0
  1456. data/spec/unit/lwrp_spec.rb +497 -0
  1457. data/spec/unit/mash_spec.rb +51 -0
  1458. data/spec/unit/mixin/checksum_spec.rb +41 -0
  1459. data/spec/unit/mixin/command_spec.rb +105 -0
  1460. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -0
  1461. data/spec/unit/mixin/deep_merge_spec.rb +342 -0
  1462. data/spec/unit/mixin/deprecation_spec.rb +57 -0
  1463. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -0
  1464. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  1465. data/spec/unit/mixin/params_validate_spec.rb +407 -0
  1466. data/spec/unit/mixin/path_sanity_spec.rb +86 -0
  1467. data/spec/unit/mixin/powershell_type_coercions_spec.rb +72 -0
  1468. data/spec/unit/mixin/securable_spec.rb +314 -0
  1469. data/spec/unit/mixin/shell_out_spec.rb +299 -0
  1470. data/spec/unit/mixin/template_spec.rb +269 -0
  1471. data/spec/unit/mixin/unformatter_spec.rb +61 -0
  1472. data/spec/unit/mixin/uris_spec.rb +45 -0
  1473. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  1474. data/spec/unit/mixin/xml_escape_spec.rb +54 -0
  1475. data/spec/unit/monkey_patches/uri_spec.rb +34 -0
  1476. data/spec/unit/monologger_spec.rb +45 -0
  1477. data/spec/unit/node/attribute_spec.rb +1224 -0
  1478. data/spec/unit/node/immutable_collections_spec.rb +198 -0
  1479. data/spec/unit/node_map_spec.rb +155 -0
  1480. data/spec/unit/node_spec.rb +1307 -0
  1481. data/spec/unit/org_spec.rb +196 -0
  1482. data/spec/unit/platform/query_helpers_spec.rb +77 -0
  1483. data/spec/unit/platform_spec.rb +301 -0
  1484. data/spec/unit/policy_builder/expand_node_object_spec.rb +335 -0
  1485. data/spec/unit/policy_builder/policyfile_spec.rb +530 -0
  1486. data/spec/unit/policy_builder_spec.rb +26 -0
  1487. data/spec/unit/provider/breakpoint_spec.rb +54 -0
  1488. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  1489. data/spec/unit/provider/cookbook_file_spec.rb +58 -0
  1490. data/spec/unit/provider/cron/unix_spec.rb +139 -0
  1491. data/spec/unit/provider/cron_spec.rb +1010 -0
  1492. data/spec/unit/provider/deploy/revision_spec.rb +111 -0
  1493. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -0
  1494. data/spec/unit/provider/deploy_spec.rb +642 -0
  1495. data/spec/unit/provider/directory_spec.rb +188 -0
  1496. data/spec/unit/provider/dsc_resource_spec.rb +84 -0
  1497. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  1498. data/spec/unit/provider/env/windows_spec.rb +103 -0
  1499. data/spec/unit/provider/env_spec.rb +310 -0
  1500. data/spec/unit/provider/erl_call_spec.rb +86 -0
  1501. data/spec/unit/provider/execute_spec.rb +176 -0
  1502. data/spec/unit/provider/file/content_spec.rb +114 -0
  1503. data/spec/unit/provider/file_spec.rb +57 -0
  1504. data/spec/unit/provider/git_spec.rb +669 -0
  1505. data/spec/unit/provider/group/dscl_spec.rb +331 -0
  1506. data/spec/unit/provider/group/gpasswd_spec.rb +116 -0
  1507. data/spec/unit/provider/group/groupadd_spec.rb +174 -0
  1508. data/spec/unit/provider/group/groupmod_spec.rb +133 -0
  1509. data/spec/unit/provider/group/pw_spec.rb +138 -0
  1510. data/spec/unit/provider/group/usermod_spec.rb +115 -0
  1511. data/spec/unit/provider/group/windows_spec.rb +101 -0
  1512. data/spec/unit/provider/group_spec.rb +286 -0
  1513. data/spec/unit/provider/http_request_spec.rb +159 -0
  1514. data/spec/unit/provider/ifconfig/aix_spec.rb +181 -0
  1515. data/spec/unit/provider/ifconfig/debian_spec.rb +354 -0
  1516. data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -0
  1517. data/spec/unit/provider/ifconfig_spec.rb +180 -0
  1518. data/spec/unit/provider/link_spec.rb +252 -0
  1519. data/spec/unit/provider/log_spec.rb +75 -0
  1520. data/spec/unit/provider/mdadm_spec.rb +131 -0
  1521. data/spec/unit/provider/mount/aix_spec.rb +237 -0
  1522. data/spec/unit/provider/mount/mount_spec.rb +474 -0
  1523. data/spec/unit/provider/mount/solaris_spec.rb +822 -0
  1524. data/spec/unit/provider/mount/windows_spec.rb +137 -0
  1525. data/spec/unit/provider/mount_spec.rb +193 -0
  1526. data/spec/unit/provider/ohai_spec.rb +84 -0
  1527. data/spec/unit/provider/package/aix_spec.rb +172 -0
  1528. data/spec/unit/provider/package/apt_spec.rb +386 -0
  1529. data/spec/unit/provider/package/dpkg_spec.rb +195 -0
  1530. data/spec/unit/provider/package/easy_install_spec.rb +112 -0
  1531. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -0
  1532. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +155 -0
  1533. data/spec/unit/provider/package/freebsd/port_spec.rb +170 -0
  1534. data/spec/unit/provider/package/homebrew_spec.rb +292 -0
  1535. data/spec/unit/provider/package/ips_spec.rb +228 -0
  1536. data/spec/unit/provider/package/macports_spec.rb +203 -0
  1537. data/spec/unit/provider/package/openbsd_spec.rb +154 -0
  1538. data/spec/unit/provider/package/pacman_spec.rb +195 -0
  1539. data/spec/unit/provider/package/paludis_spec.rb +135 -0
  1540. data/spec/unit/provider/package/portage_spec.rb +310 -0
  1541. data/spec/unit/provider/package/rpm_spec.rb +205 -0
  1542. data/spec/unit/provider/package/rubygems_spec.rb +701 -0
  1543. data/spec/unit/provider/package/smartos_spec.rb +112 -0
  1544. data/spec/unit/provider/package/solaris_spec.rb +167 -0
  1545. data/spec/unit/provider/package/windows/msi_spec.rb +75 -0
  1546. data/spec/unit/provider/package/windows_spec.rb +165 -0
  1547. data/spec/unit/provider/package/yum_spec.rb +2190 -0
  1548. data/spec/unit/provider/package/zypper_spec.rb +230 -0
  1549. data/spec/unit/provider/package_spec.rb +707 -0
  1550. data/spec/unit/provider/package_spec.rbe +0 -0
  1551. data/spec/unit/provider/powershell_spec.rb +38 -0
  1552. data/spec/unit/provider/registry_key_spec.rb +283 -0
  1553. data/spec/unit/provider/remote_directory_spec.rb +222 -0
  1554. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +220 -0
  1555. data/spec/unit/provider/remote_file/content_spec.rb +253 -0
  1556. data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -0
  1557. data/spec/unit/provider/remote_file/ftp_spec.rb +219 -0
  1558. data/spec/unit/provider/remote_file/http_spec.rb +303 -0
  1559. data/spec/unit/provider/remote_file/local_file_spec.rb +84 -0
  1560. data/spec/unit/provider/remote_file/network_file_spec.rb +45 -0
  1561. data/spec/unit/provider/remote_file_spec.rb +63 -0
  1562. data/spec/unit/provider/route_spec.rb +243 -0
  1563. data/spec/unit/provider/ruby_block_spec.rb +46 -0
  1564. data/spec/unit/provider/script_spec.rb +114 -0
  1565. data/spec/unit/provider/service/aix_service_spec.rb +196 -0
  1566. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  1567. data/spec/unit/provider/service/arch_service_spec.rb +324 -0
  1568. data/spec/unit/provider/service/debian_service_spec.rb +375 -0
  1569. data/spec/unit/provider/service/freebsd_service_spec.rb +625 -0
  1570. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -0
  1571. data/spec/unit/provider/service/init_service_spec.rb +235 -0
  1572. data/spec/unit/provider/service/insserv_service_spec.rb +75 -0
  1573. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -0
  1574. data/spec/unit/provider/service/macosx_spec.rb +335 -0
  1575. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  1576. data/spec/unit/provider/service/redhat_spec.rb +156 -0
  1577. data/spec/unit/provider/service/simple_service_spec.rb +169 -0
  1578. data/spec/unit/provider/service/solaris_smf_service_spec.rb +184 -0
  1579. data/spec/unit/provider/service/systemd_service_spec.rb +279 -0
  1580. data/spec/unit/provider/service/upstart_service_spec.rb +319 -0
  1581. data/spec/unit/provider/service/windows_spec.rb +461 -0
  1582. data/spec/unit/provider/service_spec.rb +169 -0
  1583. data/spec/unit/provider/subversion_spec.rb +280 -0
  1584. data/spec/unit/provider/template/content_spec.rb +78 -0
  1585. data/spec/unit/provider/template_spec.rb +90 -0
  1586. data/spec/unit/provider/user/dscl_spec.rb +887 -0
  1587. data/spec/unit/provider/user/pw_spec.rb +252 -0
  1588. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  1589. data/spec/unit/provider/user/useradd_spec.rb +51 -0
  1590. data/spec/unit/provider/user/windows_spec.rb +185 -0
  1591. data/spec/unit/provider/user_spec.rb +466 -0
  1592. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +47 -0
  1593. data/spec/unit/provider_resolver_spec.rb +689 -0
  1594. data/spec/unit/provider_spec.rb +201 -0
  1595. data/spec/unit/pure_application_spec.rb +32 -0
  1596. data/spec/unit/recipe_spec.rb +649 -0
  1597. data/spec/unit/registry_helper_spec.rb +376 -0
  1598. data/spec/unit/resource/apt_package_spec.rb +38 -0
  1599. data/spec/unit/resource/bash_spec.rb +40 -0
  1600. data/spec/unit/resource/batch_spec.rb +49 -0
  1601. data/spec/unit/resource/breakpoint_spec.rb +47 -0
  1602. data/spec/unit/resource/chef_gem_spec.rb +161 -0
  1603. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  1604. data/spec/unit/resource/conditional_spec.rb +208 -0
  1605. data/spec/unit/resource/cookbook_file_spec.rb +89 -0
  1606. data/spec/unit/resource/cron_spec.rb +186 -0
  1607. data/spec/unit/resource/csh_spec.rb +40 -0
  1608. data/spec/unit/resource/deploy_revision_spec.rb +42 -0
  1609. data/spec/unit/resource/deploy_spec.rb +278 -0
  1610. data/spec/unit/resource/directory_spec.rb +82 -0
  1611. data/spec/unit/resource/dpkg_package_spec.rb +32 -0
  1612. data/spec/unit/resource/dsc_resource_spec.rb +85 -0
  1613. data/spec/unit/resource/dsc_script_spec.rb +130 -0
  1614. data/spec/unit/resource/easy_install_package_spec.rb +39 -0
  1615. data/spec/unit/resource/env_spec.rb +85 -0
  1616. data/spec/unit/resource/erl_call_spec.rb +81 -0
  1617. data/spec/unit/resource/execute_spec.rb +35 -0
  1618. data/spec/unit/resource/file/verification_spec.rb +111 -0
  1619. data/spec/unit/resource/file_spec.rb +130 -0
  1620. data/spec/unit/resource/freebsd_package_spec.rb +90 -0
  1621. data/spec/unit/resource/gem_package_spec.rb +42 -0
  1622. data/spec/unit/resource/git_spec.rb +50 -0
  1623. data/spec/unit/resource/group_spec.rb +157 -0
  1624. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  1625. data/spec/unit/resource/http_request_spec.rb +59 -0
  1626. data/spec/unit/resource/ifconfig_spec.rb +105 -0
  1627. data/spec/unit/resource/ips_package_spec.rb +40 -0
  1628. data/spec/unit/resource/link_spec.rb +134 -0
  1629. data/spec/unit/resource/log_spec.rb +73 -0
  1630. data/spec/unit/resource/macports_package_spec.rb +32 -0
  1631. data/spec/unit/resource/mdadm_spec.rb +102 -0
  1632. data/spec/unit/resource/mount_spec.rb +214 -0
  1633. data/spec/unit/resource/ohai_spec.rb +62 -0
  1634. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  1635. data/spec/unit/resource/package_spec.rb +93 -0
  1636. data/spec/unit/resource/pacman_package_spec.rb +32 -0
  1637. data/spec/unit/resource/perl_spec.rb +40 -0
  1638. data/spec/unit/resource/portage_package_spec.rb +38 -0
  1639. data/spec/unit/resource/powershell_spec.rb +132 -0
  1640. data/spec/unit/resource/python_spec.rb +40 -0
  1641. data/spec/unit/resource/registry_key_spec.rb +199 -0
  1642. data/spec/unit/resource/remote_directory_spec.rb +97 -0
  1643. data/spec/unit/resource/remote_file_spec.rb +202 -0
  1644. data/spec/unit/resource/resource_notification_spec.rb +170 -0
  1645. data/spec/unit/resource/route_spec.rb +107 -0
  1646. data/spec/unit/resource/rpm_package_spec.rb +46 -0
  1647. data/spec/unit/resource/ruby_block_spec.rb +61 -0
  1648. data/spec/unit/resource/ruby_spec.rb +40 -0
  1649. data/spec/unit/resource/scm_spec.rb +193 -0
  1650. data/spec/unit/resource/script_spec.rb +44 -0
  1651. data/spec/unit/resource/service_spec.rb +180 -0
  1652. data/spec/unit/resource/smartos_package_spec.rb +33 -0
  1653. data/spec/unit/resource/solaris_package_spec.rb +42 -0
  1654. data/spec/unit/resource/subversion_spec.rb +67 -0
  1655. data/spec/unit/resource/template_spec.rb +211 -0
  1656. data/spec/unit/resource/timestamped_deploy_spec.rb +33 -0
  1657. data/spec/unit/resource/user_spec.rb +133 -0
  1658. data/spec/unit/resource/windows_package_spec.rb +95 -0
  1659. data/spec/unit/resource/windows_service_spec.rb +49 -0
  1660. data/spec/unit/resource/yum_package_spec.rb +80 -0
  1661. data/spec/unit/resource_builder_spec.rb +1 -0
  1662. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  1663. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  1664. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -0
  1665. data/spec/unit/resource_collection_spec.rb +300 -0
  1666. data/spec/unit/resource_definition_spec.rb +117 -0
  1667. data/spec/unit/resource_reporter_spec.rb +759 -0
  1668. data/spec/unit/resource_spec.rb +879 -0
  1669. data/spec/unit/rest/auth_credentials_spec.rb +328 -0
  1670. data/spec/unit/rest_spec.rb +747 -0
  1671. data/spec/unit/role_spec.rb +362 -0
  1672. data/spec/unit/run_context/cookbook_compiler_spec.rb +186 -0
  1673. data/spec/unit/run_context_spec.rb +193 -0
  1674. data/spec/unit/run_list/run_list_expansion_spec.rb +129 -0
  1675. data/spec/unit/run_list/run_list_item_spec.rb +117 -0
  1676. data/spec/unit/run_list/versioned_recipe_list_spec.rb +123 -0
  1677. data/spec/unit/run_list_spec.rb +316 -0
  1678. data/spec/unit/run_lock_spec.rb +140 -0
  1679. data/spec/unit/run_status_spec.rb +145 -0
  1680. data/spec/unit/runner_spec.rb +411 -0
  1681. data/spec/unit/scan_access_control_spec.rb +184 -0
  1682. data/spec/unit/search/query_spec.rb +267 -0
  1683. data/spec/unit/shell/model_wrapper_spec.rb +97 -0
  1684. data/spec/unit/shell/shell_ext_spec.rb +153 -0
  1685. data/spec/unit/shell/shell_session_spec.rb +196 -0
  1686. data/spec/unit/shell_out_spec.rb +18 -0
  1687. data/spec/unit/shell_spec.rb +162 -0
  1688. data/spec/unit/user_spec.rb +271 -0
  1689. data/spec/unit/util/backup_spec.rb +142 -0
  1690. data/spec/unit/util/diff_spec.rb +579 -0
  1691. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -0
  1692. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +164 -0
  1693. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  1694. data/spec/unit/util/dsc/resource_store.rb +76 -0
  1695. data/spec/unit/util/editor_spec.rb +152 -0
  1696. data/spec/unit/util/file_edit_spec.rb +224 -0
  1697. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  1698. data/spec/unit/util/powershell/ps_credential_spec.rb +37 -0
  1699. data/spec/unit/util/selinux_spec.rb +172 -0
  1700. data/spec/unit/util/threaded_job_queue_spec.rb +51 -0
  1701. data/spec/unit/version/platform_spec.rb +61 -0
  1702. data/spec/unit/version_class_spec.rb +172 -0
  1703. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  1704. data/spec/unit/version_constraint_spec.rb +179 -0
  1705. data/spec/unit/windows_service_spec.rb +71 -0
  1706. data/spec/unit/workstation_config_loader_spec.rb +283 -0
  1707. data/tasks/external_tests.rb +29 -0
  1708. data/tasks/rspec.rb +86 -0
  1709. metadata +2305 -0
@@ -0,0 +1,2190 @@
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
+ require 'securerandom'
21
+
22
+ describe Chef::Provider::Package::Yum do
23
+ before(:each) do
24
+ @node = Chef::Node.new
25
+ @events = Chef::EventDispatch::Dispatcher.new
26
+ @run_context = Chef::RunContext.new(@node, {}, @events)
27
+ @new_resource = Chef::Resource::Package.new('cups')
28
+ @status = double("Status", :exitstatus => 0)
29
+ @yum_cache = double(
30
+ 'Chef::Provider::Yum::YumCache',
31
+ :reload_installed => true,
32
+ :reset => true,
33
+ :installed_version => "1.2.4-11.18.el5",
34
+ :candidate_version => "1.2.4-11.18.el5_2.3",
35
+ :package_available? => true,
36
+ :version_available? => true,
37
+ :allow_multi_install => [ "kernel" ],
38
+ :package_repository => "base",
39
+ :disable_extra_repo_control => true
40
+ )
41
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
42
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
43
+ @pid = double("PID")
44
+ end
45
+
46
+ describe "when loading the current system state" do
47
+ it "should create a current resource with the name of the new_resource" do
48
+ @provider.load_current_resource
49
+ expect(@provider.current_resource.name).to eq("cups")
50
+ end
51
+
52
+ it "should set the current resources package name to the new resources package name" do
53
+ @provider.load_current_resource
54
+ expect(@provider.current_resource.package_name).to eq("cups")
55
+ end
56
+
57
+ it "should set the installed version to nil on the current resource if no installed package" do
58
+ allow(@yum_cache).to receive(:installed_version).and_return(nil)
59
+ @provider.load_current_resource
60
+ expect(@provider.current_resource.version).to be_nil
61
+ end
62
+
63
+ it "should set the installed version if yum has one" do
64
+ @provider.load_current_resource
65
+ expect(@provider.current_resource.version).to eq("1.2.4-11.18.el5")
66
+ end
67
+
68
+ it "should set the candidate version if yum info has one" do
69
+ @provider.load_current_resource
70
+ expect(@provider.candidate_version).to eql("1.2.4-11.18.el5_2.3")
71
+ end
72
+
73
+ it "should return the current resouce" do
74
+ expect(@provider.load_current_resource).to eql(@provider.current_resource)
75
+ end
76
+
77
+ describe "when source is provided" do
78
+ it "should set the candidate version" do
79
+ @new_resource = Chef::Resource::YumPackage.new('testing.source')
80
+ @new_resource.source "chef-server-core-12.0.5-1.rpm"
81
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
82
+ allow(File).to receive(:exists?).with(@new_resource.source).and_return(true)
83
+ allow(@yum_cache).to receive(:installed_version).and_return(nil)
84
+ shellout_double = double(:stdout => 'chef-server-core 12.0.5-1')
85
+ allow(@provider).to receive(:shell_out!).and_return(shellout_double)
86
+ @provider.load_current_resource
87
+ expect(@provider.candidate_version).to eql('12.0.5-1')
88
+ end
89
+ end
90
+
91
+ describe "when arch in package_name" do
92
+ it "should set the arch if no existing package_name is found and new_package_name+new_arch is available" do
93
+ @new_resource = Chef::Resource::YumPackage.new('testing.noarch')
94
+ @yum_cache = double(
95
+ 'Chef::Provider::Yum::YumCache'
96
+ )
97
+ allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
98
+ # nothing installed for package_name/new_package_name
99
+ nil
100
+ end
101
+ allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
102
+ if package_name == "testing.noarch" || package_name == "testing.more.noarch"
103
+ nil
104
+ # candidate for new_package_name
105
+ elsif package_name == "testing" || package_name == "testing.more"
106
+ "1.1"
107
+ end
108
+ end
109
+ allow(@yum_cache).to receive(:package_available?).and_return(true)
110
+ allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
111
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
112
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
113
+ @provider.load_current_resource
114
+ expect(@provider.new_resource.package_name).to eq("testing")
115
+ expect(@provider.new_resource.arch).to eq("noarch")
116
+ expect(@provider.arch).to eq("noarch")
117
+
118
+ @new_resource = Chef::Resource::YumPackage.new('testing.more.noarch')
119
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
120
+ @provider.load_current_resource
121
+ expect(@provider.new_resource.package_name).to eq("testing.more")
122
+ expect(@provider.new_resource.arch).to eq("noarch")
123
+ expect(@provider.arch).to eq("noarch")
124
+ end
125
+
126
+ describe "when version constraint in package_name" do
127
+ it "should set package_version if no existing package_name is found and new_package_name is available" do
128
+ @new_resource = Chef::Resource::Package.new('cups = 1.2.4-11.18.el5_2.3')
129
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
130
+ allow(@yum_cache).to receive(:package_available?) { |pkg| pkg == 'cups' ? true : false }
131
+ allow(@yum_cache).to receive(:packages_from_require) do |pkg|
132
+ [Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.3", "noarch", [], false, true, "base"),
133
+ Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.2", "noarch", [], false, true, "base"),]
134
+ end
135
+ expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{checking yum info})
136
+ expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{installed version})
137
+ expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{matched 2 packages,})
138
+ @provider.load_current_resource
139
+ expect(@provider.new_resource.package_name).to eq("cups")
140
+ expect(@provider.new_resource.version).to eq("1.2.4-11.18.el5_2.3")
141
+ expect(@provider.send(:new_version_array)).to eq(["1.2.4-11.18.el5_2.3"])
142
+ expect(@provider.send(:package_name_array)).to eq(["cups"])
143
+ end
144
+ end
145
+
146
+ it "should not set the arch when an existing package_name is found" do
147
+ @new_resource = Chef::Resource::YumPackage.new('testing.beta3')
148
+ @yum_cache = double(
149
+ 'Chef::Provider::Yum::YumCache'
150
+ )
151
+ allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
152
+ # installed for package_name
153
+ if package_name == "testing.beta3" || package_name == "testing.beta3.more"
154
+ "1.1"
155
+ elsif package_name == "testing" || package_name == "testing.beta3"
156
+ nil
157
+ end
158
+ end
159
+ allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
160
+ # no candidate for package_name/new_package_name
161
+ nil
162
+ end
163
+ allow(@yum_cache).to receive(:package_available?).and_return(true)
164
+ allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
165
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
166
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
167
+ # annoying side effect of the fun stub'ing above
168
+ @provider.load_current_resource
169
+ expect(@provider.new_resource.package_name).to eq("testing.beta3")
170
+ expect(@provider.new_resource.arch).to eq(nil)
171
+ expect(@provider.arch).to eq(nil)
172
+
173
+ @new_resource = Chef::Resource::YumPackage.new('testing.beta3.more')
174
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
175
+ @provider.load_current_resource
176
+ expect(@provider.new_resource.package_name).to eq("testing.beta3.more")
177
+ expect(@provider.new_resource.arch).to eq(nil)
178
+ expect(@provider.arch).to eq(nil)
179
+ end
180
+
181
+ it "should not set the arch when no existing package_name or new_package_name+new_arch is found" do
182
+ @new_resource = Chef::Resource::YumPackage.new('testing.beta3')
183
+ @yum_cache = double(
184
+ 'Chef::Provider::Yum::YumCache'
185
+ )
186
+ allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
187
+ # nothing installed for package_name/new_package_name
188
+ nil
189
+ end
190
+ allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
191
+ # no candidate for package_name/new_package_name
192
+ nil
193
+ end
194
+ allow(@yum_cache).to receive(:package_available?).and_return(true)
195
+ allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
196
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
197
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
198
+ @provider.load_current_resource
199
+ expect(@provider.new_resource.package_name).to eq("testing.beta3")
200
+ expect(@provider.new_resource.arch).to eq(nil)
201
+ expect(@provider.arch).to eq(nil)
202
+
203
+ @new_resource = Chef::Resource::YumPackage.new('testing.beta3.more')
204
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
205
+ @provider.load_current_resource
206
+ expect(@provider.new_resource.package_name).to eq("testing.beta3.more")
207
+ expect(@provider.new_resource.arch).to eq(nil)
208
+ expect(@provider.arch).to eq(nil)
209
+ end
210
+
211
+ it "should ensure it doesn't clobber an existing arch if passed" do
212
+ @new_resource = Chef::Resource::YumPackage.new('testing.i386')
213
+ @new_resource.arch("x86_64")
214
+ @yum_cache = double(
215
+ 'Chef::Provider::Yum::YumCache'
216
+ )
217
+ allow(@yum_cache).to receive(:installed_version) do |package_name, arch|
218
+ # nothing installed for package_name/new_package_name
219
+ nil
220
+ end
221
+ allow(@yum_cache).to receive(:candidate_version) do |package_name, arch|
222
+ if package_name == "testing.noarch"
223
+ nil
224
+ # candidate for new_package_name
225
+ elsif package_name == "testing"
226
+ "1.1"
227
+ end
228
+ end.and_return("something")
229
+ allow(@yum_cache).to receive(:package_available?).and_return(true)
230
+ allow(@yum_cache).to receive(:disable_extra_repo_control).and_return(true)
231
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
232
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
233
+ @provider.load_current_resource
234
+ expect(@provider.new_resource.package_name).to eq("testing.i386")
235
+ expect(@provider.new_resource.arch).to eq("x86_64")
236
+ end
237
+ end
238
+
239
+ it "should flush the cache if :before is true" do
240
+ allow(@new_resource).to receive(:flush_cache).and_return({:after => false, :before => true})
241
+ expect(@yum_cache).to receive(:reload).once
242
+ @provider.load_current_resource
243
+ end
244
+
245
+ it "should flush the cache if :before is false" do
246
+ allow(@new_resource).to receive(:flush_cache).and_return({:after => false, :before => false})
247
+ expect(@yum_cache).not_to receive(:reload)
248
+ @provider.load_current_resource
249
+ end
250
+
251
+ it "should detect --enablerepo or --disablerepo when passed among options, collect them preserving order and notify the yum cache" do
252
+ allow(@new_resource).to receive(:options).and_return("--stuff --enablerepo=foo --otherthings --disablerepo=a,b,c --enablerepo=bar")
253
+ expect(@yum_cache).to receive(:enable_extra_repo_control).with("--enablerepo=foo --disablerepo=a,b,c --enablerepo=bar")
254
+ @provider.load_current_resource
255
+ end
256
+
257
+ it "should let the yum cache know extra repos are disabled if --enablerepo or --disablerepo aren't among options" do
258
+ allow(@new_resource).to receive(:options).and_return("--stuff --otherthings")
259
+ expect(@yum_cache).to receive(:disable_extra_repo_control)
260
+ @provider.load_current_resource
261
+ end
262
+
263
+ it "should let the yum cache know extra repos are disabled if options aren't set" do
264
+ allow(@new_resource).to receive(:options).and_return(nil)
265
+ expect(@yum_cache).to receive(:disable_extra_repo_control)
266
+ @provider.load_current_resource
267
+ end
268
+
269
+ context "when the package name isn't found" do
270
+ let(:yum_cache) { double(
271
+ 'Chef::Provider::Yum::YumCache',
272
+ :reload_installed => true,
273
+ :reset => true,
274
+ :installed_version => "1.0.1.el5",
275
+ :candidate_version => "2.0.1.el5",
276
+ :package_available? => false,
277
+ :version_available? => true,
278
+ :disable_extra_repo_control => true
279
+ )
280
+ }
281
+
282
+ before do
283
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(yum_cache)
284
+ @pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
285
+ expect(yum_cache).to receive(:packages_from_require).and_return([@pkg])
286
+ end
287
+
288
+ it "should search provides then set package_name to match" do
289
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
290
+ @provider.load_current_resource
291
+ expect(@new_resource.package_name).to eq('test-package')
292
+ expect(@new_resource.version).to eq(nil)
293
+ end
294
+
295
+ it "should search provides then set version to match if a requirement was passed in the package name" do
296
+ @new_resource = Chef::Resource::YumPackage.new('test-package = 2.0.1.el5')
297
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
298
+ @provider.load_current_resource
299
+ expect(@new_resource.package_name).to eq('test-package')
300
+ expect(@new_resource.version).to eq('2.0.1.el5')
301
+ end
302
+
303
+
304
+ it "should search provides then set version to match if a requirement was passed in the version" do
305
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
306
+ @new_resource.version('= 2.0.1.el5')
307
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
308
+ @provider.load_current_resource
309
+ expect(@new_resource.package_name).to eq('test-package')
310
+ expect(@new_resource.version).to eq('2.0.1.el5')
311
+ end
312
+
313
+
314
+ it "should search provides and not set the version to match if a specific version was requested" do
315
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
316
+ @new_resource.version('3.0.1.el5')
317
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
318
+ @provider.load_current_resource
319
+ expect(@new_resource.package_name).to eq('test-package')
320
+ expect(@new_resource.version).to eq('3.0.1.el5')
321
+ end
322
+
323
+ it "should search provides then set versions to match if requirements were passed in the package name as an array" do
324
+ @new_resource = Chef::Resource::YumPackage.new(['test-package = 2.0.1.el5'])
325
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
326
+ @provider.load_current_resource
327
+ expect(@new_resource.package_name).to eq(['test-package'])
328
+ expect(@new_resource.version).to eq(['2.0.1.el5'])
329
+ end
330
+
331
+ it "should search provides and not set the versions to match if specific versions were requested in an array" do
332
+ @new_resource = Chef::Resource::YumPackage.new(['test-package'])
333
+ @new_resource.version(['3.0.1.el5'])
334
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
335
+ @provider.load_current_resource
336
+ expect(@new_resource.package_name).to eq(['test-package'])
337
+ expect(@new_resource.version).to eq(['3.0.1.el5'])
338
+ end
339
+
340
+ end
341
+
342
+ it "should not return an error if no version number is specified in the resource" do
343
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
344
+ @yum_cache = double(
345
+ 'Chef::Provider::Yum::YumCache',
346
+ :reload_installed => true,
347
+ :reset => true,
348
+ :installed_version => "1.0.1.el5",
349
+ :candidate_version => "2.0.1.el5",
350
+ :package_available? => false,
351
+ :version_available? => true,
352
+ :disable_extra_repo_control => true
353
+ )
354
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
355
+ pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
356
+ expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
357
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
358
+ @provider.load_current_resource
359
+ expect(@new_resource.package_name).to eq("test-package")
360
+ expect(@new_resource.version).to eq(nil)
361
+ end
362
+
363
+ it "should give precedence to the version attribute when both a requirement in the resource name and a version attribute are specified" do
364
+ @new_resource = Chef::Resource::YumPackage.new('test-package')
365
+ @yum_cache = double(
366
+ 'Chef::Provider::Yum::YumCache',
367
+ :reload_installed => true,
368
+ :reset => true,
369
+ :installed_version => "1.2.4-11.18.el5",
370
+ :candidate_version => "1.2.4-11.18.el5",
371
+ :package_available? => false,
372
+ :version_available? => true,
373
+ :disable_extra_repo_control => true
374
+ )
375
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
376
+ pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "2.0.1.el5", "x86_64", [])
377
+ expect(@yum_cache).to receive(:packages_from_require).and_return([pkg])
378
+ @new_resource = Chef::Resource::YumPackage.new('test-package = 2.0.1.el5')
379
+ @new_resource.version('3.0.1.el5')
380
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
381
+ @provider.load_current_resource
382
+ expect(@new_resource.package_name).to eq('test-package')
383
+ expect(@new_resource.version).to eq('3.0.1.el5')
384
+ end
385
+
386
+ it "should correctly detect the installed states of an array of package names and version numbers" do
387
+ @yum_cache = double(
388
+ 'Chef::Provider::Yum::YumCache',
389
+ :reload_installed => true,
390
+ :reset => true,
391
+ :installed_version => "1.0.1.el5",
392
+ :candidate_version => "2.0.1.el5",
393
+ :package_available? => false,
394
+ :version_available? => true,
395
+ :disable_extra_repo_control => true
396
+ )
397
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
398
+
399
+ expect(@yum_cache).to receive(:packages_from_require).exactly(4).times.and_return([])
400
+ expect(@yum_cache).to receive(:reload_provides).twice
401
+
402
+ @new_resource = Chef::Resource::YumPackage.new(['test-package','test-package2'])
403
+ @new_resource.version(['2.0.1.el5','3.0.1.el5'])
404
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
405
+ @provider.load_current_resource
406
+ expect(@new_resource.package_name).to eq(['test-package','test-package2'])
407
+ expect(@new_resource.version).to eq(['2.0.1.el5','3.0.1.el5'])
408
+ end
409
+
410
+ it "should search provides if no package is available - if no match in installed provides then load the complete set" do
411
+ @yum_cache = double(
412
+ 'Chef::Provider::Yum::YumCache',
413
+ :reload_installed => true,
414
+ :reset => true,
415
+ :installed_version => "1.2.4-11.18.el5",
416
+ :candidate_version => "1.2.4-11.18.el5",
417
+ :package_available? => false,
418
+ :version_available? => true,
419
+ :disable_extra_repo_control => true
420
+ )
421
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
422
+ expect(@yum_cache).to receive(:packages_from_require).twice.and_return([])
423
+ expect(@yum_cache).to receive(:reload_provides)
424
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
425
+ @provider.load_current_resource
426
+ expect(@new_resource.version).to eq(nil)
427
+ end
428
+
429
+ it "should search provides if no package is available and not load the complete set if action is :remove or :purge" do
430
+ @yum_cache = double(
431
+ 'Chef::Provider::Yum::YumCache',
432
+ :reload_installed => true,
433
+ :reset => true,
434
+ :installed_version => "1.2.4-11.18.el5",
435
+ :candidate_version => "1.2.4-11.18.el5",
436
+ :package_available? => false,
437
+ :version_available? => true,
438
+ :disable_extra_repo_control => true
439
+ )
440
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
441
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
442
+ expect(@yum_cache).to receive(:packages_from_require).once.and_return([])
443
+ expect(@yum_cache).not_to receive(:reload_provides)
444
+ @new_resource.action(:remove)
445
+ @provider.load_current_resource
446
+ expect(@yum_cache).to receive(:packages_from_require).once.and_return([])
447
+ expect(@yum_cache).not_to receive(:reload_provides)
448
+ @new_resource.action(:purge)
449
+ @provider.load_current_resource
450
+ end
451
+
452
+ it "should search provides if no package is available - if no match in provides leave the name intact" do
453
+ @yum_cache = double(
454
+ 'Chef::Provider::Yum::YumCache',
455
+ :reload_provides => true,
456
+ :reload_installed => true,
457
+ :reset => true,
458
+ :installed_version => "1.2.4-11.18.el5",
459
+ :candidate_version => "1.2.4-11.18.el5",
460
+ :package_available? => false,
461
+ :version_available? => true,
462
+ :disable_extra_repo_control => true
463
+ )
464
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
465
+ expect(@yum_cache).to receive(:packages_from_require).twice.and_return([])
466
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
467
+ @provider.load_current_resource
468
+ expect(@new_resource.package_name).to eq("cups")
469
+ end
470
+ end
471
+
472
+ describe "when installing a package" do
473
+ it "should run yum install with the package name and version" do
474
+ @provider.load_current_resource
475
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
476
+ expect(@provider).to receive(:yum_command).with(
477
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5"
478
+ )
479
+ @provider.install_package("cups", "1.2.4-11.19.el5")
480
+ end
481
+
482
+ it "should run yum localinstall if given a path to an rpm" do
483
+ allow(@new_resource).to receive(:source).and_return("/tmp/emacs-21.4-20.el5.i386.rpm")
484
+ expect(@provider).to receive(:yum_command).with(
485
+ "yum -d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
486
+ )
487
+ @provider.install_package("emacs", "21.4-20.el5")
488
+ end
489
+
490
+ it "should run yum localinstall if given a path to an rpm as the package" do
491
+ @new_resource = Chef::Resource::Package.new("/tmp/emacs-21.4-20.el5.i386.rpm")
492
+ allow(::File).to receive(:exists?).and_return(true)
493
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
494
+ expect(@new_resource.source).to eq("/tmp/emacs-21.4-20.el5.i386.rpm")
495
+ expect(@provider).to receive(:yum_command).with(
496
+ "yum -d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
497
+ )
498
+ @provider.install_package("/tmp/emacs-21.4-20.el5.i386.rpm", "21.4-20.el5")
499
+ end
500
+
501
+ it "should run yum install with the package name, version and arch" do
502
+ @provider.load_current_resource
503
+ allow(@new_resource).to receive(:arch).and_return("i386")
504
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
505
+ expect(@provider).to receive(:yum_command).with(
506
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5.i386"
507
+ )
508
+ @provider.install_package("cups", "1.2.4-11.19.el5")
509
+ end
510
+
511
+ it "installs the package with the options given in the resource" do
512
+ @provider.load_current_resource
513
+ allow(@provider).to receive(:candidate_version).and_return('11')
514
+ allow(@new_resource).to receive(:options).and_return("--disablerepo epmd")
515
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
516
+ expect(@provider).to receive(:yum_command).with(
517
+ "yum -d0 -e0 -y --disablerepo epmd install cups-11"
518
+ )
519
+ @provider.install_package(@new_resource.name, @provider.candidate_version)
520
+ end
521
+
522
+ it "should raise an exception if the package is not available" do
523
+ @yum_cache = double(
524
+ 'Chef::Provider::Yum::YumCache',
525
+ :reload_from_cache => true,
526
+ :reset => true,
527
+ :installed_version => "1.2.4-11.18.el5",
528
+ :candidate_version => "1.2.4-11.18.el5_2.3",
529
+ :package_available? => true,
530
+ :version_available? => nil,
531
+ :disable_extra_repo_control => true
532
+ )
533
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
534
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
535
+ expect { @provider.install_package("lolcats", "0.99") }.to raise_error(Chef::Exceptions::Package, %r{Version .* not found})
536
+ end
537
+
538
+ it "should raise an exception if candidate version is older than the installed version and allow_downgrade is false" do
539
+ allow(@new_resource).to receive(:allow_downgrade).and_return(false)
540
+ @yum_cache = double(
541
+ 'Chef::Provider::Yum::YumCache',
542
+ :reload_installed => true,
543
+ :reset => true,
544
+ :installed_version => "1.2.4-11.18.el5",
545
+ :candidate_version => "1.2.4-11.15.el5",
546
+ :package_available? => true,
547
+ :version_available? => true,
548
+ :allow_multi_install => [ "kernel" ],
549
+ :disable_extra_repo_control => true
550
+ )
551
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
552
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
553
+ @provider.load_current_resource
554
+ expect { @provider.install_package("cups", "1.2.4-11.15.el5") }.to raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
555
+ end
556
+
557
+ it "should not raise an exception if candidate version is older than the installed version and the package is list in yum's installonlypkg option" do
558
+ @yum_cache = double(
559
+ 'Chef::Provider::Yum::YumCache',
560
+ :reload_installed => true,
561
+ :reset => true,
562
+ :installed_version => "1.2.4-11.18.el5",
563
+ :candidate_version => "1.2.4-11.15.el5",
564
+ :package_available? => true,
565
+ :version_available? => true,
566
+ :allow_multi_install => [ "cups" ],
567
+ :package_repository => "base",
568
+ :disable_extra_repo_control => true
569
+ )
570
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
571
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
572
+ @provider.load_current_resource
573
+ expect(@provider).to receive(:yum_command).with(
574
+ "yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
575
+ )
576
+ @provider.install_package("cups", "1.2.4-11.15.el5")
577
+ end
578
+
579
+ it "should run yum downgrade if candidate version is older than the installed version and allow_downgrade is true" do
580
+ allow(@new_resource).to receive(:allow_downgrade).and_return(true)
581
+ @yum_cache = double(
582
+ 'Chef::Provider::Yum::YumCache',
583
+ :reload_installed => true,
584
+ :reset => true,
585
+ :installed_version => "1.2.4-11.18.el5",
586
+ :candidate_version => "1.2.4-11.15.el5",
587
+ :package_available? => true,
588
+ :version_available? => true,
589
+ :allow_multi_install => [],
590
+ :package_repository => "base",
591
+ :disable_extra_repo_control => true
592
+ )
593
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
594
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
595
+ @provider.load_current_resource
596
+ expect(@provider).to receive(:yum_command).with(
597
+ "yum -d0 -e0 -y downgrade cups-1.2.4-11.15.el5"
598
+ )
599
+ @provider.install_package("cups", "1.2.4-11.15.el5")
600
+ end
601
+
602
+ it "should run yum install then flush the cache if :after is true" do
603
+ allow(@new_resource).to receive(:flush_cache).and_return({:after => true, :before => false})
604
+ @provider.load_current_resource
605
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
606
+ expect(@provider).to receive(:yum_command).with(
607
+ "yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
608
+ )
609
+ expect(@yum_cache).to receive(:reload).once
610
+ @provider.install_package("cups", "1.2.4-11.15.el5")
611
+ end
612
+
613
+ it "should run yum install then not flush the cache if :after is false" do
614
+ allow(@new_resource).to receive(:flush_cache).and_return({:after => false, :before => false})
615
+ @provider.load_current_resource
616
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
617
+ expect(@provider).to receive(:yum_command).with(
618
+ "yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
619
+ )
620
+ expect(@yum_cache).not_to receive(:reload)
621
+ @provider.install_package("cups", "1.2.4-11.15.el5")
622
+ end
623
+ end
624
+
625
+ describe "when upgrading a package" do
626
+ it "should run yum install if the package is installed and a version is given" do
627
+ @provider.load_current_resource
628
+ allow(@provider).to receive(:candidate_version).and_return('11')
629
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
630
+ expect(@provider).to receive(:yum_command).with(
631
+ "yum -d0 -e0 -y install cups-11"
632
+ )
633
+ @provider.upgrade_package(@new_resource.name, @provider.candidate_version)
634
+ end
635
+
636
+ it "should run yum install if the package is not installed" do
637
+ @provider.load_current_resource
638
+ @current_resource = Chef::Resource::Package.new('cups')
639
+ allow(@provider).to receive(:candidate_version).and_return('11')
640
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
641
+ expect(@provider).to receive(:yum_command).with(
642
+ "yum -d0 -e0 -y install cups-11"
643
+ )
644
+ @provider.upgrade_package(@new_resource.name, @provider.candidate_version)
645
+ end
646
+
647
+ it "should raise an exception if candidate version is older than the installed version" do
648
+ @yum_cache = double(
649
+ 'Chef::Provider::Yum::YumCache',
650
+ :reload_installed => true,
651
+ :reset => true,
652
+ :installed_version => "1.2.4-11.18.el5",
653
+ :candidate_version => "1.2.4-11.15.el5",
654
+ :package_available? => true,
655
+ :version_available? => true,
656
+ :allow_multi_install => [ "kernel" ],
657
+ :disable_extra_repo_control => true
658
+ )
659
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
660
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
661
+ @provider.load_current_resource
662
+ expect { @provider.upgrade_package("cups", "1.2.4-11.15.el5") }.to raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
663
+ end
664
+
665
+ # Test our little workaround, some crossover into Chef::Provider::Package territory
666
+ it "should call action_upgrade in the parent if the current resource version is nil" do
667
+ allow(@yum_cache).to receive(:installed_version).and_return(nil)
668
+ @current_resource = Chef::Resource::Package.new('cups')
669
+ allow(@provider).to receive(:candidate_version).and_return('11')
670
+ expect(@provider).to receive(:upgrade_package).with(
671
+ "cups",
672
+ "11"
673
+ )
674
+ @provider.run_action(:upgrade)
675
+ end
676
+
677
+ it "should call action_upgrade in the parent if the candidate version is nil" do
678
+ @provider.load_current_resource
679
+ @current_resource = Chef::Resource::Package.new('cups')
680
+ allow(@provider).to receive(:candidate_version).and_return(nil)
681
+ expect(@provider).not_to receive(:upgrade_package)
682
+ @provider.run_action(:upgrade)
683
+ end
684
+
685
+ it "should call action_upgrade in the parent if the candidate is newer" do
686
+ @provider.load_current_resource
687
+ @current_resource = Chef::Resource::Package.new('cups')
688
+ allow(@provider).to receive(:candidate_version).and_return('11')
689
+ expect(@provider).to receive(:upgrade_package).with(
690
+ "cups",
691
+ "11"
692
+ )
693
+ @provider.run_action(:upgrade)
694
+ end
695
+
696
+ it "should not call action_upgrade in the parent if the candidate is older" do
697
+ allow(@yum_cache).to receive(:installed_version).and_return("12")
698
+ @provider.load_current_resource
699
+ @current_resource = Chef::Resource::Package.new('cups')
700
+ allow(@provider).to receive(:candidate_version).and_return('11')
701
+ expect(@provider).not_to receive(:upgrade_package)
702
+ @provider.run_action(:upgrade)
703
+ end
704
+ end
705
+
706
+ describe "when removing a package" do
707
+ it "should run yum remove with the package name" do
708
+ expect(@provider).to receive(:yum_command).with(
709
+ "yum -d0 -e0 -y remove emacs-1.0"
710
+ )
711
+ @provider.remove_package("emacs", "1.0")
712
+ end
713
+
714
+ it "should run yum remove with the package name and arch" do
715
+ allow(@new_resource).to receive(:arch).and_return("x86_64")
716
+ expect(@provider).to receive(:yum_command).with(
717
+ "yum -d0 -e0 -y remove emacs-1.0.x86_64"
718
+ )
719
+ @provider.remove_package("emacs", "1.0")
720
+ end
721
+ end
722
+
723
+ describe "when purging a package" do
724
+ it "should run yum remove with the package name" do
725
+ expect(@provider).to receive(:yum_command).with(
726
+ "yum -d0 -e0 -y remove emacs-1.0"
727
+ )
728
+ @provider.purge_package("emacs", "1.0")
729
+ end
730
+ end
731
+
732
+ describe "when running yum" do
733
+ it "should run yum once if it exits with a return code of 0" do
734
+ @status = double("Status", :exitstatus => 0, :stdout => "", :stderr => "")
735
+ allow(@provider).to receive(:shell_out).and_return(@status)
736
+ expect(@provider).to receive(:shell_out).once.with(
737
+ "yum -d0 -e0 -y install emacs-1.0",
738
+ {:timeout => Chef::Config[:yum_timeout]}
739
+ )
740
+ @provider.yum_command("yum -d0 -e0 -y install emacs-1.0")
741
+ end
742
+
743
+ it "should run yum once if it exits with a return code > 0 and no scriptlet failures" do
744
+ @status = double("Status", :exitstatus => 2, :stdout => "failure failure", :stderr => "problem problem")
745
+ allow(@provider).to receive(:shell_out).and_return(@status)
746
+ expect(@provider).to receive(:shell_out).once.with(
747
+ "yum -d0 -e0 -y install emacs-1.0",
748
+ {:timeout => Chef::Config[:yum_timeout]}
749
+ )
750
+ expect { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
751
+ end
752
+
753
+ it "should run yum once if it exits with a return code of 1 and %pre scriptlet failures" do
754
+ @status = double("Status", :exitstatus => 1, :stdout => "error: %pre(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2",
755
+ :stderr => "")
756
+ allow(@provider).to receive(:shell_out).and_return(@status)
757
+ expect(@provider).to receive(:shell_out).once.with(
758
+ "yum -d0 -e0 -y install emacs-1.0",
759
+ {:timeout => Chef::Config[:yum_timeout]}
760
+ )
761
+ # will still raise an exception, can't stub out the subsequent call
762
+ expect { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
763
+ end
764
+
765
+ it "should run yum twice if it exits with a return code of 1 and %post scriptlet failures" do
766
+ @status = double("Status", :exitstatus => 1, :stdout => "error: %post(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2",
767
+ :stderr => "")
768
+ allow(@provider).to receive(:shell_out).and_return(@status)
769
+ expect(@provider).to receive(:shell_out).twice.with(
770
+ "yum -d0 -e0 -y install emacs-1.0",
771
+ {:timeout => Chef::Config[:yum_timeout]}
772
+ )
773
+ # will still raise an exception, can't stub out the subsequent call
774
+ expect { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.to raise_error(Chef::Exceptions::Exec)
775
+ end
776
+ end
777
+ end
778
+
779
+ describe Chef::Provider::Package::Yum::RPMUtils do
780
+ describe "version_parse" do
781
+ before do
782
+ @rpmutils = Chef::Provider::Package::Yum::RPMUtils
783
+ end
784
+
785
+ it "parses known good epoch strings" do
786
+ [
787
+ [ "0:3.3", [ 0, "3.3", nil ] ],
788
+ [ "9:1.7.3", [ 9, "1.7.3", nil ] ],
789
+ [ "15:20020927", [ 15, "20020927", nil ] ]
790
+ ].each do |x, y|
791
+ expect(@rpmutils.version_parse(x)).to eq(y)
792
+ end
793
+ end
794
+
795
+ it "parses strange epoch strings" do
796
+ [
797
+ [ ":3.3", [ 0, "3.3", nil ] ],
798
+ [ "-1:1.7.3", [ nil, nil, "1:1.7.3" ] ],
799
+ [ "-:20020927", [ nil, nil, ":20020927" ] ]
800
+ ].each do |x, y|
801
+ expect(@rpmutils.version_parse(x)).to eq(y)
802
+ end
803
+ end
804
+
805
+ it "parses known good version strings" do
806
+ [
807
+ [ "3.3", [ nil, "3.3", nil ] ],
808
+ [ "1.7.3", [ nil, "1.7.3", nil ] ],
809
+ [ "20020927", [ nil, "20020927", nil ] ]
810
+ ].each do |x, y|
811
+ expect(@rpmutils.version_parse(x)).to eq(y)
812
+ end
813
+ end
814
+
815
+ it "parses strange version strings" do
816
+ [
817
+ [ "3..3", [ nil, "3..3", nil ] ],
818
+ [ "0001.7.3", [ nil, "0001.7.3", nil ] ],
819
+ [ "20020927,3", [ nil, "20020927,3", nil ] ]
820
+ ].each do |x, y|
821
+ expect(@rpmutils.version_parse(x)).to eq(y)
822
+ end
823
+ end
824
+
825
+ it "parses known good version release strings" do
826
+ [
827
+ [ "3.3-0.pre3.1.60.el5_5.1", [ nil, "3.3", "0.pre3.1.60.el5_5.1" ] ],
828
+ [ "1.7.3-1jpp.2.el5", [ nil, "1.7.3", "1jpp.2.el5" ] ],
829
+ [ "20020927-46.el5", [ nil, "20020927", "46.el5" ] ]
830
+ ].each do |x, y|
831
+ expect(@rpmutils.version_parse(x)).to eq(y)
832
+ end
833
+ end
834
+
835
+ it "parses strange version release strings" do
836
+ [
837
+ [ "3.3-", [ nil, "3.3", nil ] ],
838
+ [ "-1jpp.2.el5", [ nil, nil, "1jpp.2.el5" ] ],
839
+ [ "-0020020927-46.el5", [ nil, "-0020020927", "46.el5" ] ]
840
+ ].each do |x, y|
841
+ expect(@rpmutils.version_parse(x)).to eq(y)
842
+ end
843
+ end
844
+ end
845
+
846
+ describe "rpmvercmp" do
847
+ before do
848
+ @rpmutils = Chef::Provider::Package::Yum::RPMUtils
849
+ end
850
+
851
+ it "should validate version compare logic for standard examples" do
852
+ [
853
+ # numeric
854
+ [ "0.0.2", "0.0.1", 1 ],
855
+ [ "0.2.0", "0.1.0", 1 ],
856
+ [ "2.0.0", "1.0.0", 1 ],
857
+ [ "0.0.1", "0.0.1", 0 ],
858
+ [ "0.0.1", "0.0.2", -1 ],
859
+ [ "0.1.0", "0.2.0", -1 ],
860
+ [ "1.0.0", "2.0.0", -1 ],
861
+ # alpha
862
+ [ "bb", "aa", 1 ],
863
+ [ "ab", "aa", 1 ],
864
+ [ "aa", "aa", 0 ],
865
+ [ "aa", "bb", -1 ],
866
+ [ "aa", "ab", -1 ],
867
+ [ "BB", "AA", 1 ],
868
+ [ "AA", "AA", 0 ],
869
+ [ "AA", "BB", -1 ],
870
+ [ "aa", "AA", 1 ],
871
+ [ "AA", "aa", -1 ],
872
+ # alphanumeric
873
+ [ "0.0.1b", "0.0.1a", 1 ],
874
+ [ "0.1b.0", "0.1a.0", 1 ],
875
+ [ "1b.0.0", "1a.0.0", 1 ],
876
+ [ "0.0.1a", "0.0.1a", 0 ],
877
+ [ "0.0.1a", "0.0.1b", -1 ],
878
+ [ "0.1a.0", "0.1b.0", -1 ],
879
+ [ "1a.0.0", "1b.0.0", -1 ],
880
+ # alphanumeric against alphanumeric
881
+ [ "0.0.1", "0.0.a", 1 ],
882
+ [ "0.1.0", "0.a.0", 1 ],
883
+ [ "1.0.0", "a.0.0", 1 ],
884
+ [ "0.0.a", "0.0.a", 0 ],
885
+ [ "0.0.a", "0.0.1", -1 ],
886
+ [ "0.a.0", "0.1.0", -1 ],
887
+ [ "a.0.0", "1.0.0", -1 ],
888
+ # alphanumeric against numeric
889
+ [ "0.0.2", "0.0.1a", 1 ],
890
+ [ "0.0.2a", "0.0.1", 1 ],
891
+ [ "0.0.1", "0.0.2a", -1 ],
892
+ [ "0.0.1a", "0.0.2", -1 ],
893
+ # length
894
+ [ "0.0.1aa", "0.0.1a", 1 ],
895
+ [ "0.0.1aa", "0.0.1aa", 0 ],
896
+ [ "0.0.1a", "0.0.1aa", -1 ],
897
+ ].each do |x, y, result|
898
+ expect(@rpmutils.rpmvercmp(x,y)).to eq(result)
899
+ end
900
+ end
901
+
902
+ it "should validate version compare logic for strange examples" do
903
+ [
904
+ [ "2,0,0", "1.0.0", 1 ],
905
+ [ "0.0.1", "0,0.1", 0 ],
906
+ [ "1.0.0", "2,0,0", -1 ],
907
+ [ "002.0.0", "001.0.0", 1 ],
908
+ [ "001..0.1", "001..0.0", 1 ],
909
+ [ "-001..1", "-001..0", 1 ],
910
+ [ "1.0.1", nil, 1 ],
911
+ [ nil, nil, 0 ],
912
+ [ nil, "1.0.1", -1 ],
913
+ [ "1.0.1", "", 1 ],
914
+ [ "", "", 0 ],
915
+ [ "", "1.0.1", -1 ]
916
+ ].each do |x, y, result|
917
+ expect(@rpmutils.rpmvercmp(x,y)).to eq(result)
918
+ end
919
+ end
920
+
921
+ it "tests isalnum good input" do
922
+ [ 'a', 'z', 'A', 'Z', '0', '9' ].each do |t|
923
+ expect(@rpmutils.isalnum(t)).to eq(true)
924
+ end
925
+ end
926
+
927
+ it "tests isalnum bad input" do
928
+ [ '-', '.', '!', '^', ':', '_' ].each do |t|
929
+ expect(@rpmutils.isalnum(t)).to eq(false)
930
+ end
931
+ end
932
+
933
+ it "tests isalpha good input" do
934
+ [ 'a', 'z', 'A', 'Z', ].each do |t|
935
+ expect(@rpmutils.isalpha(t)).to eq(true)
936
+ end
937
+ end
938
+
939
+ it "tests isalpha bad input" do
940
+ [ '0', '9', '-', '.', '!', '^', ':', '_' ].each do |t|
941
+ expect(@rpmutils.isalpha(t)).to eq(false)
942
+ end
943
+ end
944
+
945
+ it "tests isdigit good input" do
946
+ [ '0', '9', ].each do |t|
947
+ expect(@rpmutils.isdigit(t)).to eq(true)
948
+ end
949
+ end
950
+
951
+ it "tests isdigit bad input" do
952
+ [ 'A', 'z', '-', '.', '!', '^', ':', '_' ].each do |t|
953
+ expect(@rpmutils.isdigit(t)).to eq(false)
954
+ end
955
+ end
956
+ end
957
+
958
+ end
959
+
960
+ describe Chef::Provider::Package::Yum::RPMVersion do
961
+ describe "new - with parsing" do
962
+ before do
963
+ @rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
964
+ end
965
+
966
+ it "should expose evr (name-version-release) available" do
967
+ expect(@rpmv.e).to eq(1)
968
+ expect(@rpmv.v).to eq("1.6.5")
969
+ expect(@rpmv.r).to eq("9.36.el5")
970
+
971
+ expect(@rpmv.evr).to eq("1:1.6.5-9.36.el5")
972
+ end
973
+
974
+ it "should output a version-release string" do
975
+ expect(@rpmv.to_s).to eq("1.6.5-9.36.el5")
976
+ end
977
+ end
978
+
979
+ describe "new - no parsing" do
980
+ before do
981
+ @rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
982
+ end
983
+
984
+ it "should expose evr (name-version-release) available" do
985
+ expect(@rpmv.e).to eq(1)
986
+ expect(@rpmv.v).to eq("1.6.5")
987
+ expect(@rpmv.r).to eq("9.36.el5")
988
+
989
+ expect(@rpmv.evr).to eq("1:1.6.5-9.36.el5")
990
+ end
991
+
992
+ it "should output a version-release string" do
993
+ expect(@rpmv.to_s).to eq("1.6.5-9.36.el5")
994
+ end
995
+ end
996
+
997
+ it "should raise an error unless passed 1 or 3 args" do
998
+ expect {
999
+ Chef::Provider::Package::Yum::RPMVersion.new()
1000
+ }.to raise_error(ArgumentError)
1001
+ expect {
1002
+ Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
1003
+ }.not_to raise_error
1004
+ expect {
1005
+ Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5", "extra")
1006
+ }.to raise_error(ArgumentError)
1007
+ expect {
1008
+ Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
1009
+ }.not_to raise_error
1010
+ expect {
1011
+ Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5", "extra")
1012
+ }.to raise_error(ArgumentError)
1013
+ end
1014
+
1015
+ # thanks version_class_spec.rb!
1016
+ describe "compare" do
1017
+ it "should sort based on complete epoch-version-release data" do
1018
+ [
1019
+ # smaller, larger
1020
+ [ "0:1.6.5-9.36.el5",
1021
+ "1:1.6.5-9.36.el5" ],
1022
+ [ "0:2.3-15.el5",
1023
+ "0:3.3-15.el5" ],
1024
+ [ "0:alpha9.8-27.2",
1025
+ "0:beta9.8-27.2" ],
1026
+ [ "0:0.09-14jpp.3",
1027
+ "0:0.09-15jpp.3" ],
1028
+ [ "0:0.9.0-0.6.20110211.el5",
1029
+ "0:0.9.0-0.6.20120211.el5" ],
1030
+ [ "0:1.9.1-4.el5",
1031
+ "0:1.9.1-5.el5" ],
1032
+ [ "0:1.4.10-7.20090624svn.el5",
1033
+ "0:1.4.10-7.20090625svn.el5" ],
1034
+ [ "0:2.3.4-2.el5",
1035
+ "0:2.3.4-2.el6" ]
1036
+ ].each do |smaller, larger|
1037
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1038
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1039
+ expect(sm).to be < lg
1040
+ expect(lg).to be > sm
1041
+ expect(sm).not_to eq(lg)
1042
+ end
1043
+ end
1044
+
1045
+ it "should sort based on partial epoch-version-release data" do
1046
+ [
1047
+ # smaller, larger
1048
+ [ ":1.6.5-9.36.el5",
1049
+ "1:1.6.5-9.36.el5" ],
1050
+ [ "2.3-15.el5",
1051
+ "3.3-15.el5" ],
1052
+ [ "alpha9.8",
1053
+ "beta9.8" ],
1054
+ [ "14jpp",
1055
+ "15jpp" ],
1056
+ [ "0.9.0-0.6",
1057
+ "0.9.0-0.7" ],
1058
+ [ "0:1.9",
1059
+ "3:1.9" ],
1060
+ [ "2.3-2.el5",
1061
+ "2.3-2.el6" ]
1062
+ ].each do |smaller, larger|
1063
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1064
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1065
+ expect(sm).to be < lg
1066
+ expect(lg).to be > sm
1067
+ expect(sm).not_to eq(lg)
1068
+ end
1069
+ end
1070
+
1071
+ it "should verify equality of complete epoch-version-release data" do
1072
+ [
1073
+ [ "0:1.6.5-9.36.el5",
1074
+ "0:1.6.5-9.36.el5" ],
1075
+ [ "0:2.3-15.el5",
1076
+ "0:2.3-15.el5" ],
1077
+ [ "0:alpha9.8-27.2",
1078
+ "0:alpha9.8-27.2" ]
1079
+ ].each do |smaller, larger|
1080
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1081
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1082
+ expect(sm).to eq(lg)
1083
+ end
1084
+ end
1085
+
1086
+ it "should verify equality of partial epoch-version-release data" do
1087
+ [
1088
+ [ ":1.6.5-9.36.el5",
1089
+ "0:1.6.5-9.36.el5" ],
1090
+ [ "2.3-15.el5",
1091
+ "2.3-15.el5" ],
1092
+ [ "alpha9.8-3",
1093
+ "alpha9.8-3" ]
1094
+ ].each do |smaller, larger|
1095
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1096
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1097
+ expect(sm).to eq(lg)
1098
+ end
1099
+ end
1100
+ end
1101
+
1102
+ describe "partial compare" do
1103
+ it "should compare based on partial epoch-version-release data" do
1104
+ [
1105
+ # smaller, larger
1106
+ [ "0:1.1.1-1",
1107
+ "1:" ],
1108
+ [ "0:1.1.1-1",
1109
+ "0:1.1.2" ],
1110
+ [ "0:1.1.1-1",
1111
+ "0:1.1.2-1" ],
1112
+ [ "0:",
1113
+ "1:1.1.1-1" ],
1114
+ [ "0:1.1.1",
1115
+ "0:1.1.2-1" ],
1116
+ [ "0:1.1.1-1",
1117
+ "0:1.1.2-1" ],
1118
+ ].each do |smaller, larger|
1119
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1120
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1121
+ expect(sm.partial_compare(lg)).to eq(-1)
1122
+ expect(lg.partial_compare(sm)).to eq(1)
1123
+ expect(sm.partial_compare(lg)).not_to eq(0)
1124
+ end
1125
+ end
1126
+
1127
+ it "should verify equality based on partial epoch-version-release data" do
1128
+ [
1129
+ [ "0:",
1130
+ "0:1.1.1-1" ],
1131
+ [ "0:1.1.1",
1132
+ "0:1.1.1-1" ],
1133
+ [ "0:1.1.1-1",
1134
+ "0:1.1.1-1" ],
1135
+ ].each do |smaller, larger|
1136
+ sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
1137
+ lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
1138
+ expect(sm.partial_compare(lg)).to eq(0)
1139
+ end
1140
+ end
1141
+ end
1142
+
1143
+ end
1144
+
1145
+ describe Chef::Provider::Package::Yum::RPMPackage do
1146
+ describe "new - with parsing" do
1147
+ before do
1148
+ @rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
1149
+ end
1150
+
1151
+ it "should expose nevra (name-epoch-version-release-arch) available" do
1152
+ expect(@rpm.name).to eq("testing")
1153
+ expect(@rpm.version.e).to eq(1)
1154
+ expect(@rpm.version.v).to eq("1.6.5")
1155
+ expect(@rpm.version.r).to eq("9.36.el5")
1156
+ expect(@rpm.arch).to eq("x86_64")
1157
+
1158
+ expect(@rpm.nevra).to eq("testing-1:1.6.5-9.36.el5.x86_64")
1159
+ expect(@rpm.to_s).to eq(@rpm.nevra)
1160
+ end
1161
+
1162
+ it "should always have at least one provide, itself" do
1163
+ expect(@rpm.provides.size).to eq(1)
1164
+ @rpm.provides[0].name == "testing"
1165
+ @rpm.provides[0].version.evr == "1:1.6.5-9.36.el5"
1166
+ @rpm.provides[0].flag == :==
1167
+ end
1168
+ end
1169
+
1170
+ describe "new - no parsing" do
1171
+ before do
1172
+ @rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
1173
+ end
1174
+
1175
+ it "should expose nevra (name-epoch-version-release-arch) available" do
1176
+ expect(@rpm.name).to eq("testing")
1177
+ expect(@rpm.version.e).to eq(1)
1178
+ expect(@rpm.version.v).to eq("1.6.5")
1179
+ expect(@rpm.version.r).to eq("9.36.el5")
1180
+ expect(@rpm.arch).to eq("x86_64")
1181
+
1182
+ expect(@rpm.nevra).to eq("testing-1:1.6.5-9.36.el5.x86_64")
1183
+ expect(@rpm.to_s).to eq(@rpm.nevra)
1184
+ end
1185
+
1186
+ it "should always have at least one provide, itself" do
1187
+ expect(@rpm.provides.size).to eq(1)
1188
+ @rpm.provides[0].name == "testing"
1189
+ @rpm.provides[0].version.evr == "1:1.6.5-9.36.el5"
1190
+ @rpm.provides[0].flag == :==
1191
+ end
1192
+ end
1193
+
1194
+ it "should raise an error unless passed 4 or 6 args" do
1195
+ expect {
1196
+ Chef::Provider::Package::Yum::RPMPackage.new()
1197
+ }.to raise_error(ArgumentError)
1198
+ expect {
1199
+ Chef::Provider::Package::Yum::RPMPackage.new("testing")
1200
+ }.to raise_error(ArgumentError)
1201
+ expect {
1202
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5")
1203
+ }.to raise_error(ArgumentError)
1204
+ expect {
1205
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64")
1206
+ }.to raise_error(ArgumentError)
1207
+ expect {
1208
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
1209
+ }.not_to raise_error
1210
+ expect {
1211
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64")
1212
+ }.to raise_error(ArgumentError)
1213
+ expect {
1214
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
1215
+ }.not_to raise_error
1216
+ expect {
1217
+ Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [], "extra")
1218
+ }.to raise_error(ArgumentError)
1219
+ end
1220
+
1221
+ describe "<=>" do
1222
+ it "should sort alphabetically based on package name" do
1223
+ [
1224
+ [ "a-test",
1225
+ "b-test" ],
1226
+ [ "B-test",
1227
+ "a-test" ],
1228
+ [ "A-test",
1229
+ "B-test" ],
1230
+ [ "Aa-test",
1231
+ "aA-test" ],
1232
+ [ "1test",
1233
+ "2test" ],
1234
+ ].each do |smaller, larger|
1235
+ sm = Chef::Provider::Package::Yum::RPMPackage.new(smaller, "0:0.0.1-1", "x86_64", [])
1236
+ lg = Chef::Provider::Package::Yum::RPMPackage.new(larger, "0:0.0.1-1", "x86_64", [])
1237
+ expect(sm).to be < lg
1238
+ expect(lg).to be > sm
1239
+ expect(sm).not_to eq(lg)
1240
+ end
1241
+ end
1242
+
1243
+ it "should sort alphabetically based on package arch" do
1244
+ [
1245
+ [ "i386",
1246
+ "x86_64" ],
1247
+ [ "i386",
1248
+ "noarch" ],
1249
+ [ "noarch",
1250
+ "x86_64" ],
1251
+ ].each do |smaller, larger|
1252
+ sm = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", smaller, [])
1253
+ lg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", larger, [])
1254
+ expect(sm).to be < lg
1255
+ expect(lg).to be > sm
1256
+ expect(sm).not_to eq(lg)
1257
+ end
1258
+ end
1259
+ end
1260
+
1261
+ end
1262
+
1263
+ describe Chef::Provider::Package::Yum::RPMDbPackage do
1264
+ before(:each) do
1265
+ # name, version, arch, installed, available, repoid
1266
+ @rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], false, true, "base")
1267
+ @rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, true, "extras")
1268
+ @rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, false, "other")
1269
+ end
1270
+
1271
+ describe "initialize" do
1272
+ it "should return a Chef::Provider::Package::Yum::RPMDbPackage object" do
1273
+ expect(@rpm_x).to be_kind_of(Chef::Provider::Package::Yum::RPMDbPackage)
1274
+ end
1275
+ end
1276
+
1277
+ describe "available" do
1278
+ it "should return true" do
1279
+ expect(@rpm_x.available).to eq(true)
1280
+ expect(@rpm_y.available).to eq(true)
1281
+ expect(@rpm_z.available).to eq(false)
1282
+ end
1283
+ end
1284
+
1285
+ describe "installed" do
1286
+ it "should return true" do
1287
+ expect(@rpm_x.installed).to eq(false)
1288
+ expect(@rpm_y.installed).to eq(true)
1289
+ expect(@rpm_z.installed).to eq(true)
1290
+ end
1291
+ end
1292
+
1293
+ describe "repoid" do
1294
+ it "should return the source repository repoid" do
1295
+ expect(@rpm_x.repoid).to eq("base")
1296
+ expect(@rpm_y.repoid).to eq("extras")
1297
+ expect(@rpm_z.repoid).to eq("other")
1298
+ end
1299
+ end
1300
+ end
1301
+
1302
+ describe Chef::Provider::Package::Yum::RPMDependency do
1303
+ describe "new - with parsing" do
1304
+ before do
1305
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1306
+ end
1307
+
1308
+ it "should expose name, version, flag available" do
1309
+ expect(@rpmdep.name).to eq("testing")
1310
+ expect(@rpmdep.version.e).to eq(1)
1311
+ expect(@rpmdep.version.v).to eq("1.6.5")
1312
+ expect(@rpmdep.version.r).to eq("9.36.el5")
1313
+ expect(@rpmdep.flag).to eq(:==)
1314
+ end
1315
+ end
1316
+
1317
+ describe "new - no parsing" do
1318
+ before do
1319
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
1320
+ end
1321
+
1322
+ it "should expose name, version, flag available" do
1323
+ expect(@rpmdep.name).to eq("testing")
1324
+ expect(@rpmdep.version.e).to eq(1)
1325
+ expect(@rpmdep.version.v).to eq("1.6.5")
1326
+ expect(@rpmdep.version.r).to eq("9.36.el5")
1327
+ expect(@rpmdep.flag).to eq(:==)
1328
+ end
1329
+ end
1330
+
1331
+ it "should raise an error unless passed 3 or 5 args" do
1332
+ expect {
1333
+ Chef::Provider::Package::Yum::RPMDependency.new()
1334
+ }.to raise_error(ArgumentError)
1335
+ expect {
1336
+ Chef::Provider::Package::Yum::RPMDependency.new("testing")
1337
+ }.to raise_error(ArgumentError)
1338
+ expect {
1339
+ Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5")
1340
+ }.to raise_error(ArgumentError)
1341
+ expect {
1342
+ Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1343
+ }.not_to raise_error
1344
+ expect {
1345
+ Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==, "extra")
1346
+ }.to raise_error(ArgumentError)
1347
+ expect {
1348
+ Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
1349
+ }.not_to raise_error
1350
+ expect {
1351
+ Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==, "extra")
1352
+ }.to raise_error(ArgumentError)
1353
+ end
1354
+
1355
+ describe "parse" do
1356
+ it "should parse a name, flag, version string into a valid RPMDependency object" do
1357
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing >= 1:1.6.5-9.36.el5")
1358
+
1359
+ expect(@rpmdep.name).to eq("testing")
1360
+ expect(@rpmdep.version.e).to eq(1)
1361
+ expect(@rpmdep.version.v).to eq("1.6.5")
1362
+ expect(@rpmdep.version.r).to eq("9.36.el5")
1363
+ expect(@rpmdep.flag).to eq(:>=)
1364
+ end
1365
+
1366
+ it "should parse a name into a valid RPMDependency object" do
1367
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing")
1368
+
1369
+ expect(@rpmdep.name).to eq("testing")
1370
+ expect(@rpmdep.version.e).to eq(nil)
1371
+ expect(@rpmdep.version.v).to eq(nil)
1372
+ expect(@rpmdep.version.r).to eq(nil)
1373
+ expect(@rpmdep.flag).to eq(:==)
1374
+ end
1375
+
1376
+ it "should parse an invalid string into the name of a RPMDependency object" do
1377
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing blah >")
1378
+
1379
+ expect(@rpmdep.name).to eq("testing blah >")
1380
+ expect(@rpmdep.version.e).to eq(nil)
1381
+ expect(@rpmdep.version.v).to eq(nil)
1382
+ expect(@rpmdep.version.r).to eq(nil)
1383
+ expect(@rpmdep.flag).to eq(:==)
1384
+ end
1385
+
1386
+ it "should parse various valid flags" do
1387
+ [
1388
+ [ ">", :> ],
1389
+ [ ">=", :>= ],
1390
+ [ "=", :== ],
1391
+ [ "==", :== ],
1392
+ [ "<=", :<= ],
1393
+ [ "<", :< ]
1394
+ ].each do |before, after|
1395
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
1396
+ expect(@rpmdep.flag).to eq(after)
1397
+ end
1398
+ end
1399
+
1400
+ it "should parse various invalid flags and treat them as names" do
1401
+ [
1402
+ [ "<>", :== ],
1403
+ [ "!=", :== ],
1404
+ [ ">>", :== ],
1405
+ [ "<<", :== ],
1406
+ [ "!", :== ],
1407
+ [ "~", :== ]
1408
+ ].each do |before, after|
1409
+ @rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
1410
+ expect(@rpmdep.name).to eq("testing #{before} 1:1.1-1")
1411
+ expect(@rpmdep.flag).to eq(after)
1412
+ end
1413
+ end
1414
+ end
1415
+
1416
+ describe "satisfy?" do
1417
+ it "should raise an error unless a RPMDependency is passed" do
1418
+ @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1419
+ @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
1420
+ expect {
1421
+ @rpmprovide.satisfy?("hi")
1422
+ }.to raise_error(ArgumentError)
1423
+ expect {
1424
+ @rpmprovide.satisfy?(@rpmrequire)
1425
+ }.not_to raise_error
1426
+ end
1427
+
1428
+ it "should validate dependency satisfaction logic for standard examples" do
1429
+ [
1430
+ # names
1431
+ [ "test", "test", true ],
1432
+ [ "test", "foo", false ],
1433
+ # full: epoch:version-relese
1434
+ [ "testing = 1:1.1-1", "testing > 1:1.1-0", true ],
1435
+ [ "testing = 1:1.1-1", "testing >= 1:1.1-0", true ],
1436
+ [ "testing = 1:1.1-1", "testing >= 1:1.1-1", true ],
1437
+ [ "testing = 1:1.1-1", "testing = 1:1.1-1", true ],
1438
+ [ "testing = 1:1.1-1", "testing == 1:1.1-1", true ],
1439
+ [ "testing = 1:1.1-1", "testing <= 1:1.1-1", true ],
1440
+ [ "testing = 1:1.1-1", "testing <= 1:1.1-0", false ],
1441
+ [ "testing = 1:1.1-1", "testing < 1:1.1-0", false ],
1442
+ # partial: epoch:version
1443
+ [ "testing = 1:1.1", "testing > 1:1.0", true ],
1444
+ [ "testing = 1:1.1", "testing >= 1:1.0", true ],
1445
+ [ "testing = 1:1.1", "testing >= 1:1.1", true ],
1446
+ [ "testing = 1:1.1", "testing = 1:1.1", true ],
1447
+ [ "testing = 1:1.1", "testing == 1:1.1", true ],
1448
+ [ "testing = 1:1.1", "testing <= 1:1.1", true ],
1449
+ [ "testing = 1:1.1", "testing <= 1:1.0", false ],
1450
+ [ "testing = 1:1.1", "testing < 1:1.0", false ],
1451
+ # partial: epoch
1452
+ [ "testing = 1:", "testing > 0:", true ],
1453
+ [ "testing = 1:", "testing >= 0:", true ],
1454
+ [ "testing = 1:", "testing >= 1:", true ],
1455
+ [ "testing = 1:", "testing = 1:", true ],
1456
+ [ "testing = 1:", "testing == 1:", true ],
1457
+ [ "testing = 1:", "testing <= 1:", true ],
1458
+ [ "testing = 1:", "testing <= 0:", false ],
1459
+ [ "testing = 1:", "testing < 0:", false ],
1460
+ # mix and match!
1461
+ [ "testing = 1:1.1-1", "testing == 1:1.1", true ],
1462
+ [ "testing = 1:1.1-1", "testing == 1:", true ],
1463
+ ].each do |prov, req, result|
1464
+ @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.parse(prov)
1465
+ @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse(req)
1466
+
1467
+ expect(@rpmprovide.satisfy?(@rpmrequire)).to eq(result)
1468
+ expect(@rpmrequire.satisfy?(@rpmprovide)).to eq(result)
1469
+ end
1470
+ end
1471
+ end
1472
+
1473
+ end
1474
+
1475
+ # thanks resource_collection_spec.rb!
1476
+ describe Chef::Provider::Package::Yum::RPMDb do
1477
+ before(:each) do
1478
+ @rpmdb = Chef::Provider::Package::Yum::RPMDb.new
1479
+ # name, version, arch, installed, available
1480
+ deps_v = [
1481
+ Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
1482
+ Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a = 0:1.6.5-9.36.el5")
1483
+ ]
1484
+ deps_z = [
1485
+ Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
1486
+ Chef::Provider::Package::Yum::RPMDependency.parse("config(test) = 0:1.6.5-9.36.el5"),
1487
+ Chef::Provider::Package::Yum::RPMDependency.parse("test-package-c = 0:1.6.5-9.36.el5")
1488
+ ]
1489
+ @rpm_v = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-a", "0:1.6.5-9.36.el5", "i386", deps_v, true, false, "base")
1490
+ @rpm_w = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "i386", [], true, true, "extras")
1491
+ @rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "x86_64", [], false, true, "extras")
1492
+ @rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "1:1.6.5-9.36.el5", "x86_64", [], true, true, "extras")
1493
+ @rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
1494
+ @rpm_z_mirror = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
1495
+ end
1496
+
1497
+ describe "initialize" do
1498
+ it "should return a Chef::Provider::Package::Yum::RPMDb object" do
1499
+ expect(@rpmdb).to be_kind_of(Chef::Provider::Package::Yum::RPMDb)
1500
+ end
1501
+ end
1502
+
1503
+ describe "push" do
1504
+ it "should accept an RPMDbPackage object through pushing" do
1505
+ expect { @rpmdb.push(@rpm_w) }.not_to raise_error
1506
+ end
1507
+
1508
+ it "should accept multiple RPMDbPackage object through pushing" do
1509
+ expect { @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z) }.not_to raise_error
1510
+ end
1511
+
1512
+ it "should only accept an RPMDbPackage object" do
1513
+ expect { @rpmdb.push("string") }.to raise_error
1514
+ end
1515
+
1516
+ it "should add the package to the package db" do
1517
+ @rpmdb.push(@rpm_w)
1518
+ expect(@rpmdb["test-package-b"]).not_to eq(nil)
1519
+ end
1520
+
1521
+ it "should add conditionally add the package to the available list" do
1522
+ expect(@rpmdb.available_size).to eq(0)
1523
+ @rpmdb.push(@rpm_v, @rpm_w)
1524
+ expect(@rpmdb.available_size).to eq(1)
1525
+ end
1526
+
1527
+ it "should add conditionally add the package to the installed list" do
1528
+ expect(@rpmdb.installed_size).to eq(0)
1529
+ @rpmdb.push(@rpm_w, @rpm_x)
1530
+ expect(@rpmdb.installed_size).to eq(1)
1531
+ end
1532
+
1533
+ it "should have a total of 2 packages in the RPMDb" do
1534
+ expect(@rpmdb.size).to eq(0)
1535
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1536
+ expect(@rpmdb.size).to eq(2)
1537
+ end
1538
+
1539
+ it "should keep the Array unique when a duplicate is pushed" do
1540
+ @rpmdb.push(@rpm_z, @rpm_z_mirror)
1541
+ expect(@rpmdb["test-package-c"].size).to eq(1)
1542
+ end
1543
+
1544
+ it "should register the package provides in the provides index" do
1545
+ @rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
1546
+ expect(@rpmdb.lookup_provides("test-package-a")[0]).to eq(@rpm_v)
1547
+ expect(@rpmdb.lookup_provides("config(test)")[0]).to eq(@rpm_z)
1548
+ expect(@rpmdb.lookup_provides("libz.so.1()(64bit)")[0]).to eq(@rpm_v)
1549
+ expect(@rpmdb.lookup_provides("libz.so.1()(64bit)")[1]).to eq(@rpm_z)
1550
+ end
1551
+ end
1552
+
1553
+ describe "<<" do
1554
+ it "should accept an RPMPackage object through the << operator" do
1555
+ expect { @rpmdb << @rpm_w }.not_to raise_error
1556
+ end
1557
+ end
1558
+
1559
+ describe "lookup" do
1560
+ it "should return an Array of RPMPackage objects by index" do
1561
+ @rpmdb << @rpm_w
1562
+ expect(@rpmdb.lookup("test-package-b")).to be_kind_of(Array)
1563
+ end
1564
+ end
1565
+
1566
+ describe "[]" do
1567
+ it "should return an Array of RPMPackage objects though the [index] operator" do
1568
+ @rpmdb << @rpm_w
1569
+ expect(@rpmdb["test-package-b"]).to be_kind_of(Array)
1570
+ end
1571
+
1572
+ it "should return an Array of 3 RPMPackage objects" do
1573
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1574
+ expect(@rpmdb["test-package-b"].size).to eq(3)
1575
+ end
1576
+
1577
+ it "should return an Array of RPMPackage objects sorted from newest to oldest" do
1578
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1579
+ expect(@rpmdb["test-package-b"][0]).to eq(@rpm_y)
1580
+ expect(@rpmdb["test-package-b"][1]).to eq(@rpm_x)
1581
+ expect(@rpmdb["test-package-b"][2]).to eq(@rpm_w)
1582
+ end
1583
+ end
1584
+
1585
+ describe "lookup_provides" do
1586
+ it "should return an Array of RPMPackage objects by index" do
1587
+ @rpmdb << @rpm_z
1588
+ x = @rpmdb.lookup_provides("config(test)")
1589
+ expect(x).to be_kind_of(Array)
1590
+ expect(x[0]).to eq(@rpm_z)
1591
+ end
1592
+ end
1593
+
1594
+ describe "clear" do
1595
+ it "should clear the RPMDb" do
1596
+ expect(@rpmdb).to receive(:clear_available).once
1597
+ expect(@rpmdb).to receive(:clear_installed).once
1598
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1599
+ expect(@rpmdb.size).not_to eq(0)
1600
+ expect(@rpmdb.lookup_provides("config(test)")).to be_kind_of(Array)
1601
+ @rpmdb.clear
1602
+ expect(@rpmdb.lookup_provides("config(test)")).to eq(nil)
1603
+ expect(@rpmdb.size).to eq(0)
1604
+ end
1605
+ end
1606
+
1607
+ describe "clear_available" do
1608
+ it "should clear the available list" do
1609
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1610
+ expect(@rpmdb.available_size).not_to eq(0)
1611
+ @rpmdb.clear_available
1612
+ expect(@rpmdb.available_size).to eq(0)
1613
+ end
1614
+ end
1615
+
1616
+ describe "available?" do
1617
+ it "should return true if a package is available" do
1618
+ expect(@rpmdb.available?(@rpm_w)).to eq(false)
1619
+ @rpmdb.push(@rpm_v, @rpm_w)
1620
+ expect(@rpmdb.available?(@rpm_v)).to eq(false)
1621
+ expect(@rpmdb.available?(@rpm_w)).to eq(true)
1622
+ end
1623
+ end
1624
+
1625
+ describe "clear_installed" do
1626
+ it "should clear the installed list" do
1627
+ @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
1628
+ expect(@rpmdb.installed_size).not_to eq(0)
1629
+ @rpmdb.clear_installed
1630
+ expect(@rpmdb.installed_size).to eq(0)
1631
+ end
1632
+ end
1633
+
1634
+ describe "installed?" do
1635
+ it "should return true if a package is installed" do
1636
+ expect(@rpmdb.installed?(@rpm_w)).to eq(false)
1637
+ @rpmdb.push(@rpm_w, @rpm_x)
1638
+ expect(@rpmdb.installed?(@rpm_w)).to eq(true)
1639
+ expect(@rpmdb.installed?(@rpm_x)).to eq(false)
1640
+ end
1641
+ end
1642
+
1643
+ describe "whatprovides" do
1644
+ it "should raise an error unless a RPMDependency is passed" do
1645
+ @rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
1646
+ @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
1647
+ expect {
1648
+ @rpmdb.whatprovides("hi")
1649
+ }.to raise_error(ArgumentError)
1650
+ expect {
1651
+ @rpmdb.whatprovides(@rpmrequire)
1652
+ }.not_to raise_error
1653
+ end
1654
+
1655
+ it "should return an Array of packages statisfying a RPMDependency" do
1656
+ @rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
1657
+
1658
+ @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a >= 1.6.5")
1659
+ x = @rpmdb.whatprovides(@rpmrequire)
1660
+ expect(x).to be_kind_of(Array)
1661
+ expect(x[0]).to eq(@rpm_v)
1662
+
1663
+ @rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)")
1664
+ x = @rpmdb.whatprovides(@rpmrequire)
1665
+ expect(x).to be_kind_of(Array)
1666
+ expect(x[0]).to eq(@rpm_v)
1667
+ expect(x[1]).to eq(@rpm_z)
1668
+ end
1669
+ end
1670
+
1671
+ end
1672
+
1673
+ describe Chef::Provider::Package::Yum::YumCache do
1674
+ # allow for the reset of a Singleton
1675
+ # thanks to Ian White (http://blog.ardes.com/2006/12/11/testing-singletons-with-ruby)
1676
+ class << Chef::Provider::Package::Yum::YumCache
1677
+ def reset_instance
1678
+ Singleton.send :__init__, self
1679
+ self
1680
+ end
1681
+ end
1682
+
1683
+ let(:yum_exe) {
1684
+ StringIO.new("#!/usr/bin/python\n\naldsjfa\ldsajflkdsjf\lajsdfj")
1685
+ }
1686
+
1687
+ let(:bin_exe) {
1688
+ StringIO.new(SecureRandom.random_bytes)
1689
+ }
1690
+
1691
+ before(:each) do
1692
+ @stdin = double("STDIN", :nil_object => true)
1693
+ @stdout = double("STDOUT", :nil_object => true)
1694
+
1695
+ @stdout_good = <<EOF
1696
+ [option installonlypkgs] kernel kernel-bigmem kernel-enterprise
1697
+ erlang-mochiweb 0 1.4.1 5.el5 x86_64 ['erlang-mochiweb = 1.4.1-5.el5', 'mochiweb = 1.4.1-5.el5'] i installed
1698
+ zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1699
+ zisofs-tools 0 1.0.6 3.2.2 x86_64 [] a extras
1700
+ zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] r base
1701
+ zlib 0 1.2.3 3 i386 ['zlib = 1.2.3-3', 'libz.so.1'] r base
1702
+ zlib-devel 0 1.2.3 3 i386 [] a extras
1703
+ zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] r base
1704
+ znc 0 0.098 1.el5 x86_64 [] a base
1705
+ znc-devel 0 0.098 1.el5 i386 [] a extras
1706
+ znc-devel 0 0.098 1.el5 x86_64 [] a base
1707
+ znc-extra 0 0.098 1.el5 x86_64 [] a base
1708
+ znc-modtcl 0 0.098 1.el5 x86_64 [] a base
1709
+ znc-test.beta1 0 0.098 1.el5 x86_64 [] a extras
1710
+ znc-test.test.beta1 0 0.098 1.el5 x86_64 [] a base
1711
+ EOF
1712
+ @stdout_bad_type = <<EOF
1713
+ zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1714
+ zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] c base
1715
+ zlib-devel 0 1.2.3 3 i386 [] a extras
1716
+ zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] bad installed
1717
+ znc-modtcl 0 0.098 1.el5 x86_64 [] a base
1718
+ EOF
1719
+
1720
+ @stdout_bad_separators = <<EOF
1721
+ zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
1722
+ zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] i base bad
1723
+ zlib-devel 0 1.2.3 3 i386 [] a extras
1724
+ bad zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] i installed
1725
+ znc-modtcl 0 0.098 1.el5 x86_64 [] a base bad
1726
+ EOF
1727
+
1728
+ @stdout_no_output = ""
1729
+
1730
+ @stderr = <<EOF
1731
+ yum-dump Config Error: File contains no section headers.
1732
+ file: file://///etc/yum.repos.d/CentOS-Base.repo, line: 12
1733
+ 'qeqwewe\n'
1734
+ EOF
1735
+ @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_good, :stderr => @stderr)
1736
+ # new singleton each time
1737
+ Chef::Provider::Package::Yum::YumCache.reset_instance
1738
+ @yc = Chef::Provider::Package::Yum::YumCache.instance
1739
+ # load valid data
1740
+ allow(@yc).to receive(:shell_out!).and_return(@status)
1741
+ allow_any_instance_of(described_class).to receive(:which).with("yum").and_return("/usr/bin/yum")
1742
+ allow(::File).to receive(:open).with("/usr/bin/yum", "r") do |&block|
1743
+ res = block.call(yum_exe)
1744
+ # a bit of a hack. rewind this since it seem that no matter what
1745
+ # I do, we get the same StringIO objects on multiple calls to
1746
+ # ::File.open
1747
+ yum_exe.rewind; res
1748
+ end
1749
+ end
1750
+
1751
+ describe "initialize" do
1752
+ it "should return a Chef::Provider::Package::Yum::YumCache object" do
1753
+ expect(@yc).to be_kind_of(Chef::Provider::Package::Yum::YumCache)
1754
+ end
1755
+
1756
+ it "should register reload for start of Chef::Client runs" do
1757
+ Chef::Provider::Package::Yum::YumCache.reset_instance
1758
+ expect(Chef::Client).to receive(:when_run_starts) do |&b|
1759
+ expect(b).not_to be_nil
1760
+ end
1761
+ @yc = Chef::Provider::Package::Yum::YumCache.instance
1762
+ end
1763
+ end
1764
+
1765
+ describe "python_bin" do
1766
+ it "should return the default python if an error occurs" do
1767
+ allow(::File).to receive(:open).with("/usr/bin/yum", "r").and_raise(StandardError)
1768
+ expect(@yc.python_bin).to eq("/usr/bin/python")
1769
+ end
1770
+
1771
+ it "should return the default python if the yum-executable doesn't start with #!" do
1772
+ allow(::File).to receive(:open).with("/usr/bin/yum", "r") { |&b| r = b.call(bin_exe); bin_exe.rewind; r}
1773
+ expect(@yc.python_bin).to eq("/usr/bin/python")
1774
+ end
1775
+
1776
+ it "should return the interpreter for yum" do
1777
+ other = StringIO.new("#!/usr/bin/super_python\n\nlasjdfdsaljf\nlasdjfs")
1778
+ allow(::File).to receive(:open).with("/usr/bin/yum", "r") { |&b| r = b.call(other); other.rewind; r}
1779
+ expect(@yc.python_bin).to eq("/usr/bin/super_python")
1780
+ end
1781
+ end
1782
+
1783
+ describe "refresh" do
1784
+ it "should implicitly call yum-dump.py only once by default after being instantiated" do
1785
+ expect(@yc).to receive(:shell_out!).once
1786
+ @yc.installed_version("zlib")
1787
+ @yc.reset
1788
+ @yc.installed_version("zlib")
1789
+ end
1790
+
1791
+ it "should run yum-dump.py using the system python when next_refresh is for :all" do
1792
+ @yc.reload
1793
+ expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --yum-lock-timeout 30$}, :timeout=>Chef::Config[:yum_timeout])
1794
+ @yc.refresh
1795
+ end
1796
+
1797
+ it "should run yum-dump.py with the installed flag when next_refresh is for :installed" do
1798
+ @yc.reload_installed
1799
+ expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --installed --yum-lock-timeout 30$}, :timeout=>Chef::Config[:yum_timeout])
1800
+ @yc.refresh
1801
+ end
1802
+
1803
+ it "should run yum-dump.py with the all-provides flag when next_refresh is for :provides" do
1804
+ @yc.reload_provides
1805
+ expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --all-provides --yum-lock-timeout 30$}, :timeout=>Chef::Config[:yum_timeout])
1806
+ @yc.refresh
1807
+ end
1808
+
1809
+ it "should pass extra_repo_control args to yum-dump.py" do
1810
+ @yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
1811
+ expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar --yum-lock-timeout 30$}, :timeout=>Chef::Config[:yum_timeout])
1812
+ @yc.refresh
1813
+ end
1814
+
1815
+ it "should pass extra_repo_control args and configured yum lock timeout to yum-dump.py" do
1816
+ Chef::Config[:yum_lock_timeout] = 999
1817
+ @yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
1818
+ expect(@yc).to receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar --yum-lock-timeout 999$}, :timeout=>Chef::Config[:yum_timeout])
1819
+ @yc.refresh
1820
+ end
1821
+
1822
+ it "should warn about invalid data with too many separators" do
1823
+ @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_separators, :stderr => @stderr)
1824
+ allow(@yc).to receive(:shell_out!).and_return(@status)
1825
+ expect(Chef::Log).to receive(:warn).exactly(3).times.with(%r{Problem parsing})
1826
+ @yc.refresh
1827
+ end
1828
+
1829
+ it "should warn about invalid data with an incorrect type" do
1830
+ @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_type, :stderr => @stderr)
1831
+ allow(@yc).to receive(:shell_out!).and_return(@status)
1832
+ expect(Chef::Log).to receive(:warn).exactly(2).times.with(%r{Problem parsing})
1833
+ @yc.refresh
1834
+ end
1835
+
1836
+ it "should warn about no output from yum-dump.py" do
1837
+ @status = double("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
1838
+ allow(@yc).to receive(:shell_out!).and_return(@status)
1839
+ expect(Chef::Log).to receive(:warn).exactly(1).times.with(%r{no output from yum-dump.py})
1840
+ @yc.refresh
1841
+ end
1842
+
1843
+ it "should raise exception yum-dump.py exits with a non zero status" do
1844
+ @status = double("Status", :exitstatus => 1, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
1845
+ allow(@yc).to receive(:shell_out!).and_return(@status)
1846
+ expect { @yc.refresh}.to raise_error(Chef::Exceptions::Package, %r{CentOS-Base.repo, line: 12})
1847
+ end
1848
+
1849
+ it "should parse type 'i' into an installed state for a package" do
1850
+ expect(@yc.available_version("erlang-mochiweb")).to eq(nil)
1851
+ expect(@yc.installed_version("erlang-mochiweb")).not_to eq(nil)
1852
+ end
1853
+
1854
+ it "should parse type 'a' into an available state for a package" do
1855
+ expect(@yc.available_version("znc")).not_to eq(nil)
1856
+ expect(@yc.installed_version("znc")).to eq(nil)
1857
+ end
1858
+
1859
+ it "should parse type 'r' into an installed and available states for a package" do
1860
+ expect(@yc.available_version("zip")).not_to eq(nil)
1861
+ expect(@yc.installed_version("zip")).not_to eq(nil)
1862
+ end
1863
+
1864
+ it "should parse installonlypkgs from yum-dump.py options output" do
1865
+ expect(@yc.allow_multi_install).to eq(%w{kernel kernel-bigmem kernel-enterprise})
1866
+ end
1867
+ end
1868
+
1869
+ describe "installed_version" do
1870
+ it "should take one or two arguments" do
1871
+ expect { @yc.installed_version("zip") }.not_to raise_error
1872
+ expect { @yc.installed_version("zip", "i386") }.not_to raise_error
1873
+ expect { @yc.installed_version("zip", "i386", "extra") }.to raise_error(ArgumentError)
1874
+ end
1875
+
1876
+ it "should return version-release for matching package regardless of arch" do
1877
+ expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
1878
+ expect(@yc.installed_version("zip", nil)).to eq("2.31-2.el5")
1879
+ end
1880
+
1881
+ it "should return version-release for matching package and arch" do
1882
+ expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
1883
+ expect(@yc.installed_version("zisofs-tools", "i386")).to eq(nil)
1884
+ end
1885
+
1886
+ it "should return nil for an unmatched package" do
1887
+ expect(@yc.installed_version(nil, nil)).to eq(nil)
1888
+ expect(@yc.installed_version("test1", nil)).to eq(nil)
1889
+ expect(@yc.installed_version("test2", "x86_64")).to eq(nil)
1890
+ end
1891
+ end
1892
+
1893
+ describe "available_version" do
1894
+ it "should take one or two arguments" do
1895
+ expect { @yc.available_version("zisofs-tools") }.not_to raise_error
1896
+ expect { @yc.available_version("zisofs-tools", "i386") }.not_to raise_error
1897
+ expect { @yc.available_version("zisofs-tools", "i386", "extra") }.to raise_error(ArgumentError)
1898
+ end
1899
+
1900
+ it "should return version-release for matching package regardless of arch" do
1901
+ expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
1902
+ expect(@yc.available_version("zip", nil)).to eq("2.31-2.el5")
1903
+ end
1904
+
1905
+ it "should return version-release for matching package and arch" do
1906
+ expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
1907
+ expect(@yc.available_version("zisofs-tools", "i386")).to eq(nil)
1908
+ end
1909
+
1910
+ it "should return nil for an unmatched package" do
1911
+ expect(@yc.available_version(nil, nil)).to eq(nil)
1912
+ expect(@yc.available_version("test1", nil)).to eq(nil)
1913
+ expect(@yc.available_version("test2", "x86_64")).to eq(nil)
1914
+ end
1915
+ end
1916
+
1917
+ describe "version_available?" do
1918
+ it "should take two or three arguments" do
1919
+ expect { @yc.version_available?("zisofs-tools") }.to raise_error(ArgumentError)
1920
+ expect { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2") }.not_to raise_error
1921
+ expect { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.not_to raise_error
1922
+ end
1923
+
1924
+ it "should return true if our package-version-arch is available" do
1925
+ expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64")).to eq(true)
1926
+ end
1927
+
1928
+ it "should return true if our package-version, no arch, is available" do
1929
+ expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", nil)).to eq(true)
1930
+ expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2")).to eq(true)
1931
+ end
1932
+
1933
+ it "should return false if our package-version-arch isn't available" do
1934
+ expect(@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "pretend")).to eq(false)
1935
+ expect(@yc.version_available?("zisofs-tools", "pretend", "x86_64")).to eq(false)
1936
+ expect(@yc.version_available?("pretend", "1.0.6-3.2.2", "x86_64")).to eq(false)
1937
+ end
1938
+
1939
+ it "should return false if our package-version, no arch, isn't available" do
1940
+ expect(@yc.version_available?("zisofs-tools", "pretend", nil)).to eq(false)
1941
+ expect(@yc.version_available?("zisofs-tools", "pretend")).to eq(false)
1942
+ expect(@yc.version_available?("pretend", "1.0.6-3.2.2")).to eq(false)
1943
+ end
1944
+ end
1945
+
1946
+ describe "package_repository" do
1947
+ it "should take two or three arguments" do
1948
+ expect { @yc.package_repository("zisofs-tools") }.to raise_error(ArgumentError)
1949
+ expect { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2") }.not_to raise_error
1950
+ expect { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.not_to raise_error
1951
+ end
1952
+
1953
+ it "should return repoid for package-version-arch" do
1954
+ expect(@yc.package_repository("zlib-devel", "1.2.3-3", "i386")).to eq("extras")
1955
+ expect(@yc.package_repository("zlib-devel", "1.2.3-3", "x86_64")).to eq("base")
1956
+ end
1957
+
1958
+ it "should return repoid for package-version, no arch" do
1959
+ expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", nil)).to eq("extras")
1960
+ expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2")).to eq("extras")
1961
+ end
1962
+
1963
+ it "should return nil when no match for package-version-arch" do
1964
+ expect(@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "pretend")).to eq(nil)
1965
+ expect(@yc.package_repository("zisofs-tools", "pretend", "x86_64")).to eq(nil)
1966
+ expect(@yc.package_repository("pretend", "1.0.6-3.2.2", "x86_64")).to eq(nil)
1967
+ end
1968
+
1969
+ it "should return nil when no match for package-version, no arch" do
1970
+ expect(@yc.package_repository("zisofs-tools", "pretend", nil)).to eq(nil)
1971
+ expect(@yc.package_repository("zisofs-tools", "pretend")).to eq(nil)
1972
+ expect(@yc.package_repository("pretend", "1.0.6-3.2.2")).to eq(nil)
1973
+ end
1974
+ end
1975
+
1976
+ describe "reset" do
1977
+ it "should empty the installed and available packages RPMDb" do
1978
+ expect(@yc.available_version("zip", "x86_64")).to eq("2.31-2.el5")
1979
+ expect(@yc.installed_version("zip", "x86_64")).to eq("2.31-2.el5")
1980
+ @yc.reset
1981
+ expect(@yc.available_version("zip", "x86_64")).to eq(nil)
1982
+ expect(@yc.installed_version("zip", "x86_64")).to eq(nil)
1983
+ end
1984
+ end
1985
+
1986
+ describe "package_available?" do
1987
+ it "should return true a package name is available" do
1988
+ expect(@yc.package_available?("zisofs-tools")).to eq(true)
1989
+ expect(@yc.package_available?("moo")).to eq(false)
1990
+ expect(@yc.package_available?(nil)).to eq(false)
1991
+ end
1992
+
1993
+ it "should return true a package name + arch is available" do
1994
+ expect(@yc.package_available?("zlib-devel.i386")).to eq(true)
1995
+ expect(@yc.package_available?("zisofs-tools.x86_64")).to eq(true)
1996
+ expect(@yc.package_available?("znc-test.beta1.x86_64")).to eq(true)
1997
+ expect(@yc.package_available?("znc-test.beta1")).to eq(true)
1998
+ expect(@yc.package_available?("znc-test.test.beta1")).to eq(true)
1999
+ expect(@yc.package_available?("moo.i386")).to eq(false)
2000
+ expect(@yc.package_available?("zisofs-tools.beta")).to eq(false)
2001
+ expect(@yc.package_available?("znc-test.test")).to eq(false)
2002
+ end
2003
+ end
2004
+
2005
+ describe "enable_extra_repo_control" do
2006
+ it "should set @extra_repo_control to arg" do
2007
+ @yc.enable_extra_repo_control("--enablerepo=test")
2008
+ expect(@yc.extra_repo_control).to eq("--enablerepo=test")
2009
+ end
2010
+
2011
+ it "should call reload once when set to flag cache for update" do
2012
+ expect(@yc).to receive(:reload).once
2013
+ @yc.enable_extra_repo_control("--enablerepo=test")
2014
+ @yc.enable_extra_repo_control("--enablerepo=test")
2015
+ end
2016
+ end
2017
+
2018
+ describe "disable_extra_repo_control" do
2019
+ it "should set @extra_repo_control to nil" do
2020
+ @yc.enable_extra_repo_control("--enablerepo=test")
2021
+ @yc.disable_extra_repo_control
2022
+ expect(@yc.extra_repo_control).to eq(nil)
2023
+ end
2024
+
2025
+ it "should call reload once when cleared to flag cache for update" do
2026
+ expect(@yc).to receive(:reload).once
2027
+ @yc.enable_extra_repo_control("--enablerepo=test")
2028
+ expect(@yc).to receive(:reload).once
2029
+ @yc.disable_extra_repo_control
2030
+ @yc.disable_extra_repo_control
2031
+ end
2032
+ end
2033
+
2034
+ end
2035
+
2036
+ describe "Chef::Provider::Package::Yum - Multi" do
2037
+ before(:each) do
2038
+ @node = Chef::Node.new
2039
+ @events = Chef::EventDispatch::Dispatcher.new
2040
+ @run_context = Chef::RunContext.new(@node, {}, @events)
2041
+ @new_resource = Chef::Resource::Package.new(['cups', 'vim'])
2042
+ @status = double("Status", :exitstatus => 0)
2043
+ @yum_cache = double(
2044
+ 'Chef::Provider::Yum::YumCache',
2045
+ :reload_installed => true,
2046
+ :reset => true,
2047
+ :installed_version => 'XXXX',
2048
+ :candidate_version => 'YYYY',
2049
+ :package_available? => true,
2050
+ :version_available? => true,
2051
+ :allow_multi_install => [ 'kernel' ],
2052
+ :package_repository => 'base',
2053
+ :disable_extra_repo_control => true
2054
+ )
2055
+ allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(@yum_cache)
2056
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2057
+ @pid = double("PID")
2058
+ end
2059
+
2060
+ describe "when loading the current system state" do
2061
+ it "should create a current resource with the name of the new_resource" do
2062
+ @provider.load_current_resource
2063
+ expect(@provider.current_resource.name).to eq('cups, vim')
2064
+ end
2065
+
2066
+ it "should set the current resources package name to the new resources package name" do
2067
+ @provider.load_current_resource
2068
+ expect(@provider.current_resource.package_name).to eq(['cups', 'vim'])
2069
+ end
2070
+
2071
+ it "should set the installed version to nil on the current resource if no installed package" do
2072
+ allow(@yum_cache).to receive(:installed_version).and_return(nil)
2073
+ @provider.load_current_resource
2074
+ expect(@provider.current_resource.version).to eq([nil, nil])
2075
+ end
2076
+
2077
+ it "should set the installed version if yum has one" do
2078
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2079
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('1.0')
2080
+ allow(@yum_cache).to receive(:candidate_version).with('cups', nil).and_return('1.2.4-11.18.el5_2.3')
2081
+ allow(@yum_cache).to receive(:candidate_version).with('vim', nil).and_return('1.5')
2082
+ @provider.load_current_resource
2083
+ expect(@provider.current_resource.version).to eq(['1.2.4-11.18.el5', '1.0'])
2084
+ end
2085
+
2086
+ it "should set the candidate version if yum info has one" do
2087
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2088
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('1.0')
2089
+ allow(@yum_cache).to receive(:candidate_version).with('cups', nil).and_return('1.2.4-11.18.el5_2.3')
2090
+ allow(@yum_cache).to receive(:candidate_version).with('vim', nil).and_return('1.5')
2091
+ @provider.load_current_resource
2092
+ expect(@provider.candidate_version).to eql(['1.2.4-11.18.el5_2.3', '1.5'])
2093
+ end
2094
+
2095
+ it "should return the current resouce" do
2096
+ expect(@provider.load_current_resource).to eql(@provider.current_resource)
2097
+ end
2098
+
2099
+ describe "when version constraint in package_name" do
2100
+ it "should set package_version if no existing package_name is found and new_package_name is available" do
2101
+ @new_resource = Chef::Resource::Package.new(['cups = 1.2.4-11.18.el5_2.3', 'emacs = 24.4'])
2102
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2103
+ allow(@yum_cache).to receive(:package_available?) { |pkg| %w(cups emacs).include?(pkg) ? true : false }
2104
+ allow(@yum_cache).to receive(:candidate_version) do |pkg|
2105
+ if pkg == 'cups'
2106
+ "1.2.4-11.18.el5_2.3"
2107
+ elsif pkg == 'emacs'
2108
+ "24.4"
2109
+ end
2110
+ end
2111
+ allow(@yum_cache).to receive(:packages_from_require) do |pkg|
2112
+ if pkg.name == 'cups'
2113
+ [Chef::Provider::Package::Yum::RPMDbPackage.new("cups", "1.2.4-11.18.el5_2.3", "noarch", [], false, true, "base")]
2114
+ elsif pkg.name == 'emacs'
2115
+ [Chef::Provider::Package::Yum::RPMDbPackage.new("emacs", "24.4", "noarch", [], false, true, "base")]
2116
+ end
2117
+ end
2118
+ expect(Chef::Log).to receive(:debug).exactly(2).times.with(%r{matched 1 package,})
2119
+ expect(Chef::Log).to receive(:debug).exactly(1).times.with(%r{candidate version: \["1.2.4-11.18.el5_2.3", "24.4"\]})
2120
+ expect(Chef::Log).to receive(:debug).at_least(2).times.with(%r{checking yum info})
2121
+ @provider.load_current_resource
2122
+ expect(@provider.new_resource.package_name).to eq(["cups", "emacs"])
2123
+ expect(@provider.new_resource.version).to eq(["1.2.4-11.18.el5_2.3", "24.4"])
2124
+ expect(@provider.send(:package_name_array)).to eq(["cups", "emacs"])
2125
+ expect(@provider.send(:new_version_array)).to eq(["1.2.4-11.18.el5_2.3", "24.4"])
2126
+ end
2127
+ end
2128
+ end
2129
+
2130
+ describe "when installing a package" do
2131
+ it "should run yum install with the package name and version" do
2132
+ @provider.load_current_resource
2133
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2134
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2135
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('0.9')
2136
+ expect(@provider).to receive(:yum_command).with(
2137
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5 vim-1.0"
2138
+ )
2139
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", '1.0'])
2140
+ end
2141
+
2142
+ it "should run yum install with the package name, version and arch" do
2143
+ @provider.load_current_resource
2144
+ allow(@new_resource).to receive(:arch).and_return("i386")
2145
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2146
+ expect(@provider).to receive(:yum_command).with(
2147
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5.i386 vim-1.0.i386"
2148
+ )
2149
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", "1.0"])
2150
+ end
2151
+
2152
+ it "installs the package with the options given in the resource" do
2153
+ @provider.load_current_resource
2154
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2155
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2156
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('0.9')
2157
+ expect(@provider).to receive(:yum_command).with(
2158
+ "yum -d0 -e0 -y --disablerepo epmd install cups-1.2.4-11.19.el5 vim-1.0"
2159
+ )
2160
+ allow(@new_resource).to receive(:options).and_return("--disablerepo epmd")
2161
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", '1.0'])
2162
+ end
2163
+
2164
+ it "should run yum install with the package name and version when name has arch" do
2165
+ @new_resource = Chef::Resource::Package.new(['cups.x86_64', 'vim'])
2166
+ @provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
2167
+ allow(Chef::Provider::Package::Yum::RPMUtils).to receive(:rpmvercmp).and_return(-1)
2168
+
2169
+ # Inside of load_current_resource() we'll call parse_arch for cups,
2170
+ # and we need to craft the right response. The default mock setup above
2171
+ # will just return valid versions all the time which won't work for this
2172
+ # test.
2173
+ allow(@yum_cache).to receive(:installed_version).with('cups', 'x86_64').and_return('XXXX')
2174
+ allow(@yum_cache).to receive(:candidate_version).with('cups', 'x86_64').and_return('1.2.4-11.18.el5')
2175
+ allow(@yum_cache).to receive(:installed_version).with('cups.x86_64').and_return(nil)
2176
+ allow(@yum_cache).to receive(:candidate_version).with('cups.x86_64').and_return(nil)
2177
+
2178
+ # Normal mock's for the idempotency check
2179
+ allow(@yum_cache).to receive(:installed_version).with('cups', nil).and_return('1.2.4-11.18.el5')
2180
+ allow(@yum_cache).to receive(:installed_version).with('vim', nil).and_return('0.9')
2181
+
2182
+ @provider.load_current_resource
2183
+ expect(@provider).to receive(:yum_command).with(
2184
+ "yum -d0 -e0 -y install cups-1.2.4-11.19.el5.x86_64 vim-1.0"
2185
+ )
2186
+ @provider.install_package(["cups", "vim"], ["1.2.4-11.19.el5", '1.0'])
2187
+ end
2188
+
2189
+ end
2190
+ end