puppet 7.5.0-x64-mingw32 → 7.9.0-x64-mingw32

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 (712) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +7 -7
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +20 -20
  5. data/README.md +4 -4
  6. data/ext/osx/puppet.plist +2 -0
  7. data/ext/project_data.yaml +1 -0
  8. data/install.rb +11 -15
  9. data/lib/hiera_puppet.rb +1 -1
  10. data/lib/puppet.rb +40 -40
  11. data/lib/puppet/agent.rb +6 -6
  12. data/lib/puppet/agent/disabler.rb +1 -1
  13. data/lib/puppet/agent/locker.rb +2 -2
  14. data/lib/puppet/application.rb +6 -6
  15. data/lib/puppet/application/agent.rb +18 -11
  16. data/lib/puppet/application/apply.rb +6 -5
  17. data/lib/puppet/application/catalog.rb +1 -1
  18. data/lib/puppet/application/config.rb +1 -1
  19. data/lib/puppet/application/describe.rb +1 -1
  20. data/lib/puppet/application/device.rb +8 -7
  21. data/lib/puppet/application/doc.rb +7 -7
  22. data/lib/puppet/application/epp.rb +2 -2
  23. data/lib/puppet/application/face_base.rb +2 -2
  24. data/lib/puppet/application/facts.rb +1 -1
  25. data/lib/puppet/application/filebucket.rb +3 -2
  26. data/lib/puppet/application/generate.rb +1 -1
  27. data/lib/puppet/application/help.rb +1 -1
  28. data/lib/puppet/application/indirection_base.rb +1 -1
  29. data/lib/puppet/application/lookup.rb +6 -6
  30. data/lib/puppet/application/module.rb +1 -1
  31. data/lib/puppet/application/node.rb +1 -1
  32. data/lib/puppet/application/parser.rb +2 -2
  33. data/lib/puppet/application/plugin.rb +1 -1
  34. data/lib/puppet/application/report.rb +1 -1
  35. data/lib/puppet/application/resource.rb +18 -4
  36. data/lib/puppet/application/script.rb +6 -5
  37. data/lib/puppet/application/ssl.rb +3 -2
  38. data/lib/puppet/application_support.rb +4 -4
  39. data/lib/puppet/compilable_resource_type.rb +1 -1
  40. data/lib/puppet/concurrent/lock.rb +1 -1
  41. data/lib/puppet/configurer.rb +4 -4
  42. data/lib/puppet/configurer/downloader.rb +4 -3
  43. data/lib/puppet/configurer/fact_handler.rb +3 -3
  44. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  45. data/lib/puppet/confine.rb +1 -1
  46. data/lib/puppet/confine/boolean.rb +1 -1
  47. data/lib/puppet/confine/exists.rb +1 -1
  48. data/lib/puppet/confine/false.rb +1 -1
  49. data/lib/puppet/confine/feature.rb +1 -1
  50. data/lib/puppet/confine/true.rb +1 -1
  51. data/lib/puppet/confine/variable.rb +1 -1
  52. data/lib/puppet/confine_collection.rb +1 -1
  53. data/lib/puppet/confiner.rb +1 -1
  54. data/lib/puppet/context.rb +2 -2
  55. data/lib/puppet/context/trusted_information.rb +1 -1
  56. data/lib/puppet/daemon.rb +2 -2
  57. data/lib/puppet/data_binding.rb +1 -1
  58. data/lib/puppet/datatypes/error.rb +1 -1
  59. data/lib/puppet/defaults.rb +17 -12
  60. data/lib/puppet/environments.rb +11 -1
  61. data/lib/puppet/etc.rb +1 -1
  62. data/lib/puppet/external/pson/common.rb +1 -1
  63. data/lib/puppet/external/pson/pure.rb +3 -3
  64. data/lib/puppet/face.rb +1 -1
  65. data/lib/puppet/face/catalog.rb +1 -1
  66. data/lib/puppet/face/config.rb +2 -2
  67. data/lib/puppet/face/epp.rb +6 -6
  68. data/lib/puppet/face/facts.rb +2 -2
  69. data/lib/puppet/face/generate.rb +2 -2
  70. data/lib/puppet/face/help.rb +3 -3
  71. data/lib/puppet/face/help/action.erb +1 -0
  72. data/lib/puppet/face/help/face.erb +1 -0
  73. data/lib/puppet/face/module.rb +3 -3
  74. data/lib/puppet/face/module/install.rb +2 -2
  75. data/lib/puppet/face/node.rb +1 -1
  76. data/lib/puppet/face/node/clean.rb +1 -1
  77. data/lib/puppet/face/parser.rb +4 -4
  78. data/lib/puppet/face/plugin.rb +2 -2
  79. data/lib/puppet/face/report.rb +1 -1
  80. data/lib/puppet/face/resource.rb +1 -1
  81. data/lib/puppet/feature/base.rb +2 -2
  82. data/lib/puppet/feature/bolt.rb +1 -1
  83. data/lib/puppet/feature/cfpropertylist.rb +1 -1
  84. data/lib/puppet/feature/eventlog.rb +1 -1
  85. data/lib/puppet/feature/hiera_eyaml.rb +1 -1
  86. data/lib/puppet/feature/hocon.rb +1 -1
  87. data/lib/puppet/feature/libuser.rb +2 -2
  88. data/lib/puppet/feature/msgpack.rb +1 -1
  89. data/lib/puppet/feature/pe_license.rb +1 -1
  90. data/lib/puppet/feature/selinux.rb +1 -1
  91. data/lib/puppet/feature/ssh.rb +1 -1
  92. data/lib/puppet/feature/telnet.rb +1 -1
  93. data/lib/puppet/feature/zlib.rb +1 -1
  94. data/lib/puppet/ffi/posix.rb +2 -2
  95. data/lib/puppet/ffi/posix/constants.rb +1 -1
  96. data/lib/puppet/ffi/posix/functions.rb +1 -1
  97. data/lib/puppet/ffi/windows.rb +4 -4
  98. data/lib/puppet/ffi/windows/api_types.rb +2 -2
  99. data/lib/puppet/ffi/windows/constants.rb +1 -1
  100. data/lib/puppet/ffi/windows/functions.rb +1 -1
  101. data/lib/puppet/ffi/windows/structs.rb +1 -1
  102. data/lib/puppet/file_bucket/dipper.rb +4 -4
  103. data/lib/puppet/file_bucket/file.rb +3 -3
  104. data/lib/puppet/file_serving/base.rb +2 -2
  105. data/lib/puppet/file_serving/configuration.rb +10 -10
  106. data/lib/puppet/file_serving/configuration/parser.rb +2 -2
  107. data/lib/puppet/file_serving/content.rb +3 -3
  108. data/lib/puppet/file_serving/fileset.rb +16 -4
  109. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  110. data/lib/puppet/file_serving/metadata.rb +6 -6
  111. data/lib/puppet/file_serving/mount.rb +4 -4
  112. data/lib/puppet/file_serving/mount/file.rb +1 -1
  113. data/lib/puppet/file_serving/mount/locales.rb +1 -1
  114. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  115. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -1
  116. data/lib/puppet/file_serving/mount/plugins.rb +1 -1
  117. data/lib/puppet/file_serving/mount/tasks.rb +1 -1
  118. data/lib/puppet/file_serving/terminus_helper.rb +2 -2
  119. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  120. data/lib/puppet/file_system.rb +9 -9
  121. data/lib/puppet/file_system/file_impl.rb +1 -1
  122. data/lib/puppet/file_system/jruby.rb +1 -1
  123. data/lib/puppet/file_system/path_pattern.rb +1 -1
  124. data/lib/puppet/file_system/uniquefile.rb +1 -1
  125. data/lib/puppet/file_system/windows.rb +4 -4
  126. data/lib/puppet/forge.rb +8 -8
  127. data/lib/puppet/forge/cache.rb +2 -2
  128. data/lib/puppet/forge/errors.rb +3 -3
  129. data/lib/puppet/forge/repository.rb +4 -4
  130. data/lib/puppet/functions.rb +1 -1
  131. data/lib/puppet/functions/all.rb +1 -1
  132. data/lib/puppet/functions/camelcase.rb +1 -1
  133. data/lib/puppet/functions/capitalize.rb +2 -2
  134. data/lib/puppet/functions/downcase.rb +2 -2
  135. data/lib/puppet/functions/empty.rb +8 -0
  136. data/lib/puppet/functions/get.rb +5 -5
  137. data/lib/puppet/functions/group_by.rb +13 -5
  138. data/lib/puppet/functions/lest.rb +1 -1
  139. data/lib/puppet/functions/new.rb +100 -100
  140. data/lib/puppet/functions/partition.rb +12 -4
  141. data/lib/puppet/functions/require.rb +5 -5
  142. data/lib/puppet/functions/sort.rb +3 -3
  143. data/lib/puppet/functions/strftime.rb +1 -0
  144. data/lib/puppet/functions/tree_each.rb +7 -9
  145. data/lib/puppet/functions/type.rb +4 -4
  146. data/lib/puppet/functions/unwrap.rb +17 -2
  147. data/lib/puppet/functions/upcase.rb +2 -2
  148. data/lib/puppet/functions/versioncmp.rb +1 -1
  149. data/lib/puppet/generate/models/type/type.rb +1 -1
  150. data/lib/puppet/generate/type.rb +2 -2
  151. data/lib/puppet/gettext/config.rb +3 -3
  152. data/lib/puppet/gettext/module_translations.rb +1 -1
  153. data/lib/puppet/graph.rb +6 -6
  154. data/lib/puppet/graph/simple_graph.rb +2 -2
  155. data/lib/puppet/http.rb +26 -26
  156. data/lib/puppet/http/factory.rb +2 -2
  157. data/lib/puppet/http/proxy.rb +1 -1
  158. data/lib/puppet/http/resolver/server_list.rb +15 -4
  159. data/lib/puppet/http/service/compiler.rb +73 -1
  160. data/lib/puppet/http/service/file_server.rb +3 -2
  161. data/lib/puppet/indirector.rb +5 -5
  162. data/lib/puppet/indirector/catalog/compiler.rb +7 -6
  163. data/lib/puppet/indirector/catalog/json.rb +2 -2
  164. data/lib/puppet/indirector/catalog/msgpack.rb +2 -2
  165. data/lib/puppet/indirector/catalog/rest.rb +2 -2
  166. data/lib/puppet/indirector/catalog/store_configs.rb +2 -2
  167. data/lib/puppet/indirector/catalog/yaml.rb +2 -2
  168. data/lib/puppet/indirector/code.rb +1 -1
  169. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  170. data/lib/puppet/indirector/data_binding/none.rb +1 -1
  171. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  172. data/lib/puppet/indirector/envelope.rb +1 -1
  173. data/lib/puppet/indirector/errors.rb +1 -1
  174. data/lib/puppet/indirector/exec.rb +2 -2
  175. data/lib/puppet/indirector/face.rb +1 -1
  176. data/lib/puppet/indirector/facts/facter.rb +2 -2
  177. data/lib/puppet/indirector/facts/json.rb +3 -3
  178. data/lib/puppet/indirector/facts/memory.rb +2 -2
  179. data/lib/puppet/indirector/facts/network_device.rb +2 -2
  180. data/lib/puppet/indirector/facts/rest.rb +2 -2
  181. data/lib/puppet/indirector/facts/store_configs.rb +2 -2
  182. data/lib/puppet/indirector/facts/yaml.rb +3 -3
  183. data/lib/puppet/indirector/file_bucket_file/file.rb +4 -4
  184. data/lib/puppet/indirector/file_bucket_file/rest.rb +2 -2
  185. data/lib/puppet/indirector/file_bucket_file/selector.rb +1 -1
  186. data/lib/puppet/indirector/file_content.rb +1 -1
  187. data/lib/puppet/indirector/file_content/file.rb +3 -3
  188. data/lib/puppet/indirector/file_content/file_server.rb +3 -3
  189. data/lib/puppet/indirector/file_content/rest.rb +3 -3
  190. data/lib/puppet/indirector/file_content/selector.rb +4 -4
  191. data/lib/puppet/indirector/file_metadata.rb +1 -1
  192. data/lib/puppet/indirector/file_metadata/file.rb +3 -3
  193. data/lib/puppet/indirector/file_metadata/file_server.rb +3 -3
  194. data/lib/puppet/indirector/file_metadata/http.rb +3 -3
  195. data/lib/puppet/indirector/file_metadata/rest.rb +4 -3
  196. data/lib/puppet/indirector/file_metadata/selector.rb +4 -4
  197. data/lib/puppet/indirector/file_server.rb +4 -4
  198. data/lib/puppet/indirector/generic_http.rb +1 -1
  199. data/lib/puppet/indirector/hiera.rb +1 -1
  200. data/lib/puppet/indirector/indirection.rb +5 -5
  201. data/lib/puppet/indirector/json.rb +2 -2
  202. data/lib/puppet/indirector/memory.rb +1 -1
  203. data/lib/puppet/indirector/msgpack.rb +2 -2
  204. data/lib/puppet/indirector/node/exec.rb +2 -2
  205. data/lib/puppet/indirector/node/json.rb +2 -2
  206. data/lib/puppet/indirector/node/memory.rb +2 -2
  207. data/lib/puppet/indirector/node/msgpack.rb +2 -2
  208. data/lib/puppet/indirector/node/plain.rb +2 -2
  209. data/lib/puppet/indirector/node/rest.rb +2 -2
  210. data/lib/puppet/indirector/node/store_configs.rb +2 -2
  211. data/lib/puppet/indirector/node/yaml.rb +2 -2
  212. data/lib/puppet/indirector/none.rb +1 -1
  213. data/lib/puppet/indirector/plain.rb +1 -1
  214. data/lib/puppet/indirector/report/json.rb +2 -2
  215. data/lib/puppet/indirector/report/msgpack.rb +2 -2
  216. data/lib/puppet/indirector/report/processor.rb +3 -3
  217. data/lib/puppet/indirector/report/rest.rb +1 -1
  218. data/lib/puppet/indirector/report/yaml.rb +2 -2
  219. data/lib/puppet/indirector/request.rb +3 -3
  220. data/lib/puppet/indirector/resource/ral.rb +7 -2
  221. data/lib/puppet/indirector/resource/store_configs.rb +2 -2
  222. data/lib/puppet/indirector/terminus.rb +5 -5
  223. data/lib/puppet/indirector/yaml.rb +2 -2
  224. data/lib/puppet/info_service.rb +3 -3
  225. data/lib/puppet/info_service/class_information_service.rb +3 -3
  226. data/lib/puppet/info_service/plan_information_service.rb +1 -1
  227. data/lib/puppet/info_service/task_information_service.rb +1 -1
  228. data/lib/puppet/interface.rb +10 -10
  229. data/lib/puppet/interface/documentation.rb +2 -1
  230. data/lib/puppet/loaders.rb +21 -25
  231. data/lib/puppet/metatype/manager.rb +3 -3
  232. data/lib/puppet/module.rb +5 -4
  233. data/lib/puppet/module/plan.rb +1 -1
  234. data/lib/puppet/module/task.rb +1 -1
  235. data/lib/puppet/module_tool.rb +10 -10
  236. data/lib/puppet/module_tool/applications.rb +7 -7
  237. data/lib/puppet/module_tool/applications/application.rb +2 -2
  238. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  239. data/lib/puppet/module_tool/applications/installer.rb +11 -7
  240. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  241. data/lib/puppet/module_tool/applications/upgrader.rb +5 -5
  242. data/lib/puppet/module_tool/checksums.rb +1 -1
  243. data/lib/puppet/module_tool/contents_description.rb +1 -1
  244. data/lib/puppet/module_tool/dependency.rb +2 -2
  245. data/lib/puppet/module_tool/errors.rb +6 -6
  246. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  247. data/lib/puppet/module_tool/install_directory.rb +2 -2
  248. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  249. data/lib/puppet/module_tool/local_tarball.rb +2 -2
  250. data/lib/puppet/module_tool/metadata.rb +3 -3
  251. data/lib/puppet/module_tool/tar.rb +4 -4
  252. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  253. data/lib/puppet/network/format.rb +1 -1
  254. data/lib/puppet/network/format_handler.rb +3 -3
  255. data/lib/puppet/network/format_support.rb +1 -1
  256. data/lib/puppet/network/formats.rb +2 -2
  257. data/lib/puppet/network/http.rb +12 -12
  258. data/lib/puppet/network/http/api.rb +1 -1
  259. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  260. data/lib/puppet/network/http/api/master.rb +1 -1
  261. data/lib/puppet/network/http/api/master/v3.rb +2 -2
  262. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  263. data/lib/puppet/network/http/api/server/v3.rb +2 -2
  264. data/lib/puppet/network/http/api/server/v3/environments.rb +1 -1
  265. data/lib/puppet/network/http/connection.rb +1 -1
  266. data/lib/puppet/network/http/error.rb +1 -1
  267. data/lib/puppet/network/http/handler.rb +3 -3
  268. data/lib/puppet/network/http_pool.rb +1 -1
  269. data/lib/puppet/node.rb +3 -3
  270. data/lib/puppet/node/environment.rb +15 -8
  271. data/lib/puppet/node/facts.rb +3 -3
  272. data/lib/puppet/pal/pal_api.rb +10 -10
  273. data/lib/puppet/pal/pal_impl.rb +3 -3
  274. data/lib/puppet/parameter.rb +4 -4
  275. data/lib/puppet/parameter/boolean.rb +1 -1
  276. data/lib/puppet/parameter/package_options.rb +1 -1
  277. data/lib/puppet/parameter/path.rb +1 -1
  278. data/lib/puppet/parameter/value.rb +1 -1
  279. data/lib/puppet/parameter/value_collection.rb +1 -1
  280. data/lib/puppet/parser.rb +10 -10
  281. data/lib/puppet/parser/ast.rb +8 -8
  282. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  283. data/lib/puppet/parser/ast/pops_bridge.rb +2 -2
  284. data/lib/puppet/parser/catalog_compiler.rb +2 -2
  285. data/lib/puppet/parser/compiler.rb +5 -5
  286. data/lib/puppet/parser/e4_parser_adapter.rb +1 -1
  287. data/lib/puppet/parser/functions.rb +4 -4
  288. data/lib/puppet/parser/functions/digest.rb +1 -1
  289. data/lib/puppet/parser/functions/file.rb +1 -1
  290. data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
  291. data/lib/puppet/parser/functions/versioncmp.rb +1 -1
  292. data/lib/puppet/parser/parser_factory.rb +2 -2
  293. data/lib/puppet/parser/resource.rb +3 -3
  294. data/lib/puppet/parser/scope.rb +3 -3
  295. data/lib/puppet/parser/script_compiler.rb +2 -2
  296. data/lib/puppet/parser/templatewrapper.rb +2 -2
  297. data/lib/puppet/parser/type_loader.rb +1 -1
  298. data/lib/puppet/plugins/configuration.rb +5 -5
  299. data/lib/puppet/pops.rb +57 -57
  300. data/lib/puppet/pops/evaluator/deferred_resolver.rb +1 -1
  301. data/lib/puppet/pops/evaluator/evaluator_impl.rb +7 -7
  302. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  303. data/lib/puppet/pops/loader/base_loader.rb +42 -32
  304. data/lib/puppet/pops/loader/dependency_loader.rb +2 -2
  305. data/lib/puppet/pops/loader/loader.rb +15 -5
  306. data/lib/puppet/pops/loader/module_loaders.rb +8 -8
  307. data/lib/puppet/pops/loader/predefined_loader.rb +4 -0
  308. data/lib/puppet/pops/loader/runtime3_type_loader.rb +1 -1
  309. data/lib/puppet/pops/loader/static_loader.rb +4 -0
  310. data/lib/puppet/pops/loader/task_instantiator.rb +1 -1
  311. data/lib/puppet/pops/loaders.rb +4 -4
  312. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  313. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  314. data/lib/puppet/pops/model/pn_transformer.rb +1 -1
  315. data/lib/puppet/pops/parser/eparser.rb +2 -2
  316. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  317. data/lib/puppet/pops/parser/lexer2.rb +5 -5
  318. data/lib/puppet/pops/parser/lexer_support.rb +1 -1
  319. data/lib/puppet/pops/parser/parser_support.rb +4 -4
  320. data/lib/puppet/pops/puppet_stack.rb +1 -1
  321. data/lib/puppet/pops/serialization/json.rb +1 -1
  322. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  323. data/lib/puppet/pops/time/timespan.rb +1 -1
  324. data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
  325. data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
  326. data/lib/puppet/pops/types/p_type_set_type.rb +1 -1
  327. data/lib/puppet/pops/types/string_converter.rb +1 -1
  328. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  329. data/lib/puppet/pops/types/type_formatter.rb +1 -1
  330. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  331. data/lib/puppet/pops/types/type_parser.rb +1 -1
  332. data/lib/puppet/pops/types/types.rb +1 -1
  333. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  334. data/lib/puppet/property.rb +3 -3
  335. data/lib/puppet/property/boolean.rb +1 -1
  336. data/lib/puppet/property/ensure.rb +1 -1
  337. data/lib/puppet/property/keyvalue.rb +1 -1
  338. data/lib/puppet/property/list.rb +1 -1
  339. data/lib/puppet/property/ordered_list.rb +1 -1
  340. data/lib/puppet/provider.rb +2 -2
  341. data/lib/puppet/provider/confine.rb +2 -2
  342. data/lib/puppet/provider/exec.rb +2 -2
  343. data/lib/puppet/provider/exec/posix.rb +17 -5
  344. data/lib/puppet/provider/exec/windows.rb +1 -1
  345. data/lib/puppet/provider/file/posix.rb +1 -1
  346. data/lib/puppet/provider/file/windows.rb +1 -1
  347. data/lib/puppet/provider/group/aix.rb +1 -1
  348. data/lib/puppet/provider/group/directoryservice.rb +1 -1
  349. data/lib/puppet/provider/group/groupadd.rb +2 -2
  350. data/lib/puppet/provider/group/ldap.rb +1 -1
  351. data/lib/puppet/provider/group/pw.rb +1 -1
  352. data/lib/puppet/provider/group/windows_adsi.rb +1 -1
  353. data/lib/puppet/provider/ldap.rb +2 -2
  354. data/lib/puppet/provider/nameservice.rb +1 -1
  355. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  356. data/lib/puppet/provider/nameservice/objectadd.rb +1 -1
  357. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  358. data/lib/puppet/provider/package.rb +1 -1
  359. data/lib/puppet/provider/package/aix.rb +2 -2
  360. data/lib/puppet/provider/package/appdmg.rb +2 -2
  361. data/lib/puppet/provider/package/apple.rb +1 -1
  362. data/lib/puppet/provider/package/apt.rb +5 -5
  363. data/lib/puppet/provider/package/dnfmodule.rb +2 -2
  364. data/lib/puppet/provider/package/dpkg.rb +1 -1
  365. data/lib/puppet/provider/package/gem.rb +3 -3
  366. data/lib/puppet/provider/package/hpux.rb +1 -1
  367. data/lib/puppet/provider/package/macports.rb +2 -2
  368. data/lib/puppet/provider/package/nim.rb +13 -8
  369. data/lib/puppet/provider/package/openbsd.rb +1 -1
  370. data/lib/puppet/provider/package/opkg.rb +1 -1
  371. data/lib/puppet/provider/package/pacman.rb +1 -1
  372. data/lib/puppet/provider/package/pip.rb +18 -6
  373. data/lib/puppet/provider/package/pkg.rb +2 -2
  374. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  375. data/lib/puppet/provider/package/pkgin.rb +1 -1
  376. data/lib/puppet/provider/package/pkgng.rb +1 -1
  377. data/lib/puppet/provider/package/portage.rb +1 -1
  378. data/lib/puppet/provider/package/portupgrade.rb +1 -1
  379. data/lib/puppet/provider/package/puppet_gem.rb +12 -1
  380. data/lib/puppet/provider/package/puppetserver_gem.rb +0 -0
  381. data/lib/puppet/provider/package/rpm.rb +2 -2
  382. data/lib/puppet/provider/package/sun.rb +1 -1
  383. data/lib/puppet/provider/package/windows.rb +17 -4
  384. data/lib/puppet/provider/package/windows/exe_package.rb +31 -2
  385. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  386. data/lib/puppet/provider/package/windows/package.rb +6 -5
  387. data/lib/puppet/provider/package/yum.rb +6 -6
  388. data/lib/puppet/provider/package/zypper.rb +3 -3
  389. data/lib/puppet/provider/package_targetable.rb +1 -1
  390. data/lib/puppet/provider/parsedfile.rb +6 -3
  391. data/lib/puppet/provider/service/base.rb +6 -4
  392. data/lib/puppet/provider/service/daemontools.rb +0 -1
  393. data/lib/puppet/provider/service/debian.rb +3 -5
  394. data/lib/puppet/provider/service/freebsd.rb +1 -1
  395. data/lib/puppet/provider/service/init.rb +1 -1
  396. data/lib/puppet/provider/service/launchd.rb +9 -3
  397. data/lib/puppet/provider/service/service.rb +28 -3
  398. data/lib/puppet/provider/service/smf.rb +0 -24
  399. data/lib/puppet/provider/service/src.rb +2 -2
  400. data/lib/puppet/provider/service/systemd.rb +18 -8
  401. data/lib/puppet/provider/service/windows.rb +38 -0
  402. data/lib/puppet/provider/user/aix.rb +2 -2
  403. data/lib/puppet/provider/user/directoryservice.rb +26 -13
  404. data/lib/puppet/provider/user/ldap.rb +1 -1
  405. data/lib/puppet/provider/user/openbsd.rb +1 -1
  406. data/lib/puppet/provider/user/pw.rb +1 -1
  407. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  408. data/lib/puppet/provider/user/useradd.rb +4 -4
  409. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  410. data/lib/puppet/reference/configuration.rb +1 -1
  411. data/lib/puppet/reference/indirection.rb +4 -4
  412. data/lib/puppet/reference/report.rb +1 -1
  413. data/lib/puppet/reports.rb +1 -1
  414. data/lib/puppet/reports/http.rb +2 -2
  415. data/lib/puppet/reports/log.rb +1 -1
  416. data/lib/puppet/reports/store.rb +2 -2
  417. data/lib/puppet/resource.rb +4 -4
  418. data/lib/puppet/resource/catalog.rb +5 -5
  419. data/lib/puppet/resource/status.rb +2 -2
  420. data/lib/puppet/resource/type.rb +4 -4
  421. data/lib/puppet/resource/type_collection.rb +6 -4
  422. data/lib/puppet/runtime.rb +1 -1
  423. data/lib/puppet/scheduler.rb +4 -4
  424. data/lib/puppet/settings.rb +61 -37
  425. data/lib/puppet/settings/autosign_setting.rb +1 -1
  426. data/lib/puppet/settings/base_setting.rb +2 -2
  427. data/lib/puppet/settings/certificate_revocation_setting.rb +1 -1
  428. data/lib/puppet/settings/config_file.rb +2 -9
  429. data/lib/puppet/settings/errors.rb +1 -1
  430. data/lib/puppet/settings/priority_setting.rb +3 -3
  431. data/lib/puppet/settings/value_translator.rb +0 -1
  432. data/lib/puppet/ssl.rb +11 -11
  433. data/lib/puppet/ssl/base.rb +3 -3
  434. data/lib/puppet/ssl/certificate.rb +1 -1
  435. data/lib/puppet/ssl/certificate_request.rb +2 -2
  436. data/lib/puppet/ssl/certificate_request_attributes.rb +2 -2
  437. data/lib/puppet/ssl/oids.rb +1 -1
  438. data/lib/puppet/ssl/openssl_loader.rb +1 -1
  439. data/lib/puppet/ssl/ssl_context.rb +1 -1
  440. data/lib/puppet/ssl/ssl_provider.rb +1 -1
  441. data/lib/puppet/ssl/state_machine.rb +2 -2
  442. data/lib/puppet/ssl/verifier.rb +5 -1
  443. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  444. data/lib/puppet/syntax_checkers/epp.rb +1 -1
  445. data/lib/puppet/syntax_checkers/json.rb +1 -1
  446. data/lib/puppet/syntax_checkers/pp.rb +1 -1
  447. data/lib/puppet/transaction.rb +11 -11
  448. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  449. data/lib/puppet/transaction/event.rb +4 -4
  450. data/lib/puppet/transaction/event_manager.rb +1 -1
  451. data/lib/puppet/transaction/persistence.rb +1 -1
  452. data/lib/puppet/transaction/report.rb +2 -2
  453. data/lib/puppet/transaction/resource_harness.rb +1 -1
  454. data/lib/puppet/type.rb +14 -14
  455. data/lib/puppet/type/component.rb +3 -3
  456. data/lib/puppet/type/exec.rb +16 -3
  457. data/lib/puppet/type/file.rb +37 -19
  458. data/lib/puppet/type/file/checksum.rb +1 -1
  459. data/lib/puppet/type/file/checksum_value.rb +2 -2
  460. data/lib/puppet/type/file/content.rb +2 -2
  461. data/lib/puppet/type/file/data_sync.rb +2 -2
  462. data/lib/puppet/type/file/ensure.rb +1 -1
  463. data/lib/puppet/type/file/group.rb +1 -1
  464. data/lib/puppet/type/file/mode.rb +7 -1
  465. data/lib/puppet/type/file/selcontext.rb +2 -2
  466. data/lib/puppet/type/file/source.rb +4 -4
  467. data/lib/puppet/type/filebucket.rb +1 -1
  468. data/lib/puppet/type/group.rb +2 -2
  469. data/lib/puppet/type/package.rb +2 -2
  470. data/lib/puppet/type/resources.rb +2 -2
  471. data/lib/puppet/type/service.rb +18 -38
  472. data/lib/puppet/type/tidy.rb +25 -6
  473. data/lib/puppet/type/user.rb +43 -25
  474. data/lib/puppet/util.rb +43 -34
  475. data/lib/puppet/util/at_fork.rb +3 -3
  476. data/lib/puppet/util/at_fork/solaris.rb +1 -1
  477. data/lib/puppet/util/autoload.rb +4 -4
  478. data/lib/puppet/util/checksums.rb +3 -3
  479. data/lib/puppet/util/colors.rb +1 -1
  480. data/lib/puppet/util/command_line.rb +6 -6
  481. data/lib/puppet/util/command_line/puppet_option_parser.rb +2 -2
  482. data/lib/puppet/util/execution.rb +2 -2
  483. data/lib/puppet/util/feature.rb +2 -2
  484. data/lib/puppet/util/filetype.rb +1 -1
  485. data/lib/puppet/util/http_proxy.rb +1 -1
  486. data/lib/puppet/util/inifile.rb +2 -2
  487. data/lib/puppet/util/instance_loader.rb +3 -3
  488. data/lib/puppet/util/json_lockfile.rb +1 -1
  489. data/lib/puppet/util/ldap/connection.rb +1 -1
  490. data/lib/puppet/util/ldap/generator.rb +1 -1
  491. data/lib/puppet/util/ldap/manager.rb +3 -3
  492. data/lib/puppet/util/limits.rb +1 -1
  493. data/lib/puppet/util/log.rb +6 -6
  494. data/lib/puppet/util/log/destinations.rb +1 -1
  495. data/lib/puppet/util/logging.rb +2 -2
  496. data/lib/puppet/util/metric.rb +2 -2
  497. data/lib/puppet/util/monkey_patches.rb +9 -20
  498. data/lib/puppet/util/network_device/base.rb +3 -3
  499. data/lib/puppet/util/network_device/config.rb +2 -2
  500. data/lib/puppet/util/network_device/transport.rb +1 -1
  501. data/lib/puppet/util/network_device/transport/base.rb +2 -2
  502. data/lib/puppet/util/package/version/range.rb +6 -6
  503. data/lib/puppet/util/package/version/range/eq.rb +1 -1
  504. data/lib/puppet/util/package/version/range/gt.rb +1 -1
  505. data/lib/puppet/util/package/version/range/gt_eq.rb +1 -1
  506. data/lib/puppet/util/package/version/range/lt.rb +1 -1
  507. data/lib/puppet/util/package/version/range/lt_eq.rb +1 -1
  508. data/lib/puppet/util/package/version/range/min_max.rb +1 -1
  509. data/lib/puppet/util/package/version/range/simple.rb +1 -1
  510. data/lib/puppet/util/package/version/rpm.rb +1 -1
  511. data/lib/puppet/util/pidlock.rb +1 -1
  512. data/lib/puppet/util/plist.rb +1 -1
  513. data/lib/puppet/util/posix.rb +1 -1
  514. data/lib/puppet/util/profiler.rb +3 -3
  515. data/lib/puppet/util/profiler/aggregate.rb +2 -2
  516. data/lib/puppet/util/profiler/object_counts.rb +1 -1
  517. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  518. data/lib/puppet/util/provider_features.rb +2 -2
  519. data/lib/puppet/util/rdoc.rb +2 -2
  520. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  521. data/lib/puppet/util/rdoc/parser.rb +6 -6
  522. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  523. data/lib/puppet/util/reference.rb +1 -1
  524. data/lib/puppet/util/resource_template.rb +2 -2
  525. data/lib/puppet/util/rubygems.rb +1 -1
  526. data/lib/puppet/util/selinux.rb +30 -4
  527. data/lib/puppet/util/skip_tags.rb +1 -1
  528. data/lib/puppet/util/storage.rb +1 -1
  529. data/lib/puppet/util/suidmanager.rb +2 -2
  530. data/lib/puppet/util/symbolic_file_mode.rb +30 -18
  531. data/lib/puppet/util/tag_set.rb +1 -1
  532. data/lib/puppet/util/tagging.rb +1 -1
  533. data/lib/puppet/util/watched_file.rb +1 -1
  534. data/lib/puppet/util/watcher.rb +3 -3
  535. data/lib/puppet/util/windows.rb +20 -20
  536. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  537. data/lib/puppet/util/windows/adsi.rb +1 -1
  538. data/lib/puppet/util/windows/daemon.rb +1 -1
  539. data/lib/puppet/util/windows/error.rb +2 -2
  540. data/lib/puppet/util/windows/file.rb +1 -1
  541. data/lib/puppet/util/windows/monkey_patches/process.rb +2 -2
  542. data/lib/puppet/util/windows/principal.rb +1 -1
  543. data/lib/puppet/util/windows/process.rb +2 -2
  544. data/lib/puppet/util/windows/registry.rb +1 -1
  545. data/lib/puppet/util/windows/root_certs.rb +2 -2
  546. data/lib/puppet/util/windows/security.rb +1 -1
  547. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  548. data/lib/puppet/util/windows/service.rb +1 -1
  549. data/lib/puppet/util/windows/sid.rb +4 -2
  550. data/lib/puppet/util/windows/user.rb +1 -1
  551. data/lib/puppet/vendor.rb +1 -1
  552. data/lib/puppet/version.rb +1 -1
  553. data/lib/puppet/x509.rb +4 -4
  554. data/lib/puppet/x509/cert_provider.rb +4 -22
  555. data/lib/puppet/x509/pem_store.rb +1 -1
  556. data/lib/puppet_pal.rb +2 -2
  557. data/locales/puppet.pot +349 -305
  558. data/man/man5/puppet.conf.5 +259 -241
  559. data/man/man8/puppet-agent.8 +1 -1
  560. data/man/man8/puppet-apply.8 +1 -1
  561. data/man/man8/puppet-catalog.8 +9 -9
  562. data/man/man8/puppet-config.8 +1 -1
  563. data/man/man8/puppet-describe.8 +1 -1
  564. data/man/man8/puppet-device.8 +1 -1
  565. data/man/man8/puppet-doc.8 +1 -1
  566. data/man/man8/puppet-epp.8 +1 -1
  567. data/man/man8/puppet-facts.8 +7 -7
  568. data/man/man8/puppet-filebucket.8 +1 -1
  569. data/man/man8/puppet-generate.8 +1 -1
  570. data/man/man8/puppet-help.8 +1 -1
  571. data/man/man8/puppet-lookup.8 +1 -1
  572. data/man/man8/puppet-module.8 +1 -1
  573. data/man/man8/puppet-node.8 +5 -5
  574. data/man/man8/puppet-parser.8 +1 -1
  575. data/man/man8/puppet-plugin.8 +1 -1
  576. data/man/man8/puppet-report.8 +5 -5
  577. data/man/man8/puppet-resource.8 +1 -1
  578. data/man/man8/puppet-script.8 +1 -1
  579. data/man/man8/puppet-ssl.8 +1 -1
  580. data/man/man8/puppet.8 +2 -2
  581. data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
  582. data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
  583. data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
  584. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
  585. data/spec/fixtures/ssl/ca.pem +57 -35
  586. data/spec/fixtures/ssl/crl.pem +28 -18
  587. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  588. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  589. data/spec/fixtures/ssl/ec-key.pem +11 -11
  590. data/spec/fixtures/ssl/ec.pem +33 -24
  591. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  592. data/spec/fixtures/ssl/encrypted-key.pem +108 -58
  593. data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
  594. data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
  595. data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
  596. data/spec/fixtures/ssl/intermediate.pem +57 -36
  597. data/spec/fixtures/ssl/oid-key.pem +117 -0
  598. data/spec/fixtures/ssl/oid.pem +69 -0
  599. data/spec/fixtures/ssl/pluto-key.pem +107 -57
  600. data/spec/fixtures/ssl/pluto.pem +52 -30
  601. data/spec/fixtures/ssl/request-key.pem +107 -57
  602. data/spec/fixtures/ssl/request.pem +47 -26
  603. data/spec/fixtures/ssl/revoked-key.pem +107 -57
  604. data/spec/fixtures/ssl/revoked.pem +52 -30
  605. data/spec/fixtures/ssl/signed-key.pem +107 -57
  606. data/spec/fixtures/ssl/signed.pem +52 -30
  607. data/spec/fixtures/ssl/tampered-cert.pem +52 -30
  608. data/spec/fixtures/ssl/tampered-csr.pem +47 -26
  609. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  610. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
  611. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
  612. data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
  613. data/spec/fixtures/ssl/unknown-ca.pem +55 -33
  614. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  615. data/spec/integration/application/filebucket_spec.rb +11 -0
  616. data/spec/integration/application/module_spec.rb +21 -0
  617. data/spec/integration/application/resource_spec.rb +64 -0
  618. data/spec/integration/application/ssl_spec.rb +20 -0
  619. data/spec/integration/defaults_spec.rb +5 -0
  620. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  621. data/spec/integration/http/client_spec.rb +1 -1
  622. data/spec/integration/indirector/facts/facter_spec.rb +90 -36
  623. data/spec/integration/type/exec_spec.rb +70 -45
  624. data/spec/integration/type/file_spec.rb +5 -5
  625. data/spec/lib/puppet/test_ca.rb +7 -2
  626. data/spec/lib/puppet_spec/files.rb +1 -1
  627. data/spec/lib/puppet_spec/settings.rb +1 -0
  628. data/spec/shared_contexts/provider.rb +16 -0
  629. data/spec/spec_helper.rb +11 -1
  630. data/spec/unit/application/agent_spec.rb +7 -2
  631. data/spec/unit/configurer/downloader_spec.rb +6 -0
  632. data/spec/unit/configurer_spec.rb +23 -0
  633. data/spec/unit/environments_spec.rb +35 -0
  634. data/spec/unit/file_bucket/dipper_spec.rb +1 -1
  635. data/spec/unit/file_serving/fileset_spec.rb +60 -0
  636. data/spec/unit/file_system_spec.rb +6 -0
  637. data/spec/unit/functions/assert_type_spec.rb +1 -1
  638. data/spec/unit/functions/empty_spec.rb +10 -0
  639. data/spec/unit/functions/lookup_spec.rb +23 -0
  640. data/spec/unit/functions/unwrap_spec.rb +8 -0
  641. data/spec/unit/functions4_spec.rb +19 -10
  642. data/spec/unit/gettext/config_spec.rb +12 -0
  643. data/spec/unit/http/service/compiler_spec.rb +123 -0
  644. data/spec/unit/indirector/catalog/compiler_spec.rb +14 -10
  645. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  646. data/spec/unit/module_spec.rb +1 -1
  647. data/spec/unit/module_tool/applications/installer_spec.rb +13 -2
  648. data/spec/unit/parser/compiler_spec.rb +29 -0
  649. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
  650. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  651. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -10
  652. data/spec/unit/pops/lookup/context_spec.rb +1 -1
  653. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  654. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
  655. data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
  656. data/spec/unit/pops/types/type_parser_spec.rb +2 -1
  657. data/spec/unit/provider/package/dnfmodule_spec.rb +13 -4
  658. data/spec/unit/provider/package/gem_spec.rb +3 -1
  659. data/spec/unit/provider/package/nim_spec.rb +42 -0
  660. data/spec/unit/provider/package/pip2_spec.rb +3 -1
  661. data/spec/unit/provider/package/pip3_spec.rb +3 -1
  662. data/spec/unit/provider/package/pip_spec.rb +40 -1
  663. data/spec/unit/provider/package/pkg_spec.rb +44 -44
  664. data/spec/unit/provider/package/puppet_gem_spec.rb +31 -1
  665. data/spec/unit/provider/package/puppetserver_gem_spec.rb +2 -0
  666. data/spec/unit/provider/package/windows/exe_package_spec.rb +17 -0
  667. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  668. data/spec/unit/provider/service/base_spec.rb +8 -8
  669. data/spec/unit/provider/service/bsd_spec.rb +0 -4
  670. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  671. data/spec/unit/provider/service/debian_spec.rb +15 -17
  672. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  673. data/spec/unit/provider/service/gentoo_spec.rb +19 -14
  674. data/spec/unit/provider/service/init_spec.rb +29 -20
  675. data/spec/unit/provider/service/launchd_spec.rb +10 -12
  676. data/spec/unit/provider/service/openbsd_spec.rb +21 -35
  677. data/spec/unit/provider/service/openrc_spec.rb +15 -14
  678. data/spec/unit/provider/service/openwrt_spec.rb +3 -1
  679. data/spec/unit/provider/service/redhat_spec.rb +20 -19
  680. data/spec/unit/provider/service/smf_spec.rb +6 -5
  681. data/spec/unit/provider/service/src_spec.rb +5 -10
  682. data/spec/unit/provider/service/systemd_spec.rb +80 -29
  683. data/spec/unit/provider/service/upstart_spec.rb +25 -20
  684. data/spec/unit/provider/service/windows_spec.rb +202 -0
  685. data/spec/unit/provider/user/directoryservice_spec.rb +67 -35
  686. data/spec/unit/provider/user/useradd_spec.rb +18 -3
  687. data/spec/unit/resource/catalog_spec.rb +1 -1
  688. data/spec/unit/resource/type_collection_spec.rb +16 -0
  689. data/spec/unit/resource/type_spec.rb +2 -2
  690. data/spec/unit/settings/config_file_spec.rb +1 -11
  691. data/spec/unit/settings/value_translator_spec.rb +4 -5
  692. data/spec/unit/settings_spec.rb +120 -79
  693. data/spec/unit/ssl/ssl_provider_spec.rb +18 -16
  694. data/spec/unit/ssl/state_machine_spec.rb +19 -5
  695. data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
  696. data/spec/unit/transaction_spec.rb +18 -20
  697. data/spec/unit/type/exec_spec.rb +76 -29
  698. data/spec/unit/type/file/selinux_spec.rb +3 -3
  699. data/spec/unit/type/file/source_spec.rb +4 -4
  700. data/spec/unit/type/service_spec.rb +59 -188
  701. data/spec/unit/type/tidy_spec.rb +24 -7
  702. data/spec/unit/type/user_spec.rb +45 -0
  703. data/spec/unit/util/at_fork_spec.rb +9 -9
  704. data/spec/unit/util/ldap/connection_spec.rb +10 -10
  705. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  706. data/spec/unit/util/posix_spec.rb +1 -1
  707. data/spec/unit/util/selinux_spec.rb +87 -16
  708. data/spec/unit/util/windows/sid_spec.rb +39 -4
  709. data/spec/unit/util_spec.rb +1 -3
  710. data/spec/unit/x509/cert_provider_spec.rb +9 -1
  711. data/tasks/generate_cert_fixtures.rake +12 -3
  712. metadata +22 -3
