puppet 6.15.0-universal-darwin → 6.19.1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (418) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +29 -27
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet.rb +32 -8
  8. data/lib/puppet/agent.rb +18 -4
  9. data/lib/puppet/agent/locker.rb +0 -7
  10. data/lib/puppet/application/agent.rb +23 -8
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/device.rb +1 -1
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/plugin.rb +1 -0
  16. data/lib/puppet/application/ssl.rb +1 -1
  17. data/lib/puppet/configurer.rb +61 -21
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +2 -2
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/context/trusted_information.rb +14 -8
  22. data/lib/puppet/daemon.rb +13 -27
  23. data/lib/puppet/defaults.rb +119 -39
  24. data/lib/puppet/environments.rb +51 -10
  25. data/lib/puppet/face/catalog.rb +1 -1
  26. data/lib/puppet/face/config.rb +46 -16
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/node.rb +3 -3
  31. data/lib/puppet/face/node/clean.rb +2 -2
  32. data/lib/puppet/face/plugin.rb +1 -1
  33. data/lib/puppet/face/status.rb +1 -1
  34. data/lib/puppet/feature/base.rb +1 -1
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +12 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +4 -7
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/lstrip.rb +4 -4
  49. data/lib/puppet/functions/new.rb +8 -3
  50. data/lib/puppet/functions/reverse_each.rb +1 -1
  51. data/lib/puppet/functions/rstrip.rb +4 -4
  52. data/lib/puppet/functions/step.rb +1 -1
  53. data/lib/puppet/functions/strip.rb +4 -4
  54. data/lib/puppet/gettext/config.rb +5 -5
  55. data/lib/puppet/gettext/module_translations.rb +4 -4
  56. data/lib/puppet/http.rb +1 -0
  57. data/lib/puppet/http/client.rb +28 -12
  58. data/lib/puppet/http/external_client.rb +0 -6
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  75. data/lib/puppet/indirector/file_content/http.rb +5 -0
  76. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  77. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  78. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  79. data/lib/puppet/indirector/hiera.rb +4 -0
  80. data/lib/puppet/indirector/indirection.rb +1 -1
  81. data/lib/puppet/indirector/json.rb +1 -1
  82. data/lib/puppet/indirector/msgpack.rb +1 -1
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/request.rb +5 -5
  85. data/lib/puppet/indirector/rest.rb +7 -1
  86. data/lib/puppet/indirector/yaml.rb +1 -1
  87. data/lib/puppet/module.rb +1 -2
  88. data/lib/puppet/network/format_support.rb +2 -2
  89. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  90. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  91. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  92. data/lib/puppet/network/http/compression.rb +7 -0
  93. data/lib/puppet/network/http/connection.rb +2 -0
  94. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  95. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  96. data/lib/puppet/network/http/route.rb +2 -2
  97. data/lib/puppet/network/http_pool.rb +2 -2
  98. data/lib/puppet/node/environment.rb +12 -5
  99. data/lib/puppet/node/facts.rb +17 -0
  100. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  101. data/lib/puppet/pal/pal_impl.rb +31 -4
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +5 -5
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +29 -26
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/functions/filter.rb +1 -0
  112. data/lib/puppet/parser/resource.rb +3 -2
  113. data/lib/puppet/parser/resource/param.rb +6 -0
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  119. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  120. data/lib/puppet/pops/issues.rb +5 -0
  121. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  122. data/lib/puppet/pops/loaders.rb +18 -11
  123. data/lib/puppet/pops/lookup/context.rb +1 -1
  124. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  125. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  126. data/lib/puppet/pops/types/iterable.rb +34 -8
  127. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  128. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/package/aix.rb +17 -2
  133. data/lib/puppet/provider/package/apt.rb +38 -1
  134. data/lib/puppet/provider/package/aptitude.rb +1 -1
  135. data/lib/puppet/provider/package/dnfmodule.rb +24 -4
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip.rb +60 -37
  139. data/lib/puppet/provider/package/pip2.rb +17 -0
  140. data/lib/puppet/provider/package/portage.rb +2 -2
  141. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  142. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  143. data/lib/puppet/provider/package/yum.rb +9 -1
  144. data/lib/puppet/provider/package/zypper.rb +62 -1
  145. data/lib/puppet/provider/service/systemd.rb +21 -4
  146. data/lib/puppet/provider/service/windows.rb +23 -7
  147. data/lib/puppet/provider/user/aix.rb +1 -1
  148. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  149. data/lib/puppet/provider/user/useradd.rb +16 -5
  150. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  151. data/lib/puppet/reports/http.rb +7 -3
  152. data/lib/puppet/resource.rb +2 -1
  153. data/lib/puppet/resource/type.rb +10 -1
  154. data/lib/puppet/rest/route.rb +2 -2
  155. data/lib/puppet/runtime.rb +25 -2
  156. data/lib/puppet/settings.rb +43 -6
  157. data/lib/puppet/ssl/ssl_context.rb +2 -2
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  159. data/lib/puppet/ssl/state_machine.rb +33 -8
  160. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  161. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  162. data/lib/puppet/test/test_helper.rb +19 -14
  163. data/lib/puppet/transaction.rb +2 -2
  164. data/lib/puppet/transaction/persistence.rb +1 -1
  165. data/lib/puppet/transaction/report.rb +12 -8
  166. data/lib/puppet/trusted_external.rb +29 -1
  167. data/lib/puppet/type.rb +15 -7
  168. data/lib/puppet/type/file.rb +40 -15
  169. data/lib/puppet/type/file/checksum.rb +4 -4
  170. data/lib/puppet/type/file/source.rb +33 -13
  171. data/lib/puppet/type/filebucket.rb +1 -1
  172. data/lib/puppet/type/notify.rb +2 -2
  173. data/lib/puppet/type/package.rb +16 -1
  174. data/lib/puppet/type/service.rb +59 -8
  175. data/lib/puppet/type/user.rb +19 -10
  176. data/lib/puppet/util.rb +41 -3
  177. data/lib/puppet/util/autoload.rb +10 -25
  178. data/lib/puppet/util/character_encoding.rb +9 -5
  179. data/lib/puppet/util/checksums.rb +19 -4
  180. data/lib/puppet/util/connection.rb +8 -8
  181. data/lib/puppet/util/execution.rb +2 -2
  182. data/lib/puppet/util/fileparsing.rb +2 -2
  183. data/lib/puppet/util/log/destinations.rb +1 -10
  184. data/lib/puppet/util/package/version/range.rb +4 -1
  185. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  186. data/lib/puppet/util/provider_features.rb +1 -1
  187. data/lib/puppet/util/reference.rb +1 -1
  188. data/lib/puppet/util/run_mode.rb +5 -1
  189. data/lib/puppet/util/windows.rb +1 -0
  190. data/lib/puppet/util/windows/api_types.rb +60 -33
  191. data/lib/puppet/util/windows/eventlog.rb +1 -6
  192. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  193. data/lib/puppet/util/windows/principal.rb +8 -6
  194. data/lib/puppet/util/windows/registry.rb +11 -11
  195. data/lib/puppet/util/windows/security.rb +4 -4
  196. data/lib/puppet/util/windows/service.rb +43 -26
  197. data/lib/puppet/util/windows/user.rb +242 -8
  198. data/lib/puppet/version.rb +1 -1
  199. data/locales/puppet.pot +541 -427
  200. data/man/man5/puppet.conf.5 +84 -19
  201. data/man/man8/puppet-agent.8 +7 -4
  202. data/man/man8/puppet-apply.8 +1 -1
  203. data/man/man8/puppet-catalog.8 +1 -1
  204. data/man/man8/puppet-config.8 +6 -6
  205. data/man/man8/puppet-describe.8 +1 -1
  206. data/man/man8/puppet-device.8 +1 -1
  207. data/man/man8/puppet-doc.8 +1 -1
  208. data/man/man8/puppet-epp.8 +1 -1
  209. data/man/man8/puppet-facts.8 +1 -1
  210. data/man/man8/puppet-filebucket.8 +1 -1
  211. data/man/man8/puppet-generate.8 +1 -1
  212. data/man/man8/puppet-help.8 +6 -3
  213. data/man/man8/puppet-key.8 +1 -1
  214. data/man/man8/puppet-lookup.8 +2 -2
  215. data/man/man8/puppet-man.8 +1 -1
  216. data/man/man8/puppet-module.8 +4 -1
  217. data/man/man8/puppet-node.8 +4 -4
  218. data/man/man8/puppet-parser.8 +1 -1
  219. data/man/man8/puppet-plugin.8 +1 -1
  220. data/man/man8/puppet-report.8 +1 -1
  221. data/man/man8/puppet-resource.8 +1 -1
  222. data/man/man8/puppet-script.8 +1 -1
  223. data/man/man8/puppet-ssl.8 +1 -1
  224. data/man/man8/puppet-status.8 +2 -2
  225. data/man/man8/puppet.8 +2 -2
  226. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  227. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  228. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  229. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  230. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
  231. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  232. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  233. data/spec/integration/application/agent_spec.rb +202 -52
  234. data/spec/integration/application/apply_spec.rb +149 -149
  235. data/spec/integration/application/config_spec.rb +74 -0
  236. data/spec/integration/application/doc_spec.rb +16 -6
  237. data/spec/integration/application/filebucket_spec.rb +70 -21
  238. data/spec/integration/application/help_spec.rb +42 -0
  239. data/spec/integration/application/lookup_spec.rb +13 -0
  240. data/spec/integration/application/module_spec.rb +68 -0
  241. data/spec/integration/application/plugin_spec.rb +75 -2
  242. data/spec/integration/configurer_spec.rb +14 -0
  243. data/spec/integration/data_binding_spec.rb +82 -0
  244. data/spec/integration/defaults_spec.rb +27 -3
  245. data/spec/integration/directory_environments_spec.rb +17 -17
  246. data/spec/integration/http/client_spec.rb +6 -1
  247. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  248. data/spec/integration/network/http_pool_spec.rb +73 -0
  249. data/spec/integration/node/environment_spec.rb +1 -1
  250. data/spec/integration/parser/compiler_spec.rb +11 -0
  251. data/spec/integration/type/file_spec.rb +1 -1
  252. data/spec/integration/util/execution_spec.rb +22 -0
  253. data/spec/integration/util/windows/adsi_spec.rb +7 -2
  254. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  255. data/spec/integration/util/windows/process_spec.rb +26 -32
  256. data/spec/integration/util/windows/registry_spec.rb +7 -7
  257. data/spec/integration/util/windows/user_spec.rb +47 -5
  258. data/spec/integration/util_spec.rb +7 -33
  259. data/spec/lib/puppet_spec/https.rb +6 -0
  260. data/spec/lib/puppet_spec/matchers.rb +0 -80
  261. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  262. data/spec/shared_contexts/types_setup.rb +2 -0
  263. data/spec/unit/agent_spec.rb +47 -1
  264. data/spec/unit/application/agent_spec.rb +7 -8
  265. data/spec/unit/application/doc_spec.rb +2 -2
  266. data/spec/unit/application/face_base_spec.rb +6 -4
  267. data/spec/unit/application/facts_spec.rb +41 -10
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +9 -4
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine_spec.rb +2 -1
  276. data/spec/unit/context/trusted_information_spec.rb +25 -2
  277. data/spec/unit/daemon_spec.rb +5 -64
  278. data/spec/unit/environments_spec.rb +99 -32
  279. data/spec/unit/face/config_spec.rb +59 -1
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/node_spec.rb +2 -2
  282. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  283. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  284. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  285. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  286. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  287. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  288. data/spec/unit/file_system_spec.rb +1 -2
  289. data/spec/unit/http/client_spec.rb +74 -19
  290. data/spec/unit/http/external_client_spec.rb +9 -9
  291. data/spec/unit/http/resolver_spec.rb +24 -5
  292. data/spec/unit/http/response_spec.rb +6 -0
  293. data/spec/unit/http/service/ca_spec.rb +2 -3
  294. data/spec/unit/http/service/compiler_spec.rb +2 -3
  295. data/spec/unit/http/service/file_server_spec.rb +2 -3
  296. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  297. data/spec/unit/http/service/report_spec.rb +2 -3
  298. data/spec/unit/http/service_spec.rb +0 -1
  299. data/spec/unit/http/session_spec.rb +8 -21
  300. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  301. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  302. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  303. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  304. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  306. data/spec/unit/indirector/json_spec.rb +8 -8
  307. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  308. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  309. data/spec/unit/indirector/request_spec.rb +5 -5
  310. data/spec/unit/indirector/rest_spec.rb +14 -1
  311. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  312. data/spec/unit/indirector/yaml_spec.rb +7 -7
  313. data/spec/unit/interface_spec.rb +3 -3
  314. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  315. data/spec/unit/network/format_support_spec.rb +3 -2
  316. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  317. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  318. data/spec/unit/network/http/connection_spec.rb +552 -190
  319. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  320. data/spec/unit/network/http_pool_spec.rb +63 -57
  321. data/spec/unit/network/http_spec.rb +1 -1
  322. data/spec/unit/node/environment_spec.rb +18 -1
  323. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  324. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  325. data/spec/unit/parser/scope_spec.rb +1 -1
  326. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  327. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  328. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  329. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  330. data/spec/unit/provider/exec_spec.rb +4 -3
  331. data/spec/unit/provider/package/aix_spec.rb +29 -0
  332. data/spec/unit/provider/package/apt_spec.rb +77 -0
  333. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  334. data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
  335. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  336. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  337. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  338. data/spec/unit/provider/package/pip_spec.rb +42 -16
  339. data/spec/unit/provider/package/portage_spec.rb +5 -0
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  341. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  342. data/spec/unit/provider/package/yum_spec.rb +47 -8
  343. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  344. data/spec/unit/provider/service/base_spec.rb +2 -4
  345. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  346. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  347. data/spec/unit/provider/service/debian_spec.rb +3 -5
  348. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  349. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  350. data/spec/unit/provider/service/init_spec.rb +46 -5
  351. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  352. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  353. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  354. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  355. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  356. data/spec/unit/provider/service/runit_spec.rb +2 -1
  357. data/spec/unit/provider/service/smf_spec.rb +1 -1
  358. data/spec/unit/provider/service/src_spec.rb +3 -5
  359. data/spec/unit/provider/service/systemd_spec.rb +87 -19
  360. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  361. data/spec/unit/provider/service/windows_spec.rb +50 -14
  362. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  363. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  364. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  365. data/spec/unit/puppet_pal_2pec.rb +40 -0
  366. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  367. data/spec/unit/puppet_spec.rb +33 -0
  368. data/spec/unit/reports/http_spec.rb +1 -1
  369. data/spec/unit/reports/store_spec.rb +17 -13
  370. data/spec/unit/resource_spec.rb +3 -3
  371. data/spec/unit/rest/route_spec.rb +4 -4
  372. data/spec/unit/settings_spec.rb +182 -22
  373. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  374. data/spec/unit/ssl/state_machine_spec.rb +52 -8
  375. data/spec/unit/test/test_helper_spec.rb +17 -0
  376. data/spec/unit/transaction/persistence_spec.rb +15 -0
  377. data/spec/unit/transaction/report_spec.rb +3 -1
  378. data/spec/unit/type/file/source_spec.rb +4 -4
  379. data/spec/unit/type/file_spec.rb +122 -96
  380. data/spec/unit/type/filebucket_spec.rb +1 -1
  381. data/spec/unit/type/service_spec.rb +218 -8
  382. data/spec/unit/type/user_spec.rb +32 -3
  383. data/spec/unit/type_spec.rb +50 -0
  384. data/spec/unit/util/autoload_spec.rb +2 -1
  385. data/spec/unit/util/character_encoding_spec.rb +4 -4
  386. data/spec/unit/util/checksums_spec.rb +16 -0
  387. data/spec/unit/util/command_line_spec.rb +11 -6
  388. data/spec/unit/util/log/destinations_spec.rb +1 -29
  389. data/spec/unit/util/package/version/range_spec.rb +22 -1
  390. data/spec/unit/util/run_mode_spec.rb +6 -6
  391. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  392. data/spec/unit/util/windows/service_spec.rb +4 -4
  393. data/spec/unit/util_spec.rb +3 -3
  394. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  395. data/tasks/manpages.rake +5 -35
  396. metadata +43 -49
  397. data/spec/integration/faces/config_spec.rb +0 -91
  398. data/spec/integration/faces/documentation_spec.rb +0 -57
  399. data/spec/integration/file_bucket/file_spec.rb +0 -50
  400. data/spec/integration/file_serving/content_spec.rb +0 -7
  401. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  402. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  403. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  404. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  405. data/spec/integration/module_tool/forge_spec.rb +0 -51
  406. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  407. data/spec/integration/provider/service/init_spec.rb +0 -48
  408. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  409. data/spec/integration/provider/service/windows_spec.rb +0 -50
  410. data/spec/integration/reference/providers_spec.rb +0 -21
  411. data/spec/integration/reports_spec.rb +0 -13
  412. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  413. data/spec/integration/ssl/host_spec.rb +0 -72
  414. data/spec/integration/ssl/key_spec.rb +0 -99
  415. data/spec/integration/test/test_helper_spec.rb +0 -31
  416. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  417. data/spec/unit/face/man_spec.rb +0 -25
  418. data/spec/unit/man_spec.rb +0 -31
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dir, :if => Puppet::Util::Platform.windows? do
4
+ it "should always have the PERSONAL constant defined" do
5
+ expect(described_class).to be_const_defined(:PERSONAL)
6
+ end
7
+
8
+ it "should not raise any errors when accessing the PERSONAL constant" do
9
+ expect { described_class::PERSONAL }.not_to raise_error
10
+ end
11
+ end
@@ -33,17 +33,7 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
33
33
  end
