puppet 6.11.1-x64-mingw32 → 6.16.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 (395) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +3 -8
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +39 -36
  6. data/README.md +17 -24
  7. data/ext/build_defaults.yaml +1 -0
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/windows/service/daemon.rb +25 -20
  10. data/lib/puppet.rb +52 -13
  11. data/lib/puppet/agent.rb +20 -14
  12. data/lib/puppet/application/agent.rb +12 -14
  13. data/lib/puppet/application/describe.rb +7 -5
  14. data/lib/puppet/application/device.rb +2 -2
  15. data/lib/puppet/application/filebucket.rb +19 -15
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/resource.rb +1 -1
  18. data/lib/puppet/application/ssl.rb +4 -4
  19. data/lib/puppet/concurrent.rb +2 -0
  20. data/lib/puppet/concurrent/lock.rb +16 -0
  21. data/lib/puppet/concurrent/synchronized.rb +15 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
  23. data/lib/puppet/configurer.rb +85 -83
  24. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  25. data/lib/puppet/context/trusted_information.rb +14 -8
  26. data/lib/puppet/daemon.rb +13 -27
  27. data/lib/puppet/defaults.rb +158 -40
  28. data/lib/puppet/environments.rb +30 -20
  29. data/lib/puppet/error.rb +9 -1
  30. data/lib/puppet/face/facts.rb +8 -5
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/plugin.rb +2 -2
  34. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  35. data/lib/puppet/file_system/file_impl.rb +13 -9
  36. data/lib/puppet/file_system/memory_file.rb +6 -0
  37. data/lib/puppet/file_system/memory_impl.rb +13 -0
  38. data/lib/puppet/file_system/uniquefile.rb +4 -0
  39. data/lib/puppet/file_system/windows.rb +7 -10
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/forge/errors.rb +2 -2
  42. data/lib/puppet/forge/repository.rb +31 -86
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/camelcase.rb +2 -2
  45. data/lib/puppet/functions/epp.rb +4 -4
  46. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/find_template.rb +63 -0
  50. data/lib/puppet/functions/inline_epp.rb +5 -5
  51. data/lib/puppet/functions/reduce.rb +2 -4
  52. data/lib/puppet/http.rb +7 -0
  53. data/lib/puppet/http/client.rb +341 -54
  54. data/lib/puppet/http/errors.rb +2 -0
  55. data/lib/puppet/http/external_client.rb +90 -0
  56. data/lib/puppet/http/redirector.rb +34 -0
  57. data/lib/puppet/http/resolver.rb +57 -1
  58. data/lib/puppet/http/resolver/server_list.rb +98 -0
  59. data/lib/puppet/http/resolver/settings.rb +23 -2
  60. data/lib/puppet/http/resolver/srv.rb +36 -4
  61. data/lib/puppet/http/response.rb +68 -1
  62. data/lib/puppet/http/retry_after_handler.rb +39 -0
  63. data/lib/puppet/http/service.rb +179 -3
  64. data/lib/puppet/http/service/ca.rb +84 -21
  65. data/lib/puppet/http/service/compiler.rb +319 -0
  66. data/lib/puppet/http/service/file_server.rb +206 -0
  67. data/lib/puppet/http/service/report.rb +66 -0
  68. data/lib/puppet/http/session.rb +106 -31
  69. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  70. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  71. data/lib/puppet/indirector/facts/rest.rb +42 -0
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  73. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  74. data/lib/puppet/indirector/file_content/http.rb +5 -0
  75. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  76. data/lib/puppet/indirector/file_metadata/http.rb +4 -4
  77. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  78. data/lib/puppet/indirector/json.rb +1 -1
  79. data/lib/puppet/indirector/msgpack.rb +1 -1
  80. data/lib/puppet/indirector/node/rest.rb +24 -0
  81. data/lib/puppet/indirector/report/rest.rb +19 -0
  82. data/lib/puppet/indirector/report/yaml.rb +23 -0
  83. data/lib/puppet/indirector/rest.rb +12 -0
  84. data/lib/puppet/indirector/status/rest.rb +18 -0
  85. data/lib/puppet/loaders.rb +6 -0
  86. data/lib/puppet/metatype/manager.rb +80 -80
  87. data/lib/puppet/network/http/base_pool.rb +19 -1
  88. data/lib/puppet/network/http/compression.rb +7 -0
  89. data/lib/puppet/network/http/connection.rb +6 -0
  90. data/lib/puppet/network/http/connection_adapter.rb +182 -0
  91. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  92. data/lib/puppet/network/http/pool.rb +13 -6
  93. data/lib/puppet/network/http_pool.rb +2 -1
  94. data/lib/puppet/node/environment.rb +24 -8
  95. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  96. data/lib/puppet/pal/pal_impl.rb +9 -29
  97. data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
  98. data/lib/puppet/parser/compiler.rb +42 -32
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/epp.rb +3 -3
  101. data/lib/puppet/parser/functions/filter.rb +1 -0
  102. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  105. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/lookup/invocation.rb +10 -3
  109. data/lib/puppet/pops/model/pn_transformer.rb +5 -9
  110. data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
  111. data/lib/puppet/pops/serialization/json_path.rb +3 -3
  112. data/lib/puppet/pops/time/timespan.rb +3 -5
  113. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  114. data/lib/puppet/pops/types/string_converter.rb +6 -9
  115. data/lib/puppet/pops/types/type_calculator.rb +30 -10
  116. data/lib/puppet/pops/types/type_formatter.rb +9 -11
  117. data/lib/puppet/pops/types/type_parser.rb +3 -3
  118. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  119. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  120. data/lib/puppet/provider/aix_object.rb +4 -2
  121. data/lib/puppet/provider/group/aix.rb +1 -0
  122. data/lib/puppet/provider/group/groupadd.rb +57 -24
  123. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +78 -4
  126. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  127. data/lib/puppet/provider/package/dpkg.rb +14 -7
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +41 -7
  130. data/lib/puppet/provider/package/openbsd.rb +13 -1
  131. data/lib/puppet/provider/package/pacman.rb +2 -5
  132. data/lib/puppet/provider/package/pip.rb +143 -48
  133. data/lib/puppet/provider/package/pip3.rb +0 -2
  134. data/lib/puppet/provider/package/pkg.rb +18 -5
  135. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  136. data/lib/puppet/provider/package/pkgng.rb +16 -4
  137. data/lib/puppet/provider/package/portage.rb +5 -5
  138. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  139. data/lib/puppet/provider/package/rpm.rb +6 -213
  140. data/lib/puppet/provider/package/yum.rb +108 -24
  141. data/lib/puppet/provider/package/zypper.rb +59 -1
  142. data/lib/puppet/provider/package_targetable.rb +5 -4
  143. data/lib/puppet/provider/service/systemd.rb +23 -5
  144. data/lib/puppet/provider/user/aix.rb +1 -0
  145. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  146. data/lib/puppet/provider/user/hpux.rb +1 -1
  147. data/lib/puppet/provider/user/useradd.rb +11 -8
  148. data/lib/puppet/reports/http.rb +13 -9
  149. data/lib/puppet/reports/store.rb +1 -1
  150. data/lib/puppet/resource/type_collection.rb +20 -16
  151. data/lib/puppet/runtime.rb +32 -1
  152. data/lib/puppet/settings.rb +4 -0
  153. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  154. data/lib/puppet/ssl.rb +1 -0
  155. data/lib/puppet/ssl/certificate.rb +2 -1
  156. data/lib/puppet/ssl/host.rb +4 -4
  157. data/lib/puppet/ssl/oids.rb +1 -0
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -0
  159. data/lib/puppet/ssl/state_machine.rb +81 -35
  160. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  161. data/lib/puppet/test/test_helper.rb +7 -1
  162. data/lib/puppet/transaction.rb +33 -11
  163. data/lib/puppet/transaction/report.rb +2 -2
  164. data/lib/puppet/transaction/resource_harness.rb +1 -1
  165. data/lib/puppet/type.rb +7 -2
  166. data/lib/puppet/type/file.rb +13 -0
  167. data/lib/puppet/type/file/data_sync.rb +5 -1
  168. data/lib/puppet/type/file/source.rb +49 -58
  169. data/lib/puppet/type/group.rb +5 -4
  170. data/lib/puppet/type/package.rb +102 -10
  171. data/lib/puppet/type/service.rb +6 -8
  172. data/lib/puppet/type/user.rb +6 -30
  173. data/lib/puppet/util.rb +34 -11
  174. data/lib/puppet/util/at_fork.rb +1 -1
  175. data/lib/puppet/util/autoload.rb +4 -18
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/logging.rb +30 -18
  179. data/lib/puppet/util/package/version/debian.rb +175 -0
  180. data/lib/puppet/util/package/version/gem.rb +15 -0
  181. data/lib/puppet/util/package/version/pip.rb +167 -0
  182. data/lib/puppet/util/package/version/range.rb +53 -0
  183. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  185. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  187. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  188. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  189. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  190. data/lib/puppet/util/package/version/rpm.rb +73 -0
  191. data/lib/puppet/util/pidlock.rb +36 -10
  192. data/lib/puppet/util/platform.rb +5 -0
  193. data/lib/puppet/util/plist.rb +6 -0
  194. data/lib/puppet/util/rpm_compare.rb +193 -0
  195. data/lib/puppet/util/storage.rb +0 -1
  196. data/lib/puppet/util/windows/adsi.rb +50 -20
  197. data/lib/puppet/util/windows/process.rb +15 -14
  198. data/lib/puppet/util/windows/security.rb +1 -0
  199. data/lib/puppet/util/windows/sid.rb +3 -3
  200. data/lib/puppet/util/yaml.rb +1 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509/cert_provider.rb +9 -5
  203. data/locales/puppet.pot +640 -521
  204. data/man/man5/puppet.conf.5 +88 -9
  205. data/man/man8/puppet-agent.8 +6 -6
  206. data/man/man8/puppet-apply.8 +1 -1
  207. data/man/man8/puppet-catalog.8 +1 -1
  208. data/man/man8/puppet-config.8 +1 -1
  209. data/man/man8/puppet-describe.8 +1 -1
  210. data/man/man8/puppet-device.8 +2 -2
  211. data/man/man8/puppet-doc.8 +1 -1
  212. data/man/man8/puppet-epp.8 +1 -1
  213. data/man/man8/puppet-facts.8 +1 -1
  214. data/man/man8/puppet-filebucket.8 +17 -2
  215. data/man/man8/puppet-generate.8 +1 -1
  216. data/man/man8/puppet-help.8 +6 -3
  217. data/man/man8/puppet-key.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-man.8 +1 -1
  220. data/man/man8/puppet-module.8 +4 -1
  221. data/man/man8/puppet-node.8 +1 -1
  222. data/man/man8/puppet-parser.8 +1 -1
  223. data/man/man8/puppet-plugin.8 +1 -1
  224. data/man/man8/puppet-report.8 +1 -1
  225. data/man/man8/puppet-resource.8 +1 -1
  226. data/man/man8/puppet-script.8 +1 -1
  227. data/man/man8/puppet-ssl.8 +2 -2
  228. data/man/man8/puppet-status.8 +1 -1
  229. data/man/man8/puppet.8 +2 -2
  230. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  231. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  232. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  233. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  234. data/spec/fixtures/unit/forge/bacula.json +76 -0
  235. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  236. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  238. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  239. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  241. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
  242. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  243. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  244. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
  247. data/spec/integration/application/agent_spec.rb +394 -0
  248. data/spec/integration/application/apply_spec.rb +132 -3
  249. data/spec/integration/application/filebucket_spec.rb +190 -0
  250. data/spec/integration/application/plugin_spec.rb +73 -0
  251. data/spec/integration/configurer_spec.rb +26 -7
  252. data/spec/integration/http/client_spec.rb +154 -0
  253. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  254. data/spec/integration/indirector/report/yaml.rb +83 -0
  255. data/spec/integration/module_tool/forge_spec.rb +51 -0
  256. data/spec/integration/network/http_pool_spec.rb +76 -20
  257. data/spec/integration/node/environment_spec.rb +15 -0
  258. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  259. data/spec/lib/puppet/test_ca.rb +2 -2
  260. data/spec/lib/puppet_spec/https.rb +20 -9
  261. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  262. data/spec/shared_contexts/https.rb +29 -0
  263. data/spec/spec_helper.rb +6 -2
  264. data/spec/unit/agent_spec.rb +80 -26
  265. data/spec/unit/application/agent_spec.rb +9 -5
  266. data/spec/unit/application/apply_spec.rb +2 -12
  267. data/spec/unit/application/describe_spec.rb +88 -50
  268. data/spec/unit/application/device_spec.rb +2 -2
  269. data/spec/unit/application/filebucket_spec.rb +22 -2
  270. data/spec/unit/application/resource_spec.rb +2 -2
  271. data/spec/unit/concurrent/lock_spec.rb +29 -0
  272. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  273. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  274. data/spec/unit/configurer_spec.rb +400 -406
  275. data/spec/unit/context/trusted_information_spec.rb +17 -0
  276. data/spec/unit/daemon_spec.rb +5 -64
  277. data/spec/unit/defaults_spec.rb +38 -4
  278. data/spec/unit/environments_spec.rb +65 -28
  279. data/spec/unit/face/facts_spec.rb +24 -20
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/plugin_spec.rb +12 -10
  282. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  283. data/spec/unit/file_system_spec.rb +26 -2
  284. data/spec/unit/forge/errors_spec.rb +1 -1
  285. data/spec/unit/forge/forge_spec.rb +12 -54
  286. data/spec/unit/forge/module_release_spec.rb +19 -6
  287. data/spec/unit/forge/repository_spec.rb +63 -157
  288. data/spec/unit/forge_spec.rb +46 -116
  289. data/spec/unit/functions/find_template_spec.rb +69 -0
  290. data/spec/unit/functions/lookup_spec.rb +13 -0
  291. data/spec/unit/http/client_spec.rb +395 -27
  292. data/spec/unit/http/external_client_spec.rb +201 -0
  293. data/spec/unit/http/resolver_spec.rb +81 -12
  294. data/spec/unit/http/response_spec.rb +69 -0
  295. data/spec/unit/http/service/ca_spec.rb +100 -7
  296. data/spec/unit/http/service/compiler_spec.rb +627 -0
  297. data/spec/unit/http/service/file_server_spec.rb +308 -0
  298. data/spec/unit/http/service/report_spec.rb +118 -0
  299. data/spec/unit/http/service_spec.rb +117 -4
  300. data/spec/unit/http/session_spec.rb +237 -19
  301. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  302. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  303. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  304. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  305. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  306. data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
  307. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  308. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  309. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  310. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  311. data/spec/unit/indirector/rest_spec.rb +13 -0
  312. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  313. data/spec/unit/network/http/connection_spec.rb +549 -176
  314. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  315. data/spec/unit/network/http/pool_spec.rb +89 -11
  316. data/spec/unit/network/http_pool_spec.rb +63 -57
  317. data/spec/unit/network/http_spec.rb +1 -1
  318. data/spec/unit/node/environment_spec.rb +16 -0
  319. data/spec/unit/node/facts_spec.rb +2 -1
  320. data/spec/unit/node_spec.rb +7 -4
  321. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  322. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  323. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  324. data/spec/unit/provider/aix_object_spec.rb +16 -2
  325. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  326. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  327. data/spec/unit/provider/package/aix_spec.rb +29 -0
  328. data/spec/unit/provider/package/apt_spec.rb +43 -2
  329. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  330. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  331. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  332. data/spec/unit/provider/package/gem_spec.rb +40 -0
  333. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  334. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  335. data/spec/unit/provider/package/pip_spec.rb +68 -19
  336. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  337. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  338. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  339. data/spec/unit/provider/package/portage_spec.rb +9 -4
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  341. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  342. data/spec/unit/provider/package/yum_spec.rb +292 -0
  343. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  344. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  345. data/spec/unit/provider/service/init_spec.rb +1 -0
  346. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  347. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  348. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  349. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  350. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  351. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  352. data/spec/unit/provider/user/useradd_spec.rb +21 -8
  353. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  354. data/spec/unit/puppet_pal_2pec.rb +0 -26
  355. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  356. data/spec/unit/puppet_spec.rb +47 -0
  357. data/spec/unit/reports/http_spec.rb +70 -52
  358. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  359. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  360. data/spec/unit/ssl/certificate_spec.rb +7 -0
  361. data/spec/unit/ssl/host_spec.rb +4 -2
  362. data/spec/unit/ssl/oids_spec.rb +1 -0
  363. data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
  364. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  365. data/spec/unit/transaction/persistence_spec.rb +1 -10
  366. data/spec/unit/transaction/report_spec.rb +4 -0
  367. data/spec/unit/transaction_spec.rb +45 -1
  368. data/spec/unit/type/file/content_spec.rb +9 -3
  369. data/spec/unit/type/file/ensure_spec.rb +1 -2
  370. data/spec/unit/type/file/source_spec.rb +86 -35
  371. data/spec/unit/type/package_spec.rb +8 -0
  372. data/spec/unit/type/service_spec.rb +9 -8
  373. data/spec/unit/type/user_spec.rb +1 -2
  374. data/spec/unit/util/at_fork_spec.rb +3 -2
  375. data/spec/unit/util/autoload_spec.rb +2 -1
  376. data/spec/unit/util/log/destinations_spec.rb +1 -29
  377. data/spec/unit/util/log_spec.rb +0 -138
  378. data/spec/unit/util/logging_spec.rb +200 -0
  379. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  380. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  381. data/spec/unit/util/package/version/range_spec.rb +175 -0
  382. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  383. data/spec/unit/util/pidlock_spec.rb +112 -42
  384. data/spec/unit/util/plist_spec.rb +20 -0
  385. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  386. data/spec/unit/util/storage_spec.rb +1 -8
  387. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  388. data/spec/unit/util/windows/sid_spec.rb +2 -2
  389. data/spec/unit/x509/cert_provider_spec.rb +24 -4
  390. data/tasks/generate_cert_fixtures.rake +15 -1
  391. data/tasks/manpages.rake +6 -35
  392. metadata +92 -12
  393. data/COMMITTERS.md +0 -244
  394. data/spec/integration/faces/plugin_spec.rb +0 -61
  395. data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
  require 'puppet/util/plist'