@@ -4,10 +4,6 @@ describe 'Puppet::Type::Service::Provider::Src',
4
4
  unless: Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
5
5
  let(:provider_class) { Puppet::Type.type(:service).provider(:src) }
6
6
 
7
- before :all do
8
- `exit 0`
9
- end
10
-
11
7
  before :each do
12
8
  @resource = double('resource')
13
9
  allow(@resource).to receive(:[]).and_return(nil)
@@ -110,20 +106,19 @@ _EOF_
110
106
 
111
107
  context "when checking if it is enabled" do
112
108
  it "should execute the lsitab command" do
113
- expect(@provider).to receive(:execute).with(['/usr/sbin/lsitab', 'myservice'], {:combine => true, :failonfail => false})
114
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
109
+ expect(@provider).to receive(:execute)
110
+ .with(['/usr/sbin/lsitab', 'myservice'], {:combine => true, :failonfail => false})
111
+ .and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
115
112
  @provider.enabled?
116
113
  end
117
114
 
118
115
  it "should return false when lsitab returns non-zero" do
119
- allow(@provider).to receive(:execute)
120
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(1)
116
+ expect(@provider).to receive(:execute).and_return(Puppet::Util::Execution::ProcessOutput.new('', 1))
121
117
  expect(@provider.enabled?).to eq(:false)
