chef 11.18.12 → 12.0.0.alpha.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (307) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +10 -0
  3. data/README.md +1 -1
  4. data/distro/common/html/_sources/index.txt +5 -2
  5. data/distro/common/html/_sources/knife_serve.txt +19 -0
  6. data/distro/common/html/_sources/knife_ssl_check.txt +2 -2
  7. data/distro/common/html/_sources/knife_ssl_fetch.txt +2 -2
  8. data/distro/common/html/_static/basic.css +1 -1
  9. data/distro/common/html/_static/doctools.js +1 -1
  10. data/distro/common/html/_static/searchtools.js +1 -1
  11. data/distro/common/html/_static/websupport.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +19 -9
  13. data/distro/common/html/ctl_chef_server.html +7 -1
  14. data/distro/common/html/ctl_chef_shell.html +3 -4
  15. data/distro/common/html/ctl_chef_solo.html +12 -7
  16. data/distro/common/html/index.html +19 -12
  17. data/distro/common/html/knife.html +1 -2
  18. data/distro/common/html/knife_bootstrap.html +16 -5
  19. data/distro/common/html/knife_client.html +8 -5
  20. data/distro/common/html/knife_common_options.html +11 -12
  21. data/distro/common/html/knife_configure.html +2 -3
  22. data/distro/common/html/knife_cookbook.html +16 -17
  23. data/distro/common/html/knife_cookbook_site.html +19 -18
  24. data/distro/common/html/knife_data_bag.html +6 -7
  25. data/distro/common/html/knife_delete.html +2 -3
  26. data/distro/common/html/knife_deps.html +2 -3
  27. data/distro/common/html/knife_diff.html +3 -4
  28. data/distro/common/html/knife_download.html +6 -7
  29. data/distro/common/html/knife_edit.html +0 -1
  30. data/distro/common/html/knife_environment.html +3 -4
  31. data/distro/common/html/knife_exec.html +0 -1
  32. data/distro/common/html/knife_index_rebuild.html +0 -1
  33. data/distro/common/html/knife_list.html +5 -6
  34. data/distro/common/html/knife_node.html +13 -6
  35. data/distro/common/html/knife_raw.html +0 -1
  36. data/distro/common/html/knife_recipe_list.html +0 -1
  37. data/distro/common/html/knife_role.html +1 -2
  38. data/distro/common/html/knife_search.html +2 -3
  39. data/distro/common/html/knife_serve.html +79 -0
  40. data/distro/common/html/knife_show.html +1 -2
  41. data/distro/common/html/knife_ssh.html +2 -3
  42. data/distro/common/html/knife_ssl_check.html +12 -9
  43. data/distro/common/html/knife_ssl_fetch.html +9 -10
  44. data/distro/common/html/knife_status.html +2 -3
  45. data/distro/common/html/knife_tag.html +0 -1
  46. data/distro/common/html/knife_upload.html +3 -4
  47. data/distro/common/html/knife_user.html +2 -3
  48. data/distro/common/html/knife_using.html +0 -1
  49. data/distro/common/html/knife_xargs.html +3 -4
  50. data/distro/common/html/search.html +0 -1
  51. data/distro/common/html/searchindex.js +1 -1
  52. data/lib/chef/api_client.rb +1 -1
  53. data/lib/chef/application.rb +24 -67
  54. data/lib/chef/application/client.rb +1 -1
  55. data/lib/chef/application/knife.rb +1 -1
  56. data/lib/chef/chef_fs/chef_fs_data_store.rb +2 -3
  57. data/lib/chef/chef_fs/command_line.rb +2 -3
  58. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -5
  59. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -2
  60. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -2
  61. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +2 -2
  62. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -3
  63. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -5
  64. data/lib/chef/config.rb +26 -2
  65. data/lib/chef/config_fetcher.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  67. data/lib/chef/cookbook/metadata.rb +1 -1
  68. data/lib/chef/cookbook/synchronizer.rb +50 -8
  69. data/lib/chef/cookbook_uploader.rb +9 -23
  70. data/lib/chef/cookbook_version.rb +3 -2
  71. data/lib/chef/data_bag.rb +1 -1
  72. data/lib/chef/data_bag_item.rb +1 -1
  73. data/lib/chef/dsl/recipe.rb +1 -14
  74. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  75. data/lib/chef/environment.rb +1 -1
  76. data/lib/chef/exceptions.rb +2 -24
  77. data/lib/chef/file_content_management/tempfile.rb +8 -1
  78. data/lib/chef/formatters/base.rb +0 -7
  79. data/lib/chef/http.rb +12 -19
  80. data/lib/chef/http/json_input.rb +12 -1
  81. data/lib/chef/json_compat.rb +45 -64
  82. data/lib/chef/knife.rb +2 -5
  83. data/lib/chef/knife/bootstrap.rb +2 -2
  84. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  85. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  86. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  87. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  88. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  89. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  90. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  91. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  92. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  93. data/lib/chef/knife/cookbook_site_install.rb +10 -34
  94. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  95. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  96. data/lib/chef/knife/cookbook_site_share.rb +3 -3
  97. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  98. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  99. data/lib/chef/knife/cookbook_upload.rb +1 -1
  100. data/lib/chef/knife/core/subcommand_loader.rb +0 -24
  101. data/lib/chef/knife/core/ui.rb +8 -7
  102. data/lib/chef/knife/deps.rb +2 -3
  103. data/lib/chef/knife/serve.rb +2 -1
  104. data/lib/chef/local_mode.rb +105 -0
  105. data/lib/chef/mixin/file_class.rb +1 -4
  106. data/lib/chef/mixin/shell_out.rb +15 -0
  107. data/lib/chef/mixin/windows_architecture_helper.rb +0 -16
  108. data/lib/chef/node.rb +1 -1
  109. data/lib/chef/platform/query_helpers.rb +1 -5
  110. data/lib/chef/policy_builder/expand_node_object.rb +3 -0
  111. data/lib/chef/provider.rb +2 -0
  112. data/lib/chef/provider/cookbook_file.rb +0 -1
  113. data/lib/chef/provider/deploy.rb +0 -1
  114. data/lib/chef/provider/deploy/revision.rb +1 -1
  115. data/lib/chef/provider/env.rb +10 -25
  116. data/lib/chef/provider/env/windows.rb +23 -10
  117. data/lib/chef/provider/execute.rb +0 -3
  118. data/lib/chef/provider/file.rb +0 -3
  119. data/lib/chef/provider/git.rb +0 -6
  120. data/lib/chef/provider/group/dscl.rb +9 -27
  121. data/lib/chef/provider/group/gpasswd.rb +0 -3
  122. data/lib/chef/provider/group/groupmod.rb +0 -4
  123. data/lib/chef/provider/group/suse.rb +0 -3
  124. data/lib/chef/provider/group/usermod.rb +0 -3
  125. data/lib/chef/provider/link.rb +22 -5
  126. data/lib/chef/provider/log.rb +15 -4
  127. data/lib/chef/provider/mdadm.rb +0 -3
  128. data/lib/chef/provider/mount/mount.rb +0 -2
  129. data/lib/chef/provider/mount/solaris.rb +0 -2
  130. data/lib/chef/provider/package.rb +0 -1
  131. data/lib/chef/provider/package/apt.rb +0 -3
  132. data/lib/chef/provider/package/dpkg.rb +0 -1
  133. data/lib/chef/provider/package/easy_install.rb +0 -4
  134. data/lib/chef/provider/package/freebsd/base.rb +0 -3
  135. data/lib/chef/provider/package/freebsd/pkgng.rb +0 -2
  136. data/lib/chef/provider/package/freebsd/port.rb +0 -2
  137. data/lib/chef/provider/package/ips.rb +0 -3
  138. data/lib/chef/provider/package/paludis.rb +0 -5
  139. data/lib/chef/provider/package/portage.rb +0 -2
  140. data/lib/chef/provider/package/rpm.rb +2 -4
  141. data/lib/chef/provider/package/rubygems.rb +0 -4
  142. data/lib/chef/provider/package/smartos.rb +0 -3
  143. data/lib/chef/provider/package/windows/msi.rb +0 -2
  144. data/lib/chef/provider/package/yum.rb +0 -4
  145. data/lib/chef/provider/package/zypper.rb +0 -3
  146. data/lib/chef/provider/registry_key.rb +0 -2
  147. data/lib/chef/provider/remote_directory.rb +0 -1
  148. data/lib/chef/provider/remote_file.rb +0 -1
  149. data/lib/chef/provider/remote_file/cache_control_data.rb +1 -3
  150. data/lib/chef/provider/remote_file/content.rb +0 -1
  151. data/lib/chef/provider/remote_file/fetcher.rb +0 -2
  152. data/lib/chef/provider/remote_file/ftp.rb +0 -1
  153. data/lib/chef/provider/resource_update.rb +0 -3
  154. data/lib/chef/provider/service/freebsd.rb +0 -3
  155. data/lib/chef/provider/service/init.rb +0 -3
  156. data/lib/chef/provider/service/macosx.rb +0 -1
  157. data/lib/chef/provider/service/redhat.rb +0 -2
  158. data/lib/chef/provider/service/simple.rb +0 -3
  159. data/lib/chef/provider/service/solaris.rb +0 -3
  160. data/lib/chef/provider/service/systemd.rb +15 -14
  161. data/lib/chef/provider/service/windows.rb +0 -3
  162. data/lib/chef/provider/subversion.rb +0 -2
  163. data/lib/chef/provider/template.rb +0 -2
  164. data/lib/chef/provider/template/content.rb +0 -1
  165. data/lib/chef/provider/user/dscl.rb +156 -549
  166. data/lib/chef/provider/user/solaris.rb +0 -1
  167. data/lib/chef/provider/user/useradd.rb +0 -3
  168. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  169. data/lib/chef/providers.rb +0 -1
  170. data/lib/chef/resource.rb +1 -4
  171. data/lib/chef/resource/freebsd_package.rb +2 -10
  172. data/lib/chef/resource/lwrp_base.rb +1 -12
  173. data/lib/chef/resource/user.rb +0 -18
  174. data/lib/chef/resource_collection.rb +1 -1
  175. data/lib/chef/resource_reporter.rb +10 -10
  176. data/lib/chef/resources.rb +0 -1
  177. data/lib/chef/role.rb +3 -3
  178. data/lib/chef/run_list.rb +1 -1
  179. data/lib/chef/tasks/chef_repo.rake +131 -264
  180. data/lib/chef/user.rb +1 -1
  181. data/lib/chef/util/path_helper.rb +2 -2
  182. data/lib/chef/version.rb +9 -1
  183. data/lib/chef/win32/api/system.rb +0 -9
  184. data/spec/data/bootstrap/test-hints.erb +1 -1
  185. data/spec/data/bootstrap/test.erb +1 -1
  186. data/spec/functional/dsl/reboot_pending_spec.rb +53 -58
  187. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  188. data/spec/functional/knife/exec_spec.rb +1 -1
  189. data/spec/functional/mixin/shell_out_spec.rb +48 -0
  190. data/spec/functional/resource/base.rb +0 -10
  191. data/spec/functional/resource/group_spec.rb +1 -5
  192. data/spec/functional/resource/link_spec.rb +8 -0
  193. data/spec/functional/resource/{user/useradd_spec.rb → user_spec.rb} +1 -1
  194. data/spec/integration/knife/chef_fs_data_store_spec.rb +3 -3
  195. data/spec/integration/knife/chef_repo_path_spec.rb +1 -6
  196. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  197. data/spec/integration/knife/chefignore_spec.rb +1 -1
  198. data/spec/integration/knife/common_options_spec.rb +50 -3
  199. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  200. data/spec/integration/knife/delete_spec.rb +1 -1
  201. data/spec/integration/knife/deps_spec.rb +1 -1
  202. data/spec/integration/knife/diff_spec.rb +3 -3
  203. data/spec/integration/knife/download_spec.rb +3 -3
  204. data/spec/integration/knife/list_spec.rb +1 -1
  205. data/spec/integration/knife/raw_spec.rb +1 -11
  206. data/spec/integration/knife/redirection_spec.rb +1 -1
  207. data/spec/integration/knife/serve_spec.rb +2 -2
  208. data/spec/integration/knife/show_spec.rb +1 -1
  209. data/spec/integration/knife/upload_spec.rb +9 -9
  210. data/spec/spec_helper.rb +0 -9
  211. data/spec/support/pedant/pedant_config.rb +2 -1
  212. data/spec/support/pedant/run_pedant.rb +2 -1
  213. data/spec/support/platform_helpers.rb +5 -24
  214. data/spec/support/shared/integration/integration_helper.rb +2 -1
  215. data/spec/support/shared/matchers.rb +17 -0
  216. data/spec/tiny_server.rb +1 -2
  217. data/spec/unit/api_client_spec.rb +3 -3
  218. data/spec/unit/application_spec.rb +9 -32
  219. data/spec/unit/config_fetcher_spec.rb +1 -1
  220. data/spec/unit/cookbook/metadata_spec.rb +3 -7
  221. data/spec/unit/cookbook/synchronizer_spec.rb +441 -226
  222. data/spec/unit/cookbook_loader_spec.rb +1 -1
  223. data/spec/unit/cookbook_uploader_spec.rb +160 -0
  224. data/spec/unit/cookbook_version_spec.rb +0 -4
  225. data/spec/unit/data_bag_item_spec.rb +1 -5
  226. data/spec/unit/data_bag_spec.rb +1 -5
  227. data/spec/unit/deprecation_spec.rb +1 -1
  228. data/spec/unit/dsl/recipe_spec.rb +12 -0
  229. data/spec/unit/encrypted_data_bag_item_spec.rb +7 -14
  230. data/spec/unit/environment_spec.rb +3 -7
  231. data/spec/unit/exceptions_spec.rb +0 -6
  232. data/spec/unit/http/json_input_spec.rb +128 -0
  233. data/spec/unit/json_compat_spec.rb +17 -58
  234. data/spec/unit/knife/client_create_spec.rb +3 -3
  235. data/spec/unit/knife/configure_client_spec.rb +6 -5
  236. data/spec/unit/knife/cookbook_delete_spec.rb +1 -1
  237. data/spec/unit/knife/cookbook_download_spec.rb +5 -5
  238. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -0
  239. data/spec/unit/knife/cookbook_metadata_spec.rb +1 -1
  240. data/spec/unit/knife/cookbook_site_download_spec.rb +10 -11
  241. data/spec/unit/knife/cookbook_site_install_spec.rb +116 -161
  242. data/spec/unit/knife/cookbook_site_share_spec.rb +8 -8
  243. data/spec/unit/knife/cookbook_upload_spec.rb +3 -2
  244. data/spec/unit/knife/core/bootstrap_context_spec.rb +3 -3
  245. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -66
  246. data/spec/unit/knife/data_bag_from_file_spec.rb +2 -1
  247. data/spec/unit/knife/tag_create_spec.rb +3 -3
  248. data/spec/unit/knife/tag_delete_spec.rb +3 -3
  249. data/spec/unit/knife/user_create_spec.rb +1 -1
  250. data/spec/unit/knife_spec.rb +14 -14
  251. data/spec/unit/lwrp_spec.rb +1 -21
  252. data/spec/unit/mixin/shell_out_spec.rb +92 -0
  253. data/spec/unit/node_spec.rb +0 -4
  254. data/spec/unit/platform/query_helpers_spec.rb +0 -23
  255. data/spec/unit/provider/env/windows_spec.rb +34 -70
  256. data/spec/unit/provider/env_spec.rb +11 -76
  257. data/spec/unit/provider/group/dscl_spec.rb +1 -38
  258. data/spec/unit/provider/log_spec.rb +18 -0
  259. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  260. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +1 -1
  261. data/spec/unit/provider/service/systemd_service_spec.rb +44 -27
  262. data/spec/unit/provider/user/dscl_spec.rb +264 -660
  263. data/spec/unit/provider/user/useradd_spec.rb +0 -1
  264. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  265. data/spec/unit/provider_spec.rb +12 -0
  266. data/spec/unit/recipe_spec.rb +0 -41
  267. data/spec/unit/resource_collection_spec.rb +1 -5
  268. data/spec/unit/resource_reporter_spec.rb +3 -51
  269. data/spec/unit/resource_spec.rb +3 -14
  270. data/spec/unit/rest_spec.rb +1 -4
  271. data/spec/unit/role_spec.rb +0 -10
  272. data/spec/unit/run_list_spec.rb +1 -5
  273. data/spec/unit/user_spec.rb +1 -5
  274. metadata +20 -100
  275. data/lib/chef/mixin/windows_env_helper.rb +0 -56
  276. data/lib/chef/provider/dsc_script.rb +0 -175
  277. data/lib/chef/resource/dsc_script.rb +0 -126
  278. data/lib/chef/streaming_cookbook_uploader.rb +0 -205
  279. data/lib/chef/util/dsc/configuration_generator.rb +0 -115
  280. data/lib/chef/util/dsc/lcm_output_parser.rb +0 -133
  281. data/lib/chef/util/dsc/local_configuration_manager.rb +0 -141
  282. data/lib/chef/util/dsc/resource_info.rb +0 -26
  283. data/lib/chef/util/powershell/cmdlet.rb +0 -136
  284. data/lib/chef/util/powershell/cmdlet_result.rb +0 -46
  285. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  286. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  287. data/spec/data/mac_users/10.7.plist.xml +0 -559
  288. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  289. data/spec/data/mac_users/10.8.plist.xml +0 -559
  290. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  291. data/spec/data/mac_users/10.9.plist.xml +0 -560
  292. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  293. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -51
  294. data/spec/functional/resource/dsc_script_spec.rb +0 -382
  295. data/spec/functional/resource/env_spec.rb +0 -182
  296. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  297. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -113
  298. data/spec/support/lib/chef/resource/zen_follower.rb +0 -46
  299. data/spec/support/shared/shared_examples.rb +0 -10
  300. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -63
  301. data/spec/unit/formatters/base_spec.rb +0 -48
  302. data/spec/unit/provider/dsc_script_spec.rb +0 -174
  303. data/spec/unit/resource/dsc_script_spec.rb +0 -98
  304. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -171
  305. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -169
  306. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -139
  307. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -1,169 +0,0 @@