3
5
  require 'puppet_spec/files'
@@ -52,6 +54,19 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
52
54
  </dict>
53
55
  </plist>'
54
56
  end
57
+ let(:ascii_xml_plist) do
58
+ '<?xml version="1.0" encoding="UTF-8"?>
59
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
60
+ <plist version="1.0">
61
+ <dict>
62
+ <key>RecordName</key>
63
+ <array>
64
+ <string>Timișoara</string>
65
+ <string>Tōkyō</string>
66
+ </array>
67
+ </dict>
68
+ </plist>'.force_encoding(Encoding::US_ASCII)
69
+ end
55
70
  let(:non_plist_data) do
56
71
  "Take my love, take my land
57
72
  Take me where I cannot stand
@@ -62,6 +77,7 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
62
77
  "\xCF\xFA\xED\xFE\a\u0000\u0000\u0001\u0003\u0000\u0000\x80\u0002\u0000\u0000\u0000\u0012\u0000\u0000\u0000\b"
63
78
  end
64
79
  let(:valid_xml_plist_hash) { {"LastUsedPrinters"=>[{"Network"=>"10.85.132.1", "PrinterID"=>"baskerville_corp_puppetlabs_net"}, {"Network"=>"10.14.96.1", "PrinterID"=>"Statler"}]} }
