puppet 6.19.0 → 7.3.0

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +33 -28
  5. data/README.md +1 -1
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/project_data.yaml +2 -14
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/ext/windows/service/daemon.rb +6 -5
  12. data/install.rb +21 -17
  13. data/lib/puppet.rb +11 -20
  14. data/lib/puppet/application.rb +182 -104
  15. data/lib/puppet/application/agent.rb +1 -0
  16. data/lib/puppet/application/apply.rb +3 -2
  17. data/lib/puppet/application/device.rb +101 -104
  18. data/lib/puppet/application/filebucket.rb +15 -11
  19. data/lib/puppet/application/script.rb +1 -0
  20. data/lib/puppet/application/ssl.rb +1 -1
  21. data/lib/puppet/application_support.rb +7 -0
  22. data/lib/puppet/configurer.rb +44 -36
  23. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  24. data/lib/puppet/defaults.rb +71 -170
  25. data/lib/puppet/environments.rb +44 -75
  26. data/lib/puppet/face/config.rb +10 -0
  27. data/lib/puppet/face/epp.rb +12 -2
  28. data/lib/puppet/face/facts.rb +80 -6
  29. data/lib/puppet/face/help.rb +1 -1
  30. data/lib/puppet/face/node/clean.rb +8 -0
  31. data/lib/puppet/face/plugin.rb +5 -8
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/ffi/windows.rb +12 -0
  36. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  37. data/lib/puppet/ffi/windows/constants.rb +404 -0
  38. data/lib/puppet/ffi/windows/functions.rb +628 -0
  39. data/lib/puppet/ffi/windows/structs.rb +338 -0
  40. data/lib/puppet/file_serving/configuration.rb +0 -5
  41. data/lib/puppet/file_serving/configuration/parser.rb +6 -32
  42. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  43. data/lib/puppet/file_serving/mount.rb +1 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/epp.rb +1 -0
  46. data/lib/puppet/functions/inline_epp.rb +1 -0
  47. data/lib/puppet/generate/models/type/type.rb +4 -1
  48. data/lib/puppet/http.rb +22 -13
  49. data/lib/puppet/http/client.rb +164 -114
  50. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  51. data/lib/puppet/http/errors.rb +16 -0
  52. data/lib/puppet/http/external_client.rb +5 -7
  53. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  54. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  55. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  56. data/lib/puppet/http/proxy.rb +137 -0
  57. data/lib/puppet/http/redirector.rb +4 -12
  58. data/lib/puppet/http/resolver.rb +5 -15
  59. data/lib/puppet/http/resolver/server_list.rb +6 -10
  60. data/lib/puppet/http/resolver/settings.rb +4 -7
  61. data/lib/puppet/http/resolver/srv.rb +7 -11
  62. data/lib/puppet/http/response.rb +36 -54
  63. data/lib/puppet/http/response_converter.rb +24 -0
  64. data/lib/puppet/http/response_net_http.rb +42 -0
  65. data/lib/puppet/http/retry_after_handler.rb +4 -13
  66. data/lib/puppet/http/service.rb +12 -26
  67. data/lib/puppet/http/service/ca.rb +11 -22
  68. data/lib/puppet/http/service/compiler.rb +22 -69
  69. data/lib/puppet/http/service/file_server.rb +18 -27
  70. data/lib/puppet/http/service/puppetserver.rb +26 -12
  71. data/lib/puppet/http/service/report.rb +8 -10
  72. data/lib/puppet/http/session.rb +11 -20
  73. data/lib/puppet/{network/http → http}/site.rb +1 -2
  74. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  75. data/lib/puppet/indirector/fact_search.rb +60 -0
  76. data/lib/puppet/indirector/facts/facter.rb +24 -3
  77. data/lib/puppet/indirector/facts/json.rb +27 -0
  78. data/lib/puppet/indirector/facts/rest.rb +3 -22
  79. data/lib/puppet/indirector/facts/yaml.rb +3 -58
  80. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  81. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  82. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  83. data/lib/puppet/indirector/file_server.rb +1 -8
  84. data/lib/puppet/indirector/generic_http.rb +0 -11
  85. data/lib/puppet/indirector/json.rb +5 -1
  86. data/lib/puppet/indirector/node/json.rb +8 -0
  87. data/lib/puppet/indirector/node/rest.rb +2 -4
  88. data/lib/puppet/indirector/report/json.rb +34 -0
  89. data/lib/puppet/indirector/report/rest.rb +3 -8
  90. data/lib/puppet/indirector/request.rb +0 -101
  91. data/lib/puppet/indirector/rest.rb +12 -263
  92. data/lib/puppet/module_tool/applications.rb +0 -1
  93. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  94. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  95. data/lib/puppet/network/authconfig.rb +2 -96
  96. data/lib/puppet/network/authorization.rb +13 -35
  97. data/lib/puppet/network/formats.rb +69 -1
  98. data/lib/puppet/network/http.rb +3 -3
  99. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  100. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  101. data/lib/puppet/network/http/connection.rb +247 -316
  102. data/lib/puppet/network/http/handler.rb +0 -1
  103. data/lib/puppet/network/http_pool.rb +16 -34
  104. data/lib/puppet/node.rb +1 -30
  105. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  106. data/lib/puppet/pal/pal_impl.rb +73 -18
  107. data/lib/puppet/parser/ast/leaf.rb +3 -2
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  109. data/lib/puppet/parser/compiler.rb +0 -198
  110. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  111. data/lib/puppet/parser/resource.rb +0 -69
  112. data/lib/puppet/parser/templatewrapper.rb +1 -1
  113. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  115. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  116. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  117. data/lib/puppet/pops/issues.rb +0 -5
  118. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  119. data/lib/puppet/pops/model/ast.pp +0 -42
  120. data/lib/puppet/pops/model/ast.rb +0 -290
  121. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  122. data/lib/puppet/pops/model/factory.rb +0 -45
  123. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  124. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  125. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  126. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  127. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  128. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  129. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  130. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  131. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  132. data/lib/puppet/pops/types/type_parser.rb +0 -4
  133. data/lib/puppet/pops/types/types.rb +0 -1
  134. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  135. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  137. data/lib/puppet/provider.rb +0 -13
  138. data/lib/puppet/provider/nameservice.rb +0 -18
  139. data/lib/puppet/provider/package/apt.rb +4 -0
  140. data/lib/puppet/provider/package/dpkg.rb +0 -10
  141. data/lib/puppet/provider/package/gem.rb +23 -3
  142. data/lib/puppet/provider/package/pip.rb +0 -1
  143. data/lib/puppet/provider/package/pkg.rb +0 -4
  144. data/lib/puppet/provider/package/portage.rb +1 -1
  145. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  146. data/lib/puppet/provider/service/smf.rb +191 -73
  147. data/lib/puppet/provider/user/aix.rb +2 -2
  148. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  149. data/lib/puppet/reference/configuration.rb +8 -5
  150. data/lib/puppet/reference/indirection.rb +1 -1
  151. data/lib/puppet/resource.rb +1 -89
  152. data/lib/puppet/resource/catalog.rb +1 -14
  153. data/lib/puppet/resource/type.rb +3 -119
  154. data/lib/puppet/resource/type_collection.rb +3 -48
  155. data/lib/puppet/runtime.rb +1 -2
  156. data/lib/puppet/settings.rb +88 -48
  157. data/lib/puppet/settings/alias_setting.rb +37 -0
  158. data/lib/puppet/settings/base_setting.rb +26 -2
  159. data/lib/puppet/settings/integer_setting.rb +17 -0
  160. data/lib/puppet/settings/port_setting.rb +15 -0
  161. data/lib/puppet/settings/priority_setting.rb +5 -4
  162. data/lib/puppet/ssl.rb +10 -6
  163. data/lib/puppet/ssl/base.rb +3 -5
  164. data/lib/puppet/ssl/certificate.rb +0 -6
  165. data/lib/puppet/ssl/certificate_request.rb +1 -12
  166. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  167. data/lib/puppet/ssl/oids.rb +3 -1
  168. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  169. data/lib/puppet/ssl/state_machine.rb +3 -1
  170. data/lib/puppet/ssl/verifier.rb +2 -0
  171. data/lib/puppet/test/test_helper.rb +1 -3
  172. data/lib/puppet/transaction.rb +1 -7
  173. data/lib/puppet/transaction/report.rb +2 -4
  174. data/lib/puppet/type.rb +0 -76
  175. data/lib/puppet/type/file.rb +5 -7
  176. data/lib/puppet/type/file/checksum.rb +1 -1
  177. data/lib/puppet/type/file/source.rb +1 -1
  178. data/lib/puppet/type/filebucket.rb +3 -3
  179. data/lib/puppet/type/package.rb +5 -13
  180. data/lib/puppet/type/user.rb +1 -1
  181. data/lib/puppet/util/autoload.rb +1 -8
  182. data/lib/puppet/util/execution.rb +0 -11
  183. data/lib/puppet/util/http_proxy.rb +2 -215
  184. data/lib/puppet/util/monkey_patches.rb +0 -46
  185. data/lib/puppet/util/posix.rb +54 -5
  186. data/lib/puppet/util/rdoc.rb +0 -7
  187. data/lib/puppet/util/retry_action.rb +1 -1
  188. data/lib/puppet/util/rubygems.rb +5 -1
  189. data/lib/puppet/util/run_mode.rb +9 -1
  190. data/lib/puppet/util/windows.rb +3 -8
  191. data/lib/puppet/util/windows/daemon.rb +360 -0
  192. data/lib/puppet/util/windows/error.rb +1 -0
  193. data/lib/puppet/util/windows/eventlog.rb +4 -9
  194. data/lib/puppet/util/windows/file.rb +8 -242
  195. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  196. data/lib/puppet/util/windows/process.rb +4 -226
  197. data/lib/puppet/util/windows/service.rb +9 -460
  198. data/lib/puppet/util/windows/string.rb +12 -13
  199. data/lib/puppet/util/yaml.rb +0 -22
  200. data/lib/puppet/vendor/require_vendored.rb +0 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509.rb +5 -1
  203. data/lib/puppet/x509/cert_provider.rb +29 -1
  204. data/locales/puppet.pot +629 -1314
  205. data/man/man5/puppet.conf.5 +39 -99
  206. data/man/man8/puppet-agent.8 +2 -2
  207. data/man/man8/puppet-apply.8 +2 -2
  208. data/man/man8/puppet-catalog.8 +1 -1
  209. data/man/man8/puppet-config.8 +1 -1
  210. data/man/man8/puppet-describe.8 +1 -1
  211. data/man/man8/puppet-device.8 +2 -2
  212. data/man/man8/puppet-doc.8 +1 -1
  213. data/man/man8/puppet-epp.8 +1 -1
  214. data/man/man8/puppet-facts.8 +58 -9
  215. data/man/man8/puppet-filebucket.8 +6 -6
  216. data/man/man8/puppet-generate.8 +1 -1
  217. data/man/man8/puppet-help.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-module.8 +1 -58
  220. data/man/man8/puppet-node.8 +4 -1
  221. data/man/man8/puppet-parser.8 +1 -1
  222. data/man/man8/puppet-plugin.8 +1 -1
  223. data/man/man8/puppet-report.8 +4 -1
  224. data/man/man8/puppet-resource.8 +1 -1
  225. data/man/man8/puppet-script.8 +2 -2
  226. data/man/man8/puppet-ssl.8 +1 -1
  227. data/man/man8/puppet.8 +2 -2
  228. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  229. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  230. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  231. data/spec/integration/application/agent_spec.rb +151 -14
  232. data/spec/integration/application/apply_spec.rb +20 -1
  233. data/spec/integration/application/filebucket_spec.rb +16 -16
  234. data/spec/integration/application/help_spec.rb +2 -0
  235. data/spec/integration/application/plugin_spec.rb +23 -1
  236. data/spec/integration/defaults_spec.rb +7 -10
  237. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  238. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  239. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  240. data/spec/integration/network/http_pool_spec.rb +3 -21
  241. data/spec/integration/parser/catalog_spec.rb +0 -38
  242. data/spec/integration/parser/node_spec.rb +0 -9
  243. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  244. data/spec/integration/resource/type_collection_spec.rb +2 -6
  245. data/spec/integration/transaction_spec.rb +4 -9
  246. data/spec/integration/type/file_spec.rb +5 -4
  247. data/spec/integration/util/windows/adsi_spec.rb +3 -1
  248. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  249. data/spec/integration/util/windows/registry_spec.rb +0 -10
  250. data/spec/integration/util/windows/security_spec.rb +1 -1
  251. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  252. data/spec/lib/puppet_spec/settings.rb +7 -1
  253. data/spec/spec_helper.rb +3 -4
  254. data/spec/unit/agent_spec.rb +8 -8
  255. data/spec/unit/application/agent_spec.rb +0 -1
  256. data/spec/unit/application/config_spec.rb +224 -4
  257. data/spec/unit/application/facts_spec.rb +35 -0
  258. data/spec/unit/application/filebucket_spec.rb +41 -41
  259. data/spec/unit/application/ssl_spec.rb +2 -2
  260. data/spec/unit/application_spec.rb +51 -9
  261. data/spec/unit/certificate_factory_spec.rb +1 -1
  262. data/spec/unit/configurer/downloader_spec.rb +6 -2
  263. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  264. data/spec/unit/configurer_spec.rb +12 -9
  265. data/spec/unit/confine/feature_spec.rb +1 -1
  266. data/spec/unit/confine_spec.rb +8 -2
  267. data/spec/unit/context/trusted_information_spec.rb +2 -6
  268. data/spec/unit/defaults_spec.rb +26 -32
  269. data/spec/unit/environments_spec.rb +96 -22
  270. data/spec/unit/face/config_spec.rb +27 -32
  271. data/spec/unit/face/facts_spec.rb +4 -0
  272. data/spec/unit/face/node_spec.rb +14 -13
  273. data/spec/unit/face/plugin_spec.rb +73 -33
  274. data/spec/unit/file_bucket/file_spec.rb +1 -1
  275. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -19
  276. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  277. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  278. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  279. data/spec/unit/forge/module_release_spec.rb +2 -7
  280. data/spec/unit/functions/camelcase_spec.rb +1 -1
  281. data/spec/unit/functions/capitalize_spec.rb +1 -1
  282. data/spec/unit/functions/downcase_spec.rb +1 -1
  283. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  284. data/spec/unit/functions/upcase_spec.rb +1 -1
  285. data/spec/unit/http/client_spec.rb +7 -8
  286. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  287. data/spec/unit/http/external_client_spec.rb +4 -4
  288. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  289. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  290. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  291. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  292. data/spec/unit/http/resolver_spec.rb +13 -13
  293. data/spec/unit/http/service/compiler_spec.rb +49 -62
  294. data/spec/unit/http/service/file_server_spec.rb +3 -3
  295. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  296. data/spec/unit/http/service_spec.rb +1 -2
  297. data/spec/unit/http/session_spec.rb +16 -14
  298. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  299. data/spec/unit/indirector/face_spec.rb +0 -1
  300. data/spec/unit/indirector/facts/facter_spec.rb +104 -1
  301. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  302. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  303. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  304. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  306. data/spec/unit/indirector/file_server_spec.rb +1 -15
  307. data/spec/unit/indirector/indirection_spec.rb +8 -12
  308. data/spec/unit/indirector/node/json_spec.rb +33 -0
  309. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  310. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  311. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  312. data/spec/unit/indirector/request_spec.rb +0 -264
  313. data/spec/unit/indirector/rest_spec.rb +98 -752
  314. data/spec/unit/indirector_spec.rb +2 -2
  315. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  316. data/spec/unit/network/authconfig_spec.rb +2 -132
  317. data/spec/unit/network/authorization_spec.rb +2 -55
  318. data/spec/unit/network/formats_spec.rb +45 -4
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
  320. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  321. data/spec/unit/network/http/api_spec.rb +10 -0
  322. data/spec/unit/network/http/connection_spec.rb +19 -41
  323. data/spec/unit/network/http/handler_spec.rb +0 -6
  324. data/spec/unit/network/http_pool_spec.rb +0 -4
  325. data/spec/unit/node/environment_spec.rb +33 -21
  326. data/spec/unit/node_spec.rb +2 -54
  327. data/spec/unit/parser/compiler_spec.rb +3 -19
  328. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  329. data/spec/unit/parser/resource_spec.rb +14 -8
  330. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  331. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  332. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  333. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  334. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  335. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  336. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  337. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  338. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  339. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  340. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  341. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  342. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  343. data/spec/unit/pops/visitor_spec.rb +1 -1
  344. data/spec/unit/property_spec.rb +1 -0
  345. data/spec/unit/provider/nameservice_spec.rb +66 -122
  346. data/spec/unit/provider/package/apt_spec.rb +4 -8
  347. data/spec/unit/provider/package/base_spec.rb +6 -5
  348. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  349. data/spec/unit/provider/package/gem_spec.rb +32 -0
  350. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  351. data/spec/unit/provider/package/pip_spec.rb +6 -11
  352. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  353. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  354. data/spec/unit/provider/service/smf_spec.rb +401 -165
  355. data/spec/unit/provider/service/windows_spec.rb +0 -1
  356. data/spec/unit/provider/user/aix_spec.rb +5 -0
  357. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  358. data/spec/unit/provider/user/pw_spec.rb +2 -0
  359. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  360. data/spec/unit/provider_spec.rb +6 -20
  361. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  362. data/spec/unit/resource/type_collection_spec.rb +2 -22
  363. data/spec/unit/resource/type_spec.rb +1 -1
  364. data/spec/unit/resource_spec.rb +11 -66
  365. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  366. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  367. data/spec/unit/settings/port_setting_spec.rb +31 -0
  368. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  369. data/spec/unit/settings_spec.rb +560 -228
  370. data/spec/unit/ssl/base_spec.rb +36 -4
  371. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  372. data/spec/unit/ssl/certificate_spec.rb +2 -11
  373. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  374. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  375. data/spec/unit/ssl/verifier_spec.rb +0 -21
  376. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  377. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  378. data/spec/unit/transaction/report_spec.rb +0 -2
  379. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  380. data/spec/unit/transaction_spec.rb +57 -82
  381. data/spec/unit/type/file/checksum_spec.rb +6 -6
  382. data/spec/unit/type/file/content_spec.rb +1 -2
  383. data/spec/unit/type/file/ensure_spec.rb +1 -1
  384. data/spec/unit/type/file/mode_spec.rb +1 -1
  385. data/spec/unit/type/file/selinux_spec.rb +0 -2
  386. data/spec/unit/type/file/source_spec.rb +0 -1
  387. data/spec/unit/type/file_spec.rb +12 -12
  388. data/spec/unit/type/group_spec.rb +13 -6
  389. data/spec/unit/type/package_spec.rb +1 -1
  390. data/spec/unit/type/resources_spec.rb +7 -7
  391. data/spec/unit/type/service_spec.rb +1 -1
  392. data/spec/unit/type/tidy_spec.rb +0 -1
  393. data/spec/unit/type_spec.rb +22 -2
  394. data/spec/unit/util/at_fork_spec.rb +2 -2
  395. data/spec/unit/util/autoload_spec.rb +5 -1
  396. data/spec/unit/util/backups_spec.rb +1 -4
  397. data/spec/unit/util/execution_spec.rb +15 -40
  398. data/spec/unit/util/inifile_spec.rb +6 -14
  399. data/spec/unit/util/log_spec.rb +8 -7
  400. data/spec/unit/util/logging_spec.rb +3 -3
  401. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  402. data/spec/unit/util/posix_spec.rb +363 -15
  403. data/spec/unit/util/rubygems_spec.rb +2 -2
  404. data/spec/unit/util/run_mode_spec.rb +21 -121
  405. data/spec/unit/util/selinux_spec.rb +76 -52
  406. data/spec/unit/util/storage_spec.rb +3 -1
  407. data/spec/unit/util/suidmanager_spec.rb +44 -41
  408. data/spec/unit/util/windows/string_spec.rb +1 -3
  409. data/spec/unit/util/yaml_spec.rb +0 -54
  410. data/spec/unit/util_spec.rb +13 -24
  411. metadata +66 -170
  412. data/conf/auth.conf +0 -150
  413. data/lib/puppet/application/cert.rb +0 -76
  414. data/lib/puppet/application/key.rb +0 -4
  415. data/lib/puppet/application/man.rb +0 -4
  416. data/lib/puppet/application/status.rb +0 -4
  417. data/lib/puppet/face/key.rb +0 -16
  418. data/lib/puppet/face/man.rb +0 -145
  419. data/lib/puppet/face/module/build.rb +0 -14
  420. data/lib/puppet/face/module/generate.rb +0 -14
  421. data/lib/puppet/face/module/search.rb +0 -103
  422. data/lib/puppet/face/status.rb +0 -51
  423. data/lib/puppet/indirector/certificate/file.rb +0 -9
  424. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  425. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  426. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  427. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  428. data/lib/puppet/indirector/file_content/http.rb +0 -22
  429. data/lib/puppet/indirector/key/file.rb +0 -46
  430. data/lib/puppet/indirector/key/memory.rb +0 -7
  431. data/lib/puppet/indirector/ssl_file.rb +0 -162
  432. data/lib/puppet/indirector/status.rb +0 -3
  433. data/lib/puppet/indirector/status/local.rb +0 -12
  434. data/lib/puppet/indirector/status/rest.rb +0 -27
  435. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  436. data/lib/puppet/network/auth_config_parser.rb +0 -90
  437. data/lib/puppet/network/authstore.rb +0 -283
  438. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  439. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  440. data/lib/puppet/network/http/base_pool.rb +0 -36
  441. data/lib/puppet/network/http/compression.rb +0 -127
  442. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  443. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  444. data/lib/puppet/network/rest_controller.rb +0 -2
  445. data/lib/puppet/network/rights.rb +0 -210
  446. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  447. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  448. data/lib/puppet/parser/environment_compiler.rb +0 -202
  449. data/lib/puppet/pops/types/enumeration.rb +0 -16
  450. data/lib/puppet/resource/capability_finder.rb +0 -154
  451. data/lib/puppet/rest/errors.rb +0 -15
  452. data/lib/puppet/rest/response.rb +0 -35
  453. data/lib/puppet/rest/route.rb +0 -85
  454. data/lib/puppet/rest/routes.rb +0 -135
  455. data/lib/puppet/ssl/host.rb +0 -505
  456. data/lib/puppet/ssl/key.rb +0 -61
  457. data/lib/puppet/ssl/validator.rb +0 -61
  458. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  459. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  460. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  461. data/lib/puppet/status.rb +0 -40
  462. data/lib/puppet/util/connection.rb +0 -88
  463. data/lib/puppet/util/ssl.rb +0 -83
  464. data/lib/puppet/util/windows/api_types.rb +0 -309
  465. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  466. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  467. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  468. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  469. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  470. data/lib/puppet/vendor/pathspec/README.md +0 -53
  471. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  472. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  473. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  474. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  475. data/man/man8/puppet-key.8 +0 -126
  476. data/man/man8/puppet-man.8 +0 -76
  477. data/man/man8/puppet-status.8 +0 -108
  478. data/spec/integration/application/config_spec.rb +0 -74
  479. data/spec/integration/network/authconfig_spec.rb +0 -256
  480. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  481. data/spec/unit/application/man_spec.rb +0 -52
  482. data/spec/unit/capability_spec.rb +0 -414
  483. data/spec/unit/face/catalog_spec.rb +0 -6
  484. data/spec/unit/face/key_spec.rb +0 -9
  485. data/spec/unit/face/module/search_spec.rb +0 -231
  486. data/spec/unit/face/module_spec.rb +0 -3
  487. data/spec/unit/face/status_spec.rb +0 -9
  488. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  489. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  490. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  491. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  492. data/spec/unit/indirector/key/file_spec.rb +0 -79
  493. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  494. data/spec/unit/indirector/status/local_spec.rb +0 -10
  495. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  496. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  497. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  498. data/spec/unit/network/authstore_spec.rb +0 -422
  499. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  500. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  501. data/spec/unit/network/http/compression_spec.rb +0 -240
  502. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  503. data/spec/unit/network/http_spec.rb +0 -9
  504. data/spec/unit/network/rights_spec.rb +0 -439
  505. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  506. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  507. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  508. data/spec/unit/rest/route_spec.rb +0 -132
  509. data/spec/unit/ssl/host_spec.rb +0 -650
  510. data/spec/unit/ssl/key_spec.rb +0 -173
  511. data/spec/unit/ssl/validator_spec.rb +0 -278
  512. data/spec/unit/status_spec.rb +0 -45
  513. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -151,7 +151,7 @@ describe 'The type factory' do