122
118
  end
123
119
 
124
120
  it "should return true when lsitab returns zero" do
125
- allow(@provider).to receive(:execute)
126
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
121
+ allow(@provider).to receive(:execute).and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
127
122
  expect(@provider.enabled?).to eq(:true)
128
123
  end
129
124
  end
@@ -10,19 +10,14 @@ describe 'Puppet::Type::Service::Provider::Systemd',
10
10
  allow(provider_class).to receive(:which).with('systemctl').and_return('/bin/systemctl')
11
11
  end
12
12
 
13
- # `execute` and `texecute` start a new process, consequently setting $CHILD_STATUS to a Process::Status instance,
14
- # but because they are mocked, an external process is never executed and $CHILD_STATUS remain nil.
15
- # In order to execute some parts of the code under test and to mock $CHILD_STATUS, we need this variable to be a
16
- # Process::Status instance. We can achieve this by starting a process that does nothing (exit 0). By doing this,
17
- # $CHILD_STATUS will be initialised with a instance of Process::Status and we will be able to mock it.
18
- before(:all) do
19
- `exit 0`
20
- end
21
-
22
13
  let :provider do
23
14
  provider_class.new(:name => 'sshd.service')
24
15
  end
25
16
 
17
+ let :process_output do
18
+ Puppet::Util::Execution::ProcessOutput.new('', 0)
19
+ end
20
+
26
21
  osfamilies = [ 'archlinux', 'coreos' ]