80
+ let(:ascii_xml_plist_hash) { {"RecordName"=>["Timișoara", "Tōkyō"]} }
65
81
  let(:plist_path) { file_containing('sample.plist', valid_xml_plist) }
66
82
  let(:binary_plist_magic_number) { 'bplist00' }
67
83
  let(:bad_xml_doctype) { '<!DOCTYPE plist PUBLIC -//Apple Computer' }
@@ -132,6 +148,10 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
132
148
  expect(subject.parse_plist(valid_xml_plist)).to eq(valid_xml_plist_hash)
133
149
  end
134
150
 
151
+ it "returns a valid hash when an ASCII XML plist is provided" do
152
+ expect(subject.parse_plist(ascii_xml_plist)).to eq(ascii_xml_plist_hash)
153
+ end
154
+
135
155
  it "raises a debug message and replaces a bad XML plist doctype should one be encountered" do
136
156
  expect(subject).to receive(:new_cfpropertylist).with({:data => good_xml_doctype}).and_return('plist_object')
137
157
  allow(subject).to receive(:convert_cfpropertylist_to_native_types).with('plist_object')
@@ -0,0 +1,196 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'puppet/util/rpm_compare'
5
+
6
+ describe Puppet::Util::RpmCompare do
7
+ class RpmTest
8
+ extend Puppet::Util::RpmCompare
9
+ end
10
+
11
+ describe '.rpmvercmp' do
12
+ # test cases munged directly from rpm's own
13
+ # tests/rpmvercmp.at
14
+ it { expect(RpmTest.rpmvercmp('1.0', '1.0')).to eq(0) }
15
+ it { expect(RpmTest.rpmvercmp('1.0', '2.0')).to eq(-1) }
16
+ it { expect(RpmTest.rpmvercmp('2.0', '1.0')).to eq(1) }
17
+ it { expect(RpmTest.rpmvercmp('2.0.1', '2.0.1')).to eq(0) }
18
+ it { expect(RpmTest.rpmvercmp('2.0', '2.0.1')).to eq(-1) }
19
+ it { expect(RpmTest.rpmvercmp('2.0.1', '2.0')).to eq(1) }
20
+ it { expect(RpmTest.rpmvercmp('2.0.1a', '2.0.1a')).to eq(0) }
21
+ it { expect(RpmTest.rpmvercmp('2.0.1a', '2.0.1')).to eq(1) }
22
+ it { expect(RpmTest.rpmvercmp('2.0.1', '2.0.1a')).to eq(-1) }
23
+ it { expect(RpmTest.rpmvercmp('5.5p1', '5.5p1')).to eq(0) }
24
+ it { expect(RpmTest.rpmvercmp('5.5p1', '5.5p2')).to eq(-1) }
25
+ it { expect(RpmTest.rpmvercmp('5.5p2', '5.5p1')).to eq(1) }
26
+ it { expect(RpmTest.rpmvercmp('5.5p10', '5.5p10')).to eq(0) }
27
+ it { expect(RpmTest.rpmvercmp('5.5p1', '5.5p10')).to eq(-1) }
28
+ it { expect(RpmTest.rpmvercmp('5.5p10', '5.5p1')).to eq(1) }
29
+ it { expect(RpmTest.rpmvercmp('10xyz', '10.1xyz')).to eq(-1) }
30
+ it { expect(RpmTest.rpmvercmp('10.1xyz', '10xyz')).to eq(1) }
31
+ it { expect(RpmTest.rpmvercmp('xyz10', 'xyz10')).to eq(0) }
32
+ it { expect(RpmTest.rpmvercmp('xyz10', 'xyz10.1')).to eq(-1) }
33
+ it { expect(RpmTest.rpmvercmp('xyz10.1', 'xyz10')).to eq(1) }
34
+ it { expect(RpmTest.rpmvercmp('xyz.4', 'xyz.4')).to eq(0) }
35
+ it { expect(RpmTest.rpmvercmp('xyz.4', '8')).to eq(-1) }
36
+ it { expect(RpmTest.rpmvercmp('8', 'xyz.4')).to eq(1) }
37
+ it { expect(RpmTest.rpmvercmp('xyz.4', '2')).to eq(-1) }
38
+ it { expect(RpmTest.rpmvercmp('2', 'xyz.4')).to eq(1) }
39
+ it { expect(RpmTest.rpmvercmp('5.5p2', '5.6p1')).to eq(-1) }
40
+ it { expect(RpmTest.rpmvercmp('5.6p1', '5.5p2')).to eq(1) }
41
+ it { expect(RpmTest.rpmvercmp('5.6p1', '6.5p1')).to eq(-1) }
42
+ it { expect(RpmTest.rpmvercmp('6.5p1', '5.6p1')).to eq(1) }
43
+ it { expect(RpmTest.rpmvercmp('6.0.rc1', '6.0')).to eq(1) }
44
+ it { expect(RpmTest.rpmvercmp('6.0', '6.0.rc1')).to eq(-1) }
45
+ it { expect(RpmTest.rpmvercmp('10b2', '10a1')).to eq(1) }
46
+ it { expect(RpmTest.rpmvercmp('10a2', '10b2')).to eq(-1) }
47
+ it { expect(RpmTest.rpmvercmp('1.0aa', '1.0aa')).to eq(0) }
48
+ it { expect(RpmTest.rpmvercmp('1.0a', '1.0aa')).to eq(-1) }
49
+ it { expect(RpmTest.rpmvercmp('1.0aa', '1.0a')).to eq(1) }
50
+ it { expect(RpmTest.rpmvercmp('10.0001', '10.0001')).to eq(0) }
51
+ it { expect(RpmTest.rpmvercmp('10.0001', '10.1')).to eq(0) }
52
+ it { expect(RpmTest.rpmvercmp('10.1', '10.0001')).to eq(0) }
53
+ it { expect(RpmTest.rpmvercmp('10.0001', '10.0039')).to eq(-1) }
54
+ it { expect(RpmTest.rpmvercmp('10.0039', '10.0001')).to eq(1) }
55
+ it { expect(RpmTest.rpmvercmp('4.999.9', '5.0')).to eq(-1) }
56
+ it { expect(RpmTest.rpmvercmp('5.0', '4.999.9')).to eq(1) }
57
+ it { expect(RpmTest.rpmvercmp('20101121', '20101121')).to eq(0) }
58
+ it { expect(RpmTest.rpmvercmp('20101121', '20101122')).to eq(-1) }
59
+ it { expect(RpmTest.rpmvercmp('20101122', '20101121')).to eq(1) }
60
+ it { expect(RpmTest.rpmvercmp('2_0', '2_0')).to eq(0) }
61
+ it { expect(RpmTest.rpmvercmp('2.0', '2_0')).to eq(0) }
62
+ it { expect(RpmTest.rpmvercmp('2_0', '2.0')).to eq(0) }
63
+ it { expect(RpmTest.rpmvercmp('a', 'a')).to eq(0) }
64
+ it { expect(RpmTest.rpmvercmp('a+', 'a+')).to eq(0) }
65
+ it { expect(RpmTest.rpmvercmp('a+', 'a_')).to eq(0) }
66
+ it { expect(RpmTest.rpmvercmp('a_', 'a+')).to eq(0) }
67
+ it { expect(RpmTest.rpmvercmp('+a', '+a')).to eq(0) }
68
+ it { expect(RpmTest.rpmvercmp('+a', '_a')).to eq(0) }
69
+ it { expect(RpmTest.rpmvercmp('_a', '+a')).to eq(0) }
70
+ it { expect(RpmTest.rpmvercmp('+_', '+_')).to eq(0) }
71
+ it { expect(RpmTest.rpmvercmp('_+', '+_')).to eq(0) }
72
+ it { expect(RpmTest.rpmvercmp('_+', '_+')).to eq(0) }
73
+ it { expect(RpmTest.rpmvercmp('+', '_')).to eq(0) }
74
+ it { expect(RpmTest.rpmvercmp('_', '+')).to eq(0) }
75
+ it { expect(RpmTest.rpmvercmp('1.0~rc1', '1.0~rc1')).to eq(0) }
76
+ it { expect(RpmTest.rpmvercmp('1.0~rc1', '1.0')).to eq(-1) }
77
+ it { expect(RpmTest.rpmvercmp('1.0', '1.0~rc1')).to eq(1) }
78
+ it { expect(RpmTest.rpmvercmp('1.0~rc1', '1.0~rc2')).to eq(-1) }
79
+ it { expect(RpmTest.rpmvercmp('1.0~rc2', '1.0~rc1')).to eq(1) }
80
+ it { expect(RpmTest.rpmvercmp('1.0~rc1~git123', '1.0~rc1~git123')).to eq(0) }
81
+ it { expect(RpmTest.rpmvercmp('1.0~rc1~git123', '1.0~rc1')).to eq(-1) }
82
+ it { expect(RpmTest.rpmvercmp('1.0~rc1', '1.0~rc1~git123')).to eq(1) }
83
+ it { expect(RpmTest.rpmvercmp('1.0~rc1', '1.0arc1')).to eq(-1) }
84
+ it { expect(RpmTest.rpmvercmp('', '~')).to eq(1) }
85
+ it { expect(RpmTest.rpmvercmp('~', '~~')).to eq(1) }
86
+ it { expect(RpmTest.rpmvercmp('~', '~+~')).to eq(1) }
87
+ it { expect(RpmTest.rpmvercmp('~', '~a')).to eq(-1) }
88
+
89
+ # non-upstream test cases
90
+ it { expect(RpmTest.rpmvercmp('405', '406')).to eq(-1) }
91
+ it { expect(RpmTest.rpmvercmp('1', '0')).to eq(1) }
92
+ end
93
+
94
+ describe '.rpm_compareEVR' do
95
+ it 'evaluates identical version-release as equal' do
96
+ expect(RpmTest.rpm_compareEVR('1.2.3-1.el5', '1.2.3-1.el5')).to eq(0)
97
+ end
98
+
99
+ it 'evaluates identical version as equal' do
100
+ expect(RpmTest.rpm_compareEVR('1.2.3', '1.2.3')).to eq(0)
101
+ end
102
+
103
+ it 'evaluates identical version but older release as less' do
104
+ expect(RpmTest.rpm_compareEVR('1.2.3-1.el5', '1.2.3-2.el5')).to eq(-1)
105
+ end
106
+
107
+ it 'evaluates identical version but newer release as greater' do
108
+ expect(RpmTest.rpm_compareEVR('1.2.3-3.el5', '1.2.3-2.el5')).to eq(1)
109
+ end
110
+
111
+ it 'evaluates a newer epoch as greater' do
112
+ expect(RpmTest.rpm_compareEVR('1:1.2.3-4.5', '1.2.3-4.5')).to eq(1)
113
+ end
114
+
115
+ # these tests describe PUP-1244 logic yet to be implemented
116
+ it 'evaluates any version as equal to the same version followed by release' do
117
+ expect(RpmTest.rpm_compareEVR('1.2.3', '1.2.3-2.el5')).to eq(0)
118
+ end
119
+
120
+ # test cases for PUP-682
121
+ it 'evaluates same-length numeric revisions numerically' do
122
+ expect(RpmTest.rpm_compareEVR('2.2-405', '2.2-406')).to eq(-1)
123
+ end
124
+ end
125
+
126
+ describe '.rpm_parse_evr' do
127
+ it 'parses full simple evr' do
128
+ version = RpmTest.rpm_parse_evr('0:1.2.3-4.el5')
129
+ expect([version[:epoch], version[:version], version[:release]]).to \
130
+ eq(['0', '1.2.3', '4.el5'])
131
+ end
132
+
133
+ it 'parses version only' do
134
+ version = RpmTest.rpm_parse_evr('1.2.3')
135
+ expect([version[:epoch], version[:version], version[:release]]).to \
136
+ eq([nil, '1.2.3', nil])
137
+ end
138
+
139
+ it 'parses version-release' do
140
+ version = RpmTest.rpm_parse_evr('1.2.3-4.5.el6')
141
+ expect([version[:epoch], version[:version], version[:release]]).to \
142
+ eq([nil, '1.2.3', '4.5.el6'])
143
+ end
144
+
145
+ it 'parses release with git hash' do
146
+ version = RpmTest.rpm_parse_evr('1.2.3-4.1234aefd')
147
+ expect([version[:epoch], version[:version], version[:release]]).to \
148
+ eq([nil, '1.2.3', '4.1234aefd'])
149
+ end
150
+
151
+ it 'parses single integer versions' do
152
+ version = RpmTest.rpm_parse_evr('12345')
153
+ expect([version[:epoch], version[:version], version[:release]]).to \
154
+ eq([nil, '12345', nil])
155
+ end
156
+
157
+ it 'parses text in the epoch to 0' do
158
+ version = RpmTest.rpm_parse_evr('foo0:1.2.3-4')
159
+ expect([version[:epoch], version[:version], version[:release]]).to \
160
+ eq([nil, '1.2.3', '4'])
161
+ end
162
+
163
+ it 'parses revisions with text' do
164
+ version = RpmTest.rpm_parse_evr('1.2.3-SNAPSHOT20140107')
165
+ expect([version[:epoch], version[:version], version[:release]]).to \
166
+ eq([nil, '1.2.3', 'SNAPSHOT20140107'])
167
+ end
168
+
169
+ # test cases for PUP-682
170
+ it 'parses revisions with text and numbers' do
171
+ version = RpmTest.rpm_parse_evr('2.2-SNAPSHOT20121119105647')
172
+ expect([version[:epoch], version[:version], version[:release]]).to \
173
+ eq([nil, '2.2', 'SNAPSHOT20121119105647'])
174
+ end
175
+ end
176
+
177
+ describe '.compare_values' do
178
+ it 'treats two nil values as equal' do
179
+ expect(RpmTest.compare_values(nil, nil)).to eq(0)
180
+ end
181
+
182
+ it 'treats a nil value as less than a non-nil value' do
183
+ expect(RpmTest.compare_values(nil, '0')).to eq(-1)
184
+ end
185
+
186
+ it 'treats a non-nil value as greater than a nil value' do
187
+ expect(RpmTest.compare_values('0', nil)).to eq(1)
188
+ end
189
+
190
+ it 'passes two non-nil values on to rpmvercmp' do
191
+ allow(RpmTest).to receive(:rpmvercmp).and_return(0)
192
+ expect(RpmTest).to receive(:rpmvercmp).with('s1', 's2')
193
+ RpmTest.compare_values('s1', 's2')
194
+ end
195
+ end
196
+ end
@@ -201,14 +201,7 @@ describe Puppet::Util::Storage do
201
201
  Dir.mkdir(Puppet[:statefile])