151
151
  expect(hc.class_name).to eq('x')
152
152
  end
153
153
 
154
- it 'array_of(fixnum) returns PArrayType[PIntegerType]' do
154
+ it 'array_of(integer) returns PArrayType[PIntegerType]' do
155
155
  at = TypeFactory.array_of(1)
156
156
  expect(at.class()).to eq(PArrayType)
157
157
  expect(at.element_type.class).to eq(PIntegerType)
@@ -179,17 +179,17 @@ describe "validating 4x" do
179
179
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
180
180
  end
181
181
 
182
- it 'produces a warning for virtual class resource' do
182
+ it 'produces an error for virtual class resource' do
183
183
  acceptor = validate(parse('@class { test: }'))
184
- expect(acceptor.warning_count).to eql(1)
185
- expect(acceptor.error_count).to eql(0)
184
+ expect(acceptor.warning_count).to eql(0)
185
+ expect(acceptor.error_count).to eql(1)
186
186
  expect(acceptor).to have_issue(Puppet::Pops::Issues::CLASS_NOT_VIRTUALIZABLE)
187
187
  end
188
188
 
189
- it 'produces a warning for exported class resource' do
189
+ it 'produces an error for exported class resource' do
190
190
  acceptor = validate(parse('@@class { test: }'))
191
- expect(acceptor.warning_count).to eql(1)
192
- expect(acceptor.error_count).to eql(0)
191
+ expect(acceptor.warning_count).to eql(0)
192
+ expect(acceptor.error_count).to eql(1)
193
193
  expect(acceptor).to have_issue(Puppet::Pops::Issues::CLASS_NOT_VIRTUALIZABLE)