27
22
 
28
23
  osfamilies.each do |osfamily|
@@ -200,6 +195,17 @@ describe 'Puppet::Type::Service::Provider::Systemd',
200
195
  })
201
196
  end
202
197
 
198
+ it "correctly parses services when list-unit-files has an additional column" do
199
+ expect(provider_class).to receive(:systemctl).with('list-unit-files', '--type', 'service', '--full', '--all', '--no-pager').and_return(File.read(my_fixture('list_unit_files_services_vendor_preset')))
200
+ expect(provider_class.instances.map(&:name)).to match_array(%w{
201
+ arp-ethers.service
202
+ auditd.service
203
+ dbus.service
204
+ umountnfs.service
205
+ urandom.service
206
+ })
207
+ end
208
+
203
209
  it "should print a debug message when a service with the state `bad` is found" do
204
210
  expect(provider_class).to receive(:systemctl).with('list-unit-files', '--type', 'service', '--full', '--all', '--no-pager').and_return(File.read(my_fixture('list_unit_files_services')))
205
211
  expect(Puppet).to receive(:debug).with("apparmor.service marked as bad by `systemctl`. It is recommended to be further checked.")
@@ -324,6 +330,16 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
324
330
  and_return(Puppet::Util::Execution::ProcessOutput.new("masked\n", 1))