202
202
  Puppet::Util::Storage.cache(:yayness)
203
203
 
204
- if Puppet::Util::Platform.windows?
205
- expect { Puppet::Util::Storage.store }.to raise_error do |error|
206
- expect(error).to be_a(Puppet::Util::Windows::Error)
207
- expect(error.code).to eq(5) # ERROR_ACCESS_DENIED
208
- end
209
- else
210
- expect { Puppet::Util::Storage.store }.to raise_error(Errno::EISDIR, /Is a directory/)
211
- end
204
+ expect { Puppet::Util::Storage.store }.to raise_error(Errno::EISDIR, /Is a directory/)
212
205
 
213
206
  Dir.rmdir(Puppet[:statefile])
214
207
  end
@@ -41,6 +41,19 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
41
41
  end
42
42
  end
43
43
 
44
+ describe ".domain_role" do
45
+ DOMAIN_ROLES = Puppet::Util::Platform.windows? ? Puppet::Util::Windows::ADSI::DOMAIN_ROLES : {}
46
+
47
+ DOMAIN_ROLES.each do |id, role|
48
+ it "should be able to return #{role} as the domain role of the computer" do
49
+ Puppet::Util::Windows::ADSI.instance_variable_set(:@domain_role, nil)
50
+ domain_role = [double('WMI', :DomainRole => id)]
51
+ allow(Puppet::Util::Windows::ADSI).to receive(:execquery).with('select DomainRole from Win32_ComputerSystem').and_return(domain_role)
52
+ expect(Puppet::Util::Windows::ADSI.domain_role).to eq(role)
53
+ end
54
+ end
55
+ end
56
+
44
57
  describe ".sid_uri" do