194
194
  end
195
195
 
@@ -310,17 +310,17 @@ describe "validating 4x" do
310
310
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
311
311
  end
312
312
 
313
- it 'produces a warning for virtual class resource' do
313
+ it 'produces an error for virtual class resource' do
314
314
  acceptor = validate(parse('@class { test: }'))
315
- expect(acceptor.warning_count).to eql(1)
316
- expect(acceptor.error_count).to eql(0)
315
+ expect(acceptor.warning_count).to eql(0)
316
+ expect(acceptor.error_count).to eql(1)
317
317
  expect(acceptor).to have_issue(Puppet::Pops::Issues::CLASS_NOT_VIRTUALIZABLE)
318
318
  end
319
319
 
320
- it 'produces a warning for exported class resource' do
320
+ it 'produces an error for exported class resource' do
321
321
  acceptor = validate(parse('@@class { test: }'))
322
- expect(acceptor.warning_count).to eql(1)
323
- expect(acceptor.error_count).to eql(0)
322
+ expect(acceptor.warning_count).to eql(0)
323
+ expect(acceptor.error_count).to eql(1)
324
324
  expect(acceptor).to have_issue(Puppet::Pops::Issues::CLASS_NOT_VIRTUALIZABLE)
325
325
  end
326
326
  end
@@ -344,16 +344,16 @@ describe "validating 4x" do
344
344
  end