34
34
 
35
35
  describe "when reading environment variables" do
36
- after :each do
37
- # spec\integration\test\test_helper_spec.rb calls set_environment_strings
38
- # after :all and thus needs access to the real APIs once again
39
- allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_call_original
40
- allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW).and_call_original
41
- end
42
-
43
36
  it "will ignore only keys or values with corrupt byte sequences" do
44
- arraydest = []
45
- Puppet::Util::Log.newdestination(Puppet::Test::LogCollector.new(arraydest))
46
-
47
37
  env_vars = {}
48
38
 
49
39
  # Create a UTF-16LE version of the below null separated environment string
@@ -61,9 +51,9 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
61
51
  ptr.put_array_of_uchar(0, env_var_block_bytes)
62
52
 
63
53
  # stub the block of memory that the Win32 API would typically return via pointer
64
- expect(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
54
+ allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
65
55
  # stub out the real API call to free memory, else process crashes
66
- expect(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
56
+ allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
67
57
 
68
58
  env_vars = Puppet::Util::Windows::Process.get_environment_strings
69
59
  end
@@ -72,39 +62,43 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
72
62
  expect(env_vars).to eq({'a' => 'b', 'c' => 'd', 'f' => 'g'})
73
63
 
74
64
  # and Puppet should emit a warning about it
75
- expect(arraydest.last.level).to eq(:warning)
76
- expect(arraydest.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
65
+ expect(@logs.last.level).to eq(:warning)
66
+ expect(@logs.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
77
67
  end
78
68
  end
79
69
 
80
70
  describe "when setting environment variables" do
81
- it "can properly handle env var values with = in them" do
82
- begin
83
- name = SecureRandom.uuid
84
- value = 'foo=bar'
71
+ let(:name) { SecureRandom.uuid }
85
72
 
86
- Puppet::Util::Windows::Process.set_environment_variable(name, value)
87
-
88
- env = Puppet::Util::Windows::Process.get_environment_strings
89
-
90
- expect(env[name]).to eq(value)
73
+ around :each do |example|
74
+ begin
75
+ example.run
91
76
  ensure
92
77
  Puppet::Util::Windows::Process.set_environment_variable(name, nil)
93
78
  end
94
79
  end
95
80
 
96
- it "can properly handle empty env var values" do
97
- begin
98
- name = SecureRandom.uuid
81
+ it "sets environment variables containing '='" do
82
+ value = 'foo=bar'
83
+ Puppet::Util::Windows::Process.set_environment_variable(name, value)
84
+ env = Puppet::Util::Windows::Process.get_environment_strings
99
85
 
100
- Puppet::Util::Windows::Process.set_environment_variable(name, '')
86
+ expect(env[name]).to eq(value)
87
+ end
101
88
 
102
- env = Puppet::Util::Windows::Process.get_environment_strings
89
+ it "sets environment variables contains spaces" do
90
+ Puppet::Util::Windows::Process.set_environment_variable(name, '')
91
+ env = Puppet::Util::Windows::Process.get_environment_strings
103
92
 
104
- expect(env[name]).to eq('')
105
- ensure
106
- Puppet::Util::Windows::Process.set_environment_variable(name, nil)
107
- end
93
+ expect(env[name]).to eq('')
94
+ end
95
+
96
+ it "sets environment variables containing UTF-8" do
97
+ rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
98
+ Puppet::Util::Windows::Process.set_environment_variable(name, rune_utf8)
99
+ env = Puppet::Util::Windows::Process.get_environment_strings
100
+
101
+ expect(env[name]).to eq(rune_utf8)
108
102
  end
109
103
  end
110
104
  end
@@ -259,23 +259,23 @@ describe Puppet::Util::Windows::Registry do
259
259
  {
260
260
  name: 'REG_SZ',
261
261
  type: Win32::Registry::REG_SZ,
262
- value: "reg sz\u0000 string",
263
- expected_value: "reg sz string"
262
+ value: "reg sz\u0000\u0000 string",
263
+ expected_value: "reg sz"
264
264
  },
265
265
  {
266
266
  name: 'REG_SZ_2',
267
267
  type: Win32::Registry::REG_SZ,
268
- value: "reg sz\x00 string",
269
- expected_value: "reg sz string"
268
+ value: "reg sz 2\x00\x00 string",
269
+ expected_value: "reg sz 2"
270
270
  },
271
271
  {
272
272
  name: 'REG_EXPAND_SZ',
273
273
  type: Win32::Registry::REG_EXPAND_SZ,
274
- value: "\0reg expand string",
275
- expected_value: " reg expand string"
274
+ value: "\0\0\0reg expand string",
275
+ expected_value: ""
276
276
  }
277
277
  ].each do |pair|
278
- it 'replaces null bytes with spaces' do
278
+ it 'reads up to the first wide null' do
279
279
  hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
280
280
  reg.write(value_name, pair[:type], pair[:value])
281
281
  end
@@ -125,19 +125,16 @@ describe "Puppet::Util::Windows::User", :if => Puppet::Util::Platform.windows? d
125
125
  end
126
126
 
127
127
  it 'should raise error given that logon returns false' do
128
-
129
128
  allow(Puppet::Util::Windows::User).to receive(:logon_user_by_logon_type).with(
130
- user, passwd, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, anything).and_return (0)
129
+ user, '.', passwd, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, anything).and_return (0)
131
130
  allow(Puppet::Util::Windows::User).to receive(:logon_user_by_logon_type).with(
132
- user, passwd, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, anything).and_return(0)
131
+ user, '.', passwd, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, anything).and_return(0)
133
132
 
134
133
  expect {Puppet::Util::Windows::User.logon_user(user, passwd) {}}
135
134
  .to raise_error(Puppet::Util::Windows::Error, /Failed to logon user/)
136
-
137
135
  end
138
136
  end
139
137
 
140
-
141
138
  describe "password_is?" do
142
139
  it "should return false given an incorrect username and password" do
143
140
  expect(Puppet::Util::Windows::User.password_is?(username, bad_password)).to be_falsey
@@ -180,5 +177,50 @@ describe "Puppet::Util::Windows::User", :if => Puppet::Util::Platform.windows? d
180
177
  expect { Puppet::Util::Windows::User.check_token_membership }.not_to raise_error
181
178
  end
182
179
  end
180
+
181
+ describe "default_system_account?" do
182
+ it "should succesfully identify 'SYSTEM' user as a default system account" do
183
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('SYSTEM').and_return(Puppet::Util::Windows::SID::LocalSystem)
184
+ expect(Puppet::Util::Windows::User.default_system_account?('SYSTEM')).to eq(true)
185
+ end
186
+
187
+ it "should succesfully identify 'NETWORK SERVICE' user as a default system account" do
188
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('NETWORK SERVICE').and_return(Puppet::Util::Windows::SID::NtNetwork)
189
+ expect(Puppet::Util::Windows::User.default_system_account?('NETWORK SERVICE')).to eq(true)
190
+ end
191
+
192
+ it "should succesfully identify 'LOCAL SERVICE' user as a default system account" do
193
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('LOCAL SERVICE').and_return(Puppet::Util::Windows::SID::NtLocal)
194
+ expect(Puppet::Util::Windows::User.default_system_account?('LOCAL SERVICE')).to eq(true)
195
+ end
196
+
197
+ it "should not identify user with unknown sid as a default system account" do
198
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('UnknownUser').and_return(Puppet::Util::Windows::SID::Null)
199
+ expect(Puppet::Util::Windows::User.default_system_account?('UnknownUser')).to eq(false)
200
+ end
201
+ end
202
+
203
+ describe "localsystem?" do
204
+ before do
205
+ allow(Puppet::Util::Windows::ADSI).to receive(:computer_name).and_return("myPC")
206
+ end
207
+
208
+ ['LocalSystem', '.\LocalSystem', 'myPC\LocalSystem', 'lOcALsysTem'].each do |input|
209
+ it "should succesfully identify #{input} as the 'LocalSystem' account" do
210
+ expect(Puppet::Util::Windows::User.localsystem?(input)).to eq(true)
211
+ end
212
+ end
213
+
214
+ it "should not identify any other user as the 'LocalSystem' account" do
215
+ expect(Puppet::Util::Windows::User.localsystem?('OtherUser')).to eq(false)
216
+ end
217
+ end
218
+
219
+ describe "get_rights" do
220
+ it "should be empty when given user does not exist" do
221
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('NonExistingUser').and_return(nil)
222
+ expect(Puppet::Util::Windows::User.get_rights('NonExistingUser')).to eq("")
223
+ end
224
+ end
183
225
  end
184
226
  end
@@ -1,32 +1,9 @@
1
+ # coding: utf-8
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Puppet::Util do
4
5
  include PuppetSpec::Files
5
6
 
6
- describe "#execute", unless: Puppet::Util::Platform.jruby? do
7
- it "should properly allow stdout and stderr to share a file" do
8
- command = "ruby -e '(1..10).each {|i| (i%2==0) ? $stdout.puts(i) : $stderr.puts(i)}'"
9
-
10
- expect(Puppet::Util::Execution.execute(command, :combine => true).split).to match_array([*'1'..'10'])
11
- end
12
-
13
- it "should return output and set $CHILD_STATUS" do
14
- command = "ruby -e 'puts \"foo\"; exit 42'"
15
-
16
- output = Puppet::Util::Execution.execute(command, {:failonfail => false})
17
-
18
- expect(output).to eq("foo\n")
19
- expect($CHILD_STATUS.exitstatus).to eq(42)
20
- end
21
-
22
- it "should raise an error if non-zero exit status is returned" do
23
- command = "ruby -e 'exit 43'"
24
-
25
- expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
26
- expect($CHILD_STATUS.exitstatus).to eq(43)
27
- end
28
- end
29
-
30
7
  describe "#replace_file on Windows", :if => Puppet::Util::Platform.windows? do
31
8
  it "replace_file should preserve original ACEs from existing replaced file on Windows" do
32
9
 
@@ -110,18 +87,15 @@ describe Puppet::Util do
110
87
  describe "#which on Windows", :if => Puppet::Util::Platform.windows? do
111
88
  let (:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
112
89
  let (:filename) { 'foo.exe' }
113
- let (:filepath) { File.expand_path('C:\\' + rune_utf8 + '\\' + filename) }
114
90
 
115
- before :each do
116
- allow(FileTest).to receive(:file?).and_return(false)
117
- allow(FileTest).to receive(:file?).with(filepath).and_return(true)
91
+ it "should be able to use UTF8 characters in the path" do
92
+ utf8 = tmpdir(rune_utf8)
93
+ Puppet::FileSystem.mkpath(utf8)
118
94
 
119
- allow(FileTest).to receive(:executable?).and_return(false)
120
- allow(FileTest).to receive(:executable?).with(filepath).and_return(true)
121
- end
95
+ filepath = File.join(utf8, filename)
96
+ Puppet::FileSystem.touch(filepath)
122
97
 
123
- it "should be able to use UTF8 characters in the path" do
124
- path = "C:\\" + rune_utf8 + "#{File::PATH_SEPARATOR}c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows"
98
+ path = [utf8, "c:\\windows\\system32", "c:\\windows"].join(File::PATH_SEPARATOR)
125
99
  Puppet::Util.withenv( { "PATH" => path } , :windows) do
126
100
  expect(Puppet::Util.which(filename)).to eq(filepath)
127
101
  end
@@ -24,6 +24,12 @@ class PuppetSpec::HTTPSServer
24
24
  res = WEBrick::HTTPResponse.new(@config)
25
25
  res.status = 200
26
26
  res.body = 'OK'
27
+ # The server explicitly closes the connection after handling it,
28
+ # so explicitly tell the client we're not going to keep it open.
29
+ # Without this, ruby will add `Connection: Keep-Alive`, which
30
+ # confuses the client when it tries to reuse the half-closed
31
+ # connection.
32
+ res['Connection'] = 'close'
27
33
  response_proc.call(req, res) if response_proc
28
34
 
29
35
  res.send_response(ssl)
@@ -41,86 +41,6 @@ RSpec::Matchers.define :exit_with do |expected|
41
41
  end
42
42
  end
43
43
 
44
-
45
- RSpec::Matchers.define :have_printed do |expected|
46
-
47
- case expected
48
- when String, Regexp, Proc
49
- expected = expected
50
- else
51
- expected = expected.to_s
52
- end
53
-
54
- chain :and_exit_with do |code|
55
- @expected_exit_code = code
56
- end
57
-
58
- define_method :matches_exit_code? do |actual|
59
- @expected_exit_code.nil? || @expected_exit_code == actual
60
- end
61
-
62
- define_method :matches_output? do |actual|
63
- return false unless actual
64
- case expected
65
- when String
66
- actual.include?(expected)
67
- when Regexp
68
- expected.match(actual)
69
- when Proc
70
- expected.call(actual)
71
- else
72
- raise ArgumentError, "No idea how to match a #{actual.class.name}"
73
- end
74
- end
75
-
76
- match do |block|
77
- $stderr = $stdout = StringIO.new
78
- $stdout.set_encoding('UTF-8') if $stdout.respond_to?(:set_encoding)
79
-
80
- begin
81
- block.call
82
- rescue SystemExit => e
83
- raise unless @expected_exit_code
84
- @actual_exit_code = e.status
85
- ensure
86
- $stdout.rewind
87
- @actual = $stdout.read
88
-
89
- $stdout = STDOUT
90
- $stderr = STDERR
91
- end
92
-
93
- matches_output?(@actual) && matches_exit_code?(@actual_exit_code)
94
- end
95
-
96
- supports_block_expectations
97
-
98
- failure_message do |actual|
99
- if actual.nil? then
100
- "expected #{expected.inspect}, but nothing was printed"
101
- else
102
- if !@expected_exit_code.nil? && matches_output?(actual)
103
- "expected exit with code #{@expected_exit_code} but " +
104
- (@actual_exit_code.nil? ? " exit was not called" : "exited with #{@actual_exit_code} instead")
105
- else
106
- "expected #{expected.inspect} to be printed; got:\n#{actual}"
107
- end
108
- end
109
- end
110
-
111
- failure_message_when_negated do |actual|
112
- if @expected_exit_code && matches_exit_code?(@actual_exit_code)
113
- "expected exit code to not be #{@actual_exit_code}"
114
- else
115
- "expected #{expected.inspect} to not be printed; got:\n#{actual}"
116
- end
117
- end
118
-
119
- description do
120
- "expect #{expected.inspect} to be printed" + (@expected_exit_code.nil ? '' : " with exit code #{@expected_exit_code}")
121
- end
122
- end
123
-
124
44
  RSpec::Matchers.define :equal_attributes_of do |expected|
125
45
  match do |actual|
126
46
  actual.instance_variables.all? do |attr|
@@ -47,9 +47,13 @@ class PuppetSpec::Puppetserver
47
47
  class FilebucketServlet < WEBrick::HTTPServlet::AbstractServlet
48
48
  def do_GET request, response
49
49
  end
50
+
50
51
  def do_PUT request, response
52
+ upload = File.join(@config.config[:TempDir], 'filebucket')
53
+ File.open(upload, 'wb') { |f| f.write(request.body) }
51
54
  response['Content-Type'] = 'application/octet-stream'
52
55
  end
56
+
53
57
  def do_HEAD request, response
54
58
  response.status = 404
55
59
  end
@@ -116,4 +120,8 @@ class PuppetSpec::Puppetserver
116
120
  end
117
121
  @https.mount(path, handler)
118
122
  end
123
+
124
+ def upload_directory
125
+ @https.config[:TempDir]
126
+ end
119
127
  end
@@ -187,6 +187,8 @@ shared_context 'types_setup' do
187
187
  result << Puppet::Pops::Types::PURIType
188
188
  result << Puppet::Pops::Types::PTupleType.new([tf.rich_data])
189
189
  result << Puppet::Pops::Types::PObjectType
190
+ result << Puppet::Pops::Types::PTypeType
191
+ result << Puppet::Pops::Types::PTypeSetType
190
192
  result
191
193
  end
192
194
  def rich_data_compatible_types
@@ -179,6 +179,52 @@ describe Puppet::Agent do
179
179
  expect(@agent.run).to eq(:result)
180
180
  end
181
181
 
182
+ describe "and a puppet agent is already running" do
183
+ before(:each) do
184
+ allow_any_instance_of(Object).to receive(:sleep)
185
+ lockfile = double('lockfile')
186
+ expect(@agent).to receive(:lockfile).and_return(lockfile).at_least(:once)
187
+ # so the lock method raises Puppet::LockError
188
+ allow(lockfile).to receive(:lock).and_return(false)
189
+ end
190
+
191
+ it "should notify that a run is already in progres" do
192
+ client = AgentTestClient.new
193
+ expect(AgentTestClient).to receive(:new).and_return(client)
194
+ expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
195
+ @agent.run
196
+ end
197
+
198
+ it "should inform that a run is already in progres and try to run every X seconds if waitforlock is used" do
199
+ # so the locked file exists
200
+ allow(File).to receive(:file?).and_return(true)
201
+ # so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
202
+ # first 0 is to get the time, second 0 is to inform user, then 1000 so the time expires
203
+ allow(Time).to receive(:now).and_return(0, 0, 1000)
204
+ allow(Puppet).to receive(:info)
205
+ client = AgentTestClient.new
206
+ expect(AgentTestClient).to receive(:new).and_return(client)
207
+
208
+ Puppet[:waitforlock] = 1
209
+ Puppet[:maxwaitforlock] = 2
210
+ expect(Puppet).to receive(:info).with(/Another puppet instance is already running; --waitforlock flag used, waiting for running instance to finish./)
211
+ expect(Puppet).to receive(:info).with(/Will try again in #{Puppet[:waitforlock]} seconds./)
212
+ @agent.run
213
+ end
214
+
215
+ it "should notify that the run is exiting if waitforlock is used and maxwaitforlock is exceeded" do
216
+ # so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
217
+ # first 0 is to get the time, then 1000 so that the time expires
218
+ allow(Time).to receive(:now).and_return(0, 1000)
219
+ client = AgentTestClient.new
220
+ expect(AgentTestClient).to receive(:new).and_return(client)
221
+
222
+ Puppet[:waitforlock] = 1
223
+ expect(Puppet).to receive(:notice).with(/Exiting now because the maxwaitforlock timeout has been exceeded./)
224
+ @agent.run
225
+ end
226
+ end
227
+
182
228
  describe "when should_fork is true", :if => Puppet.features.posix? && RUBY_PLATFORM != 'java' do
183
229
  before do
184
230
  @agent = Puppet::Agent.new(AgentTestClient, true)
@@ -291,7 +337,7 @@ describe Puppet::Agent do
291
337
  expect(client).not_to receive(:handling)
292
338
  expect(Puppet).to receive(:log_exception).with(be_an_instance_of(Puppet::Agent::RunTimeoutError), anything)
293
339
 
294
- expect(@agent.run).to eq(1)
340
+ expect(@agent.run).to eq(nil)
295
341
  end
296
342
  end
297
343
  end