45
58
  it "should raise an error when the input is not a SID Principal" do
46
59
  [Object.new, {}, 1, :symbol, '', nil].each do |input|
@@ -56,6 +69,32 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
56
69
  end
57
70
  end
58
71
 
72
+ shared_examples 'a local only resource query' do |klass, account_type|
73
+ before(:each) do
74
+ allow(Puppet::Util::Windows::ADSI).to receive(:domain_role).and_return(:MEMBER_SERVER)
75
+ end
76
+
77
+ it "should be able to check for a local resource" do
78
+ local_domain = 'testcomputername'
79
+ principal = double('Principal', :account => resource_name, :domain => local_domain, :account_type => account_type)
80
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(resource_name).and_return(principal)
81
+ expect(klass.exists?(resource_name)).to eq(true)
82
+ end
83
+
84
+ it "should be case insensitive when comparing the domain with the computer name" do
85
+ local_domain = 'TESTCOMPUTERNAME'
86
+ principal = double('Principal', :account => resource_name, :domain => local_domain, :account_type => account_type)
87
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(resource_name).and_return(principal)
88
+ expect(klass.exists?(resource_name)).to eq(true)
89
+ end
90
+
91
+ it "should return false if no local resource exists" do
92
+ principal = double('Principal', :account => resource_name, :domain => 'AD_DOMAIN', :account_type => account_type)
93
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(resource_name).and_return(principal)
94
+ expect(klass.exists?(resource_name)).to eq(false)
95
+ end
96
+ end
97
+
59
98
  describe Puppet::Util::Windows::ADSI::User do