345
345
  end
346
346
 
347
- it 'produces an error for application' do
348
- acceptor = validate(parse('application test {}'))
349
- expect(acceptor.error_count).to eql(1)
350
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
347
+ it 'produces a syntax error for application' do
348
+ expect {
349
+ parse('application test {}')
350
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'application'/)
351
351
  end
352
352
 
353
- it 'produces an error for capability mapping' do
354
- acceptor = validate(parse('Foo produces Sql {}'))
355
- expect(acceptor.error_count).to eql(1)
356
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
353
+ it 'produces a syntax error for capability mapping' do
354
+ expect {
355
+ parse('Foo produces Sql {}')
356
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'produces'/)
357
357
  end
358
358
 
359
359
  it 'produces an error for collect expressions with virtual query' do
@@ -410,10 +410,10 @@ describe "validating 4x" do
410
410
  expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
411
411
  end
412
412
 
413
- it 'produces an error for site definitions' do
414
- acceptor = validate(parse('site {}'))
415
- expect(acceptor.error_count).to eql(1)
416
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
413
+ it 'produces a syntax error for site definitions' do
414
+ expect {
415
+ parse('site {}')
416
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'site'/)
417
417
  end
418
418
 
419
419
  context 'validating apply() blocks' do
@@ -468,16 +468,16 @@ describe "validating 4x" do
468
468
  expect(acceptor.error_count).to eql(0)