325
331
  expect(provider.enabled?).to eq(:mask)
326
332
  end
333
+
334
+ it "should consider nonexistent services to be disabled" do
335
+ provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'doesnotexist'))
336
+ expect(provider).to receive(:execute).with(['/bin/systemctl','is-enabled', '--', 'doesnotexist'], :failonfail => false)
337
+ .and_return(Puppet::Util::Execution::ProcessOutput.new("", 1))
338
+ expect(provider).to receive(:execute).with(["/usr/sbin/invoke-rc.d", "--quiet", "--query", "doesnotexist", "start"], :failonfail => false)
339
+ .and_return(Puppet::Util::Execution::ProcessOutput.new("", 1))
340
+
341
+ expect(provider.enabled?).to be(:false)
342
+ end
327
343
  end
328
344
 
329
345
  describe "#enable" do
@@ -346,6 +362,9 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
346
362
  describe "#mask" do
347
363
  it "should run systemctl to disable and mask a service" do
348
364
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
365
+ expect(provider).to receive(:execute).
366
+ with(['/bin/systemctl','cat', '--', 'sshd.service'], :failonfail => false).
367
+ and_return(Puppet::Util::Execution::ProcessOutput.new("# /lib/systemd/system/sshd.service\n...", 0))
349
368
  # :disable is the only call in the provider that uses a symbol instead of