60
99
  let(:username) { 'testuser' }
61
100
  let(:domain) { 'DOMAIN' }
@@ -103,6 +142,12 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
103
142
  expect(user.native_object).to eq(adsi_user)
104
143
  end
105
144
 
145
+ context "when domain-joined" do
146
+ it_should_behave_like 'a local only resource query', Puppet::Util::Windows::ADSI::User, :SidTypeUser do
147
+ let(:resource_name) { username }
148
+ end
149
+ end
150
+
106
151
  it "should be able to check the existence of a user" do
107
152
  expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(username).and_return(nil)
108
153
  expect(Puppet::Util::Windows::ADSI).to receive(:connect).with("WinNT://./#{username},user").and_return(connection)
@@ -421,8 +466,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
421
466
  expect(Puppet::Util::Windows::SID).to receive(:octet_string_to_principal).with([0]).and_return(sids[0])
422
467
  expect(Puppet::Util::Windows::SID).to receive(:octet_string_to_principal).with([1]).and_return(sids[1])
423
468
 
424
- expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2').and_return(sids[1])
425
- expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('DOMAIN2\user3').and_return(sids[2])
469
+ expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2', false).and_return(sids[1])
470
+ expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('DOMAIN2\user3', false).and_return(sids[2])
426
471
 