469
469
  end
470
470
 
471
- it 'produces an error for application' do
472
- acceptor = validate(parse('apply("foo.example.com") { application test {} }'))
473
- expect(acceptor.error_count).to eql(1)
474
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
471
+ it 'produces a syntax error for application' do
472
+ expect {
473
+ parse('apply("foo.example.com") { application test {} }')
474
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'application'/)
475
475
  end
476
476
 
477
- it 'produces an error for capability mapping' do
478
- acceptor = validate(parse('apply("foo.example.com") { Foo produces Sql {} }'))
479
- expect(acceptor.error_count).to eql(1)
480
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
477
+ it 'produces a syntax error for capability mapping' do
478
+ expect {
479
+ parse('apply("foo.example.com") { Foo produces Sql {} }')
480
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'produces'/)
481
481
  end
482
482
 
483
483
  it 'produces an error for class expressions' do
@@ -504,9 +504,9 @@ describe "validating 4x" do
504
504
  end
505
505
 
506
506
  it 'produces an error for site definitions' do
507
- acceptor = validate(parse('apply("foo.example.com") { site {} }'))
508
- expect(acceptor.error_count).to eql(1)
509
- expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
507
+ expect {
508
+ parse('apply("foo.example.com") { site {} }')
509
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at 'site'/)
510
510
  end
511
511
 
512
512
  it 'produces an error for apply() inside apply()' do
@@ -669,6 +669,15 @@ describe "validating 4x" do
669
669
  'regexp',
670
670
  'pattern',
671
671
  'runtime',
672
+ 'init',
673
+ 'object',
674
+ 'sensitive',
675
+ 'semver',
676
+ 'semverrange',
677
+ 'string',
678
+ 'timestamp',
679
+ 'timespan',
680
+ 'typeset',
672
681
  ].each do |name|
673
682
 
674
683
  it "produces an error for 'class #{name}'" do
@@ -693,6 +702,7 @@ describe "validating 4x" do
693
702
  source = "type('a', 'b')"
694
703
  expect(validate(parse(source))).not_to have_any_issues
695
704
  end
705
+
696
706
  it "should allow using the 'type' as the name of a function with no parameters and a block" do
697
707
  source = "type() |$x| { $x }"
698
708
  expect(validate(parse(source))).not_to have_any_issues
@@ -968,6 +978,18 @@ describe "validating 4x" do
968
978
  end
969
979
  end
970
980
 
