chef 18.8.11 → 18.8.54

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 (1125) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -19
  3. data/chef-universal-mingw-ucrt.gemspec +1 -1
  4. data/chef.gemspec +4 -5
  5. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +4 -0
  6. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +1 -5
  7. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +12 -0
  8. data/lib/chef/chef_fs/file_system.rb +18 -0
  9. data/lib/chef/property.rb +6 -6
  10. data/lib/chef/provider/package/rubygems.rb +21 -0
  11. data/lib/chef/pwsh.rb +2 -5
  12. data/lib/chef/resource/apt_repository.rb +14 -5
  13. data/lib/chef/resource/chocolatey_installer.rb +19 -4
  14. data/lib/chef/resource/ohai.rb +1 -0
  15. data/lib/chef/resource_reporter.rb +1 -1
  16. data/lib/chef/shell.rb +8 -3
  17. data/lib/chef/version.rb +1 -1
  18. metadata +14 -1121
  19. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +0 -5
  20. data/spec/data/apt/chef-integration-test-1.0/debian/compat +0 -1
  21. data/spec/data/apt/chef-integration-test-1.0/debian/control +0 -13
  22. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +0 -34
  23. data/spec/data/apt/chef-integration-test-1.0/debian/files +0 -1
  24. data/spec/data/apt/chef-integration-test-1.0/debian/rules +0 -13
  25. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +0 -1
  26. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +0 -11
  27. data/spec/data/apt/chef-integration-test-1.1/debian/compat +0 -1
  28. data/spec/data/apt/chef-integration-test-1.1/debian/control +0 -13
  29. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +0 -34
  30. data/spec/data/apt/chef-integration-test-1.1/debian/files +0 -1
  31. data/spec/data/apt/chef-integration-test-1.1/debian/rules +0 -13
  32. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +0 -1
  33. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +0 -5
  34. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +0 -1
  35. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +0 -10
  36. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +0 -1
  37. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +0 -45
  38. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +0 -1
  39. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +0 -1
  40. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +0 -1
  41. data/spec/data/apt/chef-integration-test2-1.0/debian/control +0 -13
  42. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +0 -34
  43. data/spec/data/apt/chef-integration-test2-1.0/debian/files +0 -1
  44. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -13
  45. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +0 -1
  46. data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
  47. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +0 -18
  48. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +0 -91
  49. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +0 -31
  50. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
  51. data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
  52. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +0 -22
  53. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  54. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  55. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +0 -22
  56. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  57. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  58. data/spec/data/apt/var/www/apt/conf/distributions +0 -7
  59. data/spec/data/apt/var/www/apt/conf/incoming +0 -4
  60. data/spec/data/apt/var/www/apt/conf/pulls +0 -3
  61. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  62. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  63. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  64. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  65. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  66. data/spec/data/apt/var/www/apt/db/version +0 -4
  67. data/spec/data/apt/var/www/apt/dists/sid/Release +0 -19
  68. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +0 -16
  69. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  70. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +0 -5
  71. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  72. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  73. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  74. data/spec/data/archive_file/test_archive.tar.gz +0 -0
  75. data/spec/data/bad-config.rb +0 -1
  76. data/spec/data/bootstrap/encrypted_data_bag_secret +0 -1
  77. data/spec/data/bootstrap/no_proxy.erb +0 -2
  78. data/spec/data/bootstrap/secret.erb +0 -9
  79. data/spec/data/bootstrap/test-hints.erb +0 -12
  80. data/spec/data/bootstrap/test.erb +0 -1
  81. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  82. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  83. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +0 -3
  84. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +0 -1
  85. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +0 -1
  86. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +0 -1
  87. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +0 -1
  88. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +0 -1
  89. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +0 -1
  90. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +0 -1
  91. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  92. data/spec/data/checksum/random.txt +0 -1
  93. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +0 -1
  94. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  95. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +0 -1
  96. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +0 -1
  97. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +0 -1
  98. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +0 -1
  99. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +0 -1
  100. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +0 -1
  101. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +0 -1
  102. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +0 -1
  103. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +0 -1
  104. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +0 -1
  105. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +0 -1
  106. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +0 -1
  107. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +0 -1
  108. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +0 -1
  109. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +0 -1
  110. data/spec/data/client.d_00/00-foo.rb +0 -2
  111. data/spec/data/client.d_00/01-bar.rb +0 -1
  112. data/spec/data/client.d_00/02-strings.rb +0 -2
  113. data/spec/data/client.d_00/bar +0 -1
  114. data/spec/data/client.d_01/foo/bar.rb +0 -1
  115. data/spec/data/client.d_02/foo.rb/foo.txt +0 -1
  116. data/spec/data/config.rb +0 -6
  117. data/spec/data/cookbooks/angrybash/metadata.rb +0 -2
  118. data/spec/data/cookbooks/angrybash/recipes/default.rb +0 -8
  119. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +0 -2
  120. data/spec/data/cookbooks/apache2/metadata.json +0 -33
  121. data/spec/data/cookbooks/apache2/metadata.rb +0 -2
  122. data/spec/data/cookbooks/apache2/recipes/default.rb +0 -3
  123. data/spec/data/cookbooks/borken/metadata.rb +0 -2
  124. data/spec/data/cookbooks/borken/recipes/default.rb +0 -2
  125. data/spec/data/cookbooks/borken/templates/default/borken.erb +0 -2
  126. data/spec/data/cookbooks/chefignore +0 -8
  127. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +0 -2
  128. data/spec/data/cookbooks/ignorken/metadata.rb +0 -2
  129. data/spec/data/cookbooks/ignorken/recipes/default.rb +0 -1
  130. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +0 -2
  131. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +0 -2
  132. data/spec/data/cookbooks/irssi/files/default/irssi.response +0 -2
  133. data/spec/data/cookbooks/java/files/default/java.response +0 -2
  134. data/spec/data/cookbooks/java/metadata.json +0 -33
  135. data/spec/data/cookbooks/java/metadata.rb +0 -2
  136. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +0 -4
  137. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +0 -8
  138. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +0 -8
  139. data/spec/data/cookbooks/openldap/.root_dotfile +0 -0
  140. data/spec/data/cookbooks/openldap/attributes/default.rb +0 -16
  141. data/spec/data/cookbooks/openldap/attributes/smokey.rb +0 -1
  142. data/spec/data/cookbooks/openldap/definitions/client.rb +0 -5
  143. data/spec/data/cookbooks/openldap/definitions/server.rb +0 -5
  144. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  145. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  146. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  147. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +0 -2
  148. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +0 -3
  149. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +0 -3
  150. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  151. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +0 -3
  152. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +0 -3
  153. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +0 -3
  154. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +0 -3
  155. data/spec/data/cookbooks/openldap/libraries/openldap.rb +0 -4
  156. data/spec/data/cookbooks/openldap/metadata.rb +0 -8
  157. data/spec/data/cookbooks/openldap/recipes/default.rb +0 -4
  158. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +0 -3
  159. data/spec/data/cookbooks/openldap/recipes/one.rb +0 -15
  160. data/spec/data/cookbooks/openldap/recipes/return.rb +0 -2
  161. data/spec/data/cookbooks/openldap/spec/spec_helper.rb +0 -0
  162. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +0 -4
  163. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +0 -1
  164. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +0 -14
  165. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +0 -1
  166. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +0 -1
  167. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +0 -1
  168. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +0 -4
  169. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +0 -1
  170. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +0 -1
  171. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +0 -1
  172. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +0 -4
  173. data/spec/data/cookbooks/openldap/templates/default/test.erb +0 -1
  174. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +0 -1
  175. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +0 -4
  176. data/spec/data/cookbooks/preseed/metadata.rb +0 -2
  177. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +0 -1
  178. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +0 -1
  179. data/spec/data/cookbooks/starter/chefignore +0 -8
  180. data/spec/data/cookbooks/starter/files/sample.txt +0 -1
  181. data/spec/data/cookbooks/starter/metadata.rb +0 -2
  182. data/spec/data/cookbooks/starter/recipes/default.rb +0 -4
  183. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +0 -5
  184. data/spec/data/cookbooks/wget/files/default/wget.response +0 -2
  185. data/spec/data/definitions/test.rb +0 -5
  186. data/spec/data/dsc_lcm.pfx +0 -0
  187. data/spec/data/environment-config.rb +0 -5
  188. data/spec/data/file-providers-method-snapshot-chef-11-4.json +0 -127
  189. data/spec/data/fileedit/blank +0 -0
  190. data/spec/data/fileedit/hosts +0 -4
  191. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  192. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  193. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  194. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  195. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  196. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +0 -4
  197. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +0 -13
  198. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +0 -8
  199. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +0 -4
  200. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +0 -9
  201. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +0 -8
  202. data/spec/data/kitchen/chefignore +0 -6
  203. data/spec/data/kitchen/openldap/attributes/default.rb +0 -3
  204. data/spec/data/kitchen/openldap/attributes/robinson.rb +0 -3
  205. data/spec/data/kitchen/openldap/definitions/client.rb +0 -3
  206. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +0 -3
  207. data/spec/data/kitchen/openldap/recipes/gigantor.rb +0 -3
  208. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +0 -3
  209. data/spec/data/kitchen/openldap/recipes/woot.rb +0 -3
  210. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  211. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  212. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  213. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  214. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  215. data/spec/data/lwrp/providers/buck_passer.rb +0 -28
  216. data/spec/data/lwrp/providers/buck_passer_2.rb +0 -26
  217. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +0 -28
  218. data/spec/data/lwrp/providers/inline_compiler.rb +0 -24
  219. data/spec/data/lwrp/providers/monkey_name_printer.rb +0 -5
  220. data/spec/data/lwrp/providers/paint_drying_watcher.rb +0 -7
  221. data/spec/data/lwrp/providers/thumb_twiddler.rb +0 -7
  222. data/spec/data/lwrp/resources/bar.rb +0 -4
  223. data/spec/data/lwrp/resources/buck_passer.rb +0 -6
  224. data/spec/data/lwrp/resources/buck_passer_2.rb +0 -4
  225. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +0 -4
  226. data/spec/data/lwrp/resources/foo.rb +0 -6
  227. data/spec/data/lwrp/resources/inline_compiler.rb +0 -4
  228. data/spec/data/lwrp/resources/monkey_name_printer.rb +0 -6
  229. data/spec/data/lwrp/resources/paint_drying_watcher.rb +0 -4
  230. data/spec/data/lwrp/resources/thumb_twiddler.rb +0 -4
  231. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +0 -3
  232. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -1
  233. data/spec/data/lwrp_override/providers/buck_passer.rb +0 -5
  234. data/spec/data/lwrp_override/resources/foo.rb +0 -11
  235. data/spec/data/mac_users/10.9.plist.xml +0 -560
  236. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  237. data/spec/data/metadata/quick_start/metadata.rb +0 -14
  238. data/spec/data/mixin/invalid_data.rb +0 -3
  239. data/spec/data/mixin/real_data.rb +0 -2
  240. data/spec/data/nested.json +0 -2
  241. data/spec/data/nodes/default.rb +0 -15
  242. data/spec/data/nodes/test.example.com.rb +0 -17
  243. data/spec/data/nodes/test.rb +0 -15
  244. data/spec/data/null_config.rb +0 -1
  245. data/spec/data/object_loader/environments/test.json +0 -7
  246. data/spec/data/object_loader/environments/test.rb +0 -2
  247. data/spec/data/object_loader/environments/test_json_class.json +0 -8
  248. data/spec/data/object_loader/nodes/test.json +0 -7
  249. data/spec/data/object_loader/nodes/test.rb +0 -2
  250. data/spec/data/object_loader/nodes/test_json_class.json +0 -8
  251. data/spec/data/object_loader/roles/test.json +0 -7
  252. data/spec/data/object_loader/roles/test.rb +0 -2
  253. data/spec/data/object_loader/roles/test_json_class.json +0 -8
  254. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  255. data/spec/data/old_home_dir/my-dot-vim +0 -0
  256. data/spec/data/partial_one.erb +0 -1
  257. data/spec/data/prefer_metadata_json/metadata.json +0 -51
  258. data/spec/data/prefer_metadata_json/metadata.rb +0 -6
  259. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  260. data/spec/data/recipes/test.rb +0 -7
  261. data/spec/data/recipes.tgz +0 -0
  262. data/spec/data/remote_directory_data/remote_dir_file.txt +0 -1
  263. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +0 -1
  264. data/spec/data/remote_file/nyan_cat.png +0 -0
  265. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  266. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +0 -1
  267. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +0 -1
  268. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +0 -2
  269. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +0 -3
  270. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +0 -1
  271. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +0 -2
  272. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +0 -3
  273. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +0 -3
  274. data/spec/data/root_alias_cookbooks/simple/attributes.rb +0 -1
  275. data/spec/data/root_alias_cookbooks/simple/metadata.rb +0 -2
  276. data/spec/data/root_alias_cookbooks/simple/recipe.rb +0 -3
  277. data/spec/data/rubygems.org/latest_specs.4.8.gz +0 -0
  278. data/spec/data/rubygems.org/nonexistent_gem +0 -0
  279. data/spec/data/rubygems.org/nonexistent_gem-info +0 -1
  280. data/spec/data/rubygems.org/sexp_processor +0 -0
  281. data/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz +0 -0
  282. data/spec/data/rubygems.org/sexp_processor-info +0 -50
  283. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +0 -2
  284. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +0 -1
  285. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +0 -2
  286. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +0 -2
  287. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +0 -1
  288. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  289. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +0 -2
  290. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +0 -2
  291. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +0 -1
  292. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +0 -2
  293. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +0 -2
  294. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +0 -1
  295. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  296. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +0 -2
  297. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +0 -2
  298. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +0 -2
  299. data/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file +0 -1
  300. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +0 -2
  301. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +0 -1
  302. data/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file +0 -1
  303. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +0 -2
  304. data/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file +0 -1
  305. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +0 -1
  306. data/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file +0 -1
  307. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  308. data/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file +0 -1
  309. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +0 -2
  310. data/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file +0 -1
  311. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +0 -2
  312. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +0 -1
  313. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +0 -2
  314. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +0 -1
  315. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  316. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +0 -2
  317. data/spec/data/run_context/cookbooks/include/recipes/default.rb +0 -24
  318. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +0 -3
  319. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +0 -2
  320. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +0 -1
  321. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +0 -1
  322. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  323. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +0 -2
  324. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  325. data/spec/data/run_context/cookbooks/test/attributes/george.rb +0 -1
  326. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +0 -9
  327. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +0 -5
  328. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +0 -1
  329. data/spec/data/run_context/cookbooks/test/providers/provider.rb +0 -1
  330. data/spec/data/run_context/cookbooks/test/recipes/default.rb +0 -5
  331. data/spec/data/run_context/cookbooks/test/recipes/one.rb +0 -7
  332. data/spec/data/run_context/cookbooks/test/recipes/two.rb +0 -7
  333. data/spec/data/run_context/cookbooks/test/resources/resource.rb +0 -3
  334. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +0 -2
  335. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +0 -1
  336. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +0 -2
  337. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +0 -2
  338. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +0 -1
  339. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  340. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +0 -3
  341. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +0 -2
  342. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +0 -1
  343. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +0 -1
  344. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +0 -3
  345. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +0 -1
  346. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  347. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  348. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +0 -2
  349. data/spec/data/run_context/nodes/run_context.rb +0 -5
  350. data/spec/data/sample_msu1.xml +0 -10
  351. data/spec/data/sample_msu2.xml +0 -14
  352. data/spec/data/sample_msu3.xml +0 -16
  353. data/spec/data/search_queries_to_transform.txt +0 -98
  354. data/spec/data/shef-config.rb +0 -11
  355. data/spec/data/snap_package/async_result_success.json +0 -6
  356. data/spec/data/snap_package/change_id_result.json +0 -175
  357. data/spec/data/snap_package/find_result_failure.json +0 -10
  358. data/spec/data/snap_package/find_result_success.json +0 -70
  359. data/spec/data/snap_package/get_by_name_result_failure.json +0 -10
  360. data/spec/data/snap_package/get_by_name_result_success.json +0 -38
  361. data/spec/data/snap_package/get_conf_success.json +0 -10
  362. data/spec/data/snap_package/result_failure.json +0 -9
  363. data/spec/data/ssl/5e707473.0 +0 -18
  364. data/spec/data/ssl/binary/chef-rspec-der.cert +0 -0
  365. data/spec/data/ssl/binary/chef-rspec-der.key +0 -0
  366. data/spec/data/ssl/chef-rspec.cert +0 -27
  367. data/spec/data/ssl/chef-rspec.key +0 -27
  368. data/spec/data/ssl/key.pem +0 -15
  369. data/spec/data/ssl/private_key.pem +0 -27
  370. data/spec/data/ssl/private_key_with_whitespace.pem +0 -32
  371. data/spec/data/standalone_cookbook/Gemfile +0 -1
  372. data/spec/data/standalone_cookbook/chefignore +0 -9
  373. data/spec/data/standalone_cookbook/recipes/default.rb +0 -3
  374. data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +0 -1
  375. data/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt +0 -1
  376. data/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt +0 -1
  377. data/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt +0 -1
  378. data/spec/data/templates/failed.erb +0 -5
  379. data/spec/data/templates/seattle.txt +0 -1
  380. data/spec/data/trusted_certs/example.crt +0 -31
  381. data/spec/data/trusted_certs/example_no_cn.crt +0 -32
  382. data/spec/data/trusted_certs/intermediate.pem +0 -38
  383. data/spec/data/trusted_certs/opscode.pem +0 -36
  384. data/spec/data/trusted_certs/root.pem +0 -22
  385. data/spec/data/windows_certificates/base64_test.cer +0 -20
  386. data/spec/data/windows_certificates/othertest.cer +0 -20
  387. data/spec/data/windows_certificates/test.cer +0 -20
  388. data/spec/data/windows_certificates/test.p7b +0 -0
  389. data/spec/data/windows_certificates/test.pem +0 -20
  390. data/spec/data/windows_certificates/test.pfx +0 -0
  391. data/spec/functional/application_spec.rb +0 -58
  392. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  393. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  394. data/spec/functional/assets/chefinittest +0 -36
  395. data/spec/functional/assets/chocolatey_feed/test-A.1.0.0.nupkg +0 -0
  396. data/spec/functional/assets/chocolatey_feed/test-A.1.5.0.nupkg +0 -0
  397. data/spec/functional/assets/chocolatey_feed/test-A.2.0.0.nupkg +0 -0
  398. data/spec/functional/assets/chocolatey_feed/test-B.1.0.0.nupkg +0 -0
  399. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  400. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  401. data/spec/functional/assets/inittest +0 -37
  402. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  403. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  404. data/spec/functional/assets/testchefsubsys +0 -10
  405. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  406. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm +0 -0
  407. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  408. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  409. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  410. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.src.rpm +0 -0
  411. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  412. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  413. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.i686.rpm +0 -0
  414. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  415. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  416. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  417. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm +0 -0
  418. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  419. data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
  420. data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
  421. data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
  422. data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
  423. data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
  424. data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
  425. data/spec/functional/assets/yumrepo/repodata/filelists.xml.gz +0 -0
  426. data/spec/functional/assets/yumrepo/repodata/other.xml.gz +0 -0
  427. data/spec/functional/assets/yumrepo/repodata/primary.xml.gz +0 -0
  428. data/spec/functional/assets/yumrepo/repodata/repomd.xml +0 -21
  429. data/spec/functional/assets/yumrepo-empty/repodata/01a3b-filelists.sqlite.bz2 +0 -0
  430. data/spec/functional/assets/yumrepo-empty/repodata/401dc-filelists.xml.gz +0 -0
  431. data/spec/functional/assets/yumrepo-empty/repodata/5dc1e-primary.sqlite.bz2 +0 -0
  432. data/spec/functional/assets/yumrepo-empty/repodata/6bf96-other.xml.gz +0 -0
  433. data/spec/functional/assets/yumrepo-empty/repodata/7c365-other.sqlite.bz2 +0 -0
  434. data/spec/functional/assets/yumrepo-empty/repodata/dabe2-primary.xml.gz +0 -0
  435. data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +0 -55
  436. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  437. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.i686.rpm +0 -0
  438. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  439. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  440. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  441. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.src.rpm +0 -0
  442. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  443. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  444. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.i686.rpm +0 -0
  445. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  446. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  447. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  448. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.src.rpm +0 -0
  449. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  450. data/spec/functional/dsl/reboot_pending_spec.rb +0 -88
  451. data/spec/functional/dsl/registry_helper_spec.rb +0 -61
  452. data/spec/functional/event_loggers/windows_eventlog_spec.rb +0 -107
  453. data/spec/functional/file_content_management/deploy_strategies_spec.rb +0 -229
  454. data/spec/functional/http/simple_spec.rb +0 -146
  455. data/spec/functional/mixin/from_file_spec.rb +0 -93
  456. data/spec/functional/mixin/powershell_out_spec.rb +0 -51
  457. data/spec/functional/mixin/shell_out_spec.rb +0 -48
  458. data/spec/functional/mixin/user_context_spec.rb +0 -119
  459. data/spec/functional/notifications_spec.rb +0 -238
  460. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -100
  461. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -51
  462. data/spec/functional/rebooter_spec.rb +0 -117
  463. data/spec/functional/resource/aix_service_spec.rb +0 -145
  464. data/spec/functional/resource/aixinit_service_spec.rb +0 -210
  465. data/spec/functional/resource/apt_package_spec.rb +0 -383
  466. data/spec/functional/resource/archive_file_spec.rb +0 -88
  467. data/spec/functional/resource/bash_spec.rb +0 -55
  468. data/spec/functional/resource/batch_spec.rb +0 -34
  469. data/spec/functional/resource/bff_spec.rb +0 -120
  470. data/spec/functional/resource/chocolatey_package_spec.rb +0 -194
  471. data/spec/functional/resource/cookbook_file_spec.rb +0 -79
  472. data/spec/functional/resource/cron_spec.rb +0 -179
  473. data/spec/functional/resource/directory_spec.rb +0 -43
  474. data/spec/functional/resource/dnf_package_spec.rb +0 -1629
  475. data/spec/functional/resource/dpkg_package_spec.rb +0 -355
  476. data/spec/functional/resource/dsc_resource_spec.rb +0 -91
  477. data/spec/functional/resource/dsc_script_spec.rb +0 -476
  478. data/spec/functional/resource/execute_spec.rb +0 -171
  479. data/spec/functional/resource/file_spec.rb +0 -167
  480. data/spec/functional/resource/git_spec.rb +0 -330
  481. data/spec/functional/resource/group_spec.rb +0 -486
  482. data/spec/functional/resource/ifconfig_spec.rb +0 -178
  483. data/spec/functional/resource/insserv_spec.rb +0 -206
  484. data/spec/functional/resource/launchd_spec.rb +0 -232
  485. data/spec/functional/resource/link_spec.rb +0 -704
  486. data/spec/functional/resource/locale_spec.rb +0 -108
  487. data/spec/functional/resource/macos_userdefaults_spec.rb +0 -139
  488. data/spec/functional/resource/mount_spec.rb +0 -219
  489. data/spec/functional/resource/msu_package_spec.rb +0 -107
  490. data/spec/functional/resource/ohai_spec.rb +0 -54
  491. data/spec/functional/resource/plist_spec.rb +0 -25
  492. data/spec/functional/resource/powershell_package_source_spec.rb +0 -106
  493. data/spec/functional/resource/powershell_script_spec.rb +0 -588
  494. data/spec/functional/resource/reboot_spec.rb +0 -103
  495. data/spec/functional/resource/registry_spec.rb +0 -300
  496. data/spec/functional/resource/remote_directory_spec.rb +0 -220
  497. data/spec/functional/resource/remote_file_spec.rb +0 -418
  498. data/spec/functional/resource/rpm_spec.rb +0 -120
  499. data/spec/functional/resource/template_spec.rb +0 -245
  500. data/spec/functional/resource/timezone_spec.rb +0 -41
  501. data/spec/functional/resource/user/linux_user_spec.rb +0 -127
  502. data/spec/functional/resource/user/mac_user_spec.rb +0 -207
  503. data/spec/functional/resource/user/windows_spec.rb +0 -245
  504. data/spec/functional/resource/windows_certificate_spec.rb +0 -401
  505. data/spec/functional/resource/windows_env_spec.rb +0 -285
  506. data/spec/functional/resource/windows_firewall_rule_spec.rb +0 -93
  507. data/spec/functional/resource/windows_font_spec.rb +0 -52
  508. data/spec/functional/resource/windows_hostname_spec.rb +0 -91
  509. data/spec/functional/resource/windows_package_spec.rb +0 -193
  510. data/spec/functional/resource/windows_pagefile_spec.rb +0 -125
  511. data/spec/functional/resource/windows_path_spec.rb +0 -68
  512. data/spec/functional/resource/windows_security_policy_spec.rb +0 -86
  513. data/spec/functional/resource/windows_share_spec.rb +0 -103
  514. data/spec/functional/resource/windows_task_spec.rb +0 -1969
  515. data/spec/functional/resource/windows_user_privilege_spec.rb +0 -192
  516. data/spec/functional/resource/yum_package_spec.rb +0 -1739
  517. data/spec/functional/resource/zypper_package_spec.rb +0 -276
  518. data/spec/functional/root_alias_spec.rb +0 -78
  519. data/spec/functional/run_lock_spec.rb +0 -481
  520. data/spec/functional/shell_spec.rb +0 -149
  521. data/spec/functional/tiny_server_spec.rb +0 -79
  522. data/spec/functional/util/path_helper_spec.rb +0 -37
  523. data/spec/functional/version_spec.rb +0 -36
  524. data/spec/functional/win32/crypto_spec.rb +0 -54
  525. data/spec/functional/win32/registry_spec.rb +0 -618
  526. data/spec/functional/win32/security_spec.rb +0 -233
  527. data/spec/functional/win32/sid_spec.rb +0 -55
  528. data/spec/functional/win32/version_info_spec.rb +0 -50
  529. data/spec/functional/win32/versions_spec.rb +0 -115
  530. data/spec/integration/client/client_spec.rb +0 -963
  531. data/spec/integration/client/exit_code_spec.rb +0 -116
  532. data/spec/integration/client/fips_spec.rb +0 -29
  533. data/spec/integration/client/ipv6_spec.rb +0 -135
  534. data/spec/integration/client/open_ssl_spec.rb +0 -25
  535. data/spec/integration/compliance/compliance_spec.rb +0 -143
  536. data/spec/integration/ohai/ohai_spec.rb +0 -62
  537. data/spec/integration/recipes/accumulator_spec.rb +0 -245
  538. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +0 -176
  539. data/spec/integration/recipes/lwrp_spec.rb +0 -56
  540. data/spec/integration/recipes/noop_resource_spec.rb +0 -24
  541. data/spec/integration/recipes/notifies_spec.rb +0 -438
  542. data/spec/integration/recipes/notifying_block_spec.rb +0 -116
  543. data/spec/integration/recipes/provider_choice.rb +0 -38
  544. data/spec/integration/recipes/recipe_dsl_spec.rb +0 -1281
  545. data/spec/integration/recipes/remote_directory.rb +0 -74
  546. data/spec/integration/recipes/resource_action_spec.rb +0 -524
  547. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +0 -554
  548. data/spec/integration/recipes/resource_load_spec.rb +0 -315
  549. data/spec/integration/recipes/unified_mode_spec.rb +0 -947
  550. data/spec/integration/recipes/use_partial_spec.rb +0 -116
  551. data/spec/integration/solo/solo_spec.rb +0 -219
  552. data/spec/rcov.opts +0 -2
  553. data/spec/spec_helper.rb +0 -350
  554. data/spec/stress/win32/file_spec.rb +0 -37
  555. data/spec/stress/win32/memory_spec.rb +0 -22
  556. data/spec/stress/win32/security_spec.rb +0 -69
  557. data/spec/support/chef_helpers.rb +0 -79
  558. data/spec/support/key_helpers.rb +0 -102
  559. data/spec/support/lib/chef/provider/easy.rb +0 -35
  560. data/spec/support/lib/chef/provider/openldap_includer.rb +0 -29
  561. data/spec/support/lib/chef/provider/snakeoil.rb +0 -42
  562. data/spec/support/lib/chef/resource/cat.rb +0 -39
  563. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -36
  564. data/spec/support/lib/chef/resource/openldap_includer.rb +0 -28
  565. data/spec/support/lib/chef/resource/with_state.rb +0 -29
  566. data/spec/support/lib/chef/resource/zen_follower.rb +0 -36
  567. data/spec/support/lib/chef/resource/zen_master.rb +0 -39
  568. data/spec/support/lib/library_load_order.rb +0 -20
  569. data/spec/support/matchers/leak.rb +0 -96
  570. data/spec/support/mock/platform.rb +0 -33
  571. data/spec/support/platform_helpers.rb +0 -284
  572. data/spec/support/platforms/prof/gc.rb +0 -51
  573. data/spec/support/platforms/prof/win32.rb +0 -45
  574. data/spec/support/platforms/win32/spec_service.rb +0 -57
  575. data/spec/support/recipe_dsl_helper.rb +0 -83
  576. data/spec/support/ruby_installer.rb +0 -51
  577. data/spec/support/shared/context/config.rb +0 -18
  578. data/spec/support/shared/context/win32.rb +0 -34
  579. data/spec/support/shared/functional/diff_disabled.rb +0 -10
  580. data/spec/support/shared/functional/directory_resource.rb +0 -178
  581. data/spec/support/shared/functional/execute_resource.rb +0 -150
  582. data/spec/support/shared/functional/file_resource.rb +0 -1047
  583. data/spec/support/shared/functional/http.rb +0 -224
  584. data/spec/support/shared/functional/knife.rb +0 -37
  585. data/spec/support/shared/functional/securable_resource.rb +0 -654
  586. data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -393
  587. data/spec/support/shared/functional/windows_script.rb +0 -260
  588. data/spec/support/shared/integration/integration_helper.rb +0 -122
  589. data/spec/support/shared/integration/knife_support.rb +0 -192
  590. data/spec/support/shared/matchers/exit_with_code.rb +0 -32
  591. data/spec/support/shared/matchers/match_environment_variable.rb +0 -17
  592. data/spec/support/shared/shared_examples.rb +0 -14
  593. data/spec/support/shared/unit/api_error_inspector.rb +0 -190
  594. data/spec/support/shared/unit/api_versioning.rb +0 -77
  595. data/spec/support/shared/unit/application_dot_d.rb +0 -82
  596. data/spec/support/shared/unit/execute_resource.rb +0 -166
  597. data/spec/support/shared/unit/file_system_support.rb +0 -70
  598. data/spec/support/shared/unit/knife_shared.rb +0 -39
  599. data/spec/support/shared/unit/mock_shellout.rb +0 -49
  600. data/spec/support/shared/unit/platform_introspector.rb +0 -189
  601. data/spec/support/shared/unit/provider/file.rb +0 -877
  602. data/spec/support/shared/unit/provider/package/package_shared.rb +0 -95
  603. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +0 -410
  604. data/spec/support/shared/unit/resource/static_provider_resolution.rb +0 -63
  605. data/spec/support/shared/unit/script_resource.rb +0 -74
  606. data/spec/support/shared/unit/user_and_client_shared.rb +0 -114
  607. data/spec/support/shared/unit/windows_script_resource.rb +0 -65
  608. data/spec/tiny_server.rb +0 -193
  609. data/spec/unit/action_collection_spec.rb +0 -19
  610. data/spec/unit/api_client/registration_spec.rb +0 -278
  611. data/spec/unit/api_client_spec.rb +0 -341
  612. data/spec/unit/api_client_v1_spec.rb +0 -455
  613. data/spec/unit/application/agent_spec.rb +0 -0
  614. data/spec/unit/application/apply_spec.rb +0 -116
  615. data/spec/unit/application/base_spec.rb +0 -40
  616. data/spec/unit/application/client_spec.rb +0 -588
  617. data/spec/unit/application/exit_code_spec.rb +0 -145
  618. data/spec/unit/application/server_spec.rb +0 -0
  619. data/spec/unit/application/solo_spec.rb +0 -218
  620. data/spec/unit/application_spec.rb +0 -587
  621. data/spec/unit/chef_class_spec.rb +0 -240
  622. data/spec/unit/chef_fs/config_spec.rb +0 -235
  623. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +0 -82
  624. data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +0 -65
  625. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -63
  626. data/spec/unit/chef_fs/diff_spec.rb +0 -328
  627. data/spec/unit/chef_fs/file_pattern_spec.rb +0 -512
  628. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +0 -34
  629. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +0 -45
  630. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +0 -126
  631. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +0 -175
  632. data/spec/unit/chef_fs/file_system_spec.rb +0 -150
  633. data/spec/unit/chef_fs/path_util_spec.rb +0 -108
  634. data/spec/unit/chef_spec.rb +0 -25
  635. data/spec/unit/client_spec.rb +0 -881
  636. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -126
  637. data/spec/unit/compliance/fetcher/chef_server_spec.rb +0 -93
  638. data/spec/unit/compliance/input_spec.rb +0 -104
  639. data/spec/unit/compliance/profile_spec.rb +0 -120
  640. data/spec/unit/compliance/reporter/automate_spec.rb +0 -451
  641. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +0 -197
  642. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +0 -49
  643. data/spec/unit/compliance/runner_spec.rb +0 -354
  644. data/spec/unit/compliance/waiver_spec.rb +0 -104
  645. data/spec/unit/config_fetcher_spec.rb +0 -125
  646. data/spec/unit/config_spec.rb +0 -31
  647. data/spec/unit/cookbook/chefignore_spec.rb +0 -69
  648. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +0 -213
  649. data/spec/unit/cookbook/file_vendor_spec.rb +0 -123
  650. data/spec/unit/cookbook/gem_installer_spec.rb +0 -114
  651. data/spec/unit/cookbook/manifest_v0_spec.rb +0 -133
  652. data/spec/unit/cookbook/manifest_v2_spec.rb +0 -70
  653. data/spec/unit/cookbook/metadata_spec.rb +0 -610
  654. data/spec/unit/cookbook/synchronizer_spec.rb +0 -560
  655. data/spec/unit/cookbook/syntax_check_spec.rb +0 -229
  656. data/spec/unit/cookbook_loader_spec.rb +0 -265
  657. data/spec/unit/cookbook_manifest_spec.rb +0 -228
  658. data/spec/unit/cookbook_spec.rb +0 -62
  659. data/spec/unit/cookbook_uploader_spec.rb +0 -205
  660. data/spec/unit/cookbook_version_file_specificity_spec.rb +0 -623
  661. data/spec/unit/cookbook_version_spec.rb +0 -341
  662. data/spec/unit/daemon_spec.rb +0 -179
  663. data/spec/unit/data_bag_item_spec.rb +0 -387
  664. data/spec/unit/data_bag_spec.rb +0 -263
  665. data/spec/unit/data_collector/config_validation_spec.rb +0 -208
  666. data/spec/unit/data_collector_spec.rb +0 -1076
  667. data/spec/unit/decorator/lazy_array_spec.rb +0 -58
  668. data/spec/unit/decorator/lazy_spec.rb +0 -39
  669. data/spec/unit/decorator_spec.rb +0 -142
  670. data/spec/unit/delayed_evaluator_spec.rb +0 -35
  671. data/spec/unit/deprecated_spec.rb +0 -65
  672. data/spec/unit/deprecation_spec.rb +0 -129
  673. data/spec/unit/digester_spec.rb +0 -49
  674. data/spec/unit/dsl/data_query_spec.rb +0 -108
  675. data/spec/unit/dsl/declare_resource_spec.rb +0 -374
  676. data/spec/unit/dsl/platform_introspection_spec.rb +0 -160
  677. data/spec/unit/dsl/reboot_pending_spec.rb +0 -87
  678. data/spec/unit/dsl/recipe_spec.rb +0 -76
  679. data/spec/unit/dsl/registry_helper_spec.rb +0 -52
  680. data/spec/unit/dsl/render_helpers_spec.rb +0 -102
  681. data/spec/unit/dsl/resources_spec.rb +0 -85
  682. data/spec/unit/dsl/secret_spec.rb +0 -175
  683. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +0 -97
  684. data/spec/unit/encrypted_data_bag_item_spec.rb +0 -439
  685. data/spec/unit/environment_spec.rb +0 -476
  686. data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -172
  687. data/spec/unit/event_dispatch/dsl_spec.rb +0 -83
  688. data/spec/unit/exceptions_spec.rb +0 -132
  689. data/spec/unit/file_access_control_spec.rb +0 -308
  690. data/spec/unit/file_cache_spec.rb +0 -178
  691. data/spec/unit/file_content_management/deploy/cp_spec.rb +0 -44
  692. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +0 -113
  693. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +0 -232
  694. data/spec/unit/file_content_management/tempfile_spec.rb +0 -115
  695. data/spec/unit/formatters/base_spec.rb +0 -100
  696. data/spec/unit/formatters/doc_spec.rb +0 -110
  697. data/spec/unit/formatters/error_description_spec.rb +0 -141
  698. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +0 -76
  699. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +0 -265
  700. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +0 -126
  701. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +0 -43
  702. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +0 -26
  703. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +0 -26
  704. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +0 -191
  705. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +0 -91
  706. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +0 -155
  707. data/spec/unit/guard_interpreter_spec.rb +0 -41
  708. data/spec/unit/handler/json_file_spec.rb +0 -63
  709. data/spec/unit/handler_spec.rb +0 -308
  710. data/spec/unit/http/api_versions_spec.rb +0 -100
  711. data/spec/unit/http/authenticator_spec.rb +0 -247
  712. data/spec/unit/http/basic_client_spec.rb +0 -102
  713. data/spec/unit/http/http_request_spec.rb +0 -97
  714. data/spec/unit/http/json_input_spec.rb +0 -128
  715. data/spec/unit/http/simple_spec.rb +0 -32
  716. data/spec/unit/http/socketless_chef_zero_client_spec.rb +0 -174
  717. data/spec/unit/http/ssl_policies_spec.rb +0 -228
  718. data/spec/unit/http/validate_content_length_spec.rb +0 -207
  719. data/spec/unit/http_spec.rb +0 -235
  720. data/spec/unit/json_compat_spec.rb +0 -73
  721. data/spec/unit/key_spec.rb +0 -631
  722. data/spec/unit/log/syslog_spec.rb +0 -47
  723. data/spec/unit/log/winevt_spec.rb +0 -62
  724. data/spec/unit/lwrp_spec.rb +0 -693
  725. data/spec/unit/mixin/api_version_request_handling_spec.rb +0 -126
  726. data/spec/unit/mixin/checksum_spec.rb +0 -82
  727. data/spec/unit/mixin/convert_to_class_name_spec.rb +0 -54
  728. data/spec/unit/mixin/deep_merge_spec.rb +0 -357
  729. data/spec/unit/mixin/default_paths_spec.rb +0 -92
  730. data/spec/unit/mixin/deprecation_spec.rb +0 -57
  731. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +0 -96
  732. data/spec/unit/mixin/homebrew_spec.rb +0 -118
  733. data/spec/unit/mixin/lazy_module_include.rb +0 -71
  734. data/spec/unit/mixin/openssl_helper_spec.rb +0 -897
  735. data/spec/unit/mixin/params_validate_spec.rb +0 -422
  736. data/spec/unit/mixin/powershell_exec_spec.rb +0 -90
  737. data/spec/unit/mixin/powershell_out_spec.rb +0 -106
  738. data/spec/unit/mixin/powershell_type_coercions_spec.rb +0 -84
  739. data/spec/unit/mixin/properties_spec.rb +0 -107
  740. data/spec/unit/mixin/proxified_socket_spec.rb +0 -97
  741. data/spec/unit/mixin/securable_spec.rb +0 -313
  742. data/spec/unit/mixin/shell_out_spec.rb +0 -308
  743. data/spec/unit/mixin/subclass_directive_spec.rb +0 -45
  744. data/spec/unit/mixin/template_spec.rb +0 -317
  745. data/spec/unit/mixin/unformatter_spec.rb +0 -60
  746. data/spec/unit/mixin/uris_spec.rb +0 -57
  747. data/spec/unit/mixin/user_context_spec.rb +0 -99
  748. data/spec/unit/mixin/versioned_api_spec.rb +0 -128
  749. data/spec/unit/mixin/which.rb +0 -170
  750. data/spec/unit/mixin/why_run_spec.rb +0 -53
  751. data/spec/unit/mixin/windows_architecture_helper_spec.rb +0 -85
  752. data/spec/unit/mixin/xml_escape_spec.rb +0 -54
  753. data/spec/unit/monologger_spec.rb +0 -45
  754. data/spec/unit/node/attribute_spec.rb +0 -1322
  755. data/spec/unit/node/immutable_collections_spec.rb +0 -258
  756. data/spec/unit/node/vivid_mash_spec.rb +0 -500
  757. data/spec/unit/node_map_spec.rb +0 -276
  758. data/spec/unit/node_spec.rb +0 -2038
  759. data/spec/unit/org_group_spec.rb +0 -45
  760. data/spec/unit/org_spec.rb +0 -196
  761. data/spec/unit/platform/query_helpers_spec.rb +0 -48
  762. data/spec/unit/policy_builder/dynamic_spec.rb +0 -256
  763. data/spec/unit/policy_builder/expand_node_object_spec.rb +0 -311
  764. data/spec/unit/policy_builder/policyfile_spec.rb +0 -960
  765. data/spec/unit/policy_builder_spec.rb +0 -26
  766. data/spec/unit/property/state_spec.rb +0 -514
  767. data/spec/unit/property/validation_spec.rb +0 -813
  768. data/spec/unit/property_spec.rb +0 -1329
  769. data/spec/unit/provider/apt_preference_spec.rb +0 -91
  770. data/spec/unit/provider/apt_repository_spec.rb +0 -370
  771. data/spec/unit/provider/apt_update_spec.rb +0 -119
  772. data/spec/unit/provider/batch_spec.rb +0 -130
  773. data/spec/unit/provider/cookbook_file/content_spec.rb +0 -39
  774. data/spec/unit/provider/cookbook_file_spec.rb +0 -59
  775. data/spec/unit/provider/cron/unix_spec.rb +0 -144
  776. data/spec/unit/provider/cron_spec.rb +0 -1252
  777. data/spec/unit/provider/directory_spec.rb +0 -289
  778. data/spec/unit/provider/dsc_resource_spec.rb +0 -313
  779. data/spec/unit/provider/dsc_script_spec.rb +0 -173
  780. data/spec/unit/provider/execute_spec.rb +0 -244
  781. data/spec/unit/provider/file/content_spec.rb +0 -114
  782. data/spec/unit/provider/file_spec.rb +0 -58
  783. data/spec/unit/provider/git_spec.rb +0 -822
  784. data/spec/unit/provider/group/dscl_spec.rb +0 -339
  785. data/spec/unit/provider/group/gpasswd_spec.rb +0 -119
  786. data/spec/unit/provider/group/groupadd_spec.rb +0 -195
  787. data/spec/unit/provider/group/groupmod_spec.rb +0 -136
  788. data/spec/unit/provider/group/pw_spec.rb +0 -141
  789. data/spec/unit/provider/group/solaris_spec.rb +0 -106
  790. data/spec/unit/provider/group/usermod_spec.rb +0 -112
  791. data/spec/unit/provider/group/windows_spec.rb +0 -130
  792. data/spec/unit/provider/group_spec.rb +0 -285
  793. data/spec/unit/provider/http_request_spec.rb +0 -147
  794. data/spec/unit/provider/ifconfig/aix_spec.rb +0 -180
  795. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -332
  796. data/spec/unit/provider/ifconfig/redhat_spec.rb +0 -83
  797. data/spec/unit/provider/ifconfig_spec.rb +0 -247
  798. data/spec/unit/provider/launchd_spec.rb +0 -234
  799. data/spec/unit/provider/link_spec.rb +0 -425
  800. data/spec/unit/provider/log_spec.rb +0 -94
  801. data/spec/unit/provider/mdadm_spec.rb +0 -138
  802. data/spec/unit/provider/mount/aix_spec.rb +0 -277
  803. data/spec/unit/provider/mount/linux_spec.rb +0 -131
  804. data/spec/unit/provider/mount/mount_spec.rb +0 -590
  805. data/spec/unit/provider/mount/solaris_spec.rb +0 -822
  806. data/spec/unit/provider/mount/windows_spec.rb +0 -150
  807. data/spec/unit/provider/mount_spec.rb +0 -222
  808. data/spec/unit/provider/package/apt_spec.rb +0 -703
  809. data/spec/unit/provider/package/bff_spec.rb +0 -188
  810. data/spec/unit/provider/package/cab_spec.rb +0 -272
  811. data/spec/unit/provider/package/chocolatey_spec.rb +0 -574
  812. data/spec/unit/provider/package/deb_spec.rb +0 -135
  813. data/spec/unit/provider/package/dnf/python_helper_spec.rb +0 -36
  814. data/spec/unit/provider/package/dpkg_spec.rb +0 -314
  815. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +0 -147
  816. data/spec/unit/provider/package/freebsd/port_spec.rb +0 -151
  817. data/spec/unit/provider/package/homebrew_spec.rb +0 -402
  818. data/spec/unit/provider/package/ips_spec.rb +0 -233
  819. data/spec/unit/provider/package/macports_spec.rb +0 -203
  820. data/spec/unit/provider/package/msu_spec.rb +0 -283
  821. data/spec/unit/provider/package/openbsd_spec.rb +0 -136
  822. data/spec/unit/provider/package/pacman_spec.rb +0 -109
  823. data/spec/unit/provider/package/paludis_spec.rb +0 -134
  824. data/spec/unit/provider/package/portage_spec.rb +0 -179
  825. data/spec/unit/provider/package/powershell_spec.rb +0 -565
  826. data/spec/unit/provider/package/rpm_spec.rb +0 -440
  827. data/spec/unit/provider/package/rubygems_spec.rb +0 -1187
  828. data/spec/unit/provider/package/smartos_spec.rb +0 -110
  829. data/spec/unit/provider/package/snap_spec.rb +0 -208
  830. data/spec/unit/provider/package/solaris_spec.rb +0 -168
  831. data/spec/unit/provider/package/windows/exe_spec.rb +0 -201
  832. data/spec/unit/provider/package/windows/msi_spec.rb +0 -168
  833. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +0 -78
  834. data/spec/unit/provider/package/windows_spec.rb +0 -441
  835. data/spec/unit/provider/package/yum/python_helper_spec.rb +0 -30
  836. data/spec/unit/provider/package/yum/yum_cache_spec.rb +0 -109
  837. data/spec/unit/provider/package/zypper_spec.rb +0 -494
  838. data/spec/unit/provider/package_spec.rb +0 -791
  839. data/spec/unit/provider/powershell_script_spec.rb +0 -157
  840. data/spec/unit/provider/registry_key_spec.rb +0 -487
  841. data/spec/unit/provider/remote_directory_spec.rb +0 -236
  842. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +0 -245
  843. data/spec/unit/provider/remote_file/content_spec.rb +0 -253
  844. data/spec/unit/provider/remote_file/fetcher_spec.rb +0 -95
  845. data/spec/unit/provider/remote_file/ftp_spec.rb +0 -217
  846. data/spec/unit/provider/remote_file/http_spec.rb +0 -334
  847. data/spec/unit/provider/remote_file/local_file_spec.rb +0 -105
  848. data/spec/unit/provider/remote_file/network_file_spec.rb +0 -50
  849. data/spec/unit/provider/remote_file/sftp_spec.rb +0 -150
  850. data/spec/unit/provider/remote_file_spec.rb +0 -61
  851. data/spec/unit/provider/route_spec.rb +0 -268
  852. data/spec/unit/provider/ruby_block_spec.rb +0 -45
  853. data/spec/unit/provider/script_spec.rb +0 -67
  854. data/spec/unit/provider/service/aix_service_spec.rb +0 -195
  855. data/spec/unit/provider/service/aixinit_service_spec.rb +0 -272
  856. data/spec/unit/provider/service/arch_service_spec.rb +0 -326
  857. data/spec/unit/provider/service/debian_service_spec.rb +0 -273
  858. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -621
  859. data/spec/unit/provider/service/gentoo_service_spec.rb +0 -145
  860. data/spec/unit/provider/service/init_service_spec.rb +0 -235
  861. data/spec/unit/provider/service/insserv_service_spec.rb +0 -75
  862. data/spec/unit/provider/service/invokercd_service_spec.rb +0 -211
  863. data/spec/unit/provider/service/macosx_spec.rb +0 -337
  864. data/spec/unit/provider/service/openbsd_service_spec.rb +0 -553
  865. data/spec/unit/provider/service/redhat_spec.rb +0 -253
  866. data/spec/unit/provider/service/simple_service_spec.rb +0 -171
  867. data/spec/unit/provider/service/solaris_smf_service_spec.rb +0 -292
  868. data/spec/unit/provider/service/systemd_service_spec.rb +0 -504
  869. data/spec/unit/provider/service/upstart_service_spec.rb +0 -322
  870. data/spec/unit/provider/service/windows_spec.rb +0 -986
  871. data/spec/unit/provider/service_spec.rb +0 -168
  872. data/spec/unit/provider/subversion_spec.rb +0 -364
  873. data/spec/unit/provider/systemd_unit_spec.rb +0 -1039
  874. data/spec/unit/provider/template/content_spec.rb +0 -169
  875. data/spec/unit/provider/template_spec.rb +0 -86
  876. data/spec/unit/provider/user/aix_spec.rb +0 -96
  877. data/spec/unit/provider/user/linux_spec.rb +0 -178
  878. data/spec/unit/provider/user/mac_spec.rb +0 -38
  879. data/spec/unit/provider/user/pw_spec.rb +0 -235
  880. data/spec/unit/provider/user/solaris_spec.rb +0 -177
  881. data/spec/unit/provider/user/windows_spec.rb +0 -198
  882. data/spec/unit/provider/user_spec.rb +0 -520
  883. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -46
  884. data/spec/unit/provider/windows_env_spec.rb +0 -385
  885. data/spec/unit/provider/windows_path_spec.rb +0 -60
  886. data/spec/unit/provider/windows_task_spec.rb +0 -436
  887. data/spec/unit/provider/yum_repository_spec.rb +0 -35
  888. data/spec/unit/provider/zypper_repository_spec.rb +0 -169
  889. data/spec/unit/provider_spec.rb +0 -215
  890. data/spec/unit/pure_application_spec.rb +0 -32
  891. data/spec/unit/recipe_spec.rb +0 -703
  892. data/spec/unit/resource/alternatives_spec.rb +0 -120
  893. data/spec/unit/resource/apt_package_spec.rb +0 -71
  894. data/spec/unit/resource/apt_preference_spec.rb +0 -39
  895. data/spec/unit/resource/apt_repository_spec.rb +0 -79
  896. data/spec/unit/resource/apt_update_spec.rb +0 -44
  897. data/spec/unit/resource/archive_file_spec.rb +0 -466
  898. data/spec/unit/resource/bash_spec.rb +0 -45
  899. data/spec/unit/resource/batch_spec.rb +0 -46
  900. data/spec/unit/resource/bff_package_spec.rb +0 -51
  901. data/spec/unit/resource/breakpoint_spec.rb +0 -64
  902. data/spec/unit/resource/build_essential_spec.rb +0 -77
  903. data/spec/unit/resource/cab_package_spec.rb +0 -64
  904. data/spec/unit/resource/chef_client_config_spec.rb +0 -145
  905. data/spec/unit/resource/chef_client_cron_spec.rb +0 -161
  906. data/spec/unit/resource/chef_client_launchd_spec.rb +0 -132
  907. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +0 -186
  908. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +0 -108
  909. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +0 -68
  910. data/spec/unit/resource/chef_gem_spec.rb +0 -122
  911. data/spec/unit/resource/chef_handler_spec.rb +0 -40
  912. data/spec/unit/resource/chef_sleep_spec.rb +0 -30
  913. data/spec/unit/resource/chef_vault_secret_spec.rb +0 -40
  914. data/spec/unit/resource/chocolatey_config_spec.rb +0 -93
  915. data/spec/unit/resource/chocolatey_feature_spec.rb +0 -89
  916. data/spec/unit/resource/chocolatey_installer_spec.rb +0 -151
  917. data/spec/unit/resource/chocolatey_package_spec.rb +0 -106
  918. data/spec/unit/resource/chocolatey_source_spec.rb +0 -151
  919. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +0 -45
  920. data/spec/unit/resource/conditional_spec.rb +0 -254
  921. data/spec/unit/resource/cookbook_file_spec.rb +0 -93
  922. data/spec/unit/resource/cron_access_spec.rb +0 -36
  923. data/spec/unit/resource/cron_d_spec.rb +0 -84
  924. data/spec/unit/resource/cron_spec.rb +0 -167
  925. data/spec/unit/resource/csh_spec.rb +0 -45
  926. data/spec/unit/resource/directory_spec.rb +0 -69
  927. data/spec/unit/resource/dmg_package_spec.rb +0 -39
  928. data/spec/unit/resource/dnf_package_spec.rb +0 -114
  929. data/spec/unit/resource/dpkg_package_spec.rb +0 -72
  930. data/spec/unit/resource/dsc_resource_spec.rb +0 -102
  931. data/spec/unit/resource/dsc_script_spec.rb +0 -134
  932. data/spec/unit/resource/execute_spec.rb +0 -282
  933. data/spec/unit/resource/file/verification/json_spec.rb +0 -72
  934. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +0 -103
  935. data/spec/unit/resource/file/verification/yaml_spec.rb +0 -67
  936. data/spec/unit/resource/file/verification_spec.rb +0 -147
  937. data/spec/unit/resource/file_spec.rb +0 -127
  938. data/spec/unit/resource/freebsd_package_spec.rb +0 -77
  939. data/spec/unit/resource/gem_package_spec.rb +0 -67
  940. data/spec/unit/resource/group_spec.rb +0 -165
  941. data/spec/unit/resource/helpers/cron_validations_spec.rb +0 -81
  942. data/spec/unit/resource/homebrew_cask_spec.rb +0 -58
  943. data/spec/unit/resource/homebrew_package_spec.rb +0 -68
  944. data/spec/unit/resource/homebrew_tap_spec.rb +0 -44
  945. data/spec/unit/resource/homebrew_update_spec.rb +0 -30
  946. data/spec/unit/resource/hostname_spec.rb +0 -47
  947. data/spec/unit/resource/http_request_spec.rb +0 -65
  948. data/spec/unit/resource/ifconfig_spec.rb +0 -101
  949. data/spec/unit/resource/inspec_input_spec.rb +0 -300
  950. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +0 -80
  951. data/spec/unit/resource/inspec_waiver_spec.rb +0 -312
  952. data/spec/unit/resource/ips_package_spec.rb +0 -54
  953. data/spec/unit/resource/kernel_module_spec.rb +0 -45
  954. data/spec/unit/resource/ksh_spec.rb +0 -45
  955. data/spec/unit/resource/launchd_spec.rb +0 -48
  956. data/spec/unit/resource/link_spec.rb +0 -120
  957. data/spec/unit/resource/locale_spec.rb +0 -189
  958. data/spec/unit/resource/log_spec.rb +0 -64
  959. data/spec/unit/resource/macos_pkg_spec.rb +0 -38
  960. data/spec/unit/resource/macos_user_defaults_spec.rb +0 -76
  961. data/spec/unit/resource/macosx_service.rb +0 -37
  962. data/spec/unit/resource/macports_package_spec.rb +0 -51
  963. data/spec/unit/resource/mdadm_spec.rb +0 -104
  964. data/spec/unit/resource/mount_spec.rb +0 -201
  965. data/spec/unit/resource/msu_package_spec.rb +0 -67
  966. data/spec/unit/resource/notify_group_spec.rb +0 -34
  967. data/spec/unit/resource/ohai_hint_spec.rb +0 -44
  968. data/spec/unit/resource/ohai_spec.rb +0 -185
  969. data/spec/unit/resource/openbsd_package_spec.rb +0 -58
  970. data/spec/unit/resource/openssl_dhparam_spec.rb +0 -61
  971. data/spec/unit/resource/openssl_ec_private_key_spec.rb +0 -64
  972. data/spec/unit/resource/openssl_ec_public_key_spec.rb +0 -43
  973. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +0 -64
  974. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +0 -43
  975. data/spec/unit/resource/openssl_x509_certificate_spec.rb +0 -72
  976. data/spec/unit/resource/openssl_x509_crl_spec.rb +0 -61
  977. data/spec/unit/resource/openssl_x509_request.rb +0 -68
  978. data/spec/unit/resource/osx_profile_spec.rb +0 -360
  979. data/spec/unit/resource/package_spec.rb +0 -98
  980. data/spec/unit/resource/pacman_package_spec.rb +0 -46
  981. data/spec/unit/resource/paludis_package_spec.rb +0 -36
  982. data/spec/unit/resource/perl_spec.rb +0 -44
  983. data/spec/unit/resource/plist_spec.rb +0 -130
  984. data/spec/unit/resource/portage_package_spec.rb +0 -46
  985. data/spec/unit/resource/powershell_package_source_spec.rb +0 -220
  986. data/spec/unit/resource/powershell_package_spec.rb +0 -98
  987. data/spec/unit/resource/powershell_script_spec.rb +0 -65
  988. data/spec/unit/resource/python_spec.rb +0 -40
  989. data/spec/unit/resource/reboot_spec.rb +0 -47
  990. data/spec/unit/resource/registry_key_spec.rb +0 -215
  991. data/spec/unit/resource/remote_directory_spec.rb +0 -118
  992. data/spec/unit/resource/remote_file_spec.rb +0 -220
  993. data/spec/unit/resource/resource_notification_spec.rb +0 -169
  994. data/spec/unit/resource/rest_resource_spec.rb +0 -381
  995. data/spec/unit/resource/rhsm_errata_level_spec.rb +0 -50
  996. data/spec/unit/resource/rhsm_errata_spec.rb +0 -39
  997. data/spec/unit/resource/rhsm_register_spec.rb +0 -308
  998. data/spec/unit/resource/rhsm_repo_spec.rb +0 -70
  999. data/spec/unit/resource/rhsm_subscription_spec.rb +0 -145
  1000. data/spec/unit/resource/route_spec.rb +0 -100
  1001. data/spec/unit/resource/rpm_package_spec.rb +0 -62
  1002. data/spec/unit/resource/ruby_block_spec.rb +0 -58
  1003. data/spec/unit/resource/ruby_spec.rb +0 -39
  1004. data/spec/unit/resource/scm/git_spec.rb +0 -110
  1005. data/spec/unit/resource/scm/scm.rb +0 -122
  1006. data/spec/unit/resource/scm/subversion_spec.rb +0 -90
  1007. data/spec/unit/resource/script_spec.rb +0 -57
  1008. data/spec/unit/resource/selinux_boolean_spec.rb +0 -92
  1009. data/spec/unit/resource/selinux_fcontext_spec.rb +0 -65
  1010. data/spec/unit/resource/selinux_install_spec.rb +0 -60
  1011. data/spec/unit/resource/selinux_login_spec.rb +0 -73
  1012. data/spec/unit/resource/selinux_module_spec.rb +0 -55
  1013. data/spec/unit/resource/selinux_permissive_spec.rb +0 -39
  1014. data/spec/unit/resource/selinux_port_spec.rb +0 -42
  1015. data/spec/unit/resource/selinux_state_spec.rb +0 -46
  1016. data/spec/unit/resource/selinux_user_spec.rb +0 -92
  1017. data/spec/unit/resource/service_spec.rb +0 -203
  1018. data/spec/unit/resource/smartos_package_spec.rb +0 -52
  1019. data/spec/unit/resource/snap_package_spec.rb +0 -60
  1020. data/spec/unit/resource/solaris_package_spec.rb +0 -52
  1021. data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +0 -50
  1022. data/spec/unit/resource/sudo_spec.rb +0 -99
  1023. data/spec/unit/resource/swap_file_spec.rb +0 -39
  1024. data/spec/unit/resource/sysctl_spec.rb +0 -76
  1025. data/spec/unit/resource/systemd_unit_spec.rb +0 -130
  1026. data/spec/unit/resource/template_spec.rb +0 -222
  1027. data/spec/unit/resource/timezone_spec.rb +0 -102
  1028. data/spec/unit/resource/user/linux_user_spec.rb +0 -42
  1029. data/spec/unit/resource/user/windows_user_spec.rb +0 -36
  1030. data/spec/unit/resource/user_spec.rb +0 -121
  1031. data/spec/unit/resource/user_ulimit_spec.rb +0 -66
  1032. data/spec/unit/resource/windows_ad_join_spec.rb +0 -55
  1033. data/spec/unit/resource/windows_audit_policy_spec.rb +0 -64
  1034. data/spec/unit/resource/windows_auto_run_spec.rb +0 -50
  1035. data/spec/unit/resource/windows_certificate_spec.rb +0 -95
  1036. data/spec/unit/resource/windows_defender_exclusion_spec.rb +0 -62
  1037. data/spec/unit/resource/windows_defender_spec.rb +0 -71
  1038. data/spec/unit/resource/windows_dfs_folder_spec.rb +0 -39
  1039. data/spec/unit/resource/windows_dfs_namespace_spec.rb +0 -39
  1040. data/spec/unit/resource/windows_dfs_server_spec.rb +0 -34
  1041. data/spec/unit/resource/windows_dns_record_spec.rb +0 -55
  1042. data/spec/unit/resource/windows_dns_zone_spec.rb +0 -51
  1043. data/spec/unit/resource/windows_env_spec.rb +0 -75
  1044. data/spec/unit/resource/windows_feature_dism_spec.rb +0 -57
  1045. data/spec/unit/resource/windows_feature_powershell_spec.rb +0 -83
  1046. data/spec/unit/resource/windows_feature_spec.rb +0 -64
  1047. data/spec/unit/resource/windows_firewall_profile_spec.rb +0 -77
  1048. data/spec/unit/resource/windows_firewall_rule_spec.rb +0 -510
  1049. data/spec/unit/resource/windows_font_spec.rb +0 -43
  1050. data/spec/unit/resource/windows_package_spec.rb +0 -125
  1051. data/spec/unit/resource/windows_pagefile_spec.rb +0 -44
  1052. data/spec/unit/resource/windows_path_spec.rb +0 -40
  1053. data/spec/unit/resource/windows_printer_port_spec.rb +0 -62
  1054. data/spec/unit/resource/windows_printer_spec.rb +0 -52
  1055. data/spec/unit/resource/windows_service_spec.rb +0 -122
  1056. data/spec/unit/resource/windows_share_spec.rb +0 -48
  1057. data/spec/unit/resource/windows_shortcut_spec.rb +0 -38
  1058. data/spec/unit/resource/windows_task_spec.rb +0 -403
  1059. data/spec/unit/resource/windows_uac_spec.rb +0 -50
  1060. data/spec/unit/resource/windows_update_settings_spec.rb +0 -64
  1061. data/spec/unit/resource/windows_user_privilege_spec.rb +0 -55
  1062. data/spec/unit/resource/windows_workgroup_spec.rb +0 -74
  1063. data/spec/unit/resource/yum_package_spec.rb +0 -159
  1064. data/spec/unit/resource/yum_repository_spec.rb +0 -156
  1065. data/spec/unit/resource/zypper_package_spec.rb +0 -51
  1066. data/spec/unit/resource/zypper_repository_spec.rb +0 -115
  1067. data/spec/unit/resource_builder_spec.rb +0 -1
  1068. data/spec/unit/resource_collection/resource_list_spec.rb +0 -137
  1069. data/spec/unit/resource_collection/resource_set_spec.rb +0 -244
  1070. data/spec/unit/resource_collection/stepable_iterator_spec.rb +0 -144
  1071. data/spec/unit/resource_collection_spec.rb +0 -408
  1072. data/spec/unit/resource_definition_spec.rb +0 -117
  1073. data/spec/unit/resource_inspector_spec.rb +0 -101
  1074. data/spec/unit/resource_reporter_spec.rb +0 -802
  1075. data/spec/unit/resource_resolver_spec.rb +0 -52
  1076. data/spec/unit/resource_spec.rb +0 -1484
  1077. data/spec/unit/role_spec.rb +0 -363
  1078. data/spec/unit/run_context/child_run_context_spec.rb +0 -126
  1079. data/spec/unit/run_context/cookbook_compiler_spec.rb +0 -236
  1080. data/spec/unit/run_context_spec.rb +0 -257
  1081. data/spec/unit/run_list/run_list_expansion_spec.rb +0 -147
  1082. data/spec/unit/run_list/run_list_item_spec.rb +0 -117
  1083. data/spec/unit/run_list/versioned_recipe_list_spec.rb +0 -197
  1084. data/spec/unit/run_list_spec.rb +0 -312
  1085. data/spec/unit/run_lock_spec.rb +0 -144
  1086. data/spec/unit/run_status_spec.rb +0 -144
  1087. data/spec/unit/runner_spec.rb +0 -397
  1088. data/spec/unit/scan_access_control_spec.rb +0 -183
  1089. data/spec/unit/search/query_spec.rb +0 -291
  1090. data/spec/unit/secret_fetcher/akeyless_vault_spec.rb +0 -37
  1091. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +0 -70
  1092. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +0 -149
  1093. data/spec/unit/secret_fetcher/hashi_vault_spec.rb +0 -126
  1094. data/spec/unit/secret_fetcher_spec.rb +0 -82
  1095. data/spec/unit/server_api_spec.rb +0 -151
  1096. data/spec/unit/server_api_versions_spec.rb +0 -66
  1097. data/spec/unit/shell/model_wrapper_spec.rb +0 -96
  1098. data/spec/unit/shell/shell_ext_spec.rb +0 -196
  1099. data/spec/unit/shell/shell_session_spec.rb +0 -218
  1100. data/spec/unit/shell_spec.rb +0 -178
  1101. data/spec/unit/train_transport_spec.rb +0 -85
  1102. data/spec/unit/user_spec.rb +0 -275
  1103. data/spec/unit/user_v1_spec.rb +0 -585
  1104. data/spec/unit/util/backup_spec.rb +0 -141
  1105. data/spec/unit/util/diff_spec.rb +0 -562
  1106. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -272
  1107. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -248
  1108. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -192
  1109. data/spec/unit/util/dsc/resource_store.rb +0 -78
  1110. data/spec/unit/util/editor_spec.rb +0 -152
  1111. data/spec/unit/util/file_edit_spec.rb +0 -224
  1112. data/spec/unit/util/powershell/ps_credential_spec.rb +0 -51
  1113. data/spec/unit/util/selinux_spec.rb +0 -160
  1114. data/spec/unit/util/threaded_job_queue_spec.rb +0 -60
  1115. data/spec/unit/util/windows/logon_session_spec.rb +0 -285
  1116. data/spec/unit/version/platform_spec.rb +0 -60
  1117. data/spec/unit/version_class_spec.rb +0 -171
  1118. data/spec/unit/version_constraint/platform_spec.rb +0 -45
  1119. data/spec/unit/version_constraint_spec.rb +0 -179
  1120. data/spec/unit/version_string_spec.rb +0 -79
  1121. data/spec/unit/win32/error_spec.rb +0 -77
  1122. data/spec/unit/win32/link_spec.rb +0 -73
  1123. data/spec/unit/win32/registry_spec.rb +0 -394
  1124. data/spec/unit/win32/security_spec.rb +0 -136
  1125. data/tasks/rspec.rb +0 -87