427
472
  expect(Puppet::Util::Windows::ADSI).to receive(:sid_uri).with(sids[0]).and_return("WinNT://DOMAIN/user1,user")
428
473
  expect(Puppet::Util::Windows::ADSI).to receive(:sid_uri).with(sids[2]).and_return("WinNT://DOMAIN2/user3,user")
@@ -448,8 +493,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
448
493
  expect(Puppet::Util::Windows::SID).to receive(:octet_string_to_principal).with([0]).and_return(sids[0])
449
494
  expect(Puppet::Util::Windows::SID).to receive(:octet_string_to_principal).with([1]).and_return(sids[1])
450
495
 
451
- expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2').and_return(sids[1])
452
- expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('DOMAIN2\user3').and_return(sids[2])
496
+ expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2', any_args).and_return(sids[1])
497
+ expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('DOMAIN2\user3', any_args).and_return(sids[2])
453
498
 
454
499
  expect(Puppet::Util::Windows::ADSI).to receive(:sid_uri).with(sids[2]).and_return("WinNT://DOMAIN2/user3,user")
455
500
 
@@ -543,6 +588,12 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet::Util::Platform.windows? do
543
588
  expect(Puppet::Util::Windows::ADSI::Group.uri(groupname, ntauthority_localized)).to eq("WinNT://./#{groupname},group")
544
589
  end
545
590
 
591
+ context "when domain-joined" do
592
+ it_should_behave_like 'a local only resource query', Puppet::Util::Windows::ADSI::Group, :SidTypeGroup do
593
+ let(:resource_name) { groupname }
594
+ end
595
+ end
596
+
546
597
  it "should be able to create a group" do