981
+ it "allows a reserved type name" do
982
+ source = <<-SOURCE
983
+ class foo {
984
+ define string() {}
985
+ foo::string { 'a': }
986
+ }
987
+ SOURCE
988
+
989
+ acceptor = validate(parse(source, 'path/foo/manifests/init.pp'))
990
+ expect(acceptor.error_count).to eql(0)
991
+ end
992
+
971
993
  it "will give multiple errors in one file with multiple issues" do
972
994
  source = <<-SOURCE
973
995
  class foo {}
@@ -992,17 +1014,10 @@ describe "validating 4x" do
992
1014
 
993
1015
  context "capability annotations" do
994
1016
  ['produces', 'consumes'].each do |word|
995
- it "rejects illegal resource types in #{word} clauses" do
996
- expect(validate(parse("foo produces Bar {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
997
- end
998
-
999
- it "accepts legal resource and capability types in #{word} clauses" do
1000
- expect(validate(parse("Foo produces Bar {}"))).to_not have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
1001
- expect(validate(parse("Mod::Foo produces ::Mod2::Bar {}"))).to_not have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
1002
- end
1003
-
1004
- it "rejects illegal capability types in #{word} clauses" do
1005
- expect(validate(parse("Foo produces bar {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
1017
+ it "raises a syntax error in #{word} clauses" do
1018
+ expect {
1019
+ parse("foo #{word} Bar {}")
1020
+ }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at '#{word}'/)
1006
1021
  end
1007
1022
  end
1008
1023
  end
@@ -39,7 +39,7 @@ describe Puppet::Pops::Visitor do
39
39
 
40
40
  it "should select method for superclass" do
41
41
  duck_processor = DuckProcessor.new
42
- expect(duck_processor.hi(42)).to match(/Howdy (?:Fixnum|Integer)/)
42
+ expect(duck_processor.hi(42)).to match(/Howdy Integer/)
43
43
  end
44
44
 
45
45
  it "should select method for superclass" do
@@ -5,6 +5,7 @@ Puppet::Type.newtype(:property_test) do
5
5
  newparam(:name, isnamevar: true)
6
6
  end
7
7
  Puppet::Type.type(:property_test).provide(:property_test) do
8
+ attr_accessor :foo
8
9
  end
9
10
 
10
11
  describe Puppet::Property do
@@ -3,11 +3,28 @@ require 'puppet/provider/nameservice'
3
3
  require 'puppet/etc'
4
4
  require 'puppet_spec/character_encoding'
5
5
 
6
+ Puppet::Type.newtype(:nameservice_dummytype) do
7
+ newparam(:name)
8
+ ensurable
9
+ newproperty(:foo)
10
+ newproperty(:bar)
11
+ end
12
+
13
+ Puppet::Type.type(:nameservice_dummytype).provide(:nameservice_dummyprovider, parent: Puppet::Provider::NameService) do
14
+ def posixmethod(param)
15
+ param
16
+ end
17
+
18
+ def modifycmd(param, value)
19
+ []
20
+ end
21
+ end
22
+
6
23
  describe Puppet::Provider::NameService do
7
24
 
8
25
  before :each do
9
- described_class.initvars
10
- described_class.resource_type = faketype
26
+ provider.class.initvars
27
+ provider.class.resource_type = faketype
11
28
  end
12
29
 
13
30
  # These are values getpwent might give you
@@ -41,16 +58,12 @@ describe Puppet::Provider::NameService do
41
58
  # The provider sometimes relies on @resource for valid properties so let's
42
59
  # create a fake type with properties that match our fake struct.
43
60
  let :faketype do
44
- Puppet::Type.newtype(:nameservice_dummytype) do
45
- newparam(:name)
46
- ensurable
47
- newproperty(:foo)
48
- newproperty(:bar)
49
- end
61
+ Puppet::Type.type(:nameservice_dummytype)
50
62
  end
51
63
 
52
64
  let :provider do
53
- described_class.new(:name => 'bob', :foo => 'fooval', :bar => 'barval')
65
+ Puppet::Type.type(:nameservice_dummytype).provider(:nameservice_dummyprovider)
66
+ .new(:name => 'bob', :foo => 'fooval', :bar => 'barval')
54
67
  end
55
68
 
56
69
  let :resource do
@@ -91,118 +104,61 @@ describe Puppet::Provider::NameService do
91
104
 
92
105
  describe "#options" do
93
106
  it "should add options for a valid property" do
94
- described_class.options :foo, :key1 => 'val1', :key2 => 'val2'
95
- described_class.options :bar, :key3 => 'val3'
96
- expect(described_class.option(:foo, :key1)).to eq('val1')
97
- expect(described_class.option(:foo, :key2)).to eq('val2')
98
- expect(described_class.option(:bar, :key3)).to eq('val3')
107
+ provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
108
+ provider.class.options :bar, :key3 => 'val3'
109
+ expect(provider.class.option(:foo, :key1)).to eq('val1')
110
+ expect(provider.class.option(:foo, :key2)).to eq('val2')
111
+ expect(provider.class.option(:bar, :key3)).to eq('val3')
99
112
  end
100
113
 
101
114
  it "should raise an error for an invalid property" do
102
- expect { described_class.options :baz, :key1 => 'val1' }.to raise_error(
115
+ expect { provider.class.options :baz, :key1 => 'val1' }.to raise_error(
103
116
  Puppet::Error, 'baz is not a valid attribute for nameservice_dummytype')
104
117
  end
105
118
  end
106
119
 
107
120
  describe "#option" do
108
121
  it "should return the correct value" do
109
- described_class.options :foo, :key1 => 'val1', :key2 => 'val2'
110
- expect(described_class.option(:foo, :key2)).to eq('val2')
122
+ provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
123
+ expect(provider.class.option(:foo, :key2)).to eq('val2')
111
124
  end
112
125
 
113
126
  it "should symbolize the name first" do
114
- described_class.options :foo, :key1 => 'val1', :key2 => 'val2'
115
- expect(described_class.option('foo', :key2)).to eq('val2')
127
+ provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
128
+ expect(provider.class.option('foo', :key2)).to eq('val2')
116
129
  end
117
130
 
118
131
  it "should return nil if no option has been specified earlier" do
119
- expect(described_class.option(:foo, :key2)).to be_nil
132
+ expect(provider.class.option(:foo, :key2)).to be_nil
120
133
  end
121
134
 
122
135
  it "should return nil if no option for that property has been specified earlier" do
123
- described_class.options :bar, :key2 => 'val2'
124
- expect(described_class.option(:foo, :key2)).to be_nil
136
+ provider.class.options :bar, :key2 => 'val2'
137
+ expect(provider.class.option(:foo, :key2)).to be_nil
125
138
  end
126
139
 
127
140
  it "should return nil if no matching key can be found for that property" do
128
- described_class.options :foo, :key3 => 'val2'
129
- expect(described_class.option(:foo, :key2)).to be_nil
141
+ provider.class.options :foo, :key3 => 'val2'
142
+ expect(provider.class.option(:foo, :key2)).to be_nil
130
143
  end
131
144
  end
132
145
 
133
146
  describe "#section" do
134
147
  it "should raise an error if resource_type has not been set" do
135
- expect(described_class).to receive(:resource_type).and_return(nil)
136
- expect { described_class.section }.to raise_error Puppet::Error, 'Cannot determine Etc section without a resource type'
148
+ expect(provider.class).to receive(:resource_type).and_return(nil)
149
+ expect { provider.class.section }.to raise_error Puppet::Error, 'Cannot determine Etc section without a resource type'
137
150
  end
138
151
 
139
152
  # the return values are hard coded so I am using types that actually make
140
153
  # use of the nameservice provider
141
154
  it "should return pw for users" do
142
- described_class.resource_type = Puppet::Type.type(:user)
143
- expect(described_class.section).to eq('pw')
155
+ provider.class.resource_type = Puppet::Type.type(:user)
156
+ expect(provider.class.section).to eq('pw')
144
157
  end
145
158
 
146
159
  it "should return gr for groups" do
147
- described_class.resource_type = Puppet::Type.type(:group)
148
- expect(described_class.section).to eq('gr')
149
- end
150
- end
151
-
152
- describe "#listbyname" do
153
- it "should be deprecated" do
154
- expect(Puppet).to receive(:deprecation_warning).with(/listbyname is deprecated/)
155
- described_class.listbyname
156
- end
157
-
158
- it "should return a list of users if resource_type is user" do
159
- described_class.resource_type = Puppet::Type.type(:user)
160
- expect(Puppet::Etc).to receive(:setpwent)
161
- allow(Puppet::Etc).to receive(:getpwent).and_return(*users)
162
- expect(Puppet::Etc).to receive(:endpwent)
163
- expect(described_class.listbyname).to eq(%w{root foo})
164
- end
165
-
166
- context "encoding handling" do
167
- described_class.resource_type = Puppet::Type.type(:user)
168
-
169
- # These two tests simulate an environment where there are two users with
170
- # the same name on disk, but each name is stored on disk in a different
171
- # encoding
172
- it "should return names with invalid byte sequences replaced with '?'" do
173
- allow(Etc).to receive(:getpwent).and_return(*utf_8_mixed_users)
174
- expect(invalid_utf_8_jose).to_not be_valid_encoding
175
- result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::UTF_8) do
176
- described_class.listbyname
177
- end
178
- expect(result).to eq(['root', 'foo', utf_8_jose, escaped_utf_8_jose])
179
- end
180
-
181
- it "should return names in their original encoding/bytes if they would not be valid UTF-8" do
182
- allow(Etc).to receive(:getpwent).and_return(*latin_1_mixed_users)
183
- result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::ISO_8859_1) do
184
- described_class.listbyname
185
- end
186
- expect(result).to eq(['root'.force_encoding(Encoding::UTF_8), 'foo'.force_encoding(Encoding::UTF_8), utf_8_jose, valid_latin1_jose])
187
- end
188
- end
189
-
190
- it "should return a list of groups if resource_type is group", :unless => Puppet::Util::Platform.windows? do
191
- described_class.resource_type = Puppet::Type.type(:group)
192
- expect(Puppet::Etc).to receive(:setgrent)
193
- allow(Puppet::Etc).to receive(:getgrent).and_return(*groups)
194
- expect(Puppet::Etc).to receive(:endgrent)
195
- expect(described_class.listbyname).to eq(%w{root bin})
196
- end
197
-
198
- it "should yield if a block given" do
199
- yield_results = []
200
- described_class.resource_type = Puppet::Type.type(:user)
201
- expect(Puppet::Etc).to receive(:setpwent)
202
- allow(Puppet::Etc).to receive(:getpwent).and_return(*users)
203
- expect(Puppet::Etc).to receive(:endpwent)
204
- described_class.listbyname {|x| yield_results << x }
205
- expect(yield_results).to eq(%w{root foo})
160
+ provider.class.resource_type = Puppet::Type.type(:group)
161
+ expect(provider.class.section).to eq('gr')
206
162
  end
207
163
  end
208
164
 
@@ -213,7 +169,7 @@ describe Puppet::Provider::NameService do
213
169
  # encoding
214
170
  allow(Etc).to receive(:getpwent).and_return(*utf_8_mixed_users)
215
171
  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::UTF_8) do
216
- described_class.instances
172
+ provider.class.instances
217
173
  end
218
174
  expect(result.map(&:name)).to eq(
219
175
  [
@@ -228,7 +184,7 @@ describe Puppet::Provider::NameService do
228
184
  it "should have object names in their original encoding/bytes if they would not be valid UTF-8" do
229
185
  allow(Etc).to receive(:getpwent).and_return(*latin_1_mixed_users)
230
186
  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::ISO_8859_1) do
231
- described_class.instances
187
+ provider.class.instances
232
188
  end
233
189
  expect(result.map(&:name)).to eq(
234
190
  [
@@ -243,40 +199,40 @@ describe Puppet::Provider::NameService do
243
199
  it "should pass the Puppet::Etc :canonical_name Struct member to the constructor" do
244
200
  users = [ Struct::Passwd.new(invalid_utf_8_jose, invalid_utf_8_jose, 1002, 2000), nil ]
245
201
  allow(Etc).to receive(:getpwent).and_return(*users)
246
- expect(described_class).to receive(:new).with(:name => escaped_utf_8_jose, :canonical_name => invalid_utf_8_jose, :ensure => :present)
247
- described_class.instances
202
+ expect(provider.class).to receive(:new).with(:name => escaped_utf_8_jose, :canonical_name => invalid_utf_8_jose, :ensure => :present)
203
+ provider.class.instances
248
204
  end
249
205
  end
250
206
 
251
207
  describe "validate" do
252
208
  it "should pass if no check is registered at all" do
253
- expect { described_class.validate(:foo, 300) }.to_not raise_error
254
- expect { described_class.validate('foo', 300) }.to_not raise_error
209
+ expect { provider.class.validate(:foo, 300) }.to_not raise_error
210
+ expect { provider.class.validate('foo', 300) }.to_not raise_error
255
211
  end
256
212
 
257
213
  it "should pass if no check for that property is registered" do
258
- described_class.verify(:bar, 'Must be 100') { |val| val == 100 }
259
- expect { described_class.validate(:foo, 300) }.to_not raise_error
260
- expect { described_class.validate('foo', 300) }.to_not raise_error
214
+ provider.class.verify(:bar, 'Must be 100') { |val| val == 100 }
215
+ expect { provider.class.validate(:foo, 300) }.to_not raise_error
216
+ expect { provider.class.validate('foo', 300) }.to_not raise_error
261
217
  end
262
218
 
263
219
  it "should pass if the value is valid" do
264
- described_class.verify(:foo, 'Must be 100') { |val| val == 100 }
265
- expect { described_class.validate(:foo, 100) }.to_not raise_error
266
- expect { described_class.validate('foo', 100) }.to_not raise_error
220
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
221
+ expect { provider.class.validate(:foo, 100) }.to_not raise_error
222
+ expect { provider.class.validate('foo', 100) }.to_not raise_error
267
223
  end
268
224
 
269
225
  it "should raise an error if the value is invalid" do
270
- described_class.verify(:foo, 'Must be 100') { |val| val == 100 }
271
- expect { described_class.validate(:foo, 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
272
- expect { described_class.validate('foo', 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
226
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
227
+ expect { provider.class.validate(:foo, 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
228
+ expect { provider.class.validate('foo', 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
273
229
  end
274
230
  end
275
231
 
276
232
  describe "getinfo" do
277
233
  before :each do
278
234
  # with section=foo we'll call Etc.getfoonam instead of getpwnam or getgrnam
279
- allow(described_class).to receive(:section).and_return('foo')
235
+ allow(provider.class).to receive(:section).and_return('foo')
280
236
  resource # initialize the resource so our provider has a @resource instance variable
281
237
  end
282
238
 
@@ -296,13 +252,13 @@ describe Puppet::Provider::NameService do
296
252
  # overriding to UTF-8, in @canonical_name for querying that state on disk
297
253
  # again if needed
298
254
  it "should use the instance's @canonical_name to query the system" do
299
- provider_instance = described_class.new(:name => 'foo', :canonical_name => 'original_foo', :ensure => :present)
255
+ provider_instance = provider.class.new(:name => 'foo', :canonical_name => 'original_foo', :ensure => :present)
300
256
  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'original_foo')
301
257
  provider_instance.getinfo(true)
302
258
  end
303
259
 
304
260
  it "should use the instance's name instead of canonical_name if not supplied during instantiation" do
305
- provider_instance = described_class.new(:name => 'foo', :ensure => :present)
261
+ provider_instance = provider.class.new(:name => 'foo', :ensure => :present)
306
262
  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'foo')
307
263
  provider_instance.getinfo(true)
308
264
  end
@@ -310,16 +266,6 @@ describe Puppet::Provider::NameService do
310
266
 
311
267
  describe "info2hash" do
312
268
  it "should return a hash with all properties" do
313
- # we have to have an implementation of posixmethod which has to
314
- # convert a propertyname (e.g. comment) into a fieldname of our
315
- # Struct (e.g. gecos). I do not want to test posixmethod here so
316
- # let's fake an implementation which does not do any translation. We
317
- # expect two method invocations because info2hash calls the method
318
- # twice if the Struct responds to the propertyname (our fake Struct
319
- # provides values for :foo and :bar) TODO: Fix that
320
- expect(provider).to receive(:posixmethod).with(:foo).and_return(:foo).twice
321
- expect(provider).to receive(:posixmethod).with(:bar).and_return(:bar).twice
322
- expect(provider).to receive(:posixmethod).with(:ensure).and_return(:ensure)
323
269
  expect(provider.info2hash(fakeetcobject)).to eq({ :foo => 'fooval', :bar => 'barval' })
324
270
  end
325
271
  end
@@ -330,7 +276,7 @@ describe Puppet::Provider::NameService do
330
276
  end
331
277
 
332
278
  it "should return the munged value otherwise" do
333
- described_class.options(:foo, :munge => proc { |x| x*2 })
279
+ provider.class.options(:foo, :munge => proc { |x| x*2 })
334
280
  expect(provider.munge(:foo, 100)).to eq(200)
335
281
  end
336
282
  end
@@ -341,7 +287,7 @@ describe Puppet::Provider::NameService do
341
287
  end
342
288
 
343
289
  it "should return the unmunged value otherwise" do
344
- described_class.options(:foo, :unmunge => proc { |x| x/2 })
290
+ provider.class.options(:foo, :unmunge => proc { |x| x/2 })
345
291
  expect(provider.unmunge(:foo, 200)).to eq(100)
346
292
  end
347
293
  end
@@ -359,15 +305,13 @@ describe Puppet::Provider::NameService do
359
305
  end
360
306
 
361
307
  describe "get" do
362
- before(:each) {described_class.resource_type = faketype }
363
-
364
308
  it "should return the correct getinfo value" do
365
309
  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 'fooval', :bar => 'barval')
366
310
  expect(provider.get(:bar)).to eq('barval')
367
311
  end
368
312
 
369
313
  it "should unmunge the value first" do
370
- described_class.options(:bar, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
314
+ provider.class.options(:bar, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
371
315
  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 200, :bar => 500)
372
316
  expect(provider.get(:bar)).to eq(250)
373
317
  end
@@ -382,7 +326,7 @@ describe Puppet::Provider::NameService do
382
326
  describe "set" do
383
327
  before :each do
384
328
  resource # initialize resource so our provider has a @resource object
385
- described_class.verify(:foo, 'Must be 100') { |val| val == 100 }
329
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
386
330
  end
387
331
 
388
332
  it "should raise an error on invalid values" do
@@ -396,7 +340,7 @@ describe Puppet::Provider::NameService do
396
340
  end
397
341
 
398
342
  it "should munge the value first" do
399
- described_class.options(:foo, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
343
+ provider.class.options(:foo, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
400
344
  expect(provider).to receive(:modifycmd).with(:foo, 200).and_return(['/bin/modify', '-f', '200' ])
401
345
  expect(provider).to receive(:execute).with(['/bin/modify', '-f', '200'], hash_including(custom_environment: {}))
402
346
  provider.set(:foo, 100)