350
369
  # a string.
351
370
  # This should be made consistent in the future and all tests updated.
@@ -353,30 +372,43 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
353
372
  expect(provider).to receive(:systemctl).with(:mask, '--', 'sshd.service')
354
373
  provider.mask
355
374
  end
375
+
376
+ it "masks a service that doesn't exist" do
377
+ provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'doesnotexist.service'))
378
+ expect(provider).to receive(:execute).
379
+ with(['/bin/systemctl','cat', '--', 'doesnotexist.service'], :failonfail => false).
380
+ and_return(Puppet::Util::Execution::ProcessOutput.new("No files found for doesnotexist.service.\n", 1))
381
+ expect(provider).to receive(:systemctl).with(:mask, '--', 'doesnotexist.service')
382
+ provider.mask
383
+ end
356
384
  end
357
385
 
358
386
  # Note: systemd provider does not care about hasstatus or a custom status
359
387
  # command. I just assume that it does not make sense for systemd.
360
388
  describe "#status" do
361
- it "should return running if if the command returns 0" do
389
+ it "should return running if the command returns 0" do
362
390
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
363
- expect(provider).to receive(:execute).with(['/bin/systemctl','is-active', '--', 'sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("active\n")
364
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
391
+ expect(provider).to receive(:execute)
392
+ .with(['/bin/systemctl','is-active', '--', 'sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
393
+ .and_return(Puppet::Util::Execution::ProcessOutput.new("active\n", 0))
365
394
  expect(provider.status).to eq(:running)
366
395
  end
367
396
 
368
397
  [-10,-1,3,10].each { |ec|
369
398
  it "should return stopped if the command returns something non-0" do
370
399
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
371
- expect(provider).to receive(:execute).with(['/bin/systemctl','is-active', '--', 'sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true).and_return("inactive\n")
372
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(ec)
400
+ expect(provider).to receive(:execute)
401
+ .with(['/bin/systemctl','is-active', '--', 'sshd.service'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
402
+ .and_return(Puppet::Util::Execution::ProcessOutput.new("inactive\n", ec))
373
403
  expect(provider.status).to eq(:stopped)
374
404
  end
375
405
  }
376
406
 
377
407
  it "should use the supplied status command if specified" do
378
408
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :status => '/bin/foo'))
379
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
409
+ expect(provider).to receive(:execute)
410
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
411
+ .and_return(process_output)
380
412
  provider.status
381
413
  end
382
414
  end
@@ -419,8 +451,7 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
419
451
  [104, 106].each do |status|
420
452
  it "should return true when invoke-rc.d returns #{status}" do
421
453
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
422
- allow(provider).to receive(:system)
423
- expect($CHILD_STATUS).to receive(:exitstatus).and_return(status)
454
+ allow(provider).to receive(:execute).and_return(Puppet::Util::Execution::ProcessOutput.new('', status))
424
455
  expect(provider.debian_enabled?).to eq(:true)
425
456
  end
426
457
  end
@@ -428,17 +459,15 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
428
459
  [101, 105].each do |status|
429
460
  it "should return true when status is #{status} and there are at least 4 start links" do
430
461
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
431
- allow(provider).to receive(:system)
462
+ allow(provider).to receive(:execute).and_return(Puppet::Util::Execution::ProcessOutput.new('', status))
432
463
  expect(provider).to receive(:get_start_link_count).and_return(4)
433
- expect($CHILD_STATUS).to receive(:exitstatus).twice.and_return(status)
434
464
  expect(provider.debian_enabled?).to eq(:true)
435
465
  end
436
466
 
437
467
  it "should return false when status is #{status} and there are less than 4 start links" do
438
468
  provider = provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
439
- allow(provider).to receive(:system)
469
+ allow(provider).to receive(:execute).and_return(Puppet::Util::Execution::ProcessOutput.new('', status))
440
470
  expect(provider).to receive(:get_start_link_count).and_return(1)
441
- expect($CHILD_STATUS).to receive(:exitstatus).twice.and_return(status)
442
471
  expect(provider.debian_enabled?).to eq(:false)
443
472
  end
444
473
  end
@@ -456,17 +485,39 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
456
485
  context 'when service state is static' do
457
486
  let(:service_state) { 'static' }
458
487
 
459
- it 'is always enabled_insync even if current value is the same as expected' do
460
- expect(provider).to be_enabled_insync(:false)
461
- end
488
+ context 'when enable is not mask' do
489
+ it 'is always enabled_insync even if current value is the same as expected' do
490
+ expect(provider).to be_enabled_insync(:false)
491
+ end
462
492
 
463
- it 'is always enabled_insync even if current value is not the same as expected' do
464
- expect(provider).to be_enabled_insync(:true)
493
+ it 'is always enabled_insync even if current value is not the same as expected' do
494
+ expect(provider).to be_enabled_insync(:true)
495
+ end
496
+
497
+ it 'logs a debug messsage' do
498
+ expect(Puppet).to receive(:debug).with("Unable to enable or disable static service sshd.service")
499
+ provider.enabled_insync?(:true)
500
+ end
465
501
  end
466
502
 
467
- it 'logs a debug messsage' do
468
- expect(Puppet).to receive(:debug).with("Unable to enable or disable static service sshd.service")
469
- provider.enabled_insync?(:true)
503
+ context 'when enable is mask' do
504
+ let(:provider) do
505
+ provider_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service',
506
+ :enable => 'mask'))
507
+ end
508
+
509
+ it 'is enabled_insync if current value is the same as expected' do
510
+ expect(provider).to be_enabled_insync(:mask)
511
+ end
512
+
513
+ it 'is not enabled_insync if current value is not the same as expected' do
514
+ expect(provider).not_to be_enabled_insync(:true)
515
+ end
516
+
517
+ it 'logs no debug messsage' do
518
+ expect(Puppet).not_to receive(:debug)
519
+ provider.enabled_insync?(:true)
520
+ end
470
521
  end
471
522
  end
472
523
 
@@ -5,10 +5,7 @@ describe 'Puppet::Type::Service::Provider::Upstart',
5
5
  let(:manual) { "\nmanual" }
6
6
  let(:start_on_default_runlevels) { "\nstart on runlevel [2,3,4,5]" }
7
7
  let!(:provider_class) { Puppet::Type.type(:service).provider(:upstart) }
8
-
9
- before :each do
10
- `exit 0`
11
- end
8
+ let(:process_output) { Puppet::Util::Execution::ProcessOutput.new('', 0) }
12
9
 
13
10
  def given_contents_of(file, content)
14
11
  File.open(file, 'w') do |f|
@@ -121,8 +118,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
121
118
  provider = provider_class.new(resource)
122
119
  allow(provider).to receive(:is_upstart?).and_return(true)
123
120
 
124
- expect(provider).to receive(:status_exec).with(["foo"]).and_return("foo start/running, process 1000")
125
- allow_any_instance_of(Process::Status).to receive(:exitstatus).and_return(0)
121
+ expect(provider).to receive(:status_exec)
122
+ .with(["foo"])
123
+ .and_return(Puppet::Util::Execution::ProcessOutput.new("foo start/running, process 1000", 0))
126
124
  expect(provider.status).to eq(:running)
127
125
  end
128
126
 
@@ -133,8 +131,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
133
131
  allow(provider).to receive(:is_upstart?).and_return(true)
134
132
 
135
133
  expect(provider).not_to receive(:status_exec).with(['foo'])
136
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
137
- allow_any_instance_of(Process::Status).to receive(:exitstatus).and_return(0)
134
+ expect(provider).to receive(:execute)
135
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
136
+ .and_return(process_output)
138
137
  provider.status
139
138
  end
140
139
 
@@ -144,8 +143,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
144
143
  allow(provider).to receive(:is_upstart?).and_return(true)
145
144
 
146
145
  expect(provider).not_to receive(:status_exec).with(['foo'])
147
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
148
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(1)
146
+ expect(provider).to receive(:execute)
147
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
148
+ .and_return(Puppet::Util::Execution::ProcessOutput.new('', 1))
149
149
  expect(provider.status).to eq(:stopped)
150
150
  end
151
151
 
@@ -155,8 +155,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
155
155
  allow(provider).to receive(:is_upstart?).and_return(true)
156
156
 
157
157
  expect(provider).not_to receive(:status_exec).with(['foo'])
158
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
159
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
158
+ expect(provider).to receive(:execute)
159
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
160
+ .and_return(process_output)
160
161
  expect(provider.status).to eq(:running)
161
162
  end
162
163
  end
@@ -190,8 +191,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
190
191
  allow(provider).to receive(:is_upstart?).and_return(true)
191
192
 
192
193
  expect(provider).not_to receive(:status_exec).with(['foo'])
193
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
194
- allow_any_instance_of(Process::Status).to receive(:exitstatus).and_return(0)
194
+ expect(provider).to receive(:execute)
195
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
196
+ .and_return(process_output)
195
197
  provider.status
196
198
  end
197
199
 
@@ -201,8 +203,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
201
203
  allow(provider).to receive(:is_upstart?).and_return(true)
202
204
 
203
205
  expect(provider).not_to receive(:status_exec).with(['foo'])
204
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
205
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(1)
206
+ expect(provider).to receive(:execute)
207
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
208
+ .and_return(Puppet::Util::Execution::ProcessOutput.new('', 1))
206
209
  expect(provider.status).to eq(:stopped)
207
210
  end
208
211
 
@@ -212,8 +215,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
212
215
  allow(provider).to receive(:is_upstart?).and_return(true)
213
216
 
214
217
  expect(provider).not_to receive(:status_exec).with(['foo'])
215
- expect(provider).to receive(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
216
- allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
218
+ expect(provider).to receive(:execute)
219
+ .with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => false, :combine => true)
220
+ .and_return(process_output)
217
221
  expect(provider.status).to eq(:running)
218
222
  end
219
223
  end
@@ -245,8 +249,9 @@ describe 'Puppet::Type::Service::Provider::Upstart',
245
249
  provider = provider_class.new(resource)
246
250
  allow(provider).to receive(:is_upstart?).and_return(true)
247
251
 
248
- expect(provider).to receive(:status_exec).with(["foostartbar"]).and_return("foostartbar stop/waiting")
249
- allow_any_instance_of(Process::Status).to receive(:exitstatus).and_return(0)
252
+ expect(provider).to receive(:status_exec)
253
+ .with(["foostartbar"]).and_return("foostartbar stop/waiting")
254
+ .and_return(process_output)
250
255
  expect(provider.status).to eq(:stopped)
251
256
  end
252
257
  end
@@ -270,4 +270,206 @@ describe 'Puppet::Type::Service::Provider::Windows',
270
270
  }.to raise_error(Puppet::Error, /Cannot enable #{name}/)
271
271
  end
272
272
  end
273
+
274
+ describe "when managing logon credentials" do
275
+ before do
276
+ allow(Puppet::Util::Windows::ADSI).to receive(:computer_name).and_return(computer_name)
277
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).and_return(principal)
278
+ allow(Puppet::Util::Windows::Service).to receive(:set_startup_configuration).and_return(nil)
279
+ end
280
+
281
+ let(:computer_name) { 'myPC' }
282
+
283
+ describe "#logonaccount=" do
284
+ before do
285
+ allow(Puppet::Util::Windows::User).to receive(:password_is?).and_return(true)
286
+ resource[:logonaccount] = user_input
287
+ provider.logonaccount_insync?(user_input)
288
+ end
289
+
290
+ let(:user_input) { principal.account }
291
+ let(:principal) do
292
+ Puppet::Util::Windows::SID::Principal.new("myUser", nil, nil, computer_name, :SidTypeUser)
293
+ end
294
+
295
+ context "when given user is 'myUser'" do
296
+ it "should fail when the `Log On As A Service` right is missing from given user" do
297
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).with(principal.domain_account).and_return("")
298
+ expect { provider.logonaccount=(user_input) }.to raise_error(Puppet::Error, /".\\#{principal.account}" is missing the 'Log On As A Service' right./)
299
+ end
300
+
301
+ it "should fail when the `Log On As A Service` right is set to denied for given user" do
302
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).with(principal.domain_account).and_return("SeDenyServiceLogonRight")
303
+ expect { provider.logonaccount=(user_input) }.to raise_error(Puppet::Error, /".\\#{principal.account}" has the 'Log On As A Service' right set to denied./)
304
+ end
305
+
306
+ it "should not fail when given user has the `Log On As A Service` right" do
307
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).with(principal.domain_account).and_return("SeServiceLogonRight")
308
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
309
+ end
310
+
311
+ ['myUser', 'myPC\\myUser', ".\\myUser", "MYPC\\mYuseR"].each do |user_input_variant|
312
+ let(:user_input) { user_input_variant }
313
+
314
+ it "should succesfully munge #{user_input_variant} to '.\\myUser'" do
315
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).with(principal.domain_account).and_return("SeServiceLogonRight")
316
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
317
+ expect(resource[:logonaccount]).to eq(".\\myUser")
318
+ end
319
+ end
320
+ end
321
+
322
+ context "when given user is a system account" do
323
+ before do
324
+ allow(Puppet::Util::Windows::User).to receive(:default_system_account?).and_return(true)
325
+ end
326
+
327
+ let(:user_input) { principal.account }
328
+ let(:principal) do
329
+ Puppet::Util::Windows::SID::Principal.new("LOCAL SERVICE", nil, nil, "NT AUTHORITY", :SidTypeUser)
330
+ end
331
+
332
+ it "should not fail when given user is a default system account even if the `Log On As A Service` right is missing" do
333
+ expect(Puppet::Util::Windows::User).not_to receive(:get_rights)
334
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
335
+ end
336
+
337
+ ['LocalSystem', '.\LocalSystem', 'myPC\LocalSystem', 'lOcALsysTem'].each do |user_input_variant|
338
+ let(:user_input) { user_input_variant }
339
+
340
+ it "should succesfully munge #{user_input_variant} to 'LocalSystem'" do
341
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
342
+ expect(resource[:logonaccount]).to eq('LocalSystem')
343
+ end
344
+ end
345
+ end
346
+
347
+ context "when domain is different from computer name" do
348
+ before do
349
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).and_return("SeServiceLogonRight")
350
+ end
351
+
352
+ context "when given user is from AD" do
353
+ let(:user_input) { 'myRemoteUser' }
354
+ let(:principal) do
355
+ Puppet::Util::Windows::SID::Principal.new("myRemoteUser", nil, nil, "AD", :SidTypeUser)
356
+ end
357
+
358
+ it "should not raise any error" do
359
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
360
+ end
361
+
362
+ it "should succesfully be munged" do
363
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
364
+ expect(resource[:logonaccount]).to eq('AD\myRemoteUser')
365
+ end
366
+ end
367
+
368
+ context "when given user is LocalService" do
369
+ let(:user_input) { 'LocalService' }
370
+ let(:principal) do
371
+ Puppet::Util::Windows::SID::Principal.new("LOCAL SERVICE", nil, nil, "NT AUTHORITY", :SidTypeWellKnownGroup)
372
+ end
373
+
374
+ it "should succesfully munge well known user" do
375
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
376
+ expect(resource[:logonaccount]).to eq('NT AUTHORITY\LOCAL SERVICE')
377
+ end
378
+ end
379
+
380
+ context "when given user is in SID form" do
381
+ let(:user_input) { 'S-1-5-20' }
382
+ let(:principal) do
383
+ Puppet::Util::Windows::SID::Principal.new("NETWORK SERVICE", nil, nil, "NT AUTHORITY", :SidTypeUser)
384
+ end
385
+
386
+ it "should succesfully munge" do
387
+ expect { provider.logonaccount=(user_input) }.not_to raise_error
388
+ expect(resource[:logonaccount]).to eq('NT AUTHORITY\NETWORK SERVICE')
389
+ end
390
+ end
391
+
392
+ context "when given user is actually a group" do
393
+ let(:principal) do
394
+ Puppet::Util::Windows::SID::Principal.new("Administrators", nil, nil, "BUILTIN", :SidTypeAlias)
395
+ end
396
+ let(:user_input) { 'Administrators' }
397
+
398
+ it "should fail when sid type is not user or well known user" do
399
+ expect { provider.logonaccount=(user_input) }.to raise_error(Puppet::Error, /"BUILTIN\\#{user_input}" is not a valid account/)
400
+ end
401
+ end
402
+ end
403
+ end
404
+
405
+ describe "#logonpassword=" do
406
+ before do
407
+ allow(Puppet::Util::Windows::User).to receive(:get_rights).and_return('SeServiceLogonRight')
408
+ resource[:logonaccount] = account
409
+ resource[:logonpassword] = user_input
410
+ provider.logonaccount_insync?(account)
411
+ end
412
+
413
+ let(:account) { 'LocalSystem' }
414
+
415
+ describe "when given logonaccount is a predefined_local_account" do
416
+ let(:user_input) { 'pass' }
417
+ let(:principal) { nil }
418
+
419
+ it "should pass validation when given account is 'LocalSystem'" do
420
+ allow(Puppet::Util::Windows::User).to receive(:localsystem?).with('LocalSystem').and_return(true)
421
+ allow(Puppet::Util::Windows::User).to receive(:default_system_account?).with('LocalSystem').and_return(true)
422
+
423
+ expect(Puppet::Util::Windows::User).not_to receive(:password_is?)
424
+ expect { provider.logonpassword=(user_input) }.not_to raise_error
425
+ end
426
+
427
+ ['LOCAL SERVICE', 'NETWORK SERVICE', 'SYSTEM'].each do |predefined_local_account|
428
+ describe "when given account is #{predefined_local_account}" do
429
+ let(:account) { 'predefined_local_account' }
430
+ let(:principal) do
431
+ Puppet::Util::Windows::SID::Principal.new(account, nil, nil, "NT AUTHORITY", :SidTypeUser)
432
+ end
433
+
434
+ it "should pass validation" do
435
+ allow(Puppet::Util::Windows::User).to receive(:localsystem?).with(principal.account).and_return(false)
436
+ allow(Puppet::Util::Windows::User).to receive(:localsystem?).with(principal.domain_account).and_return(false)
437
+ expect(Puppet::Util::Windows::User).to receive(:default_system_account?).with(principal.domain_account).and_return(true).twice
438
+
439
+ expect(Puppet::Util::Windows::User).not_to receive(:password_is?)
440
+ expect { provider.logonpassword=(user_input) }.not_to raise_error
441
+ end
442
+ end
443
+ end
444
+ end
445
+
446
+ describe "when given logonaccount is not a predefined local account" do
447
+ before do
448
+ allow(Puppet::Util::Windows::User).to receive(:localsystem?).with(".\\#{principal.account}").and_return(false)
449
+ allow(Puppet::Util::Windows::User).to receive(:default_system_account?).with(".\\#{principal.account}").and_return(false)
450
+ end
451
+
452
+ let(:account) { 'myUser' }
453
+ let(:principal) do
454
+ Puppet::Util::Windows::SID::Principal.new(account, nil, nil, computer_name, :SidTypeUser)
455
+ end
456
+
457
+ describe "when password is proven correct" do
458
+ let(:user_input) { 'myPass' }
459
+ it "should pass validation" do
460
+ allow(Puppet::Util::Windows::User).to receive(:password_is?).with('myUser', 'myPass', '.').and_return(true)
461
+ expect { provider.logonpassword=(user_input) }.not_to raise_error
462
+ end
463
+ end
464
+
465
+ describe "when password is not proven correct" do
466
+ let(:user_input) { 'myWrongPass' }
467
+ it "should not pass validation" do
468
+ allow(Puppet::Util::Windows::User).to receive(:password_is?).with('myUser', 'myWrongPass', '.').and_return(false)
469
+ expect { provider.logonpassword=(user_input) }.to raise_error(Puppet::Error, /The given password is invalid for user '.\\myUser'/)
470
+ end
471
+ end
472
+ end
473
+ end
474
+ end
273
475
  end