547
598
  adsi_group = double("adsi")
548
599
 
@@ -201,9 +201,9 @@ describe "Puppet::Util::Windows::SID", :if => Puppet::Util::Platform.windows? do
201
201
  principal = subject.ads_to_principal(unresolvable_user)
202
202
 
203
203
  expect(principal).to be_an_instance_of(Puppet::Util::Windows::SID::Principal)
204
- expect(principal.account).to eq('S-1-1-1 (unresolvable)')
204
+ expect(principal.account).to eq('S-1-1-1')
205
205
  expect(principal.domain).to eq(nil)
206
- expect(principal.domain_account).to eq('S-1-1-1 (unresolvable)')
206
+ expect(principal.domain_account).to eq('S-1-1-1')
207
207
  expect(principal.sid).to eq('S-1-1-1')
208
208
  expect(principal.sid_bytes).to eq(valid_octet_invalid_user)
209
209
  expect(principal.account_type).to eq(:SidTypeUnknown)
@@ -251,11 +251,11 @@ describe Puppet::X509::CertProvider do
251
251
  }.to raise_error(RuntimeError, 'Certname "signed/../key" must not contain unprintable or non-ASCII characters')
252
252
  end
253
253
 
254
- it 'returns nil if `hostprivkey` is overridden' do
254
+ it 'prefers `hostprivkey` if set' do
255
255
  Puppet[:certname] = 'foo'
256
256
  Puppet[:hostprivkey] = File.join(fixture_dir, "signed-key.pem")
257
257
 
258
- expect(provider.load_private_key('foo')).to be_nil
258
+ expect(provider.load_private_key('foo')).to be_a(OpenSSL::PKey::RSA)
259
259
  end
260
260
 
261
261
  it 'raises if the private key is unreadable' do
@@ -345,11 +345,11 @@ describe Puppet::X509::CertProvider do
345
345
  }.to raise_error(RuntimeError, 'Certname "tom/../key" must not contain unprintable or non-ASCII characters')
346
346
  end
347
347
 
348
- it 'returns nil if `hostcert` is overridden' do
348
+ it 'prefers `hostcert` if set' do
349
349
  Puppet[:certname] = 'foo'
350
350
  Puppet[:hostcert] = File.join(fixture_dir, "signed.pem")
351
351
 
352
- expect(provider.load_client_cert('foo')).to be_nil
352
+ expect(provider.load_client_cert('foo')).to be_a(OpenSSL::X509::Certificate)
353
353
  end
354
354
 
355
355
  it 'raises if the certificate is unreadable' do
@@ -446,6 +446,16 @@ describe Puppet::X509::CertProvider do
446
446
  provider.save_private_key(name, private_key)
447
447
  }.to raise_error(Puppet::Error, "Failed to save private key for '#{name}'")
448
448
  end
449
+
450
+ it 'prefers `hostprivkey` if set' do
451
+ overridden_path = tmpfile('hostprivkey')
452
+ Puppet[:hostprivkey] = overridden_path
453
+
454
+ provider.save_private_key(name, private_key)
455
+
456
+ expect(File).to_not exist(path)
457
+ expect(File).to exist(overridden_path)
458
+ end
449
459
  end
450
460
 
451
461
  context 'certs' do
@@ -485,6 +495,16 @@ describe Puppet::X509::CertProvider do
485
495
  provider.save_client_cert(name, client_cert)
486
496
  }.to raise_error(Puppet::Error, "Failed to save client certificate for '#{name}'")
487
497
  end
498
+
499
+ it 'prefers `hostcert` if set' do
500
+ overridden_path = tmpfile('hostcert')
501
+ Puppet[:hostcert] = overridden_path
502
+
503
+ provider.save_client_cert(name, client_cert)
504
+
505
+ expect(File).to_not exist(path)
506
+ expect(File).to exist(overridden_path)
507
+ end
488
508
  end
489
509
 
490
510
  context 'requests' do
@@ -49,6 +49,10 @@ task(:gen_cert_fixtures) do
49
49
  #
50
50
  # bad-basic-constraints.pem /CN=Test CA (bad isCA constraint)
51
51
  #
52
+ # unknown-ca.pemm /CN=Unknown CA
53
+ # |
54
+ # unknown-127.0.0.1.pem +- /CN=127.0.0.1
55
+ #
52
56
  # Keys
53
57
  # ====
54
58
  #
@@ -61,10 +65,20 @@ task(:gen_cert_fixtures) do
61
65
  # `request.pem` contains a valid CSR for /CN=pending, while `tampered_csr.pem`
62
66
  # is the same as `request.pem`, but it's public key has been replaced.
63
67
  #
64
- ca = Puppet::TestCa.new
65
68
  dir = File.join(RAKE_ROOT, 'spec/fixtures/ssl')
66
69
 
70
+ # Create self-signed CA & key
71
+ unknown_ca = Puppet::TestCa.new('Unknown CA')
72
+ save(dir, 'unknown-ca.pem', unknown_ca.ca_cert)
73
+ save(dir, 'unknown-ca-key.pem', unknown_ca.key)
74
+
75
+ # Create an SSL cert for 127.0.0.1
76
+ signed = unknown_ca.create_cert('127.0.0.1', unknown_ca.ca_cert, unknown_ca.key, subject_alt_names: 'DNS:127.0.0.1,DNS:127.0.0.2')
77
+ save(dir, 'unknown-127.0.0.1.pem', signed[:cert])
78
+ save(dir, 'unknown-127.0.0.1-key.pem', signed[:private_key])
79
+
67
80
  # Create Test CA & CRL
81
+ ca = Puppet::TestCa.new
68
82
  save(dir, 'ca.pem', ca.ca_cert)
69
83
  save(dir, 'crl.pem', ca.ca_crl)
70
84