chef 18.8.11 → 18.8.46

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 (1122) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -19
  3. data/chef.gemspec +4 -5
  4. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +4 -0
  5. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +1 -5
  6. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +12 -0
  7. data/lib/chef/chef_fs/file_system.rb +18 -0
  8. data/lib/chef/pwsh.rb +2 -5
  9. data/lib/chef/resource/apt_repository.rb +14 -5
  10. data/lib/chef/resource/chocolatey_installer.rb +19 -4
  11. data/lib/chef/resource/ohai.rb +1 -0
  12. data/lib/chef/resource_reporter.rb +1 -1
  13. data/lib/chef/shell.rb +8 -3
  14. data/lib/chef/version.rb +1 -1
  15. metadata +14 -1121
  16. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +0 -5
  17. data/spec/data/apt/chef-integration-test-1.0/debian/compat +0 -1
  18. data/spec/data/apt/chef-integration-test-1.0/debian/control +0 -13
  19. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +0 -34
  20. data/spec/data/apt/chef-integration-test-1.0/debian/files +0 -1
  21. data/spec/data/apt/chef-integration-test-1.0/debian/rules +0 -13
  22. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +0 -1
  23. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +0 -11
  24. data/spec/data/apt/chef-integration-test-1.1/debian/compat +0 -1
  25. data/spec/data/apt/chef-integration-test-1.1/debian/control +0 -13
  26. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +0 -34
  27. data/spec/data/apt/chef-integration-test-1.1/debian/files +0 -1
  28. data/spec/data/apt/chef-integration-test-1.1/debian/rules +0 -13
  29. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +0 -1
  30. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +0 -5
  31. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +0 -1
  32. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +0 -10
  33. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +0 -1
  34. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +0 -45
  35. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +0 -1
  36. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +0 -1
  37. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +0 -1
  38. data/spec/data/apt/chef-integration-test2-1.0/debian/control +0 -13
  39. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +0 -34
  40. data/spec/data/apt/chef-integration-test2-1.0/debian/files +0 -1
  41. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -13
  42. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +0 -1
  43. data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
  44. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +0 -18
  45. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +0 -91
  46. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +0 -31
  47. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
  48. data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
  49. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +0 -22
  50. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  51. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  52. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +0 -22
  53. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  54. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  55. data/spec/data/apt/var/www/apt/conf/distributions +0 -7
  56. data/spec/data/apt/var/www/apt/conf/incoming +0 -4
  57. data/spec/data/apt/var/www/apt/conf/pulls +0 -3
  58. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  59. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  60. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  61. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  62. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  63. data/spec/data/apt/var/www/apt/db/version +0 -4
  64. data/spec/data/apt/var/www/apt/dists/sid/Release +0 -19
  65. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +0 -16
  66. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  67. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +0 -5
  68. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  69. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  70. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  71. data/spec/data/archive_file/test_archive.tar.gz +0 -0
  72. data/spec/data/bad-config.rb +0 -1
  73. data/spec/data/bootstrap/encrypted_data_bag_secret +0 -1
  74. data/spec/data/bootstrap/no_proxy.erb +0 -2
  75. data/spec/data/bootstrap/secret.erb +0 -9
  76. data/spec/data/bootstrap/test-hints.erb +0 -12
  77. data/spec/data/bootstrap/test.erb +0 -1
  78. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  79. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  80. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +0 -3
  81. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +0 -1
  82. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +0 -1
  83. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +0 -1
  84. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +0 -1
  85. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +0 -1
  86. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +0 -1
  87. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +0 -1
  88. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  89. data/spec/data/checksum/random.txt +0 -1
  90. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +0 -1
  91. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  92. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +0 -1
  93. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +0 -1
  94. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +0 -1
  95. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +0 -1
  96. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +0 -1
  97. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +0 -1
  98. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +0 -1
  99. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +0 -1
  100. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +0 -1
  101. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +0 -1
  102. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +0 -1
  103. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +0 -1
  104. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +0 -1
  105. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +0 -1
  106. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +0 -1
  107. data/spec/data/client.d_00/00-foo.rb +0 -2
  108. data/spec/data/client.d_00/01-bar.rb +0 -1
  109. data/spec/data/client.d_00/02-strings.rb +0 -2
  110. data/spec/data/client.d_00/bar +0 -1
  111. data/spec/data/client.d_01/foo/bar.rb +0 -1
  112. data/spec/data/client.d_02/foo.rb/foo.txt +0 -1
  113. data/spec/data/config.rb +0 -6
  114. data/spec/data/cookbooks/angrybash/metadata.rb +0 -2
  115. data/spec/data/cookbooks/angrybash/recipes/default.rb +0 -8
  116. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +0 -2
  117. data/spec/data/cookbooks/apache2/metadata.json +0 -33
  118. data/spec/data/cookbooks/apache2/metadata.rb +0 -2
  119. data/spec/data/cookbooks/apache2/recipes/default.rb +0 -3
  120. data/spec/data/cookbooks/borken/metadata.rb +0 -2
  121. data/spec/data/cookbooks/borken/recipes/default.rb +0 -2
  122. data/spec/data/cookbooks/borken/templates/default/borken.erb +0 -2
  123. data/spec/data/cookbooks/chefignore +0 -8
  124. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +0 -2
  125. data/spec/data/cookbooks/ignorken/metadata.rb +0 -2
  126. data/spec/data/cookbooks/ignorken/recipes/default.rb +0 -1
  127. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +0 -2
  128. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +0 -2
  129. data/spec/data/cookbooks/irssi/files/default/irssi.response +0 -2
  130. data/spec/data/cookbooks/java/files/default/java.response +0 -2
  131. data/spec/data/cookbooks/java/metadata.json +0 -33
  132. data/spec/data/cookbooks/java/metadata.rb +0 -2
  133. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +0 -4
  134. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +0 -8
  135. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +0 -8
  136. data/spec/data/cookbooks/openldap/.root_dotfile +0 -0
  137. data/spec/data/cookbooks/openldap/attributes/default.rb +0 -16
  138. data/spec/data/cookbooks/openldap/attributes/smokey.rb +0 -1
  139. data/spec/data/cookbooks/openldap/definitions/client.rb +0 -5
  140. data/spec/data/cookbooks/openldap/definitions/server.rb +0 -5
  141. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  142. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  143. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  144. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +0 -2
  145. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +0 -3
  146. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +0 -3
  147. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  148. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +0 -3
  149. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +0 -3
  150. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +0 -3
  151. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +0 -3
  152. data/spec/data/cookbooks/openldap/libraries/openldap.rb +0 -4
  153. data/spec/data/cookbooks/openldap/metadata.rb +0 -8
  154. data/spec/data/cookbooks/openldap/recipes/default.rb +0 -4
  155. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +0 -3
  156. data/spec/data/cookbooks/openldap/recipes/one.rb +0 -15
  157. data/spec/data/cookbooks/openldap/recipes/return.rb +0 -2
  158. data/spec/data/cookbooks/openldap/spec/spec_helper.rb +0 -0
  159. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +0 -4
  160. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +0 -1
  161. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +0 -14
  162. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +0 -1
  163. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +0 -1
  164. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +0 -1
  165. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +0 -4
  166. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +0 -1
  167. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +0 -1
  168. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +0 -1
  169. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +0 -4
  170. data/spec/data/cookbooks/openldap/templates/default/test.erb +0 -1
  171. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +0 -1
  172. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +0 -4
  173. data/spec/data/cookbooks/preseed/metadata.rb +0 -2
  174. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +0 -1
  175. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +0 -1
  176. data/spec/data/cookbooks/starter/chefignore +0 -8
  177. data/spec/data/cookbooks/starter/files/sample.txt +0 -1
  178. data/spec/data/cookbooks/starter/metadata.rb +0 -2
  179. data/spec/data/cookbooks/starter/recipes/default.rb +0 -4
  180. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +0 -5
  181. data/spec/data/cookbooks/wget/files/default/wget.response +0 -2
  182. data/spec/data/definitions/test.rb +0 -5
  183. data/spec/data/dsc_lcm.pfx +0 -0
  184. data/spec/data/environment-config.rb +0 -5
  185. data/spec/data/file-providers-method-snapshot-chef-11-4.json +0 -127
  186. data/spec/data/fileedit/blank +0 -0
  187. data/spec/data/fileedit/hosts +0 -4
  188. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  189. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  190. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  191. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  192. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  193. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +0 -4
  194. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +0 -13
  195. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +0 -8
  196. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +0 -4
  197. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +0 -9
  198. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +0 -8
  199. data/spec/data/kitchen/chefignore +0 -6
  200. data/spec/data/kitchen/openldap/attributes/default.rb +0 -3
  201. data/spec/data/kitchen/openldap/attributes/robinson.rb +0 -3
  202. data/spec/data/kitchen/openldap/definitions/client.rb +0 -3
  203. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +0 -3
  204. data/spec/data/kitchen/openldap/recipes/gigantor.rb +0 -3
  205. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +0 -3
  206. data/spec/data/kitchen/openldap/recipes/woot.rb +0 -3
  207. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  208. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  209. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  210. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  211. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  212. data/spec/data/lwrp/providers/buck_passer.rb +0 -28
  213. data/spec/data/lwrp/providers/buck_passer_2.rb +0 -26
  214. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +0 -28
  215. data/spec/data/lwrp/providers/inline_compiler.rb +0 -24
  216. data/spec/data/lwrp/providers/monkey_name_printer.rb +0 -5
  217. data/spec/data/lwrp/providers/paint_drying_watcher.rb +0 -7
  218. data/spec/data/lwrp/providers/thumb_twiddler.rb +0 -7
  219. data/spec/data/lwrp/resources/bar.rb +0 -4
  220. data/spec/data/lwrp/resources/buck_passer.rb +0 -6
  221. data/spec/data/lwrp/resources/buck_passer_2.rb +0 -4
  222. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +0 -4
  223. data/spec/data/lwrp/resources/foo.rb +0 -6
  224. data/spec/data/lwrp/resources/inline_compiler.rb +0 -4
  225. data/spec/data/lwrp/resources/monkey_name_printer.rb +0 -6
  226. data/spec/data/lwrp/resources/paint_drying_watcher.rb +0 -4
  227. data/spec/data/lwrp/resources/thumb_twiddler.rb +0 -4
  228. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +0 -3
  229. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -1
  230. data/spec/data/lwrp_override/providers/buck_passer.rb +0 -5
  231. data/spec/data/lwrp_override/resources/foo.rb +0 -11
  232. data/spec/data/mac_users/10.9.plist.xml +0 -560
  233. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  234. data/spec/data/metadata/quick_start/metadata.rb +0 -14
  235. data/spec/data/mixin/invalid_data.rb +0 -3
  236. data/spec/data/mixin/real_data.rb +0 -2
  237. data/spec/data/nested.json +0 -2
  238. data/spec/data/nodes/default.rb +0 -15
  239. data/spec/data/nodes/test.example.com.rb +0 -17
  240. data/spec/data/nodes/test.rb +0 -15
  241. data/spec/data/null_config.rb +0 -1
  242. data/spec/data/object_loader/environments/test.json +0 -7
  243. data/spec/data/object_loader/environments/test.rb +0 -2
  244. data/spec/data/object_loader/environments/test_json_class.json +0 -8
  245. data/spec/data/object_loader/nodes/test.json +0 -7
  246. data/spec/data/object_loader/nodes/test.rb +0 -2
  247. data/spec/data/object_loader/nodes/test_json_class.json +0 -8
  248. data/spec/data/object_loader/roles/test.json +0 -7
  249. data/spec/data/object_loader/roles/test.rb +0 -2
  250. data/spec/data/object_loader/roles/test_json_class.json +0 -8
  251. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  252. data/spec/data/old_home_dir/my-dot-vim +0 -0
  253. data/spec/data/partial_one.erb +0 -1
  254. data/spec/data/prefer_metadata_json/metadata.json +0 -51
  255. data/spec/data/prefer_metadata_json/metadata.rb +0 -6
  256. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  257. data/spec/data/recipes/test.rb +0 -7
  258. data/spec/data/recipes.tgz +0 -0
  259. data/spec/data/remote_directory_data/remote_dir_file.txt +0 -1
  260. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +0 -1
  261. data/spec/data/remote_file/nyan_cat.png +0 -0
  262. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  263. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +0 -1
  264. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +0 -1
  265. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +0 -2
  266. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +0 -3
  267. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +0 -1
  268. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +0 -2
  269. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +0 -3
  270. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +0 -3
  271. data/spec/data/root_alias_cookbooks/simple/attributes.rb +0 -1
  272. data/spec/data/root_alias_cookbooks/simple/metadata.rb +0 -2
  273. data/spec/data/root_alias_cookbooks/simple/recipe.rb +0 -3
  274. data/spec/data/rubygems.org/latest_specs.4.8.gz +0 -0
  275. data/spec/data/rubygems.org/nonexistent_gem +0 -0
  276. data/spec/data/rubygems.org/nonexistent_gem-info +0 -1
  277. data/spec/data/rubygems.org/sexp_processor +0 -0
  278. data/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz +0 -0
  279. data/spec/data/rubygems.org/sexp_processor-info +0 -50
  280. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +0 -2
  281. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +0 -1
  282. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +0 -2
  283. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +0 -2
  284. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +0 -1
  285. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  286. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +0 -2
  287. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +0 -2
  288. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +0 -1
  289. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +0 -2
  290. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +0 -2
  291. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +0 -1
  292. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  293. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +0 -2
  294. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +0 -2
  295. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +0 -2
  296. data/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file +0 -1
  297. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +0 -2
  298. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +0 -1
  299. data/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file +0 -1
  300. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +0 -2
  301. data/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file +0 -1
  302. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +0 -1
  303. data/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file +0 -1
  304. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  305. data/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file +0 -1
  306. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +0 -2
  307. data/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file +0 -1
  308. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +0 -2
  309. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +0 -1
  310. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +0 -2
  311. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +0 -1
  312. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  313. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +0 -2
  314. data/spec/data/run_context/cookbooks/include/recipes/default.rb +0 -24
  315. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +0 -3
  316. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +0 -2
  317. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +0 -1
  318. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +0 -1
  319. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  320. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +0 -2
  321. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  322. data/spec/data/run_context/cookbooks/test/attributes/george.rb +0 -1
  323. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +0 -9
  324. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +0 -5
  325. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +0 -1
  326. data/spec/data/run_context/cookbooks/test/providers/provider.rb +0 -1
  327. data/spec/data/run_context/cookbooks/test/recipes/default.rb +0 -5
  328. data/spec/data/run_context/cookbooks/test/recipes/one.rb +0 -7
  329. data/spec/data/run_context/cookbooks/test/recipes/two.rb +0 -7
  330. data/spec/data/run_context/cookbooks/test/resources/resource.rb +0 -3
  331. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +0 -2
  332. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +0 -1
  333. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +0 -2
  334. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +0 -2
  335. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +0 -1
  336. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  337. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +0 -3
  338. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +0 -2
  339. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +0 -1
  340. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +0 -1
  341. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +0 -3
  342. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +0 -1
  343. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  344. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  345. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +0 -2
  346. data/spec/data/run_context/nodes/run_context.rb +0 -5
  347. data/spec/data/sample_msu1.xml +0 -10
  348. data/spec/data/sample_msu2.xml +0 -14
  349. data/spec/data/sample_msu3.xml +0 -16
  350. data/spec/data/search_queries_to_transform.txt +0 -98
  351. data/spec/data/shef-config.rb +0 -11
  352. data/spec/data/snap_package/async_result_success.json +0 -6
  353. data/spec/data/snap_package/change_id_result.json +0 -175
  354. data/spec/data/snap_package/find_result_failure.json +0 -10
  355. data/spec/data/snap_package/find_result_success.json +0 -70
  356. data/spec/data/snap_package/get_by_name_result_failure.json +0 -10
  357. data/spec/data/snap_package/get_by_name_result_success.json +0 -38
  358. data/spec/data/snap_package/get_conf_success.json +0 -10
  359. data/spec/data/snap_package/result_failure.json +0 -9
  360. data/spec/data/ssl/5e707473.0 +0 -18
  361. data/spec/data/ssl/binary/chef-rspec-der.cert +0 -0
  362. data/spec/data/ssl/binary/chef-rspec-der.key +0 -0
  363. data/spec/data/ssl/chef-rspec.cert +0 -27
  364. data/spec/data/ssl/chef-rspec.key +0 -27
  365. data/spec/data/ssl/key.pem +0 -15
  366. data/spec/data/ssl/private_key.pem +0 -27
  367. data/spec/data/ssl/private_key_with_whitespace.pem +0 -32
  368. data/spec/data/standalone_cookbook/Gemfile +0 -1
  369. data/spec/data/standalone_cookbook/chefignore +0 -9
  370. data/spec/data/standalone_cookbook/recipes/default.rb +0 -3
  371. data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +0 -1
  372. data/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt +0 -1
  373. data/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt +0 -1
  374. data/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt +0 -1
  375. data/spec/data/templates/failed.erb +0 -5
  376. data/spec/data/templates/seattle.txt +0 -1
  377. data/spec/data/trusted_certs/example.crt +0 -31
  378. data/spec/data/trusted_certs/example_no_cn.crt +0 -32
  379. data/spec/data/trusted_certs/intermediate.pem +0 -38
  380. data/spec/data/trusted_certs/opscode.pem +0 -36
  381. data/spec/data/trusted_certs/root.pem +0 -22
  382. data/spec/data/windows_certificates/base64_test.cer +0 -20
  383. data/spec/data/windows_certificates/othertest.cer +0 -20
  384. data/spec/data/windows_certificates/test.cer +0 -20
  385. data/spec/data/windows_certificates/test.p7b +0 -0
  386. data/spec/data/windows_certificates/test.pem +0 -20
  387. data/spec/data/windows_certificates/test.pfx +0 -0
  388. data/spec/functional/application_spec.rb +0 -58
  389. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  390. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  391. data/spec/functional/assets/chefinittest +0 -36
  392. data/spec/functional/assets/chocolatey_feed/test-A.1.0.0.nupkg +0 -0
  393. data/spec/functional/assets/chocolatey_feed/test-A.1.5.0.nupkg +0 -0
  394. data/spec/functional/assets/chocolatey_feed/test-A.2.0.0.nupkg +0 -0
  395. data/spec/functional/assets/chocolatey_feed/test-B.1.0.0.nupkg +0 -0
  396. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  397. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  398. data/spec/functional/assets/inittest +0 -37
  399. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  400. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  401. data/spec/functional/assets/testchefsubsys +0 -10
  402. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  403. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm +0 -0
  404. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  405. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  406. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  407. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.src.rpm +0 -0
  408. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  409. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  410. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.i686.rpm +0 -0
  411. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  412. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  413. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  414. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm +0 -0
  415. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  416. data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
  417. data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
  418. data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
  419. data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
  420. data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
  421. data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
  422. data/spec/functional/assets/yumrepo/repodata/filelists.xml.gz +0 -0
  423. data/spec/functional/assets/yumrepo/repodata/other.xml.gz +0 -0
  424. data/spec/functional/assets/yumrepo/repodata/primary.xml.gz +0 -0
  425. data/spec/functional/assets/yumrepo/repodata/repomd.xml +0 -21
  426. data/spec/functional/assets/yumrepo-empty/repodata/01a3b-filelists.sqlite.bz2 +0 -0
  427. data/spec/functional/assets/yumrepo-empty/repodata/401dc-filelists.xml.gz +0 -0
  428. data/spec/functional/assets/yumrepo-empty/repodata/5dc1e-primary.sqlite.bz2 +0 -0
  429. data/spec/functional/assets/yumrepo-empty/repodata/6bf96-other.xml.gz +0 -0
  430. data/spec/functional/assets/yumrepo-empty/repodata/7c365-other.sqlite.bz2 +0 -0
  431. data/spec/functional/assets/yumrepo-empty/repodata/dabe2-primary.xml.gz +0 -0
  432. data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +0 -55
  433. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  434. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.i686.rpm +0 -0
  435. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  436. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  437. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  438. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.src.rpm +0 -0
  439. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  440. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  441. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.i686.rpm +0 -0
  442. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  443. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  444. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  445. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.src.rpm +0 -0
  446. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  447. data/spec/functional/dsl/reboot_pending_spec.rb +0 -88
  448. data/spec/functional/dsl/registry_helper_spec.rb +0 -61
  449. data/spec/functional/event_loggers/windows_eventlog_spec.rb +0 -107
  450. data/spec/functional/file_content_management/deploy_strategies_spec.rb +0 -229
  451. data/spec/functional/http/simple_spec.rb +0 -146
  452. data/spec/functional/mixin/from_file_spec.rb +0 -93
  453. data/spec/functional/mixin/powershell_out_spec.rb +0 -51
  454. data/spec/functional/mixin/shell_out_spec.rb +0 -48
  455. data/spec/functional/mixin/user_context_spec.rb +0 -119
  456. data/spec/functional/notifications_spec.rb +0 -238
  457. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -100
  458. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -51
  459. data/spec/functional/rebooter_spec.rb +0 -117
  460. data/spec/functional/resource/aix_service_spec.rb +0 -145
  461. data/spec/functional/resource/aixinit_service_spec.rb +0 -210
  462. data/spec/functional/resource/apt_package_spec.rb +0 -383
  463. data/spec/functional/resource/archive_file_spec.rb +0 -88
  464. data/spec/functional/resource/bash_spec.rb +0 -55
  465. data/spec/functional/resource/batch_spec.rb +0 -34
  466. data/spec/functional/resource/bff_spec.rb +0 -120
  467. data/spec/functional/resource/chocolatey_package_spec.rb +0 -194
  468. data/spec/functional/resource/cookbook_file_spec.rb +0 -79
  469. data/spec/functional/resource/cron_spec.rb +0 -179
  470. data/spec/functional/resource/directory_spec.rb +0 -43
  471. data/spec/functional/resource/dnf_package_spec.rb +0 -1629
  472. data/spec/functional/resource/dpkg_package_spec.rb +0 -355
  473. data/spec/functional/resource/dsc_resource_spec.rb +0 -91
  474. data/spec/functional/resource/dsc_script_spec.rb +0 -476
  475. data/spec/functional/resource/execute_spec.rb +0 -171
  476. data/spec/functional/resource/file_spec.rb +0 -167
  477. data/spec/functional/resource/git_spec.rb +0 -330
  478. data/spec/functional/resource/group_spec.rb +0 -486
  479. data/spec/functional/resource/ifconfig_spec.rb +0 -178
  480. data/spec/functional/resource/insserv_spec.rb +0 -206
  481. data/spec/functional/resource/launchd_spec.rb +0 -232
  482. data/spec/functional/resource/link_spec.rb +0 -704
  483. data/spec/functional/resource/locale_spec.rb +0 -108
  484. data/spec/functional/resource/macos_userdefaults_spec.rb +0 -139
  485. data/spec/functional/resource/mount_spec.rb +0 -219
  486. data/spec/functional/resource/msu_package_spec.rb +0 -107
  487. data/spec/functional/resource/ohai_spec.rb +0 -54
  488. data/spec/functional/resource/plist_spec.rb +0 -25
  489. data/spec/functional/resource/powershell_package_source_spec.rb +0 -106
  490. data/spec/functional/resource/powershell_script_spec.rb +0 -588
  491. data/spec/functional/resource/reboot_spec.rb +0 -103
  492. data/spec/functional/resource/registry_spec.rb +0 -300
  493. data/spec/functional/resource/remote_directory_spec.rb +0 -220
  494. data/spec/functional/resource/remote_file_spec.rb +0 -418
  495. data/spec/functional/resource/rpm_spec.rb +0 -120
  496. data/spec/functional/resource/template_spec.rb +0 -245
  497. data/spec/functional/resource/timezone_spec.rb +0 -41
  498. data/spec/functional/resource/user/linux_user_spec.rb +0 -127
  499. data/spec/functional/resource/user/mac_user_spec.rb +0 -207
  500. data/spec/functional/resource/user/windows_spec.rb +0 -245
  501. data/spec/functional/resource/windows_certificate_spec.rb +0 -401
  502. data/spec/functional/resource/windows_env_spec.rb +0 -285
  503. data/spec/functional/resource/windows_firewall_rule_spec.rb +0 -93
  504. data/spec/functional/resource/windows_font_spec.rb +0 -52
  505. data/spec/functional/resource/windows_hostname_spec.rb +0 -91
  506. data/spec/functional/resource/windows_package_spec.rb +0 -193
  507. data/spec/functional/resource/windows_pagefile_spec.rb +0 -125
  508. data/spec/functional/resource/windows_path_spec.rb +0 -68
  509. data/spec/functional/resource/windows_security_policy_spec.rb +0 -86
  510. data/spec/functional/resource/windows_share_spec.rb +0 -103
  511. data/spec/functional/resource/windows_task_spec.rb +0 -1969
  512. data/spec/functional/resource/windows_user_privilege_spec.rb +0 -192
  513. data/spec/functional/resource/yum_package_spec.rb +0 -1739
  514. data/spec/functional/resource/zypper_package_spec.rb +0 -276
  515. data/spec/functional/root_alias_spec.rb +0 -78
  516. data/spec/functional/run_lock_spec.rb +0 -481
  517. data/spec/functional/shell_spec.rb +0 -149
  518. data/spec/functional/tiny_server_spec.rb +0 -79
  519. data/spec/functional/util/path_helper_spec.rb +0 -37
  520. data/spec/functional/version_spec.rb +0 -36
  521. data/spec/functional/win32/crypto_spec.rb +0 -54
  522. data/spec/functional/win32/registry_spec.rb +0 -618
  523. data/spec/functional/win32/security_spec.rb +0 -233
  524. data/spec/functional/win32/sid_spec.rb +0 -55
  525. data/spec/functional/win32/version_info_spec.rb +0 -50
  526. data/spec/functional/win32/versions_spec.rb +0 -115
  527. data/spec/integration/client/client_spec.rb +0 -963
  528. data/spec/integration/client/exit_code_spec.rb +0 -116
  529. data/spec/integration/client/fips_spec.rb +0 -29
  530. data/spec/integration/client/ipv6_spec.rb +0 -135
  531. data/spec/integration/client/open_ssl_spec.rb +0 -25
  532. data/spec/integration/compliance/compliance_spec.rb +0 -143
  533. data/spec/integration/ohai/ohai_spec.rb +0 -62
  534. data/spec/integration/recipes/accumulator_spec.rb +0 -245
  535. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +0 -176
  536. data/spec/integration/recipes/lwrp_spec.rb +0 -56
  537. data/spec/integration/recipes/noop_resource_spec.rb +0 -24
  538. data/spec/integration/recipes/notifies_spec.rb +0 -438
  539. data/spec/integration/recipes/notifying_block_spec.rb +0 -116
  540. data/spec/integration/recipes/provider_choice.rb +0 -38
  541. data/spec/integration/recipes/recipe_dsl_spec.rb +0 -1281
  542. data/spec/integration/recipes/remote_directory.rb +0 -74
  543. data/spec/integration/recipes/resource_action_spec.rb +0 -524
  544. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +0 -554
  545. data/spec/integration/recipes/resource_load_spec.rb +0 -315
  546. data/spec/integration/recipes/unified_mode_spec.rb +0 -947
  547. data/spec/integration/recipes/use_partial_spec.rb +0 -116
  548. data/spec/integration/solo/solo_spec.rb +0 -219
  549. data/spec/rcov.opts +0 -2
  550. data/spec/spec_helper.rb +0 -350
  551. data/spec/stress/win32/file_spec.rb +0 -37
  552. data/spec/stress/win32/memory_spec.rb +0 -22
  553. data/spec/stress/win32/security_spec.rb +0 -69
  554. data/spec/support/chef_helpers.rb +0 -79
  555. data/spec/support/key_helpers.rb +0 -102
  556. data/spec/support/lib/chef/provider/easy.rb +0 -35
  557. data/spec/support/lib/chef/provider/openldap_includer.rb +0 -29
  558. data/spec/support/lib/chef/provider/snakeoil.rb +0 -42
  559. data/spec/support/lib/chef/resource/cat.rb +0 -39
  560. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -36
  561. data/spec/support/lib/chef/resource/openldap_includer.rb +0 -28
  562. data/spec/support/lib/chef/resource/with_state.rb +0 -29
  563. data/spec/support/lib/chef/resource/zen_follower.rb +0 -36
  564. data/spec/support/lib/chef/resource/zen_master.rb +0 -39
  565. data/spec/support/lib/library_load_order.rb +0 -20
  566. data/spec/support/matchers/leak.rb +0 -96
  567. data/spec/support/mock/platform.rb +0 -33
  568. data/spec/support/platform_helpers.rb +0 -284
  569. data/spec/support/platforms/prof/gc.rb +0 -51
  570. data/spec/support/platforms/prof/win32.rb +0 -45
  571. data/spec/support/platforms/win32/spec_service.rb +0 -57
  572. data/spec/support/recipe_dsl_helper.rb +0 -83
  573. data/spec/support/ruby_installer.rb +0 -51
  574. data/spec/support/shared/context/config.rb +0 -18
  575. data/spec/support/shared/context/win32.rb +0 -34
  576. data/spec/support/shared/functional/diff_disabled.rb +0 -10
  577. data/spec/support/shared/functional/directory_resource.rb +0 -178
  578. data/spec/support/shared/functional/execute_resource.rb +0 -150
  579. data/spec/support/shared/functional/file_resource.rb +0 -1047
  580. data/spec/support/shared/functional/http.rb +0 -224
  581. data/spec/support/shared/functional/knife.rb +0 -37
  582. data/spec/support/shared/functional/securable_resource.rb +0 -654
  583. data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -393
  584. data/spec/support/shared/functional/windows_script.rb +0 -260
  585. data/spec/support/shared/integration/integration_helper.rb +0 -122
  586. data/spec/support/shared/integration/knife_support.rb +0 -192
  587. data/spec/support/shared/matchers/exit_with_code.rb +0 -32
  588. data/spec/support/shared/matchers/match_environment_variable.rb +0 -17
  589. data/spec/support/shared/shared_examples.rb +0 -14
  590. data/spec/support/shared/unit/api_error_inspector.rb +0 -190
  591. data/spec/support/shared/unit/api_versioning.rb +0 -77
  592. data/spec/support/shared/unit/application_dot_d.rb +0 -82
  593. data/spec/support/shared/unit/execute_resource.rb +0 -166
  594. data/spec/support/shared/unit/file_system_support.rb +0 -70
  595. data/spec/support/shared/unit/knife_shared.rb +0 -39
  596. data/spec/support/shared/unit/mock_shellout.rb +0 -49
  597. data/spec/support/shared/unit/platform_introspector.rb +0 -189
  598. data/spec/support/shared/unit/provider/file.rb +0 -877
  599. data/spec/support/shared/unit/provider/package/package_shared.rb +0 -95
  600. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +0 -410
  601. data/spec/support/shared/unit/resource/static_provider_resolution.rb +0 -63
  602. data/spec/support/shared/unit/script_resource.rb +0 -74
  603. data/spec/support/shared/unit/user_and_client_shared.rb +0 -114
  604. data/spec/support/shared/unit/windows_script_resource.rb +0 -65
  605. data/spec/tiny_server.rb +0 -193
  606. data/spec/unit/action_collection_spec.rb +0 -19
  607. data/spec/unit/api_client/registration_spec.rb +0 -278
  608. data/spec/unit/api_client_spec.rb +0 -341
  609. data/spec/unit/api_client_v1_spec.rb +0 -455
  610. data/spec/unit/application/agent_spec.rb +0 -0
  611. data/spec/unit/application/apply_spec.rb +0 -116
  612. data/spec/unit/application/base_spec.rb +0 -40
  613. data/spec/unit/application/client_spec.rb +0 -588
  614. data/spec/unit/application/exit_code_spec.rb +0 -145
  615. data/spec/unit/application/server_spec.rb +0 -0
  616. data/spec/unit/application/solo_spec.rb +0 -218
  617. data/spec/unit/application_spec.rb +0 -587
  618. data/spec/unit/chef_class_spec.rb +0 -240
  619. data/spec/unit/chef_fs/config_spec.rb +0 -235
  620. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +0 -82
  621. data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +0 -65
  622. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -63
  623. data/spec/unit/chef_fs/diff_spec.rb +0 -328
  624. data/spec/unit/chef_fs/file_pattern_spec.rb +0 -512
  625. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +0 -34
  626. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +0 -45
  627. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +0 -126
  628. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +0 -175
  629. data/spec/unit/chef_fs/file_system_spec.rb +0 -150
  630. data/spec/unit/chef_fs/path_util_spec.rb +0 -108
  631. data/spec/unit/chef_spec.rb +0 -25
  632. data/spec/unit/client_spec.rb +0 -881
  633. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -126
  634. data/spec/unit/compliance/fetcher/chef_server_spec.rb +0 -93
  635. data/spec/unit/compliance/input_spec.rb +0 -104
  636. data/spec/unit/compliance/profile_spec.rb +0 -120
  637. data/spec/unit/compliance/reporter/automate_spec.rb +0 -451
  638. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +0 -197
  639. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +0 -49
  640. data/spec/unit/compliance/runner_spec.rb +0 -354
  641. data/spec/unit/compliance/waiver_spec.rb +0 -104
  642. data/spec/unit/config_fetcher_spec.rb +0 -125
  643. data/spec/unit/config_spec.rb +0 -31
  644. data/spec/unit/cookbook/chefignore_spec.rb +0 -69
  645. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +0 -213
  646. data/spec/unit/cookbook/file_vendor_spec.rb +0 -123
  647. data/spec/unit/cookbook/gem_installer_spec.rb +0 -114
  648. data/spec/unit/cookbook/manifest_v0_spec.rb +0 -133
  649. data/spec/unit/cookbook/manifest_v2_spec.rb +0 -70
  650. data/spec/unit/cookbook/metadata_spec.rb +0 -610
  651. data/spec/unit/cookbook/synchronizer_spec.rb +0 -560
  652. data/spec/unit/cookbook/syntax_check_spec.rb +0 -229
  653. data/spec/unit/cookbook_loader_spec.rb +0 -265
  654. data/spec/unit/cookbook_manifest_spec.rb +0 -228
  655. data/spec/unit/cookbook_spec.rb +0 -62
  656. data/spec/unit/cookbook_uploader_spec.rb +0 -205
  657. data/spec/unit/cookbook_version_file_specificity_spec.rb +0 -623
  658. data/spec/unit/cookbook_version_spec.rb +0 -341
  659. data/spec/unit/daemon_spec.rb +0 -179
  660. data/spec/unit/data_bag_item_spec.rb +0 -387
  661. data/spec/unit/data_bag_spec.rb +0 -263
  662. data/spec/unit/data_collector/config_validation_spec.rb +0 -208
  663. data/spec/unit/data_collector_spec.rb +0 -1076
  664. data/spec/unit/decorator/lazy_array_spec.rb +0 -58
  665. data/spec/unit/decorator/lazy_spec.rb +0 -39
  666. data/spec/unit/decorator_spec.rb +0 -142
  667. data/spec/unit/delayed_evaluator_spec.rb +0 -35
  668. data/spec/unit/deprecated_spec.rb +0 -65
  669. data/spec/unit/deprecation_spec.rb +0 -129
  670. data/spec/unit/digester_spec.rb +0 -49
  671. data/spec/unit/dsl/data_query_spec.rb +0 -108
  672. data/spec/unit/dsl/declare_resource_spec.rb +0 -374
  673. data/spec/unit/dsl/platform_introspection_spec.rb +0 -160
  674. data/spec/unit/dsl/reboot_pending_spec.rb +0 -87
  675. data/spec/unit/dsl/recipe_spec.rb +0 -76
  676. data/spec/unit/dsl/registry_helper_spec.rb +0 -52
  677. data/spec/unit/dsl/render_helpers_spec.rb +0 -102
  678. data/spec/unit/dsl/resources_spec.rb +0 -85
  679. data/spec/unit/dsl/secret_spec.rb +0 -175
  680. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +0 -97
  681. data/spec/unit/encrypted_data_bag_item_spec.rb +0 -439
  682. data/spec/unit/environment_spec.rb +0 -476
  683. data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -172
  684. data/spec/unit/event_dispatch/dsl_spec.rb +0 -83
  685. data/spec/unit/exceptions_spec.rb +0 -132
  686. data/spec/unit/file_access_control_spec.rb +0 -308
  687. data/spec/unit/file_cache_spec.rb +0 -178
  688. data/spec/unit/file_content_management/deploy/cp_spec.rb +0 -44
  689. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +0 -113
  690. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +0 -232
  691. data/spec/unit/file_content_management/tempfile_spec.rb +0 -115
  692. data/spec/unit/formatters/base_spec.rb +0 -100
  693. data/spec/unit/formatters/doc_spec.rb +0 -110
  694. data/spec/unit/formatters/error_description_spec.rb +0 -141
  695. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +0 -76
  696. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +0 -265
  697. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +0 -126
  698. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +0 -43
  699. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +0 -26
  700. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +0 -26
  701. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +0 -191
  702. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +0 -91
  703. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +0 -155
  704. data/spec/unit/guard_interpreter_spec.rb +0 -41
  705. data/spec/unit/handler/json_file_spec.rb +0 -63
  706. data/spec/unit/handler_spec.rb +0 -308
  707. data/spec/unit/http/api_versions_spec.rb +0 -100
  708. data/spec/unit/http/authenticator_spec.rb +0 -247
  709. data/spec/unit/http/basic_client_spec.rb +0 -102
  710. data/spec/unit/http/http_request_spec.rb +0 -97
  711. data/spec/unit/http/json_input_spec.rb +0 -128
  712. data/spec/unit/http/simple_spec.rb +0 -32
  713. data/spec/unit/http/socketless_chef_zero_client_spec.rb +0 -174
  714. data/spec/unit/http/ssl_policies_spec.rb +0 -228
  715. data/spec/unit/http/validate_content_length_spec.rb +0 -207
  716. data/spec/unit/http_spec.rb +0 -235
  717. data/spec/unit/json_compat_spec.rb +0 -73
  718. data/spec/unit/key_spec.rb +0 -631
  719. data/spec/unit/log/syslog_spec.rb +0 -47
  720. data/spec/unit/log/winevt_spec.rb +0 -62
  721. data/spec/unit/lwrp_spec.rb +0 -693
  722. data/spec/unit/mixin/api_version_request_handling_spec.rb +0 -126
  723. data/spec/unit/mixin/checksum_spec.rb +0 -82
  724. data/spec/unit/mixin/convert_to_class_name_spec.rb +0 -54
  725. data/spec/unit/mixin/deep_merge_spec.rb +0 -357
  726. data/spec/unit/mixin/default_paths_spec.rb +0 -92
  727. data/spec/unit/mixin/deprecation_spec.rb +0 -57
  728. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +0 -96
  729. data/spec/unit/mixin/homebrew_spec.rb +0 -118
  730. data/spec/unit/mixin/lazy_module_include.rb +0 -71
  731. data/spec/unit/mixin/openssl_helper_spec.rb +0 -897
  732. data/spec/unit/mixin/params_validate_spec.rb +0 -422
  733. data/spec/unit/mixin/powershell_exec_spec.rb +0 -90
  734. data/spec/unit/mixin/powershell_out_spec.rb +0 -106
  735. data/spec/unit/mixin/powershell_type_coercions_spec.rb +0 -84
  736. data/spec/unit/mixin/properties_spec.rb +0 -107
  737. data/spec/unit/mixin/proxified_socket_spec.rb +0 -97
  738. data/spec/unit/mixin/securable_spec.rb +0 -313
  739. data/spec/unit/mixin/shell_out_spec.rb +0 -308
  740. data/spec/unit/mixin/subclass_directive_spec.rb +0 -45
  741. data/spec/unit/mixin/template_spec.rb +0 -317
  742. data/spec/unit/mixin/unformatter_spec.rb +0 -60
  743. data/spec/unit/mixin/uris_spec.rb +0 -57
  744. data/spec/unit/mixin/user_context_spec.rb +0 -99
  745. data/spec/unit/mixin/versioned_api_spec.rb +0 -128
  746. data/spec/unit/mixin/which.rb +0 -170
  747. data/spec/unit/mixin/why_run_spec.rb +0 -53
  748. data/spec/unit/mixin/windows_architecture_helper_spec.rb +0 -85
  749. data/spec/unit/mixin/xml_escape_spec.rb +0 -54
  750. data/spec/unit/monologger_spec.rb +0 -45
  751. data/spec/unit/node/attribute_spec.rb +0 -1322
  752. data/spec/unit/node/immutable_collections_spec.rb +0 -258
  753. data/spec/unit/node/vivid_mash_spec.rb +0 -500
  754. data/spec/unit/node_map_spec.rb +0 -276
  755. data/spec/unit/node_spec.rb +0 -2038
  756. data/spec/unit/org_group_spec.rb +0 -45
  757. data/spec/unit/org_spec.rb +0 -196
  758. data/spec/unit/platform/query_helpers_spec.rb +0 -48
  759. data/spec/unit/policy_builder/dynamic_spec.rb +0 -256
  760. data/spec/unit/policy_builder/expand_node_object_spec.rb +0 -311
  761. data/spec/unit/policy_builder/policyfile_spec.rb +0 -960
  762. data/spec/unit/policy_builder_spec.rb +0 -26
  763. data/spec/unit/property/state_spec.rb +0 -514
  764. data/spec/unit/property/validation_spec.rb +0 -813
  765. data/spec/unit/property_spec.rb +0 -1329
  766. data/spec/unit/provider/apt_preference_spec.rb +0 -91
  767. data/spec/unit/provider/apt_repository_spec.rb +0 -370
  768. data/spec/unit/provider/apt_update_spec.rb +0 -119
  769. data/spec/unit/provider/batch_spec.rb +0 -130
  770. data/spec/unit/provider/cookbook_file/content_spec.rb +0 -39
  771. data/spec/unit/provider/cookbook_file_spec.rb +0 -59
  772. data/spec/unit/provider/cron/unix_spec.rb +0 -144
  773. data/spec/unit/provider/cron_spec.rb +0 -1252
  774. data/spec/unit/provider/directory_spec.rb +0 -289
  775. data/spec/unit/provider/dsc_resource_spec.rb +0 -313
  776. data/spec/unit/provider/dsc_script_spec.rb +0 -173
  777. data/spec/unit/provider/execute_spec.rb +0 -244
  778. data/spec/unit/provider/file/content_spec.rb +0 -114
  779. data/spec/unit/provider/file_spec.rb +0 -58
  780. data/spec/unit/provider/git_spec.rb +0 -822
  781. data/spec/unit/provider/group/dscl_spec.rb +0 -339
  782. data/spec/unit/provider/group/gpasswd_spec.rb +0 -119
  783. data/spec/unit/provider/group/groupadd_spec.rb +0 -195
  784. data/spec/unit/provider/group/groupmod_spec.rb +0 -136
  785. data/spec/unit/provider/group/pw_spec.rb +0 -141
  786. data/spec/unit/provider/group/solaris_spec.rb +0 -106
  787. data/spec/unit/provider/group/usermod_spec.rb +0 -112
  788. data/spec/unit/provider/group/windows_spec.rb +0 -130
  789. data/spec/unit/provider/group_spec.rb +0 -285
  790. data/spec/unit/provider/http_request_spec.rb +0 -147
  791. data/spec/unit/provider/ifconfig/aix_spec.rb +0 -180
  792. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -332
  793. data/spec/unit/provider/ifconfig/redhat_spec.rb +0 -83
  794. data/spec/unit/provider/ifconfig_spec.rb +0 -247
  795. data/spec/unit/provider/launchd_spec.rb +0 -234
  796. data/spec/unit/provider/link_spec.rb +0 -425
  797. data/spec/unit/provider/log_spec.rb +0 -94
  798. data/spec/unit/provider/mdadm_spec.rb +0 -138
  799. data/spec/unit/provider/mount/aix_spec.rb +0 -277
  800. data/spec/unit/provider/mount/linux_spec.rb +0 -131
  801. data/spec/unit/provider/mount/mount_spec.rb +0 -590
  802. data/spec/unit/provider/mount/solaris_spec.rb +0 -822
  803. data/spec/unit/provider/mount/windows_spec.rb +0 -150
  804. data/spec/unit/provider/mount_spec.rb +0 -222
  805. data/spec/unit/provider/package/apt_spec.rb +0 -703
  806. data/spec/unit/provider/package/bff_spec.rb +0 -188
  807. data/spec/unit/provider/package/cab_spec.rb +0 -272
  808. data/spec/unit/provider/package/chocolatey_spec.rb +0 -574
  809. data/spec/unit/provider/package/deb_spec.rb +0 -135
  810. data/spec/unit/provider/package/dnf/python_helper_spec.rb +0 -36
  811. data/spec/unit/provider/package/dpkg_spec.rb +0 -314
  812. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +0 -147
  813. data/spec/unit/provider/package/freebsd/port_spec.rb +0 -151
  814. data/spec/unit/provider/package/homebrew_spec.rb +0 -402
  815. data/spec/unit/provider/package/ips_spec.rb +0 -233
  816. data/spec/unit/provider/package/macports_spec.rb +0 -203
  817. data/spec/unit/provider/package/msu_spec.rb +0 -283
  818. data/spec/unit/provider/package/openbsd_spec.rb +0 -136
  819. data/spec/unit/provider/package/pacman_spec.rb +0 -109
  820. data/spec/unit/provider/package/paludis_spec.rb +0 -134
  821. data/spec/unit/provider/package/portage_spec.rb +0 -179
  822. data/spec/unit/provider/package/powershell_spec.rb +0 -565
  823. data/spec/unit/provider/package/rpm_spec.rb +0 -440
  824. data/spec/unit/provider/package/rubygems_spec.rb +0 -1187
  825. data/spec/unit/provider/package/smartos_spec.rb +0 -110
  826. data/spec/unit/provider/package/snap_spec.rb +0 -208
  827. data/spec/unit/provider/package/solaris_spec.rb +0 -168
  828. data/spec/unit/provider/package/windows/exe_spec.rb +0 -201
  829. data/spec/unit/provider/package/windows/msi_spec.rb +0 -168
  830. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +0 -78
  831. data/spec/unit/provider/package/windows_spec.rb +0 -441
  832. data/spec/unit/provider/package/yum/python_helper_spec.rb +0 -30
  833. data/spec/unit/provider/package/yum/yum_cache_spec.rb +0 -109
  834. data/spec/unit/provider/package/zypper_spec.rb +0 -494
  835. data/spec/unit/provider/package_spec.rb +0 -791
  836. data/spec/unit/provider/powershell_script_spec.rb +0 -157
  837. data/spec/unit/provider/registry_key_spec.rb +0 -487
  838. data/spec/unit/provider/remote_directory_spec.rb +0 -236
  839. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +0 -245
  840. data/spec/unit/provider/remote_file/content_spec.rb +0 -253
  841. data/spec/unit/provider/remote_file/fetcher_spec.rb +0 -95
  842. data/spec/unit/provider/remote_file/ftp_spec.rb +0 -217
  843. data/spec/unit/provider/remote_file/http_spec.rb +0 -334
  844. data/spec/unit/provider/remote_file/local_file_spec.rb +0 -105
  845. data/spec/unit/provider/remote_file/network_file_spec.rb +0 -50
  846. data/spec/unit/provider/remote_file/sftp_spec.rb +0 -150
  847. data/spec/unit/provider/remote_file_spec.rb +0 -61
  848. data/spec/unit/provider/route_spec.rb +0 -268
  849. data/spec/unit/provider/ruby_block_spec.rb +0 -45
  850. data/spec/unit/provider/script_spec.rb +0 -67
  851. data/spec/unit/provider/service/aix_service_spec.rb +0 -195
  852. data/spec/unit/provider/service/aixinit_service_spec.rb +0 -272
  853. data/spec/unit/provider/service/arch_service_spec.rb +0 -326
  854. data/spec/unit/provider/service/debian_service_spec.rb +0 -273
  855. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -621
  856. data/spec/unit/provider/service/gentoo_service_spec.rb +0 -145
  857. data/spec/unit/provider/service/init_service_spec.rb +0 -235
  858. data/spec/unit/provider/service/insserv_service_spec.rb +0 -75
  859. data/spec/unit/provider/service/invokercd_service_spec.rb +0 -211
  860. data/spec/unit/provider/service/macosx_spec.rb +0 -337
  861. data/spec/unit/provider/service/openbsd_service_spec.rb +0 -553
  862. data/spec/unit/provider/service/redhat_spec.rb +0 -253
  863. data/spec/unit/provider/service/simple_service_spec.rb +0 -171
  864. data/spec/unit/provider/service/solaris_smf_service_spec.rb +0 -292
  865. data/spec/unit/provider/service/systemd_service_spec.rb +0 -504
  866. data/spec/unit/provider/service/upstart_service_spec.rb +0 -322
  867. data/spec/unit/provider/service/windows_spec.rb +0 -986
  868. data/spec/unit/provider/service_spec.rb +0 -168
  869. data/spec/unit/provider/subversion_spec.rb +0 -364
  870. data/spec/unit/provider/systemd_unit_spec.rb +0 -1039
  871. data/spec/unit/provider/template/content_spec.rb +0 -169
  872. data/spec/unit/provider/template_spec.rb +0 -86
  873. data/spec/unit/provider/user/aix_spec.rb +0 -96
  874. data/spec/unit/provider/user/linux_spec.rb +0 -178
  875. data/spec/unit/provider/user/mac_spec.rb +0 -38
  876. data/spec/unit/provider/user/pw_spec.rb +0 -235
  877. data/spec/unit/provider/user/solaris_spec.rb +0 -177
  878. data/spec/unit/provider/user/windows_spec.rb +0 -198
  879. data/spec/unit/provider/user_spec.rb +0 -520
  880. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -46
  881. data/spec/unit/provider/windows_env_spec.rb +0 -385
  882. data/spec/unit/provider/windows_path_spec.rb +0 -60
  883. data/spec/unit/provider/windows_task_spec.rb +0 -436
  884. data/spec/unit/provider/yum_repository_spec.rb +0 -35
  885. data/spec/unit/provider/zypper_repository_spec.rb +0 -169
  886. data/spec/unit/provider_spec.rb +0 -215
  887. data/spec/unit/pure_application_spec.rb +0 -32
  888. data/spec/unit/recipe_spec.rb +0 -703
  889. data/spec/unit/resource/alternatives_spec.rb +0 -120
  890. data/spec/unit/resource/apt_package_spec.rb +0 -71
  891. data/spec/unit/resource/apt_preference_spec.rb +0 -39
  892. data/spec/unit/resource/apt_repository_spec.rb +0 -79
  893. data/spec/unit/resource/apt_update_spec.rb +0 -44
  894. data/spec/unit/resource/archive_file_spec.rb +0 -466
  895. data/spec/unit/resource/bash_spec.rb +0 -45
  896. data/spec/unit/resource/batch_spec.rb +0 -46
  897. data/spec/unit/resource/bff_package_spec.rb +0 -51
  898. data/spec/unit/resource/breakpoint_spec.rb +0 -64
  899. data/spec/unit/resource/build_essential_spec.rb +0 -77
  900. data/spec/unit/resource/cab_package_spec.rb +0 -64
  901. data/spec/unit/resource/chef_client_config_spec.rb +0 -145
  902. data/spec/unit/resource/chef_client_cron_spec.rb +0 -161
  903. data/spec/unit/resource/chef_client_launchd_spec.rb +0 -132
  904. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +0 -186
  905. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +0 -108
  906. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +0 -68
  907. data/spec/unit/resource/chef_gem_spec.rb +0 -122
  908. data/spec/unit/resource/chef_handler_spec.rb +0 -40
  909. data/spec/unit/resource/chef_sleep_spec.rb +0 -30
  910. data/spec/unit/resource/chef_vault_secret_spec.rb +0 -40
  911. data/spec/unit/resource/chocolatey_config_spec.rb +0 -93
  912. data/spec/unit/resource/chocolatey_feature_spec.rb +0 -89
  913. data/spec/unit/resource/chocolatey_installer_spec.rb +0 -151
  914. data/spec/unit/resource/chocolatey_package_spec.rb +0 -106
  915. data/spec/unit/resource/chocolatey_source_spec.rb +0 -151
  916. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +0 -45
  917. data/spec/unit/resource/conditional_spec.rb +0 -254
  918. data/spec/unit/resource/cookbook_file_spec.rb +0 -93
  919. data/spec/unit/resource/cron_access_spec.rb +0 -36
  920. data/spec/unit/resource/cron_d_spec.rb +0 -84
  921. data/spec/unit/resource/cron_spec.rb +0 -167
  922. data/spec/unit/resource/csh_spec.rb +0 -45
  923. data/spec/unit/resource/directory_spec.rb +0 -69
  924. data/spec/unit/resource/dmg_package_spec.rb +0 -39
  925. data/spec/unit/resource/dnf_package_spec.rb +0 -114
  926. data/spec/unit/resource/dpkg_package_spec.rb +0 -72
  927. data/spec/unit/resource/dsc_resource_spec.rb +0 -102
  928. data/spec/unit/resource/dsc_script_spec.rb +0 -134
  929. data/spec/unit/resource/execute_spec.rb +0 -282
  930. data/spec/unit/resource/file/verification/json_spec.rb +0 -72
  931. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +0 -103
  932. data/spec/unit/resource/file/verification/yaml_spec.rb +0 -67
  933. data/spec/unit/resource/file/verification_spec.rb +0 -147
  934. data/spec/unit/resource/file_spec.rb +0 -127
  935. data/spec/unit/resource/freebsd_package_spec.rb +0 -77
  936. data/spec/unit/resource/gem_package_spec.rb +0 -67
  937. data/spec/unit/resource/group_spec.rb +0 -165
  938. data/spec/unit/resource/helpers/cron_validations_spec.rb +0 -81
  939. data/spec/unit/resource/homebrew_cask_spec.rb +0 -58
  940. data/spec/unit/resource/homebrew_package_spec.rb +0 -68
  941. data/spec/unit/resource/homebrew_tap_spec.rb +0 -44
  942. data/spec/unit/resource/homebrew_update_spec.rb +0 -30
  943. data/spec/unit/resource/hostname_spec.rb +0 -47
  944. data/spec/unit/resource/http_request_spec.rb +0 -65
  945. data/spec/unit/resource/ifconfig_spec.rb +0 -101
  946. data/spec/unit/resource/inspec_input_spec.rb +0 -300
  947. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +0 -80
  948. data/spec/unit/resource/inspec_waiver_spec.rb +0 -312
  949. data/spec/unit/resource/ips_package_spec.rb +0 -54
  950. data/spec/unit/resource/kernel_module_spec.rb +0 -45
  951. data/spec/unit/resource/ksh_spec.rb +0 -45
  952. data/spec/unit/resource/launchd_spec.rb +0 -48
  953. data/spec/unit/resource/link_spec.rb +0 -120
  954. data/spec/unit/resource/locale_spec.rb +0 -189
  955. data/spec/unit/resource/log_spec.rb +0 -64
  956. data/spec/unit/resource/macos_pkg_spec.rb +0 -38
  957. data/spec/unit/resource/macos_user_defaults_spec.rb +0 -76
  958. data/spec/unit/resource/macosx_service.rb +0 -37
  959. data/spec/unit/resource/macports_package_spec.rb +0 -51
  960. data/spec/unit/resource/mdadm_spec.rb +0 -104
  961. data/spec/unit/resource/mount_spec.rb +0 -201
  962. data/spec/unit/resource/msu_package_spec.rb +0 -67
  963. data/spec/unit/resource/notify_group_spec.rb +0 -34
  964. data/spec/unit/resource/ohai_hint_spec.rb +0 -44
  965. data/spec/unit/resource/ohai_spec.rb +0 -185
  966. data/spec/unit/resource/openbsd_package_spec.rb +0 -58
  967. data/spec/unit/resource/openssl_dhparam_spec.rb +0 -61
  968. data/spec/unit/resource/openssl_ec_private_key_spec.rb +0 -64
  969. data/spec/unit/resource/openssl_ec_public_key_spec.rb +0 -43
  970. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +0 -64
  971. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +0 -43
  972. data/spec/unit/resource/openssl_x509_certificate_spec.rb +0 -72
  973. data/spec/unit/resource/openssl_x509_crl_spec.rb +0 -61
  974. data/spec/unit/resource/openssl_x509_request.rb +0 -68
  975. data/spec/unit/resource/osx_profile_spec.rb +0 -360
  976. data/spec/unit/resource/package_spec.rb +0 -98
  977. data/spec/unit/resource/pacman_package_spec.rb +0 -46
  978. data/spec/unit/resource/paludis_package_spec.rb +0 -36
  979. data/spec/unit/resource/perl_spec.rb +0 -44
  980. data/spec/unit/resource/plist_spec.rb +0 -130
  981. data/spec/unit/resource/portage_package_spec.rb +0 -46
  982. data/spec/unit/resource/powershell_package_source_spec.rb +0 -220
  983. data/spec/unit/resource/powershell_package_spec.rb +0 -98
  984. data/spec/unit/resource/powershell_script_spec.rb +0 -65
  985. data/spec/unit/resource/python_spec.rb +0 -40
  986. data/spec/unit/resource/reboot_spec.rb +0 -47
  987. data/spec/unit/resource/registry_key_spec.rb +0 -215
  988. data/spec/unit/resource/remote_directory_spec.rb +0 -118
  989. data/spec/unit/resource/remote_file_spec.rb +0 -220
  990. data/spec/unit/resource/resource_notification_spec.rb +0 -169
  991. data/spec/unit/resource/rest_resource_spec.rb +0 -381
  992. data/spec/unit/resource/rhsm_errata_level_spec.rb +0 -50
  993. data/spec/unit/resource/rhsm_errata_spec.rb +0 -39
  994. data/spec/unit/resource/rhsm_register_spec.rb +0 -308
  995. data/spec/unit/resource/rhsm_repo_spec.rb +0 -70
  996. data/spec/unit/resource/rhsm_subscription_spec.rb +0 -145
  997. data/spec/unit/resource/route_spec.rb +0 -100
  998. data/spec/unit/resource/rpm_package_spec.rb +0 -62
  999. data/spec/unit/resource/ruby_block_spec.rb +0 -58
  1000. data/spec/unit/resource/ruby_spec.rb +0 -39
  1001. data/spec/unit/resource/scm/git_spec.rb +0 -110
  1002. data/spec/unit/resource/scm/scm.rb +0 -122
  1003. data/spec/unit/resource/scm/subversion_spec.rb +0 -90
  1004. data/spec/unit/resource/script_spec.rb +0 -57
  1005. data/spec/unit/resource/selinux_boolean_spec.rb +0 -92
  1006. data/spec/unit/resource/selinux_fcontext_spec.rb +0 -65
  1007. data/spec/unit/resource/selinux_install_spec.rb +0 -60
  1008. data/spec/unit/resource/selinux_login_spec.rb +0 -73
  1009. data/spec/unit/resource/selinux_module_spec.rb +0 -55
  1010. data/spec/unit/resource/selinux_permissive_spec.rb +0 -39
  1011. data/spec/unit/resource/selinux_port_spec.rb +0 -42
  1012. data/spec/unit/resource/selinux_state_spec.rb +0 -46
  1013. data/spec/unit/resource/selinux_user_spec.rb +0 -92
  1014. data/spec/unit/resource/service_spec.rb +0 -203
  1015. data/spec/unit/resource/smartos_package_spec.rb +0 -52
  1016. data/spec/unit/resource/snap_package_spec.rb +0 -60
  1017. data/spec/unit/resource/solaris_package_spec.rb +0 -52
  1018. data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +0 -50
  1019. data/spec/unit/resource/sudo_spec.rb +0 -99
  1020. data/spec/unit/resource/swap_file_spec.rb +0 -39
  1021. data/spec/unit/resource/sysctl_spec.rb +0 -76
  1022. data/spec/unit/resource/systemd_unit_spec.rb +0 -130
  1023. data/spec/unit/resource/template_spec.rb +0 -222
  1024. data/spec/unit/resource/timezone_spec.rb +0 -102
  1025. data/spec/unit/resource/user/linux_user_spec.rb +0 -42
  1026. data/spec/unit/resource/user/windows_user_spec.rb +0 -36
  1027. data/spec/unit/resource/user_spec.rb +0 -121
  1028. data/spec/unit/resource/user_ulimit_spec.rb +0 -66
  1029. data/spec/unit/resource/windows_ad_join_spec.rb +0 -55
  1030. data/spec/unit/resource/windows_audit_policy_spec.rb +0 -64
  1031. data/spec/unit/resource/windows_auto_run_spec.rb +0 -50
  1032. data/spec/unit/resource/windows_certificate_spec.rb +0 -95
  1033. data/spec/unit/resource/windows_defender_exclusion_spec.rb +0 -62
  1034. data/spec/unit/resource/windows_defender_spec.rb +0 -71
  1035. data/spec/unit/resource/windows_dfs_folder_spec.rb +0 -39
  1036. data/spec/unit/resource/windows_dfs_namespace_spec.rb +0 -39
  1037. data/spec/unit/resource/windows_dfs_server_spec.rb +0 -34
  1038. data/spec/unit/resource/windows_dns_record_spec.rb +0 -55
  1039. data/spec/unit/resource/windows_dns_zone_spec.rb +0 -51
  1040. data/spec/unit/resource/windows_env_spec.rb +0 -75
  1041. data/spec/unit/resource/windows_feature_dism_spec.rb +0 -57
  1042. data/spec/unit/resource/windows_feature_powershell_spec.rb +0 -83
  1043. data/spec/unit/resource/windows_feature_spec.rb +0 -64
  1044. data/spec/unit/resource/windows_firewall_profile_spec.rb +0 -77
  1045. data/spec/unit/resource/windows_firewall_rule_spec.rb +0 -510
  1046. data/spec/unit/resource/windows_font_spec.rb +0 -43
  1047. data/spec/unit/resource/windows_package_spec.rb +0 -125
  1048. data/spec/unit/resource/windows_pagefile_spec.rb +0 -44
  1049. data/spec/unit/resource/windows_path_spec.rb +0 -40
  1050. data/spec/unit/resource/windows_printer_port_spec.rb +0 -62
  1051. data/spec/unit/resource/windows_printer_spec.rb +0 -52
  1052. data/spec/unit/resource/windows_service_spec.rb +0 -122
  1053. data/spec/unit/resource/windows_share_spec.rb +0 -48
  1054. data/spec/unit/resource/windows_shortcut_spec.rb +0 -38
  1055. data/spec/unit/resource/windows_task_spec.rb +0 -403
  1056. data/spec/unit/resource/windows_uac_spec.rb +0 -50
  1057. data/spec/unit/resource/windows_update_settings_spec.rb +0 -64
  1058. data/spec/unit/resource/windows_user_privilege_spec.rb +0 -55
  1059. data/spec/unit/resource/windows_workgroup_spec.rb +0 -74
  1060. data/spec/unit/resource/yum_package_spec.rb +0 -159
  1061. data/spec/unit/resource/yum_repository_spec.rb +0 -156
  1062. data/spec/unit/resource/zypper_package_spec.rb +0 -51
  1063. data/spec/unit/resource/zypper_repository_spec.rb +0 -115
  1064. data/spec/unit/resource_builder_spec.rb +0 -1
  1065. data/spec/unit/resource_collection/resource_list_spec.rb +0 -137
  1066. data/spec/unit/resource_collection/resource_set_spec.rb +0 -244
  1067. data/spec/unit/resource_collection/stepable_iterator_spec.rb +0 -144
  1068. data/spec/unit/resource_collection_spec.rb +0 -408
  1069. data/spec/unit/resource_definition_spec.rb +0 -117
  1070. data/spec/unit/resource_inspector_spec.rb +0 -101
  1071. data/spec/unit/resource_reporter_spec.rb +0 -802
  1072. data/spec/unit/resource_resolver_spec.rb +0 -52
  1073. data/spec/unit/resource_spec.rb +0 -1484
  1074. data/spec/unit/role_spec.rb +0 -363
  1075. data/spec/unit/run_context/child_run_context_spec.rb +0 -126
  1076. data/spec/unit/run_context/cookbook_compiler_spec.rb +0 -236
  1077. data/spec/unit/run_context_spec.rb +0 -257
  1078. data/spec/unit/run_list/run_list_expansion_spec.rb +0 -147
  1079. data/spec/unit/run_list/run_list_item_spec.rb +0 -117
  1080. data/spec/unit/run_list/versioned_recipe_list_spec.rb +0 -197
  1081. data/spec/unit/run_list_spec.rb +0 -312
  1082. data/spec/unit/run_lock_spec.rb +0 -144
  1083. data/spec/unit/run_status_spec.rb +0 -144
  1084. data/spec/unit/runner_spec.rb +0 -397
  1085. data/spec/unit/scan_access_control_spec.rb +0 -183
  1086. data/spec/unit/search/query_spec.rb +0 -291
  1087. data/spec/unit/secret_fetcher/akeyless_vault_spec.rb +0 -37
  1088. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +0 -70
  1089. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +0 -149
  1090. data/spec/unit/secret_fetcher/hashi_vault_spec.rb +0 -126
  1091. data/spec/unit/secret_fetcher_spec.rb +0 -82
  1092. data/spec/unit/server_api_spec.rb +0 -151
  1093. data/spec/unit/server_api_versions_spec.rb +0 -66
  1094. data/spec/unit/shell/model_wrapper_spec.rb +0 -96
  1095. data/spec/unit/shell/shell_ext_spec.rb +0 -196
  1096. data/spec/unit/shell/shell_session_spec.rb +0 -218
  1097. data/spec/unit/shell_spec.rb +0 -178
  1098. data/spec/unit/train_transport_spec.rb +0 -85
  1099. data/spec/unit/user_spec.rb +0 -275
  1100. data/spec/unit/user_v1_spec.rb +0 -585
  1101. data/spec/unit/util/backup_spec.rb +0 -141
  1102. data/spec/unit/util/diff_spec.rb +0 -562
  1103. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -272
  1104. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -248
  1105. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -192
  1106. data/spec/unit/util/dsc/resource_store.rb +0 -78
  1107. data/spec/unit/util/editor_spec.rb +0 -152
  1108. data/spec/unit/util/file_edit_spec.rb +0 -224
  1109. data/spec/unit/util/powershell/ps_credential_spec.rb +0 -51
  1110. data/spec/unit/util/selinux_spec.rb +0 -160
  1111. data/spec/unit/util/threaded_job_queue_spec.rb +0 -60
  1112. data/spec/unit/util/windows/logon_session_spec.rb +0 -285
  1113. data/spec/unit/version/platform_spec.rb +0 -60
  1114. data/spec/unit/version_class_spec.rb +0 -171
  1115. data/spec/unit/version_constraint/platform_spec.rb +0 -45
  1116. data/spec/unit/version_constraint_spec.rb +0 -179
  1117. data/spec/unit/version_string_spec.rb +0 -79
  1118. data/spec/unit/win32/error_spec.rb +0 -77
  1119. data/spec/unit/win32/link_spec.rb +0 -73
  1120. data/spec/unit/win32/registry_spec.rb +0 -394
  1121. data/spec/unit/win32/security_spec.rb +0 -136
  1122. 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