1
- #
2
- # Author:: Bryan McLellan <btm@loftninjas.org>
3
- # Copyright:: Copyright (c) 2014 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 'chef/util/dsc/lcm_output_parser'
20
-
21
- describe Chef::Util::DSC::LocalConfigurationManager::Parser do
22
- context 'empty input parameter' do
23
- it 'returns an empty array for a 0 length string' do
24
- Chef::Util::DSC::LocalConfigurationManager::Parser::parse('').should be_empty
25
- end
26
-
27
- it 'returns an empty array for a nil input' do
28
- Chef::Util::DSC::LocalConfigurationManager::Parser::parse('').should be_empty
29
- end
30
- end
31
-
32
- context 'correctly formatted output from lcm' do
33
- it 'returns an empty array for a log with no resources' do
34
- str = <<EOF
35
- logtype: [machinename]: LCM: [ Start Set ]
36
- logtype: [machinename]: LCM: [ End Set ]
37
- EOF
38
- Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str).should be_empty
39
- end
40
-
41
- it 'returns a single resource when only 1 logged with the correct name' do
42
- str = <<EOF
43
- logtype: [machinename]: LCM: [ Start Set ]
44
- logtype: [machinename]: LCM: [ Start Resource ] [name]
45
- logtype: [machinename]: LCM: [ End Resource ] [name]
46
- logtype: [machinename]: LCM: [ End Set ]
47
- EOF
48
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
49
- resources.length.should eq(1)
50
- resources[0].name.should eq('[name]')
51
- end
52
-
53
- it 'identifies when a resource changes the state of the system' do
54
- str = <<EOF
55
- logtype: [machinename]: LCM: [ Start Set ]
56
- logtype: [machinename]: LCM: [ Start Resource ] [name]
57
- logtype: [machinename]: LCM: [ Start Set ] [name]
58
- logtype: [machinename]: LCM: [ End Set ] [name]
59
- logtype: [machinename]: LCM: [ End Resource ] [name]
60
- logtype: [machinename]: LCM: [ End Set ]
61
- EOF
62
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
63
- resources[0].changes_state?.should be_true
64
- end
65
-
66
- it 'preserves the log provided for how the system changed the state' do
67
- str = <<EOF
68
- logtype: [machinename]: LCM: [ Start Set ]
69
- logtype: [machinename]: LCM: [ Start Resource ] [name]
70
- logtype: [machinename]: LCM: [ Start Set ] [name]
71
- logtype: [machinename]: [message]
72
- logtype: [machinename]: LCM: [ End Set ] [name]
73
- logtype: [machinename]: LCM: [ End Resource ] [name]
74
- logtype: [machinename]: LCM: [ End Set ]
75
- EOF
76
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
77
- resources[0].change_log.should match_array(["[name]","[message]","[name]"])
78
- end
79
-
80
- it 'should return false for changes_state?' do
81
- str = <<EOF
82
- logtype: [machinename]: LCM: [ Start Set ]
83
- logtype: [machinename]: LCM: [ Start Resource ] [name]
84
- logtype: [machinename]: LCM: [ Skip Set ] [name]
85
- logtype: [machinename]: LCM: [ End Resource ] [name]
86
- logtype: [machinename]: LCM: [ End Set ]
87
- EOF
88
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
89
- resources[0].changes_state?.should be_false
90
- end
91
-
92
- it 'should return an empty array for change_log if changes_state? is false' do
93
- str = <<EOF
94
- logtype: [machinename]: LCM: [ Start Set ]
95
- logtype: [machinename]: LCM: [ Start Resource ] [name]
96
- logtype: [machinename]: LCM: [ Skip Set ] [name]
97
- logtype: [machinename]: LCM: [ End Resource ] [name]
98
- logtype: [machinename]: LCM: [ End Set ]
99
- EOF
100
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
101
- resources[0].change_log.should be_empty
102
- end
103
- end
104
-
105
- context 'Incorrectly formatted output from LCM' do
106
- it 'should allow missing a [End Resource] when its the last one and still find all the resource' do
107
- str = <<-EOF
108
- logtype: [machinename]: LCM: [ Start Set ]
109
- logtype: [machinename]: LCM: [ Start Resource ] [name]
110
- logtype: [machinename]: LCM: [ Start Test ]
111
- logtype: [machinename]: LCM: [ End Test ]
112
- logtype: [machinename]: LCM: [ Skip Set ]
113
- logtype: [machinename]: LCM: [ End Resource ]
114
- logtype: [machinename]: LCM: [ Start Resource ] [name2]
115
- logtype: [machinename]: LCM: [ Start Test ]
116
- logtype: [machinename]: LCM: [ End Test ]
117
- logtype: [machinename]: LCM: [ Start Set ]
118
- logtype: [machinename]: LCM: [ End Set ]
119
- logtype: [machinename]: LCM: [ End Set ]
120
- EOF
121
-
122
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
123
- resources[0].changes_state?.should be_false
124
- resources[1].changes_state?.should be_true
125
- end
126
-
127
- it 'should allow missing a [End Resource] when its the first one and still find all the resource' do
128
- str = <<-EOF
129
- logtype: [machinename]: LCM: [ Start Set ]
130
- logtype: [machinename]: LCM: [ Start Resource ] [name]
131
- logtype: [machinename]: LCM: [ Start Test ]
132
- logtype: [machinename]: LCM: [ End Test ]
133
- logtype: [machinename]: LCM: [ Skip Set ]
134
- logtype: [machinename]: LCM: [ Start Resource ] [name2]
135
- logtype: [machinename]: LCM: [ Start Test ]
136
- logtype: [machinename]: LCM: [ End Test ]
137
- logtype: [machinename]: LCM: [ Start Set ]
138
- logtype: [machinename]: LCM: [ End Set ]
139
- logtype: [machinename]: LCM: [ End Resource ]
140
- logtype: [machinename]: LCM: [ End Set ]
141
- EOF
142
-
143
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
144
- resources[0].changes_state?.should be_false
145
- resources[1].changes_state?.should be_true
146
- end
147
-
148
- it 'should allow missing set and end resource and assume an unconverged resource in this case' do
149
- str = <<-EOF
150
- logtype: [machinename]: LCM: [ Start Set ]
151
- logtype: [machinename]: LCM: [ Start Resource ] [name]
152
- logtype: [machinename]: LCM: [ Start Test ]
153
- logtype: [machinename]: LCM: [ End Test ]
154
- logtype: [machinename]: LCM: [ Start Resource ] [name2]
155
- logtype: [machinename]: LCM: [ Start Test ]
156
- logtype: [machinename]: LCM: [ End Test ]
157
- logtype: [machinename]: LCM: [ Start Set ]
158
- logtype: [machinename]: LCM: [ End Set ]
159
- logtype: [machinename]: LCM: [ End Resource ]
160
- logtype: [machinename]: LCM: [ End Set ]
161
- EOF
162
- resources = Chef::Util::DSC::LocalConfigurationManager::Parser::parse(str)
163
- resources[0].changes_state?.should be_true
164
- resources[0].name.should eql('[name]')
165
- resources[1].changes_state?.should be_true
166
- resources[1].name.should eql('[name2]')
167
- end
168
- end
169
- end
@@ -1,139 +0,0 @@
1
- #
2
- # Author:: Adam Edwards <adamed@getchef.com>
3
- # Copyright:: Copyright (c) 2014 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 'chef'
20
- require 'chef/util/dsc/local_configuration_manager'
21
-
22
- describe Chef::Util::DSC::LocalConfigurationManager do
23
-
24
- let(:lcm) { Chef::Util::DSC::LocalConfigurationManager.new(nil, 'tmp') }
25
-
26
- let(:normal_lcm_output) { <<-EOH
27
- logtype: [machinename]: LCM: [ Start Set ]
28
- logtype: [machinename]: LCM: [ Start Resource ] [name]
29
- logtype: [machinename]: LCM: [ End Resource ] [name]
30
- logtype: [machinename]: LCM: [ End Set ]
31
- EOH
32
- }
33
-
34
- let(:no_whatif_lcm_output) { <<-EOH
35
- Start-DscConfiguration : A parameter cannot be found\r\n that matches parameter name 'whatif'.
36
- At line:1 char:123
37
- + run-somecommand -whatif
38
- + ~~~~~~~~
39
- + CategoryInfo : InvalidArgument: (:) [Start-DscConfiguration], ParameterBindingException
40
- + FullyQualifiedErrorId : NamedParameterNotFound,SomeCompany.SomeAssembly.Commands.RunSomeCommand
41
- EOH
42
- }
43
-
44
- let(:dsc_resource_import_failure_output) { <<-EOH
45
- PowerShell provider MSFT_xWebsite failed to execute Test-TargetResource functionality with error message: Please ensure that WebAdministration module is installed. + CategoryInfo : InvalidOperation: (:) [], CimException + FullyQualifiedErrorId : ProviderOperationExecutionFailure + PSComputerName : . PowerShell provider MSFT_xWebsite failed to execute Test-TargetResource functionality with error message: Please ensure that WebAdministration module is installed. + CategoryInfo : InvalidOperation: (:) [], CimException + FullyQualifiedErrorId : ProviderOperationExecutionFailure + PSComputerName : . The SendConfigurationApply function did not succeed. + CategoryInfo : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException + FullyQualifiedErrorId : MI RESULT 1 + PSComputerName : .
46
- EOH
47
- }
48
-
49
- let(:lcm_status) {
50
- double("LCM cmdlet status", :stderr => lcm_standard_error, :return_value => lcm_standard_output, :succeeded? => lcm_cmdlet_success)
51
- }
52
-
53
- describe 'test_configuration method invocation' do
54
- context 'when interacting with the LCM using a PowerShell cmdlet' do
55
- before(:each) do
56
- allow(lcm).to receive(:run_configuration_cmdlet).and_return(lcm_status)
57
- end
58
- context 'that returns successfully' do
59
- before(:each) do
60
- allow(lcm).to receive(:run_configuration_cmdlet).and_return(lcm_status)
61
- end
62
-
63
- let(:lcm_standard_output) { normal_lcm_output }
64
- let(:lcm_standard_error) { nil }
65
- let(:lcm_cmdlet_success) { true }
66
-
67
- it 'should successfully return resource information for normally formatted output when cmdlet the cmdlet succeeds' do
68
- test_configuration_result = lcm.test_configuration('config')
69
- expect(test_configuration_result.class).to be(Array)
70
- expect(test_configuration_result.length).to be > 0
71
- expect(Chef::Log).not_to receive(:warn)
72
- end
73
- end
74
-
75
- context 'that fails due to missing what-if switch in DSC resource cmdlet implementation' do
76
- let(:lcm_standard_output) { '' }
77
- let(:lcm_standard_error) { no_whatif_lcm_output }
78
- let(:lcm_cmdlet_success) { false }
79
-
80
- it 'returns true when passed to #whatif_not_supported?' do
81
- expect(lcm.send(:whatif_not_supported?, no_whatif_lcm_output)).to be_true
82
- end
83
-
84
- it 'should should return a (possibly empty) array of ResourceInfo instances' do
85
- expect(Chef::Log).to receive(:warn)
86
- expect(lcm).to receive(:whatif_not_supported?).and_call_original
87
- test_configuration_result = nil
88
- expect {test_configuration_result = lcm.test_configuration('config')}.not_to raise_error
89
- expect(test_configuration_result.class).to be(Array)
90
- end
91
- end
92
-
93
- context 'that fails due to a DSC resource not being imported before StartDSCConfiguration -whatif is executed' do
94
- let(:lcm_standard_output) { '' }
95
- let(:lcm_standard_error) { dsc_resource_import_failure_output }
96
- let(:lcm_cmdlet_success) { false }
97
-
98
- it 'should log a warning if the message is formatted as expected when a resource import failure occurs' do
99
- expect(Chef::Log).to receive(:warn)
100
- expect(lcm).to receive(:dsc_module_import_failure?).and_call_original
101
- test_configuration_result = nil
102
- expect {test_configuration_result = lcm.test_configuration('config')}.not_to raise_error
103
- end
104
-
105
- it 'should return a (possibly empty) array of ResourceInfo instances' do
106
- expect(Chef::Log).to receive(:warn)
107
- test_configuration_result = nil
108
- expect {test_configuration_result = lcm.test_configuration('config')}.not_to raise_error
109
- expect(test_configuration_result.class).to be(Array)
110
- end
111
- end
112
-
113
- context 'that fails due to an unknown PowerShell cmdlet error' do
114
- let(:lcm_standard_output) { 'some output' }
115
- let(:lcm_standard_error) { 'Abort, Retry, Fail?' }
116
- let(:lcm_cmdlet_success) { false }
117
-
118
- it 'should log a warning' do
119
- expect(Chef::Log).to receive(:warn)
120
- expect(lcm).to receive(:dsc_module_import_failure?).and_call_original
121
- expect {lcm.test_configuration('config')}.not_to raise_error
122
- end
123
- end
124
- end
125
-
126
- it 'should identify a correctly formatted error message as a resource import failure' do
127
- expect(lcm.send(:dsc_module_import_failure?, dsc_resource_import_failure_output)).to be(true)
128
- end
129
-
130
- it 'should not identify an incorrectly formatted error message as a resource import failure' do
131
- expect(lcm.send(:dsc_module_import_failure?, dsc_resource_import_failure_output.gsub('module', 'gibberish'))).to be(false)
132
- end
133
-
134
- it 'should not identify a message without a CimException reference as a resource import failure' do
135
- expect(lcm.send(:dsc_module_import_failure?, dsc_resource_import_failure_output.gsub('CimException', 'ArgumentException'))).to be(false)
136
- end
137
- end
138
- end
139
-
@@ -1,106 +0,0 @@
1
- #
2
- # Author:: Jay Mundrawala <jdm@getchef.com>
3
- # Copyright:: Copyright (c) 2014 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 'chef'
20
- require 'chef/util/powershell/cmdlet'
21
-
22
- describe Chef::Util::Powershell::Cmdlet do
23
- before (:all) do
24
- @node = Chef::Node.new
25
- @cmdlet = Chef::Util::Powershell::Cmdlet.new(@node, 'Some-Commandlet')
26
- end
27
-
28
- describe '#validate_switch_name!' do
29
- it 'should not raise an error if a name contains all upper case letters' do
30
- @cmdlet.send(:validate_switch_name!, "HELLO")
31
- end
32
-
33
- it 'should not raise an error if the name contains all lower case letters' do
34
- @cmdlet.send(:validate_switch_name!, "hello")
35
- end
36
-
37
- it 'should not raise an error if no special characters are used except _' do
38
- @cmdlet.send(:validate_switch_name!, "hello_world")
39
- end
40
-
41
- %w{! @ # $ % ^ & * & * ( ) - = + \{ \} . ? < > \\ /}.each do |sym|
42
- it "raises an Argument error if it configuration name contains #{sym}" do
43
- expect {
44
- @cmdlet.send(:validate_switch_name!, "Hello#{sym}")
45
- }.to raise_error(ArgumentError)
46
- end
47
- end
48
- end
49
-
50
- describe '#escape_parameter_value' do
51
- # Is this list really complete?
52
- %w{` " # '}.each do |c|
53
- it "escapse #{c}" do
54
- @cmdlet.send(:escape_parameter_value, "stuff #{c}").should eql("stuff `#{c}")
55
- end
56
- end
57
-
58
- it 'does not do anything to a string without special characters' do
59
- @cmdlet.send(:escape_parameter_value, 'stuff').should eql('stuff')
60
- end
61
- end
62
-
63
- describe '#escape_string_parameter_value' do
64
- it "surrounds a string with ''" do
65
- @cmdlet.send(:escape_string_parameter_value, 'stuff').should eql("'stuff'")
66
- end
67
- end
68
-
69
- describe '#command_switches_string' do
70
- it 'raises an ArgumentError if the key is not a symbol' do
71
- expect {
72
- @cmdlet.send(:command_switches_string, {'foo' => 'bar'})
73
- }.to raise_error(ArgumentError)
74
- end
75
-
76
- it 'does not allow invalid switch names' do
77
- expect {
78
- @cmdlet.send(:command_switches_string, {:foo! => 'bar'})
79
- }.to raise_error(ArgumentError)
80
- end
81
-
82
- it 'ignores switches with a false value' do
83
- @cmdlet.send(:command_switches_string, {:foo => false}).should eql('')
84
- end
85
-
86
- it 'should correctly handle a value type of string' do
87
- @cmdlet.send(:command_switches_string, {:foo => 'bar'}).should eql("-foo 'bar'")
88
- end
89
-
90
- it 'should correctly handle a value type of string even when it is 0 length' do
91
- @cmdlet.send(:command_switches_string, {:foo => ''}).should eql("-foo ''")
92
- end
93
-
94
- it 'should not quote integers' do
95
- @cmdlet.send(:command_switches_string, {:foo => 1}).should eql("-foo 1")
96
- end
97
-
98
- it 'should not quote floats' do
99
- @cmdlet.send(:command_switches_string, {:foo => 1.0}).should eql("-foo 1.0")
100
- end
101
-
102
- it 'has just the switch when the value is true' do
103
- @cmdlet.send(:command_switches_string, {:foo => true}).should eql("-foo")
104
- end
105
- end
106
- end