@@ -1,2038 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright (c) Chef Software 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 "ostruct"
21
-
22
- describe Chef::Node do
23
-
24
- let(:node) { Chef::Node.new }
25
- let(:platform_introspector) { node }
26
-
27
- it_behaves_like "a platform introspector"
28
-
29
- it "creates a node and assigns it a name" do
30
- node = Chef::Node.build("solo-node")
31
- expect(node.name).to eq("solo-node")
32
- end
33
-
34
- it "should validate the name of the node" do
35
- expect { Chef::Node.build("solo node") }.to raise_error(Chef::Exceptions::ValidationFailed)
36
- end
37
-
38
- it "should be sortable" do
39
- n1 = Chef::Node.build("alpha")
40
- n2 = Chef::Node.build("beta")
41
- n3 = Chef::Node.build("omega")
42
- expect([n3, n1, n2].sort).to eq([n1, n2, n3])
43
- end
44
-
45
- it "should share identity only with others of the same name" do
46
- n1 = Chef::Node.build("foo")
47
- n2 = Chef::Node.build("foo")
48
- n3 = Chef::Node.build("bar")
49
- expect(n1).to eq(n2)
50
- expect(n1).not_to eq(n3)
51
- end
52
-
53
- describe "when the node does not exist on the server" do
54
- before do
55
- response = OpenStruct.new(code: "404")
56
- exception = Net::HTTPClientException.new("404 not found", response)
57
- allow(Chef::Node).to receive(:load).and_raise(exception)
58
- node.name("created-node")
59
- end
60
-
61
- it "creates a new node for find_or_create" do
62
- allow(Chef::Node).to receive(:new).and_return(node)
63
- expect(node).to receive(:create).and_return(node)
64
- node = Chef::Node.find_or_create("created-node")
65
- expect(node.name).to eq("created-node")
66
- expect(node).to equal(node)
67
- end
68
- end
69
-
70
- describe "when the node exists on the server" do
71
- before do
72
- node.name("existing-node")
73
- allow(Chef::Node).to receive(:load).and_return(node)
74
- end
75
-
76
- it "loads the node via the REST API for find_or_create" do
77
- expect(Chef::Node.find_or_create("existing-node")).to equal(node)
78
- end
79
- end
80
-
81
- describe "run_state" do
82
- it "is an empty hash" do
83
- expect(node.run_state).to respond_to(:keys)
84
- expect(node.run_state).to be_empty
85
- end
86
- end
87
-
88
- describe "initialize" do
89
- it "should default to the '_default' chef_environment" do
90
- n = Chef::Node.new
91
- expect(n.chef_environment).to eq("_default")
92
- end
93
- end
94
-
95
- describe "name" do
96
- it "should allow you to set a name with name(something)" do
97
- expect { node.name("latte") }.not_to raise_error
98
- end
99
-
100
- it "should return the name with name()" do
101
- node.name("latte")
102
- expect(node.name).to eql("latte")
103
- end
104
-
105
- it "should always have a string for name" do
106
- expect { node.name({}) }.to raise_error(ArgumentError)
107
- end
108
-
109
- it "cannot be blank" do
110
- expect { node.name("") }.to raise_error(Chef::Exceptions::ValidationFailed)
111
- end
112
-
113
- it "should not accept name doesn't match /^[\-[:alnum:]_:.]+$/" do
114
- expect { node.name("space in it") }.to raise_error(Chef::Exceptions::ValidationFailed)
115
- end
116
- end
117
-
118
- describe "chef_environment" do
119
- it "should set an environment with chef_environment(something)" do
120
- expect { node.chef_environment("latte") }.not_to raise_error
121
- end
122
-
123
- it "should return the chef_environment with chef_environment()" do
124
- node.chef_environment("latte")
125
- expect(node.chef_environment).to eq("latte")
126
- end
127
-
128
- it "should disallow non-strings" do
129
- expect { node.chef_environment({}) }.to raise_error(ArgumentError)
130
- expect { node.chef_environment(42) }.to raise_error(ArgumentError)
131
- end
132
-
133
- it "cannot be blank" do
134
- expect { node.chef_environment("") }.to raise_error(Chef::Exceptions::ValidationFailed)
135
- end
136
- end
137
-
138
- describe "policy_name" do
139
-
140
- it "defaults to nil" do
141
- expect(node.policy_name).to be_nil
142
- end
143
-
144
- it "sets policy_name with a regular setter" do
145
- node.policy_name = "example-policy"
146
- expect(node.policy_name).to eq("example-policy")
147
- end
148
-
149
- it "allows policy_name with every valid character" do
150
- expect { node.policy_name = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqurstuvwxyz0123456789-_:." }.to_not raise_error
151
- end
152
-
153
- it "sets policy_name when given an argument" do
154
- node.policy_name("example-policy")
155
- expect(node.policy_name).to eq("example-policy")
156
- end
157
-
158
- it "sets policy_name to nil when given nil" do
159
- node.policy_name = "example-policy"
160
- node.policy_name = nil
161
- expect(node.policy_name).to be_nil
162
- end
163
-
164
- it "disallows non-strings" do
165
- expect { node.policy_name({}) }.to raise_error(Chef::Exceptions::ValidationFailed)
166
- expect { node.policy_name(42) }.to raise_error(Chef::Exceptions::ValidationFailed)
167
- end
168
-
169
- it "cannot be blank" do
170
- expect { node.policy_name("") }.to raise_error(Chef::Exceptions::ValidationFailed)
171
- end
172
- end
173
-
174
- describe "policy_group" do
175
-
176
- it "defaults to nil" do
177
- expect(node.policy_group).to be_nil
178
- end
179
-
180
- it "sets policy_group with a regular setter" do
181
- node.policy_group = "staging"
182
- expect(node.policy_group).to eq("staging")
183
- end
184
-
185
- it "allows policy_group with every valid character" do
186
- expect { node.policy_group = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqurstuvwxyz0123456789-_:." }.to_not raise_error
187
- end
188
-
189
- it "sets a policy_group with policy_group(something)" do
190
- node.policy_group("staging")
191
- expect(node.policy_group).to eq("staging")
192
- end
193
-
194
- it "sets policy_group to nil when given nil" do
195
- node.policy_group = "staging"
196
- node.policy_group = nil
197
- expect(node.policy_group).to be_nil
198
- end
199
-
200
- it "disallows non-strings" do
201
- expect { node.policy_group({}) }.to raise_error(Chef::Exceptions::ValidationFailed)
202
- expect { node.policy_group(42) }.to raise_error(Chef::Exceptions::ValidationFailed)
203
- end
204
-
205
- it "cannot be blank" do
206
- expect { node.policy_group("") }.to raise_error(Chef::Exceptions::ValidationFailed)
207
- end
208
- end
209
-
210
- describe "attributes" do
211
- it "should have attributes" do
212
- expect(node.attribute).to be_a_kind_of(Hash)
213
- end
214
-
215
- it "should allow attributes to be accessed by name or symbol directly on node[]" do
216
- node.default["locust"] = "something"
217
- expect(node[:locust]).to eql("something")
218
- expect(node["locust"]).to eql("something")
219
- end
220
-
221
- it "should return nil if it cannot find an attribute with node[]" do
222
- expect(node["secret"]).to eql(nil)
223
- end
224
-
225
- it "does not allow you to set an attribute via node[]=" do
226
- expect { node["secret"] = "shush" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
227
- end
228
-
229
- it "should allow you to query whether an attribute exists with attribute?" do
230
- node.default["locust"] = "something"
231
- expect(node.attribute?("locust")).to eql(true)
232
- expect(node.attribute?("no dice")).to eql(false)
233
- end
234
-
235
- it "should let you go deep with attribute?" do
236
- node.normal["battles"]["people"]["wonkey"] = true
237
- expect(node["battles"]["people"].attribute?("wonkey")).to eq(true)
238
- expect(node["battles"]["people"].attribute?("snozzberry")).to eq(false)
239
- end
240
-
241
- it "does not allow modification of node attributes via hash methods" do
242
- node.default["h4sh"] = { foo: "bar" }
243
- expect { node["h4sh"].delete("foo") }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
244
- end
245
-
246
- it "does not allow modification of node attributes via array methods" do
247
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
248
- node.default["array"] = []
249
- expect { node["array"] << "boom" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
250
- end
251
-
252
- it "returns merged immutable attributes for arrays" do
253
- node.default["array"] = []
254
- expect( node["array"].class ).to eql(Chef::Node::ImmutableArray)
255
- end
256
-
257
- it "returns merged immutable attributes for hashes" do
258
- node.default["h4sh"] = {}
259
- expect( node["h4sh"].class ).to eql(Chef::Node::ImmutableMash)
260
- end
261
-
262
- describe "normal attributes" do
263
- it "should allow you to set an attribute with set, without pre-declaring a hash" do
264
- node.normal[:snoopy][:is_a_puppy] = true
265
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
266
- end
267
-
268
- it "should allow you to set an attribute with set_unless" do
269
- node.normal_unless[:snoopy][:is_a_puppy] = false
270
- expect(node[:snoopy][:is_a_puppy]).to eq(false)
271
- end
272
-
273
- it "should not allow you to set an attribute with set_unless if it already exists" do
274
- node.normal[:snoopy][:is_a_puppy] = true
275
- node.normal_unless[:snoopy][:is_a_puppy] = false
276
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
277
- end
278
-
279
- it "should allow you to set an attribute with set_unless if is a nil value" do
280
- node.attributes.normal = { snoopy: { is_a_puppy: nil } }
281
- node.normal_unless[:snoopy][:is_a_puppy] = false
282
- expect(node[:snoopy][:is_a_puppy]).to eq(false)
283
- end
284
-
285
- it "should allow you to set a value after a set_unless" do
286
- # this tests for set_unless_present state bleeding between statements CHEF-3806
287
- node.normal_unless[:snoopy][:is_a_puppy] = false
288
- node.normal[:snoopy][:is_a_puppy] = true
289
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
290
- end
291
-
292
- it "should let you set a value after a 'dangling' set_unless" do
293
- # this tests for set_unless_present state bleeding between statements CHEF-3806
294
- node.normal[:snoopy][:is_a_puppy] = "what"
295
- node.normal_unless[:snoopy][:is_a_puppy]
296
- node.normal[:snoopy][:is_a_puppy] = true
297
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
298
- end
299
-
300
- it "should let you use tag as a convince method for the tags attribute" do
301
- node.normal["tags"] = %w{one two}
302
- node.tag("three", "four")
303
- expect(node["tags"]).to eq(%w{one two three four})
304
- end
305
-
306
- it "should let you use untag as a convince method for the tags attribute" do
307
- node.normal["tags"] = %w{one two three four}
308
- node.untag("three", "four")
309
- expect(node["tags"]).to eq(%w{one two})
310
- end
311
-
312
- it "normal_unless sets a value even if default or override attrs are set" do
313
- node.default[:decontamination] = true
314
- node.override[:decontamination] = false
315
- node.normal_unless[:decontamination] = "foo"
316
- expect(node.normal[:decontamination]).to eql("foo")
317
- end
318
-
319
- it "default_unless sets a value even if normal or override attrs are set" do
320
- node.normal[:decontamination] = true
321
- node.override[:decontamination] = false
322
- node.default_unless[:decontamination] = "foo"
323
- expect(node.default[:decontamination]).to eql("foo")
324
- end
325
-
326
- it "override_unless sets a value even if default or normal attrs are set" do
327
- node.default[:decontamination] = true
328
- node.normal[:decontamination] = false
329
- node.override_unless[:decontamination] = "foo"
330
- expect(node.override[:decontamination]).to eql("foo")
331
- end
332
-
333
- it "consume_attributes does not exhibit chef/chef/issues/6302 bug" do
334
- node.normal["a"]["r1"] = nil
335
- node.consume_attributes({ "a" => { "r2" => nil } })
336
- expect(node["a"]["r1"]).to be_nil
337
- expect(node["a"]["r2"]).to be_nil
338
- end
339
- end
340
-
341
- describe "default attributes" do
342
- it "should be set with default, without pre-declaring a hash" do
343
- node.default[:snoopy][:is_a_puppy] = true
344
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
345
- end
346
-
347
- it "should allow you to set with default_unless without pre-declaring a hash" do
348
- node.default_unless[:snoopy][:is_a_puppy] = false
349
- expect(node[:snoopy][:is_a_puppy]).to eq(false)
350
- end
351
-
352
- it "should not allow you to set an attribute with default_unless if it already exists" do
353
- node.default[:snoopy][:is_a_puppy] = true
354
- node.default_unless[:snoopy][:is_a_puppy] = false
355
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
356
- end
357
-
358
- it "should allow you to set a value after a default_unless" do
359
- # this tests for set_unless_present state bleeding between statements CHEF-3806
360
- node.default_unless[:snoopy][:is_a_puppy] = false
361
- node.default[:snoopy][:is_a_puppy] = true
362
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
363
- end
364
-
365
- it "should allow you to set a value after a 'dangling' default_unless" do
366
- # this tests for set_unless_present state bleeding between statements CHEF-3806
367
- node.default[:snoopy][:is_a_puppy] = "what"
368
- node.default_unless[:snoopy][:is_a_puppy]
369
- node.default[:snoopy][:is_a_puppy] = true
370
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
371
- end
372
-
373
- it "does not exhibit chef/chef/issues/5005 bug" do
374
- node.env_default["a"]["r1"]["g"]["u"] = "u1"
375
- node.default_unless["a"]["r1"]["g"]["r"] = "r"
376
- expect(node["a"]["r1"]["g"]["u"]).to eql("u1")
377
- end
378
-
379
- it "default_unless correctly resets the deep merge cache" do
380
- node.normal["tags"] = [] # this sets our top-level breadcrumb
381
- node.default_unless["foo"]["bar"] = "NK-19V"
382
- expect(node["foo"]["bar"]).to eql("NK-19V")
383
- node.default_unless["foo"]["baz"] = "NK-33"
384
- expect(node["foo"]["baz"]).to eql("NK-33")
385
- end
386
-
387
- it "normal_unless correctly resets the deep merge cache" do
388
- node.normal["tags"] = [] # this sets our top-level breadcrumb
389
- node.normal_unless["foo"]["bar"] = "NK-19V"
390
- expect(node["foo"]["bar"]).to eql("NK-19V")
391
- node.normal_unless["foo"]["baz"] = "NK-33"
392
- expect(node["foo"]["baz"]).to eql("NK-33")
393
- end
394
-
395
- it "override_unless correctly resets the deep merge cache" do
396
- node.normal["tags"] = [] # this sets our top-level breadcrumb
397
- node.override_unless["foo"]["bar"] = "NK-19V"
398
- expect(node["foo"]["bar"]).to eql("NK-19V")
399
- node.override_unless["foo"]["baz"] = "NK-33"
400
- expect(node["foo"]["baz"]).to eql("NK-33")
401
- end
402
- end
403
-
404
- describe "override attributes" do
405
- it "should be set with override, without pre-declaring a hash" do
406
- node.override[:snoopy][:is_a_puppy] = true
407
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
408
- end
409
-
410
- it "should allow you to set with override_unless without pre-declaring a hash" do
411
- node.override_unless[:snoopy][:is_a_puppy] = false
412
- expect(node[:snoopy][:is_a_puppy]).to eq(false)
413
- end
414
-
415
- it "should not allow you to set an attribute with override_unless if it already exists" do
416
- node.override[:snoopy][:is_a_puppy] = true
417
- node.override_unless[:snoopy][:is_a_puppy] = false
418
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
419
- end
420
-
421
- it "should allow you to set a value after an override_unless" do
422
- # this tests for set_unless_present state bleeding between statements CHEF-3806
423
- node.override_unless[:snoopy][:is_a_puppy] = false
424
- node.override[:snoopy][:is_a_puppy] = true
425
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
426
- end
427
-
428
- it "should allow you to set a value after a 'dangling' override_unless" do
429
- # this tests for set_unless_present state bleeding between statements CHEF-3806
430
- node.override_unless[:snoopy][:is_a_puppy] = "what"
431
- node.override_unless[:snoopy][:is_a_puppy]
432
- node.override[:snoopy][:is_a_puppy] = true
433
- expect(node[:snoopy][:is_a_puppy]).to eq(true)
434
- end
435
- end
436
-
437
- describe "globally deleting attributes" do
438
- context "with hash values" do
439
- before do
440
- node.role_default["mysql"]["server"]["port"] = 1234
441
- node.normal["mysql"]["server"]["port"] = 2345
442
- node.override["mysql"]["server"]["port"] = 3456
443
- end
444
-
445
- it "deletes all the values and returns the value with the highest precedence" do
446
- expect( node.rm("mysql", "server", "port") ).to eql(3456)
447
- expect( node["mysql"]["server"]["port"] ).to be_nil
448
- expect( node["mysql"]["server"] ).to eql({})
449
- end
450
-
451
- it "deletes nested things correctly" do
452
- node.default["mysql"]["client"]["client_setting"] = "foo"
453
- expect( node.rm("mysql", "server") ).to eql( { "port" => 3456 } )
454
- expect( node["mysql"] ).to eql( { "client" => { "client_setting" => "foo" } } )
455
- end
456
-
457
- it "returns nil if the node attribute does not exist" do
458
- expect( node.rm("no", "such", "thing") ).to be_nil
459
- end
460
-
461
- it "can delete the entire tree" do
462
- expect( node.rm("mysql") ).to eql({ "server" => { "port" => 3456 } })
463
- end
464
- end
465
-
466
- context "when trying to delete through a thing that isn't an array-like or hash-like object" do
467
- before do
468
- node.default["mysql"] = true
469
- end
470
-
471
- it "returns nil when you're two levels deeper" do
472
- expect( node.rm("mysql", "server", "port") ).to eql(nil)
473
- end
474
-
475
- it "returns nil when you're one level deeper" do
476
- expect( node.rm("mysql", "server") ).to eql(nil)
477
- end
478
-
479
- it "correctly deletes at the top level" do
480
- expect( node.rm("mysql") ).to eql(true)
481
- end
482
- end
483
-
484
- context "with array indexes" do
485
- before do
486
- node.role_default["mysql"]["server"][0]["port"] = 1234
487
- node.normal["mysql"]["server"][0]["port"] = 2345
488
- node.override["mysql"]["server"][0]["port"] = 3456
489
- node.override["mysql"]["server"][1]["port"] = 3456
490
- end
491
-
492
- it "deletes the array element" do
493
- expect( node.rm("mysql", "server", 0, "port") ).to eql(3456)
494
- expect( node["mysql"]["server"][0]["port"] ).to be_nil
495
- expect( node["mysql"]["server"][1]["port"] ).to eql(3456)
496
- end
497
- end
498
-
499
- context "with real arrays" do
500
- before do
501
- node.role_default["mysql"]["server"] = [ {
502
- "port" => 1234,
503
- } ]
504
- node.normal["mysql"]["server"] = [ {
505
- "port" => 2345,
506
- } ]
507
- node.override["mysql"]["server"] = [ {
508
- "port" => 3456,
509
- } ]
510
- end
511
-
512
- it "deletes the array element" do
513
- expect( node.rm("mysql", "server", 0, "port") ).to eql(3456)
514
- expect( node["mysql"]["server"][0]["port"] ).to be_nil
515
- end
516
-
517
- it "when mistaking arrays for hashes, it considers the value removed and does nothing" do
518
- node.rm("mysql", "server", "port")
519
- expect(node["mysql"]["server"][0]["port"]).to eql(3456)
520
- end
521
- end
522
- end
523
-
524
- describe "granular deleting attributes" do
525
- context "when only defaults exist" do
526
- before do
527
- node.role_default["mysql"]["server"]["port"] = 1234
528
- node.default["mysql"]["server"]["port"] = 2345
529
- node.force_default["mysql"]["server"]["port"] = 3456
530
- end
531
-
532
- it "returns the deleted values" do
533
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
534
- end
535
-
536
- it "returns nil for the combined attributes" do
537
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
538
- expect( node["mysql"]["server"]["port"] ).to eql(nil)
539
- end
540
-
541
- it "returns an empty hash for the default attrs" do
542
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
543
- # this auto-vivifies, should it?
544
- expect( node.default_attrs["mysql"]["server"]["port"] ).to eql({})
545
- end
546
-
547
- it "returns an empty hash after the last key is deleted" do
548
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
549
- expect( node["mysql"]["server"] ).to eql({})
550
- end
551
- end
552
-
553
- context "when trying to delete through a thing that isn't an array-like or hash-like object" do
554
- before do
555
- node.default["mysql"] = true
556
- end
557
-
558
- it "returns nil when you're two levels deeper" do
559
- expect( node.rm_default("mysql", "server", "port") ).to eql(nil)
560
- end
561
-
562
- it "returns nil when you're one level deeper" do
563
- expect( node.rm_default("mysql", "server") ).to eql(nil)
564
- end
565
-
566
- it "correctly deletes at the top level" do
567
- expect( node.rm_default("mysql") ).to eql(true)
568
- end
569
- end
570
-
571
- context "when a higher precedence exists" do
572
- before do
573
- node.role_default["mysql"]["server"]["port"] = 1234
574
- node.default["mysql"]["server"]["port"] = 2345
575
- node.force_default["mysql"]["server"]["port"] = 3456
576
-
577
- node.override["mysql"]["server"]["port"] = 9999
578
- end
579
-
580
- it "returns the deleted values" do
581
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
582
- end
583
-
584
- it "returns the higher precedence values after the delete" do
585
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
586
- expect( node["mysql"]["server"]["port"] ).to eql(9999)
587
- end
588
-
589
- it "returns an empty has for the default attrs" do
590
- expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
591
- # this auto-vivifies, should it?
592
- expect( node.default_attrs["mysql"]["server"]["port"] ).to eql({})
593
- end
594
- end
595
-
596
- context "when a lower precedence exists" do
597
- before do
598
- node.default["mysql"]["server"]["port"] = 2345
599
- node.override["mysql"]["server"]["port"] = 9999
600
- node.role_override["mysql"]["server"]["port"] = 9876
601
- node.force_override["mysql"]["server"]["port"] = 6669
602
- end
603
-
604
- it "returns the deleted values" do
605
- expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
606
- end
607
-
608
- it "returns the lower precedence levels after the delete" do
609
- expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
610
- expect( node["mysql"]["server"]["port"] ).to eql(2345)
611
- end
612
-
613
- it "returns an empty has for the override attrs" do
614
- expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
615
- # this auto-vivifies, should it?
616
- expect( node.override_attrs["mysql"]["server"]["port"] ).to eql({})
617
- end
618
- end
619
-
620
- it "rm_default returns nil on deleting non-existent values" do
621
- expect( node.rm_default("no", "such", "thing") ).to be_nil
622
- end
623
-
624
- it "rm_normal returns nil on deleting non-existent values" do
625
- expect( node.rm_normal("no", "such", "thing") ).to be_nil
626
- end
627
-
628
- it "rm_override returns nil on deleting non-existent values" do
629
- expect( node.rm_override("no", "such", "thing") ).to be_nil
630
- end
631
- end
632
-
633
- describe "granular replacing attributes" do
634
- it "removes everything at the level of the last key" do
635
- node.default["mysql"]["server"]["port"] = 2345
636
-
637
- node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
638
-
639
- expect( node["mysql"]["server"] ).to eql({ "data_dir" => "/my_raid_volume/lib/mysql" })
640
- end
641
-
642
- it "replaces a value at the cookbook sub-level of the attributes only" do
643
- node.default["mysql"]["server"]["port"] = 2345
644
- node.default["mysql"]["server"]["service_name"] = "fancypants-sql"
645
- node.role_default["mysql"]["server"]["port"] = 1234
646
- node.force_default["mysql"]["server"]["port"] = 3456
647
-
648
- node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
649
-
650
- expect( node["mysql"]["server"]["port"] ).to eql(3456)
651
- expect( node["mysql"]["server"]["service_name"] ).to be_nil
652
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
653
- expect( node["mysql"]["server"] ).to eql({ "port" => 3456, "data_dir" => "/my_raid_volume/lib/mysql" })
654
- end
655
-
656
- it "higher precedence values aren't removed" do
657
- node.role_default["mysql"]["server"]["port"] = 1234
658
- node.default["mysql"]["server"]["port"] = 2345
659
- node.force_default["mysql"]["server"]["port"] = 3456
660
- node.override["mysql"]["server"]["service_name"] = "fancypants-sql"
661
-
662
- node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
663
-
664
- expect( node["mysql"]["server"]["port"] ).to eql(3456)
665
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
666
- expect( node["mysql"]["server"] ).to eql({ "service_name" => "fancypants-sql", "port" => 3456, "data_dir" => "/my_raid_volume/lib/mysql" })
667
- end
668
- end
669
-
670
- describe "granular force replacing attributes" do
671
- it "removes everything at the level of the last key" do
672
- node.force_default["mysql"]["server"]["port"] = 2345
673
-
674
- node.force_default!["mysql"]["server"] = {
675
- "data_dir" => "/my_raid_volume/lib/mysql",
676
- }
677
-
678
- expect( node["mysql"]["server"] ).to eql({
679
- "data_dir" => "/my_raid_volume/lib/mysql",
680
- })
681
- end
682
-
683
- it "removes all values from the precedence level when setting" do
684
- node.role_default["mysql"]["server"]["port"] = 1234
685
- node.default["mysql"]["server"]["port"] = 2345
686
- node.force_default["mysql"]["server"]["port"] = 3456
687
-
688
- node.force_default!["mysql"]["server"] = {
689
- "data_dir" => "/my_raid_volume/lib/mysql",
690
- }
691
-
692
- expect( node["mysql"]["server"]["port"] ).to be_nil
693
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
694
- expect( node["mysql"]["server"] ).to eql({
695
- "data_dir" => "/my_raid_volume/lib/mysql",
696
- })
697
- end
698
-
699
- it "higher precedence levels are not removed" do
700
- node.role_default["mysql"]["server"]["port"] = 1234
701
- node.default["mysql"]["server"]["port"] = 2345
702
- node.force_default["mysql"]["server"]["port"] = 3456
703
- node.override["mysql"]["server"]["service_name"] = "fancypants-sql"
704
-
705
- node.force_default!["mysql"]["server"] = {
706
- "data_dir" => "/my_raid_volume/lib/mysql",
707
- }
708
-
709
- expect( node["mysql"]["server"]["port"] ).to be_nil
710
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
711
- expect( node["mysql"]["server"] ).to eql({
712
- "service_name" => "fancypants-sql",
713
- "data_dir" => "/my_raid_volume/lib/mysql",
714
- })
715
- end
716
-
717
- it "will autovivify" do
718
- node.force_default!["mysql"]["server"] = {
719
- "data_dir" => "/my_raid_volume/lib/mysql",
720
- }
721
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
722
- end
723
-
724
- it "lower precedence levels aren't removed" do
725
- node.role_override["mysql"]["server"]["port"] = 1234
726
- node.override["mysql"]["server"]["port"] = 2345
727
- node.force_override["mysql"]["server"]["port"] = 3456
728
- node.default["mysql"]["server"]["service_name"] = "fancypants-sql"
729
-
730
- node.force_override!["mysql"]["server"] = {
731
- "data_dir" => "/my_raid_volume/lib/mysql",
732
- }
733
-
734
- expect( node["mysql"]["server"]["port"] ).to be_nil
735
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
736
- expect( node["mysql"]["server"] ).to eql({
737
- "service_name" => "fancypants-sql",
738
- "data_dir" => "/my_raid_volume/lib/mysql",
739
- })
740
- end
741
-
742
- it "when overwriting a non-hash/array" do
743
- node.override["mysql"] = false
744
- node.force_override["mysql"] = true
745
- node.force_override!["mysql"]["server"] = {
746
- "data_dir" => "/my_raid_volume/lib/mysql",
747
- }
748
- expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
749
- end
750
-
751
- it "when overwriting an array with a hash" do
752
- node.force_override["mysql"][0] = true
753
- node.force_override!["mysql"]["server"] = {
754
- "data_dir" => "/my_raid_volume/lib/mysql",
755
- }
756
- expect( node["mysql"]["server"] ).to eql({
757
- "data_dir" => "/my_raid_volume/lib/mysql",
758
- })
759
- end
760
- end
761
-
762
- # In Chef-12.0 there is a deep_merge cache on the top level attribute which had a bug
763
- # where it cached node[:foo] separate from node['foo']. These tests exercise those edge conditions.
764
- #
765
- # https://github.com/chef/chef/issues/2700
766
- # https://github.com/chef/chef/issues/2712
767
- # https://github.com/chef/chef/issues/2745
768
- #
769
- describe "deep merge attribute cache edge conditions" do
770
- it "does not error with complicated attribute substitution" do
771
- node.default["chef_attribute_hell"]["attr1"] = "attribute1"
772
- node.default["chef_attribute_hell"]["attr2"] = "#{node[:chef_attribute_hell][:attr1]}/attr2"
773
- expect { node.default["chef_attribute_hell"]["attr3"] = "#{node[:chef_attribute_hell][:attr2]}/attr3" }.not_to raise_error
774
- end
775
-
776
- it "caches both strings and symbols correctly" do
777
- node.force_default[:solr][:version] = "4.10.2"
778
- node.force_default[:solr][:data_dir] = "/opt/solr-#{node["solr"][:version]}/example/solr"
779
- node.force_default[:solr][:xms] = "512M"
780
- expect(node[:solr][:xms]).to eql("512M")
781
- expect(node["solr"][:xms]).to eql("512M")
782
- end
783
-
784
- it "method interpolation syntax also works" do
785
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
786
- node.default["passenger"]["version"] = "4.0.57"
787
- node.default["passenger"]["root_path"] = "passenger-#{node["passenger"]["version"]}"
788
- node.default["passenger"]["root_path_2"] = "passenger-#{node[:passenger]["version"]}"
789
- expect(node["passenger"]["root_path_2"]).to eql("passenger-4.0.57")
790
- expect(node[:passenger]["root_path_2"]).to eql("passenger-4.0.57")
791
- end
792
- end
793
-
794
- it "should raise an ArgumentError if you ask for an attribute that doesn't exist via method_missing" do
795
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
796
- expect { node.sunshine }.to raise_error(NoMethodError)
797
- end
798
-
799
- it "should allow you to iterate over attributes with each_attribute" do
800
- node.default["sunshine"] = "is bright"
801
- node.default["canada"] = "is a nice place"
802
- seen_attributes = {}
803
- node.each_attribute do |a, v|
804
- seen_attributes[a] = v
805
- end
806
- expect(seen_attributes).to have_key("sunshine")
807
- expect(seen_attributes).to have_key("canada")
808
- expect(seen_attributes["sunshine"]).to eq("is bright")
809
- expect(seen_attributes["canada"]).to eq("is a nice place")
810
- end
811
-
812
- describe "functional attribute API" do
813
- # deeper functional testing of this API is in the VividMash spec tests
814
- it "should have an exist? function" do
815
- node.default["foo"]["bar"] = "baz"
816
- expect(node.exist?("foo", "bar")).to be true
817
- expect(node.exist?("bar", "foo")).to be false
818
- end
819
-
820
- it "should have a read function" do
821
- node.override["foo"]["bar"] = "baz"
822
- expect(node.read("foo", "bar")).to eql("baz")
823
- expect(node.read("bar", "foo")).to eql(nil)
824
- end
825
-
826
- it "should have a read! function" do
827
- node.override["foo"]["bar"] = "baz"
828
- expect(node.read!("foo", "bar")).to eql("baz")
829
- expect { node.read!("bar", "foo") }.to raise_error(Chef::Exceptions::NoSuchAttribute)
830
- end
831
-
832
- it "delegates write(:level) to node.level.write()" do
833
- node.write(:default, "foo", "bar", "baz")
834
- expect(node.default["foo"]["bar"]).to eql("baz")
835
- end
836
-
837
- it "delegates write!(:level) to node.level.write!()" do
838
- node.write!(:default, "foo", "bar", "baz")
839
- expect(node.default["foo"]["bar"]).to eql("baz")
840
- node.default["bar"] = true
841
- expect { node.write!(:default, "bar", "foo", "baz") }.to raise_error(Chef::Exceptions::AttributeTypeMismatch)
842
- end
843
-
844
- it "delegates unlink(:level) to node.level.unlink()" do
845
- node.default["foo"]["bar"] = "baz"
846
- expect(node.unlink(:default, "foo", "bar")).to eql("baz")
847
- expect(node.unlink(:default, "bar", "foo")).to eql(nil)
848
- end
849
-
850
- it "delegates unlink!(:level) to node.level.unlink!()" do
851
- node.default["foo"]["bar"] = "baz"
852
- expect(node.unlink!(:default, "foo", "bar")).to eql("baz")
853
- expect { node.unlink!(:default, "bar", "foo") }.to raise_error(Chef::Exceptions::NoSuchAttribute)
854
- end
855
- end
856
- end
857
-
858
- describe "consuming json" do
859
-
860
- before do
861
- @ohai_data = { platform: "foo", platform_version: "bar" }
862
- end
863
-
864
- it "consumes the run list portion of a collection of attributes and returns the remainder" do
865
- attrs = { "run_list" => [ "role[base]", "recipe[chef::server]" ], "foo" => "bar" }
866
- expect(node.consume_run_list(attrs)).to eq({ "foo" => "bar" })
867
- expect(node.run_list).to eq([ "role[base]", "recipe[chef::server]" ])
868
- end
869
-
870
- it "sets the node chef_environment" do
871
- attrs = { "chef_environment" => "foo_environment", "bar" => "baz" }
872
- expect(node.consume_chef_environment(attrs)).to eq({ "bar" => "baz" })
873
- expect(node.chef_environment).to eq("foo_environment")
874
- expect(node["chef_environment"]).to be nil
875
- end
876
-
877
- it "should overwrites the run list with the run list it consumes" do
878
- node.consume_run_list "recipes" => %w{one two}
879
- node.consume_run_list "recipes" => [ "three" ]
880
- expect(node.run_list).to eq([ "three" ])
881
- end
882
-
883
- it "should not add duplicate recipes from the json attributes" do
884
- node.run_list << "one"
885
- node.consume_run_list "recipes" => %w{one two three}
886
- expect(node.run_list).to eq(%w{one two three})
887
- end
888
-
889
- it "doesn't change the run list if no run_list is specified in the json" do
890
- node.run_list << "role[database]"
891
- node.consume_run_list "foo" => "bar"
892
- expect(node.run_list).to eq(["role[database]"])
893
- end
894
-
895
- it "raises an exception if you provide both recipe and run_list attributes, since this is ambiguous" do
896
- expect { node.consume_run_list "recipes" => "stuff", "run_list" => "other_stuff" }.to raise_error(Chef::Exceptions::AmbiguousRunlistSpecification)
897
- end
898
-
899
- it "should add json attributes to the node" do
900
- node.consume_external_attrs(@ohai_data, { "one" => "two", "three" => "four" })
901
- expect(node["one"]).to eql("two")
902
- expect(node["three"]).to eql("four")
903
- end
904
-
905
- it "should set the tags attribute to an empty array if it is not already defined" do
906
- node.consume_external_attrs(@ohai_data, {})
907
- expect(node.tags).to eql([])
908
- end
909
-
910
- it "should not set the tags attribute to an empty array if it is already defined" do
911
- node.tag("radiohead")
912
- node.consume_external_attrs(@ohai_data, {})
913
- expect(node.tags).to eql([ "radiohead" ])
914
- end
915
-
916
- it "should set the tags attribute to an empty array if it is nil" do
917
- node.attributes.normal = { "tags" => nil }
918
- node.consume_external_attrs(@ohai_data, {})
919
- expect(node.tags).to eql([])
920
- end
921
-
922
- it "should return an array if it is fed a string" do
923
- node.normal[:tags] = "string"
924
- node.consume_external_attrs(@ohai_data, {})
925
- expect(node.tags).to eql(["string"])
926
- end
927
-
928
- it "should return an array if it is fed a hash" do
929
- node.normal[:tags] = {}
930
- node.consume_external_attrs(@ohai_data, {})
931
- expect(node.tags).to eql([])
932
- end
933
-
934
- it "deep merges attributes instead of overwriting them" do
935
- node.consume_external_attrs(@ohai_data, "one" => { "two" => { "three" => "four" } })
936
- expect(node["one"].to_hash).to eq({ "two" => { "three" => "four" } })
937
- node.consume_external_attrs(@ohai_data, "one" => { "abc" => "123" })
938
- node.consume_external_attrs(@ohai_data, "one" => { "two" => { "foo" => "bar" } })
939
- expect(node["one"].to_hash).to eq({ "two" => { "three" => "four", "foo" => "bar" }, "abc" => "123" })
940
- end
941
-
942
- it "gives attributes from JSON priority when deep merging" do
943
- node.consume_external_attrs(@ohai_data, "one" => { "two" => { "three" => "four" } })
944
- expect(node["one"].to_hash).to eq({ "two" => { "three" => "four" } })
945
- node.consume_external_attrs(@ohai_data, "one" => { "two" => { "three" => "forty-two" } })
946
- expect(node["one"].to_hash).to eq({ "two" => { "three" => "forty-two" } })
947
- end
948
-
949
- it "converts the platform_version to a Chef::VersionString" do
950
- node.consume_external_attrs(@ohai_data, {})
951
- expect(node["platform_version"]).to be_kind_of(Chef::VersionString)
952
- end
953
- end
954
-
955
- describe "merging ohai data" do
956
- before do
957
- @ohai_data = { platform: "foo", platform_version: "bar" }
958
- end
959
-
960
- it "converts the platform_version to a Chef::VersionString" do
961
- node.consume_external_attrs(@ohai_data, {})
962
- node.consume_ohai_data({ "platform_version" => "6.3" })
963
- expect(node["platform_version"]).to be_kind_of(Chef::VersionString)
964
- expect(node["platform_version"] =~ "~> 6.1").to be true
965
- end
966
- end
967
-
968
- describe "preparing for a chef client run" do
969
- before do
970
- @ohai_data = { platform: "foobuntu", platform_version: "23.42" }
971
- end
972
-
973
- it "sets its platform according to platform detection" do
974
- node.consume_external_attrs(@ohai_data, {})
975
- expect(node.automatic_attrs[:platform]).to eq("foobuntu")
976
- expect(node.automatic_attrs[:platform_version]).to eq("23.42")
977
- end
978
-
979
- it "consumes the run list from provided json attributes" do
980
- node.consume_external_attrs(@ohai_data, { "run_list" => ["recipe[unicorn]"] })
981
- expect(node.run_list).to eq(["recipe[unicorn]"])
982
- end
983
-
984
- it "saves non-runlist json attrs for later" do
985
- expansion = Chef::RunList::RunListExpansion.new("_default", [])
986
- allow(node.run_list).to receive(:expand).and_return(expansion)
987
- node.consume_external_attrs(@ohai_data, { "foo" => "bar" })
988
- node.expand!
989
- expect(node.normal_attrs).to eq({ "foo" => "bar", "tags" => [] })
990
- end
991
-
992
- it "converts the platform_version to a Chef::VersionString" do
993
- node.consume_external_attrs(@ohai_data, {})
994
- expect(node.automatic_attrs[:platform_version]).to be_a_kind_of(Chef::VersionString)
995
- expect(node[:platform_version]).to be_a_kind_of(Chef::VersionString)
996
- expect(node[:platform_version] =~ "~> 23.6").to be true
997
- end
998
-
999
- end
1000
-
1001
- describe "when expanding its run list and merging attributes" do
1002
- before do
1003
- @environment = Chef::Environment.new.tap do |e|
1004
- e.name("rspec_env")
1005
- e.default_attributes("env default key" => "env default value")
1006
- e.override_attributes("env override key" => "env override value")
1007
- end
1008
- expect(Chef::Environment).to receive(:load).with("rspec_env").and_return(@environment)
1009
- @expansion = Chef::RunList::RunListExpansion.new("rspec_env", [])
1010
- node.chef_environment("rspec_env")
1011
- allow(node.run_list).to receive(:expand).and_return(@expansion)
1012
- end
1013
-
1014
- it "sets the 'recipes' automatic attribute to the recipes in the expanded run_list" do
1015
- @expansion.recipes << "recipe[chef::client]" << "recipe[nginx::default]"
1016
- node.expand!
1017
- expect(node.automatic_attrs[:recipes]).to eq(["recipe[chef::client]", "recipe[nginx::default]"])
1018
- end
1019
-
1020
- it "sets the 'roles' automatic attribute to the expanded role list" do
1021
- @expansion.instance_variable_set(:@applied_roles, { "arf" => nil, "countersnark" => nil })
1022
- node.expand!
1023
- expect(node.automatic_attrs[:roles].sort).to eq(%w{arf countersnark})
1024
- end
1025
-
1026
- it "applies default attributes from the environment as environment defaults" do
1027
- node.expand!
1028
- expect(node.attributes.env_default["env default key"]).to eq("env default value")
1029
- end
1030
-
1031
- it "applies override attributes from the environment as env overrides" do
1032
- node.expand!
1033
- expect(node.attributes.env_override["env override key"]).to eq("env override value")
1034
- end
1035
-
1036
- it "applies default attributes from roles as role defaults" do
1037
- @expansion.default_attrs["role default key"] = "role default value"
1038
- node.expand!
1039
- expect(node.attributes.role_default["role default key"]).to eq("role default value")
1040
- end
1041
-
1042
- it "applies override attributes from roles as role overrides" do
1043
- @expansion.override_attrs["role override key"] = "role override value"
1044
- node.expand!
1045
- expect(node.attributes.role_override["role override key"]).to eq("role override value")
1046
- end
1047
- end
1048
-
1049
- describe "loaded_recipe" do
1050
- it "should not add a recipe that is already in the recipes list" do
1051
- node.automatic_attrs[:recipes] = [ "nginx::module" ]
1052
- node.loaded_recipe(:nginx, "module")
1053
- expect(node.automatic_attrs[:recipes].length).to eq(1)
1054
- end
1055
-
1056
- it "should add a recipe that is not already in the recipes list" do
1057
- node.automatic_attrs[:recipes] = [ "nginx::other_module" ]
1058
- node.loaded_recipe(:nginx, "module")
1059
- expect(node.automatic_attrs[:recipes].length).to eq(2)
1060
- expect(node.recipe?("nginx::module")).to be true
1061
- expect(node.recipe?("nginx::other_module")).to be true
1062
- end
1063
- end
1064
-
1065
- describe "when querying for recipes in the run list" do
1066
- context "when a recipe is in the top level run list" do
1067
- before do
1068
- node.run_list << "recipe[nginx::module]"
1069
- end
1070
-
1071
- it "finds the recipe" do
1072
- expect(node.recipe?("nginx::module")).to be true
1073
- end
1074
-
1075
- it "does not find a recipe not in the run list" do
1076
- expect(node.recipe?("nginx::other_module")).to be false
1077
- end
1078
- end
1079
- context "when a recipe is in the expanded run list only" do
1080
- before do
1081
- node.run_list << "role[base]"
1082
- node.automatic_attrs[:recipes] = [ "nginx::module" ]
1083
- end
1084
-
1085
- it "finds a recipe in the expanded run list" do
1086
- expect(node.recipe?("nginx::module")).to be true
1087
- end
1088
-
1089
- it "does not find a recipe that's not in the run list" do
1090
- expect(node.recipe?("nginx::other_module")).to be false
1091
- end
1092
- end
1093
- end
1094
-
1095
- describe "when clearing computed state at the beginning of a run" do
1096
- before do
1097
- node.default[:foo] = "default"
1098
- node.normal[:foo] = "normal"
1099
- node.override[:foo] = "override"
1100
- node.reset_defaults_and_overrides
1101
- end
1102
-
1103
- it "removes default attributes" do
1104
- expect(node.default).to be_empty
1105
- end
1106
-
1107
- it "removes override attributes" do
1108
- expect(node.override).to be_empty
1109
- end
1110
-
1111
- it "leaves normal level attributes untouched" do
1112
- expect(node[:foo]).to eq("normal")
1113
- end
1114
-
1115
- end
1116
-
1117
- describe "when merging environment attributes" do
1118
- before do
1119
- node.chef_environment = "rspec"
1120
- @expansion = Chef::RunList::RunListExpansion.new("rspec", [])
1121
- @expansion.default_attrs.replace({ default: "from role", d_role: "role only" })
1122
- @expansion.override_attrs.replace({ override: "from role", o_role: "role only" })
1123
-
1124
- @environment = Chef::Environment.new
1125
- @environment.default_attributes = { default: "from env", d_env: "env only" }
1126
- @environment.override_attributes = { override: "from env", o_env: "env only" }
1127
- allow(Chef::Environment).to receive(:load).and_return(@environment)
1128
- node.apply_expansion_attributes(@expansion)
1129
- end
1130
-
1131
- it "does not nuke role-only default attrs" do
1132
- expect(node[:d_role]).to eq("role only")
1133
- end
1134
-
1135
- it "does not nuke role-only override attrs" do
1136
- expect(node[:o_role]).to eq("role only")
1137
- end
1138
-
1139
- it "does not nuke env-only default attrs" do
1140
- expect(node[:o_env]).to eq("env only")
1141
- end
1142
-
1143
- it "does not nuke role-only override attrs" do
1144
- expect(node[:o_env]).to eq("env only")
1145
- end
1146
-
1147
- it "gives role defaults precedence over env defaults" do
1148
- expect(node[:default]).to eq("from role")
1149
- end
1150
-
1151
- it "gives env overrides precedence over role overrides" do
1152
- expect(node[:override]).to eq("from env")
1153
- end
1154
- end
1155
-
1156
- describe "when evaluating attributes files" do
1157
- before do
1158
- @cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
1159
- @cookbook_loader = Chef::CookbookLoader.new(@cookbook_repo)
1160
- @cookbook_loader.load_cookbooks
1161
-
1162
- @cookbook_collection = Chef::CookbookCollection.new(@cookbook_loader.cookbooks_by_name)
1163
-
1164
- @events = Chef::EventDispatch::Dispatcher.new
1165
- @run_context = Chef::RunContext.new(node, @cookbook_collection, @events)
1166
-
1167
- node.include_attribute("openldap::default")
1168
- node.include_attribute("openldap::smokey")
1169
- end
1170
-
1171
- it "sets attributes from the files" do
1172
- expect(node["ldap_server"]).to eql("ops1prod")
1173
- expect(node["ldap_basedn"]).to eql("dc=hjksolutions,dc=com")
1174
- expect(node["ldap_replication_password"]).to eql("forsure")
1175
- expect(node["smokey"]).to eql("robinson")
1176
- end
1177
-
1178
- it "gives a sensible error when attempting to load a missing attributes file" do
1179
- expect { node.include_attribute("nope-this::doesnt-exist") }.to raise_error(Chef::Exceptions::CookbookNotFound)
1180
- end
1181
- end
1182
-
1183
- describe "roles" do
1184
- it "should allow you to query whether or not it has a recipe applied with role?" do
1185
- node.automatic["roles"] = %w{sunrise}
1186
- expect(node.role?("sunrise")).to eql(true)
1187
- expect(node.role?("not at home")).to eql(false)
1188
- end
1189
-
1190
- it "should allow you to set roles with arguments" do
1191
- node.automatic["roles"] = %w{one two}
1192
- expect(node.role?("one")).to eql(true)
1193
- expect(node.role?("two")).to eql(true)
1194
- expect(node.role?("three")).to eql(false)
1195
- end
1196
- end
1197
-
1198
- describe "run_list" do
1199
- it "should have a Chef::RunList of recipes and roles that should be applied" do
1200
- expect(node.run_list).to be_a_kind_of(Chef::RunList)
1201
- end
1202
-
1203
- it "should allow you to query the run list with arguments" do
1204
- node.run_list "recipe[baz]"
1205
- expect(node.run_list?("recipe[baz]")).to eql(true)
1206
- end
1207
-
1208
- it "should allow you to set the run list with arguments" do
1209
- node.run_list "recipe[baz]", "role[foo]"
1210
- expect(node.run_list?("recipe[baz]")).to eql(true)
1211
- expect(node.run_list?("role[foo]")).to eql(true)
1212
- end
1213
- end
1214
-
1215
- describe "from file" do
1216
- it "should load a node from a ruby file" do
1217
- node.from_file(File.expand_path(File.join(CHEF_SPEC_DATA, "nodes", "test.rb")))
1218
- expect(node.name).to eql("test.example.com-short")
1219
- expect(node["sunshine"]).to eql("in")
1220
- expect(node["something"]).to eql("else")
1221
- expect(node.run_list).to eq(%w{operations-master operations-monitoring})
1222
- end
1223
-
1224
- it "should raise an exception if the file cannot be found or read" do
1225
- expect { node.from_file("/tmp/monkeydiving") }.to raise_error(IOError)
1226
- end
1227
- end
1228
-
1229
- describe "update_from!" do
1230
- before(:each) do
1231
- node.name("orig")
1232
- node.chef_environment("dev")
1233
- node.default_attrs = { "one" => { "two" => "three", "four" => "five", "eight" => "nine" } }
1234
- node.override_attrs = { "one" => { "two" => "three", "four" => "six" } }
1235
- node.normal_attrs = { "one" => { "two" => "seven" } }
1236
- node.run_list << "role[marxist]"
1237
- node.run_list << "role[leninist]"
1238
- node.run_list << "recipe[stalinist]"
1239
-
1240
- @example = Chef::Node.new
1241
- @example.name("newname")
1242
- @example.chef_environment("prod")
1243
- @example.default_attrs = { "alpha" => { "bravo" => "charlie", "delta" => "echo" } }
1244
- @example.override_attrs = { "alpha" => { "bravo" => "foxtrot", "delta" => "golf" } }
1245
- @example.normal_attrs = { "alpha" => { "bravo" => "hotel" } }
1246
- @example.run_list << "role[comedy]"
1247
- @example.run_list << "role[drama]"
1248
- @example.run_list << "recipe[mystery]"
1249
- end
1250
-
1251
- it "allows update of everything except name" do
1252
- node.update_from!(@example)
1253
- expect(node.name).to eq("orig")
1254
- expect(node.chef_environment).to eq(@example.chef_environment)
1255
- expect(node.default_attrs).to eq(@example.default_attrs)
1256
- expect(node.override_attrs).to eq(@example.override_attrs)
1257
- expect(node.normal_attrs).to eq(@example.normal_attrs)
1258
- expect(node.run_list).to eq(@example.run_list)
1259
- end
1260
-
1261
- it "should not update the name of the node" do
1262
- expect(node).not_to receive(:name).with(@example.name)
1263
- node.update_from!(@example)
1264
- end
1265
- end
1266
-
1267
- describe "to_hash" do
1268
- it "should serialize itself as a hash" do
1269
- node.chef_environment("dev")
1270
- node.default_attrs = { "one" => { "two" => "three", "four" => "five", "eight" => "nine" } }
1271
- node.override_attrs = { "one" => { "two" => "three", "four" => "six" } }
1272
- node.normal_attrs = { "one" => { "two" => "seven" } }
1273
- node.run_list << "role[marxist]"
1274
- node.run_list << "role[leninist]"
1275
- node.run_list << "recipe[stalinist]"
1276
- h = node.to_hash
1277
- expect(h["one"]["two"]).to eq("three")
1278
- expect(h["one"]["four"]).to eq("six")
1279
- expect(h["one"]["eight"]).to eq("nine")
1280
- expect(h["role"]).to be_include("marxist")
1281
- expect(h["role"]).to be_include("leninist")
1282
- expect(h["run_list"]).to be_include("role[marxist]")
1283
- expect(h["run_list"]).to be_include("role[leninist]")
1284
- expect(h["run_list"]).to be_include("recipe[stalinist]")
1285
- expect(h["chef_environment"]).to eq("dev")
1286
- end
1287
-
1288
- it "should return an empty array for empty run_list" do
1289
- expect(node.to_hash["run_list"]).to eq([])
1290
- end
1291
- end
1292
-
1293
- describe "converting to or from json" do
1294
- it "should serialize itself as json", json: true do
1295
- node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1296
- json = Chef::JSONCompat.to_json(node)
1297
- expect(json).to match(/json_class/)
1298
- expect(json).to match(/name/)
1299
- expect(json).to match(/chef_environment/)
1300
- expect(json).to match(/normal/)
1301
- expect(json).to match(/default/)
1302
- expect(json).to match(/override/)
1303
- expect(json).to match(/run_list/)
1304
- end
1305
-
1306
- it "should serialize valid json with a run list", json: true do
1307
- # This test came about because activesupport mucks with Chef json serialization
1308
- # Test should pass with and without Activesupport
1309
- node.run_list << { "type" => "role", "name" => "Cthulu" }
1310
- node.run_list << { "type" => "role", "name" => "Hastur" }
1311
- json = Chef::JSONCompat.to_json(node)
1312
- expect(json).to match(/\"run_list\":\[\"role\[Cthulu\]\",\"role\[Hastur\]\"\]/)
1313
- end
1314
-
1315
- it "should serialize the correct run list", json: true do
1316
- node.run_list << "role[marxist]"
1317
- node.run_list << "role[leninist]"
1318
- node.override_runlist << "role[stalinist]"
1319
- expect(node.run_list).to be_include("role[stalinist]")
1320
- json = Chef::JSONCompat.to_json(node)
1321
- expect(json).to match(/\"run_list\":\[\"role\[marxist\]\",\"role\[leninist\]\"\]/)
1322
- end
1323
-
1324
- it "merges the override components into a combined override object" do
1325
- node.attributes.role_override["role override"] = "role override"
1326
- node.attributes.env_override["env override"] = "env override"
1327
- node_for_json = node.for_json
1328
- expect(node_for_json["override"]["role override"]).to eq("role override")
1329
- expect(node_for_json["override"]["env override"]).to eq("env override")
1330
- end
1331
-
1332
- it "merges the default components into a combined default object" do
1333
- node.attributes.role_default["role default"] = "role default"
1334
- node.attributes.env_default["env default"] = "env default"
1335
- node_for_json = node.for_json
1336
- expect(node_for_json["default"]["role default"]).to eq("role default")
1337
- expect(node_for_json["default"]["env default"]).to eq("env default")
1338
- end
1339
-
1340
- it "should deserialize itself from json", json: true do
1341
- node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1342
- json = Chef::JSONCompat.to_json(node)
1343
- serialized_node = Chef::Node.from_hash(Chef::JSONCompat.parse(json))
1344
- expect(serialized_node).to be_a_kind_of(Chef::Node)
1345
- expect(serialized_node.name).to eql(node.name)
1346
- expect(serialized_node.chef_environment).to eql(node.chef_environment)
1347
- node.each_attribute do |k, v|
1348
- expect(serialized_node[k]).to eql(v)
1349
- end
1350
- expect(serialized_node.run_list).to eq(node.run_list)
1351
- end
1352
-
1353
- context "when policyfile attributes are not present" do
1354
-
1355
- it "does not have a policy_name key in the json" do
1356
- expect(node.for_json.keys).to_not include("policy_name")
1357
- end
1358
-
1359
- it "does not have a policy_group key in the json" do
1360
- expect(node.for_json.keys).to_not include("policy_name")
1361
- end
1362
- end
1363
-
1364
- context "when policyfile attributes are present" do
1365
-
1366
- before do
1367
- node.policy_name = "my-application"
1368
- node.policy_group = "staging"
1369
- end
1370
-
1371
- it "includes policy_name key in the json" do
1372
- expect(node.for_json).to have_key("policy_name")
1373
- expect(node.for_json["policy_name"]).to eq("my-application")
1374
- end
1375
-
1376
- it "includes a policy_group key in the json" do
1377
- expect(node.for_json).to have_key("policy_group")
1378
- expect(node.for_json["policy_group"]).to eq("staging")
1379
- end
1380
-
1381
- it "parses policyfile attributes from JSON" do
1382
- round_tripped_node = Chef::Node.from_hash(node.for_json)
1383
-
1384
- expect(round_tripped_node.policy_name).to eq("my-application")
1385
- expect(round_tripped_node.policy_group).to eq("staging")
1386
- expect(round_tripped_node.chef_environment).to eq("staging")
1387
- end
1388
-
1389
- end
1390
-
1391
- include_examples "to_json equivalent to Chef::JSONCompat.to_json" do
1392
- let(:jsonable) do
1393
- node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1394
- node
1395
- end
1396
- end
1397
- end
1398
-
1399
- describe "to_s" do
1400
- it "should turn into a string like node[name]" do
1401
- node.name("airplane")
1402
- expect(node.to_s).to eql("node[airplane]")
1403
- end
1404
- end
1405
-
1406
- describe "api model" do
1407
- before(:each) do
1408
- @rest = double("Chef::ServerAPI")
1409
- allow(Chef::ServerAPI).to receive(:new).and_return(@rest)
1410
- @query = double("Chef::Search::Query")
1411
- allow(Chef::Search::Query).to receive(:new).and_return(@query)
1412
- end
1413
-
1414
- describe "list" do
1415
- describe "inflated" do
1416
- it "should return a hash of node names and objects" do
1417
- n1 = double("Chef::Node", name: "one")
1418
- allow(n1).to receive(:is_a?).with(Chef::Node) { true }
1419
- expect(@query).to receive(:search).with(:node).and_yield(n1)
1420
- r = Chef::Node.list(true)
1421
- expect(r["one"]).to eq(n1)
1422
- end
1423
- end
1424
-
1425
- it "should return a hash of node names and urls" do
1426
- expect(@rest).to receive(:get).and_return({ "one" => "http://foo" })
1427
- r = Chef::Node.list
1428
- expect(r["one"]).to eq("http://foo")
1429
- end
1430
- end
1431
-
1432
- describe "load" do
1433
- it "should load a node by name" do
1434
- node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1435
- json = Chef::JSONCompat.to_json(node)
1436
- parsed = Chef::JSONCompat.parse(json)
1437
- expect(@rest).to receive(:get).with("nodes/test.example.com").and_return(parsed)
1438
- serialized_node = Chef::Node.load("test.example.com")
1439
- expect(serialized_node).to be_a_kind_of(Chef::Node)
1440
- expect(serialized_node.name).to eql(node.name)
1441
- end
1442
- end
1443
-
1444
- describe "destroy" do
1445
- it "should destroy a node" do
1446
- expect(@rest).to receive(:delete).with("nodes/monkey").and_return("foo")
1447
- node.name("monkey")
1448
- node.destroy
1449
- end
1450
- end
1451
-
1452
- describe "save" do
1453
- it "should update a node if it already exists" do
1454
- node.name("monkey")
1455
- allow(node).to receive(:data_for_save).and_return({})
1456
- expect(@rest).to receive(:put).with("nodes/monkey", {}).and_return("foo")
1457
- node.save
1458
- end
1459
-
1460
- it "should not try and create if it can update" do
1461
- node.name("monkey")
1462
- allow(node).to receive(:data_for_save).and_return({})
1463
- expect(@rest).to receive(:put).with("nodes/monkey", {}).and_return("foo")
1464
- expect(@rest).not_to receive(:post)
1465
- node.save
1466
- end
1467
-
1468
- it "should create if it cannot update" do
1469
- node.name("monkey")
1470
- allow(node).to receive(:data_for_save).and_return({})
1471
- exception = double("404 error", code: "404")
1472
- expect(@rest).to receive(:put).and_raise(Net::HTTPClientException.new("foo", exception))
1473
- expect(@rest).to receive(:post).with("nodes", {})
1474
- node.save
1475
- end
1476
-
1477
- describe "when whyrun mode is enabled" do
1478
- before do
1479
- Chef::Config[:why_run] = true
1480
- end
1481
- after do
1482
- Chef::Config[:why_run] = false
1483
- end
1484
- it "should not save" do
1485
- node.name("monkey")
1486
- expect(@rest).not_to receive(:put)
1487
- expect(@rest).not_to receive(:post)
1488
- node.save
1489
- end
1490
- end
1491
-
1492
- context "with allowed attributes configured" do
1493
- it "should only save allowed attributes (and subattributes)" do
1494
- Chef::Config[:allowed_default_attributes] = [
1495
- ["filesystem", "/dev/disk0s2"],
1496
- "network/interfaces/eth0",
1497
- ]
1498
-
1499
- node.default = {
1500
- "filesystem" => {
1501
- "/dev/disk0s2" => { "size" => "10mb" },
1502
- "map - autohome" => { "size" => "10mb" },
1503
- },
1504
- "network" => {
1505
- "interfaces" => {
1506
- "eth0" => {},
1507
- "eth1" => {},
1508
- },
1509
- },
1510
- }
1511
- node.automatic = {}
1512
- node.normal = {}
1513
- node.override = {}
1514
-
1515
- selected_data = {
1516
- "default" => {
1517
- "filesystem" => {
1518
- "/dev/disk0s2" => { "size" => "10mb" },
1519
- },
1520
- "network" => {
1521
- "interfaces" => {
1522
- "eth0" => {},
1523
- },
1524
- },
1525
- },
1526
- "automatic" => {}, "normal" => {}, "override" => {}
1527
- }
1528
-
1529
- node.name("picky-monkey")
1530
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1531
- node.save
1532
- end
1533
-
1534
- it "should save false-y allowed attributes" do
1535
- Chef::Config[:allowed_default_attributes] = [
1536
- "foo/bar/baz",
1537
- ]
1538
-
1539
- node.default = {
1540
- "foo" => {
1541
- "bar" => {
1542
- "baz" => false,
1543
- },
1544
- "other" => {
1545
- "stuff" => true,
1546
- },
1547
- },
1548
- }
1549
-
1550
- node.automatic = {}
1551
- node.normal = {}
1552
- node.override = {}
1553
-
1554
- selected_data = {
1555
- "default" => {
1556
- "foo" => {
1557
- "bar" => {
1558
- "baz" => false,
1559
- },
1560
- },
1561
- },
1562
- }
1563
-
1564
- node.name("falsey-monkey")
1565
- expect(@rest).to receive(:put).with("nodes/falsey-monkey", hash_including(selected_data)).and_return("foo")
1566
- node.save
1567
- end
1568
-
1569
- it "should not save any attributes if the allowed is empty" do
1570
- Chef::Config[:allowed_default_attributes] = []
1571
-
1572
- node.default = {
1573
- "filesystem" => {
1574
- "/dev/disk0s2" => { "size" => "10mb" },
1575
- "map - autohome" => { "size" => "10mb" },
1576
- },
1577
- }
1578
- node.automatic = {}
1579
- node.normal = {}
1580
- node.override = {}
1581
-
1582
- selected_data = {
1583
- "automatic" => {}, "default" => {}, "normal" => {}, "override" => {}
1584
- }
1585
-
1586
- node.name("picky-monkey")
1587
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1588
- node.save
1589
- end
1590
- end
1591
-
1592
- context "with deprecated whitelist attributes configured" do
1593
- it "should only save allowed attributes (and subattributes)" do
1594
- Chef::Config[:default_attribute_whitelist] = [
1595
- ["filesystem", "/dev/disk0s2"],
1596
- "network/interfaces/eth0",
1597
- ]
1598
-
1599
- node.default = {
1600
- "filesystem" => {
1601
- "/dev/disk0s2" => { "size" => "10mb" },
1602
- "map - autohome" => { "size" => "10mb" },
1603
- },
1604
- "network" => {
1605
- "interfaces" => {
1606
- "eth0" => {},
1607
- "eth1" => {},
1608
- },
1609
- },
1610
- }
1611
- node.automatic = {}
1612
- node.normal = {}
1613
- node.override = {}
1614
-
1615
- selected_data = {
1616
- "default" => {
1617
- "filesystem" => {
1618
- "/dev/disk0s2" => { "size" => "10mb" },
1619
- },
1620
- "network" => {
1621
- "interfaces" => {
1622
- "eth0" => {},
1623
- },
1624
- },
1625
- },
1626
- "automatic" => {}, "normal" => {}, "override" => {}
1627
- }
1628
-
1629
- node.name("picky-monkey")
1630
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1631
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1632
- node.save
1633
- end
1634
- end
1635
-
1636
- context "with deprecated blacklist attributes configured" do
1637
- it "should only save non-blocklisted attributes (and subattributes)" do
1638
- Chef::Config[:default_attribute_blacklist] = [
1639
- ["filesystem", "/dev/disk0s2"],
1640
- "network/interfaces/eth0",
1641
- ]
1642
-
1643
- node.default = {
1644
- "filesystem" => {
1645
- "/dev/disk0s2" => { "size" => "10mb" },
1646
- "map - autohome" => { "size" => "10mb" },
1647
- },
1648
- "network" => {
1649
- "interfaces" => {
1650
- "eth0" => {},
1651
- "eth1" => {},
1652
- },
1653
- },
1654
- }
1655
- node.automatic = {}
1656
- node.normal = {}
1657
- node.override = {}
1658
-
1659
- selected_data = {
1660
- "default" => {
1661
- "filesystem" => {
1662
- "map - autohome" => { "size" => "10mb" },
1663
- },
1664
- "network" => {
1665
- "interfaces" => {
1666
- "eth1" => {},
1667
- },
1668
- },
1669
- },
1670
- "automatic" => {}, "normal" => {}, "override" => {}
1671
- }
1672
- node.name("picky-monkey")
1673
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1674
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1675
- node.save
1676
- end
1677
- end
1678
-
1679
- context "with blocklisted attributes configured" do
1680
- it "should only save non-blocklisted attributes (and subattributes)" do
1681
- Chef::Config[:blocked_default_attributes] = [
1682
- ["filesystem", "/dev/disk0s2"],
1683
- "network/interfaces/eth0",
1684
- ]
1685
-
1686
- node.default = {
1687
- "filesystem" => {
1688
- "/dev/disk0s2" => { "size" => "10mb" },
1689
- "map - autohome" => { "size" => "10mb" },
1690
- },
1691
- "network" => {
1692
- "interfaces" => {
1693
- "eth0" => {},
1694
- "eth1" => {},
1695
- },
1696
- },
1697
- }
1698
- node.automatic = {}
1699
- node.normal = {}
1700
- node.override = {}
1701
-
1702
- selected_data = {
1703
- "default" => {
1704
- "filesystem" => {
1705
- "map - autohome" => { "size" => "10mb" },
1706
- },
1707
- "network" => {
1708
- "interfaces" => {
1709
- "eth1" => {},
1710
- },
1711
- },
1712
- },
1713
- "automatic" => {}, "normal" => {}, "override" => {}
1714
- }
1715
- node.name("picky-monkey")
1716
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1717
- node.save
1718
- end
1719
-
1720
- it "should save all attributes if the blocklist is empty" do
1721
- Chef::Config[:blocked_default_attributes] = []
1722
-
1723
- node.default = {
1724
- "filesystem" => {
1725
- "/dev/disk0s2" => { "size" => "10mb" },
1726
- "map - autohome" => { "size" => "10mb" },
1727
- },
1728
- }
1729
- node.automatic = {}
1730
- node.normal = {}
1731
- node.override = {}
1732
-
1733
- selected_data = {
1734
- "default" => {
1735
- "filesystem" => {
1736
- "/dev/disk0s2" => { "size" => "10mb" },
1737
- "map - autohome" => { "size" => "10mb" },
1738
- },
1739
- },
1740
- "automatic" => {}, "normal" => {}, "override" => {}
1741
- }
1742
-
1743
- node.name("picky-monkey")
1744
- expect(@rest).to receive(:put).with("nodes/picky-monkey", hash_including(selected_data)).and_return("foo")
1745
- node.save
1746
- end
1747
- end
1748
-
1749
- context "when policyfile attributes are present" do
1750
-
1751
- before do
1752
- node.name("example-node")
1753
- node.policy_name = "my-application"
1754
- node.policy_group = "staging"
1755
- end
1756
-
1757
- context "and the server supports policyfile attributes in node JSON" do
1758
-
1759
- it "creates the object normally" do
1760
- expect(@rest).to receive(:post).with("nodes", node.for_json)
1761
- node.create
1762
- end
1763
-
1764
- it "saves the node object normally" do
1765
- expect(@rest).to receive(:put).with("nodes/example-node", node.for_json)
1766
- node.save
1767
- end
1768
- end
1769
-
1770
- # Chef Server before 12.3
1771
- context "and the Chef Server does not support policyfile attributes in node JSON" do
1772
-
1773
- let(:response_body) { %q[{"error":["Invalid key policy_name in request body"]}] }
1774
-
1775
- let(:response) do
1776
- Net::HTTPResponse.send(:response_class, "400").new("1.0", "400", "Bad Request").tap do |r|
1777
- allow(r).to receive(:body).and_return(response_body)
1778
- end
1779
- end
1780
-
1781
- let(:http_exception) do
1782
-
1783
- response.error!
1784
- rescue => e
1785
- e
1786
-
1787
- end
1788
-
1789
- let(:trimmed_node) do
1790
- node.for_json.tap do |j|
1791
- j.delete("policy_name")
1792
- j.delete("policy_group")
1793
- end
1794
-
1795
- end
1796
-
1797
- it "lets the 400 pass through" do
1798
- expect(@rest).to receive(:put).and_raise(http_exception)
1799
- expect { node.save }.to raise_error(http_exception)
1800
- end
1801
-
1802
- end
1803
-
1804
- end
1805
-
1806
- end
1807
- end
1808
-
1809
- describe "method_missing handling" do
1810
- it "should have an #empty? method via Chef::Node::Attribute" do
1811
- node.default["foo"] = "bar"
1812
- expect(node.empty?).to be false
1813
- end
1814
-
1815
- it "it should correctly implement #respond_to?" do
1816
- expect(node.respond_to?(:empty?)).to be true
1817
- end
1818
-
1819
- it "it should correctly retrieve the method with #method" do
1820
- expect(node.method(:empty?)).to be_kind_of(Method)
1821
- end
1822
- end
1823
-
1824
- describe "path tracking via __path__" do
1825
- it "works through hash keys" do
1826
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1827
- expect(node["foo"]["bar"].__path__).to eql(%w{foo bar})
1828
- end
1829
-
1830
- it "works through the default level" do
1831
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1832
- expect(node.default["foo"]["bar"].__path__).to eql(%w{foo bar})
1833
- end
1834
-
1835
- it "works through arrays" do
1836
- node.default["foo"] = [ { "bar" => { "baz" => "qux" } } ]
1837
- expect(node["foo"][0].__path__).to eql(["foo", 0])
1838
- expect(node["foo"][0]["bar"].__path__).to eql(["foo", 0, "bar"])
1839
- end
1840
-
1841
- it "works through arrays at the default level" do
1842
- node.default["foo"] = [ { "bar" => { "baz" => "qux" } } ]
1843
- expect(node.default["foo"][0].__path__).to eql(["foo", 0])
1844
- expect(node.default["foo"][0]["bar"].__path__).to eql(["foo", 0, "bar"])
1845
- end
1846
-
1847
- # if we set __path__ in the initializer we'd get this wrong, this is why we
1848
- # update the path on every #[] or #[]= operator
1849
- it "works on access when the node has been rearranged" do
1850
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1851
- a = node.default["foo"]
1852
- node.default["fizz"] = a
1853
- expect(node["fizz"]["bar"].__path__).to eql(%w{fizz bar})
1854
- expect(node["foo"]["bar"].__path__).to eql(%w{foo bar})
1855
- end
1856
-
1857
- # We have a problem because the __path__ is stored on in each node, but the
1858
- # node can be wired up at multiple locations in the tree via pointers. One
1859
- # solution would be to deep-dup the value in `#[]=(key, value)` and fix the
1860
- # __path__ on all the dup'd nodes. The problem is that this would create an
1861
- # unusual situation where after assignment, you couldn't mutate the thing you
1862
- # hand a handle on. I'm not entirely positive this behavior is the correct
1863
- # thing to support, but it is more hash-like (although if we start with a hash
1864
- # then convert_value does its thing and we *do* get dup'd on assignment). This
1865
- # behavior likely makes any implementation of a deep merge cache built over the
1866
- # top of __path__ tracking have edge conditions where it will fail.
1867
- #
1868
- # Removing this support would be a breaking change. The test is included here
1869
- # because it seems most likely that someone would break this behavior while trying
1870
- # to fix __path__ behavior.
1871
- it "does not dup in the background when a node is assigned" do
1872
- # get a handle on a vividmash (can't be a hash or else we convert_value it)
1873
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1874
- a = node.default["foo"]
1875
- # assign that somewhere else in the tree
1876
- node.default["fizz"] = a
1877
- # now update the source
1878
- a["duptest"] = true
1879
- # the tree should have been updated
1880
- expect(node.default["fizz"]["duptest"]).to be true
1881
- expect(node["fizz"]["duptest"]).to be true
1882
- end
1883
- end
1884
-
1885
- describe "root tracking via __root__" do
1886
- it "works through hash keys" do
1887
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1888
- expect(node["foo"]["bar"].__root__).to eql(node.attributes)
1889
- end
1890
-
1891
- it "works through the default level" do
1892
- node.default["foo"] = { "bar" => { "baz" => "qux" } }
1893
- expect(node.default["foo"]["bar"].__root__).to eql(node.attributes)
1894
- end
1895
-
1896
- it "works through arrays" do
1897
- node.default["foo"] = [ { "bar" => { "baz" => "qux" } } ]
1898
- expect(node["foo"][0].__root__).to eql(node.attributes)
1899
- expect(node["foo"][0]["bar"].__root__).to eql(node.attributes)
1900
- end
1901
-
1902
- it "works through arrays at the default level" do
1903
- node.default["foo"] = [ { "bar" => { "baz" => "qux" } } ]
1904
- expect(node.default["foo"][0].__root__).to eql(node.attributes)
1905
- expect(node.default["foo"][0]["bar"].__root__).to eql(node.attributes)
1906
- end
1907
- end
1908
-
1909
- describe "ways of abusing Chef 12 node state" do
1910
- # these tests abuse the top_level_breadcrumb state in Chef 12
1911
- it "derived attributes work correctly" do
1912
- node.default["v1"] = 1
1913
- expect(node["a"]).to eql(nil)
1914
- node.default["a"] = node["v1"]
1915
- expect(node["a"]).to eql(1)
1916
- end
1917
-
1918
- it "works when saving nodes to variables" do
1919
- a = node.default["a"]
1920
- expect(node["a"]).to eql({})
1921
- node.default["b"] = 0
1922
- a["key"] = 1
1923
-
1924
- expect(node["a"]["key"]).to eql(1)
1925
- end
1926
- end
1927
-
1928
- describe "when abusing the deep merge cache" do
1929
- # https://github.com/chef/chef/issues/7738
1930
- it "do not corrupt VividMashes that are part of the merge set and not the merge_onto set" do
1931
- # need to have a merge two-deep (not at the top-level) between at least two default (or two override)
1932
- # levels where the lowest priority one is the one that is going to be corrupted
1933
- node.default["foo"]["bar"]["baz"] = "fizz"
1934
- node.env_default["foo"]["bar"]["quux"] = "buzz"
1935
- node.default["foo"]["bar"].tap do |bar|
1936
- bar["test"] = "wrong"
1937
- # this triggers a deep merge
1938
- node["foo"]["bar"]["test"]
1939
- # this should correctly write and dirty the cache so the next read does another deep merge on the correct __root__
1940
- bar["test"] = "right"
1941
- end
1942
- expect(node["foo"]["bar"]["test"]).to eql("right")
1943
- end
1944
-
1945
- it "do not corrupt VividMashes that are part of the merge set and not the merge_onto set (when priorities are reversed)" do
1946
- # need to have a merge two-deep (not at the top-level) between at least two default (or two override)
1947
- # levels where the *HIGHEST* priority one is the one that is going to be corrupted
1948
- node.env_default["foo"]["bar"]["baz"] = "fizz"
1949
- node.default["foo"]["bar"]["quux"] = "buzz"
1950
- node.env_default["foo"]["bar"].tap do |bar|
1951
- bar["test"] = "wrong"
1952
- # this triggers a deep merge
1953
- node["foo"]["bar"]["test"]
1954
- # this should correctly write and dirty the cache so the next read does another deep merge on the correct __root__
1955
- bar["test"] = "right"
1956
- end
1957
- expect(node["foo"]["bar"]["test"]).to eql("right")
1958
- end
1959
- end
1960
-
1961
- describe "lazy values" do
1962
- it "supports lazy values in attributes" do
1963
- node.instance_eval do
1964
- default["foo"]["bar"] = lazy { node["fizz"]["buzz"] }
1965
- default["fizz"]["buzz"] = "works"
1966
- end
1967
- expect(node["foo"]["bar"]).to eql("works")
1968
- end
1969
-
1970
- it "lazy values maintain laziness" do
1971
- node.instance_eval do
1972
- default["foo"]["bar"] = lazy { node["fizz"]["buzz"] }
1973
- default["fizz"]["buzz"] = "works"
1974
- end
1975
- expect(node["foo"]["bar"]).to eql("works")
1976
- node.default["fizz"]["buzz"] = "still works"
1977
- expect(node["foo"]["bar"]).to eql("still works")
1978
- end
1979
-
1980
- it "supports recursive lazy values in attributes" do
1981
- node.instance_eval do
1982
- default["cool"]["beans"] = lazy { node["foo"]["bar"] }
1983
- default["foo"]["bar"] = lazy { node["fizz"]["buzz"] }
1984
- default["fizz"]["buzz"] = "works"
1985
- end
1986
- expect(node["cool"]["beans"]).to eql("works")
1987
- node.default["fizz"]["buzz"] = "still works"
1988
- expect(node["cool"]["beans"]).to eql("still works")
1989
- end
1990
-
1991
- it "supports top level lazy values in attributes" do
1992
- # due to the top level deep merge cache these are special cases
1993
- node.instance_eval do
1994
- default["cool"] = lazy { node["foo"] }
1995
- default["foo"] = lazy { node["fizz"] }
1996
- default["fizz"] = "works"
1997
- end
1998
- expect(node["cool"]).to eql("works")
1999
- node.default["fizz"] = "still works"
2000
- expect(node["cool"]).to eql("still works")
2001
- end
2002
-
2003
- it "supports deep merged values in attributes" do
2004
- node.instance_eval do
2005
- override["bar"]["cool"] = lazy { node["bar"]["foo"] }
2006
- override["bar"]["foo"] = lazy { node["bar"]["fizz"] }
2007
- override["bar"]["fizz"] = "works"
2008
- end
2009
- expect(node["bar"]["cool"]).to eql("works")
2010
- node.override["bar"]["fizz"] = "still works"
2011
- expect(node["bar"]["cool"]).to eql("still works")
2012
- end
2013
-
2014
- it "supports overridden deep merged values in attributes (deep_merge)" do
2015
- node.instance_eval do
2016
- role_override["bar"] = { "cool" => "bad", "foo" => "bad", "fizz" => "bad" }
2017
- force_override["bar"]["cool"] = lazy { node["bar"]["foo"] }
2018
- force_override["bar"]["foo"] = lazy { node["bar"]["fizz"] }
2019
- force_override["bar"]["fizz"] = "works"
2020
- end
2021
- expect(node["bar"]["cool"]).to eql("works")
2022
- node.force_override["bar"]["fizz"] = "still works"
2023
- expect(node["bar"]["cool"]).to eql("still works")
2024
- end
2025
-
2026
- it "supports overridden deep merged values in attributes (hash_only_merge)" do
2027
- node.instance_eval do
2028
- default["bar"] = { "cool" => "bad", "foo" => "bad", "fizz" => "bad" }
2029
- override["bar"]["cool"] = lazy { node["bar"]["foo"] }
2030
- override["bar"]["foo"] = lazy { node["bar"]["fizz"] }
2031
- override["bar"]["fizz"] = "works"
2032
- end
2033
- expect(node["bar"]["cool"]).to eql("works")
2034
- node.override["bar"]["fizz"] = "still works"
2035
- expect(node["bar"]["cool"]).to eql("still works")
2036
- end
2037
- end
2038
- end