puppet 6.16.0-x86-mingw32 → 6.20.0-x86-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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +6 -2
  4. data/Gemfile.lock +40 -36
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent.rb +2 -2
  8. data/lib/puppet/agent/locker.rb +0 -7
  9. data/lib/puppet/application.rb +10 -6
  10. data/lib/puppet/application/agent.rb +23 -6
  11. data/lib/puppet/application/apply.rb +20 -21
  12. data/lib/puppet/application/device.rb +1 -0
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +2 -2
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/script.rb +1 -0
  17. data/lib/puppet/application_support.rb +7 -0
  18. data/lib/puppet/configurer.rb +70 -20
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/confine.rb +2 -2
  21. data/lib/puppet/confine/any.rb +1 -1
  22. data/lib/puppet/defaults.rb +113 -46
  23. data/lib/puppet/environments.rb +84 -59
  24. data/lib/puppet/face/catalog.rb +1 -1
  25. data/lib/puppet/face/config.rb +56 -16
  26. data/lib/puppet/face/epp.rb +12 -2
  27. data/lib/puppet/face/facts.rb +60 -0
  28. data/lib/puppet/face/node.rb +3 -3
  29. data/lib/puppet/face/node/clean.rb +2 -2
  30. data/lib/puppet/face/status.rb +1 -1
  31. data/lib/puppet/feature/base.rb +1 -1
  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/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +8 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +3 -7
  47. data/lib/puppet/functions/epp.rb +1 -0
  48. data/lib/puppet/functions/inline_epp.rb +1 -0
  49. data/lib/puppet/functions/lstrip.rb +4 -4
  50. data/lib/puppet/functions/new.rb +8 -3
  51. data/lib/puppet/functions/reverse_each.rb +1 -1
  52. data/lib/puppet/functions/rstrip.rb +4 -4
  53. data/lib/puppet/functions/step.rb +1 -1
  54. data/lib/puppet/functions/strip.rb +4 -4
  55. data/lib/puppet/gettext/config.rb +5 -5
  56. data/lib/puppet/gettext/module_translations.rb +4 -4
  57. data/lib/puppet/http.rb +1 -0
  58. data/lib/puppet/http/client.rb +6 -1
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/fact_search.rb +60 -0
  74. data/lib/puppet/indirector/facts/facter.rb +3 -3
  75. data/lib/puppet/indirector/facts/json.rb +27 -0
  76. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  77. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  78. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  79. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/json.rb +5 -1
  83. data/lib/puppet/indirector/msgpack.rb +1 -1
  84. data/lib/puppet/indirector/node/json.rb +8 -0
  85. data/lib/puppet/indirector/report/json.rb +34 -0
  86. data/lib/puppet/indirector/report/processor.rb +2 -2
  87. data/lib/puppet/indirector/request.rb +5 -5
  88. data/lib/puppet/indirector/yaml.rb +1 -1
  89. data/lib/puppet/module.rb +1 -2
  90. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  91. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/formats.rb +2 -1
  94. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  95. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  96. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  97. data/lib/puppet/network/http/connection_adapter.rb +6 -4
  98. data/lib/puppet/network/http/route.rb +2 -2
  99. data/lib/puppet/node/environment.rb +12 -5
  100. data/lib/puppet/node/facts.rb +17 -0
  101. data/lib/puppet/pal/pal_impl.rb +90 -13
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +7 -6
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +1 -1
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/resource.rb +3 -2
  112. data/lib/puppet/parser/resource/param.rb +6 -0
  113. data/lib/puppet/parser/templatewrapper.rb +1 -1
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  119. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
  120. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  121. data/lib/puppet/pops/issues.rb +5 -0
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  123. data/lib/puppet/pops/loaders.rb +18 -11
  124. data/lib/puppet/pops/lookup/context.rb +1 -1
  125. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  126. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  130. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  131. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  133. data/lib/puppet/provider/file/windows.rb +1 -1
  134. data/lib/puppet/provider/package/apt.rb +38 -0
  135. data/lib/puppet/provider/package/aptitude.rb +1 -1
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip2.rb +17 -0
  139. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  140. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  141. data/lib/puppet/provider/package/yum.rb +2 -1
  142. data/lib/puppet/provider/package/zypper.rb +3 -0
  143. data/lib/puppet/provider/service/windows.rb +23 -7
  144. data/lib/puppet/provider/user/aix.rb +3 -3
  145. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  146. data/lib/puppet/provider/user/useradd.rb +11 -4
  147. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  148. data/lib/puppet/reference/configuration.rb +6 -5
  149. data/lib/puppet/reports/http.rb +2 -0
  150. data/lib/puppet/resource.rb +2 -1
  151. data/lib/puppet/resource/type.rb +10 -1
  152. data/lib/puppet/rest/route.rb +2 -2
  153. data/lib/puppet/settings.rb +63 -21
  154. data/lib/puppet/settings/alias_setting.rb +37 -0
  155. data/lib/puppet/settings/base_setting.rb +26 -2
  156. data/lib/puppet/ssl/ssl_context.rb +2 -2
  157. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  158. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  159. data/lib/puppet/test/test_helper.rb +18 -13
  160. data/lib/puppet/transaction.rb +2 -2
  161. data/lib/puppet/transaction/persistence.rb +1 -1
  162. data/lib/puppet/transaction/report.rb +12 -8
  163. data/lib/puppet/trusted_external.rb +29 -1
  164. data/lib/puppet/type.rb +15 -7
  165. data/lib/puppet/type/file.rb +40 -15
  166. data/lib/puppet/type/file/checksum.rb +4 -4
  167. data/lib/puppet/type/file/source.rb +32 -12
  168. data/lib/puppet/type/filebucket.rb +1 -1
  169. data/lib/puppet/type/notify.rb +2 -2
  170. data/lib/puppet/type/service.rb +53 -0
  171. data/lib/puppet/type/user.rb +18 -3
  172. data/lib/puppet/util.rb +41 -3
  173. data/lib/puppet/util/autoload.rb +10 -15
  174. data/lib/puppet/util/character_encoding.rb +9 -5
  175. data/lib/puppet/util/checksums.rb +19 -4
  176. data/lib/puppet/util/connection.rb +8 -8
  177. data/lib/puppet/util/execution.rb +2 -2
  178. data/lib/puppet/util/fact_dif.rb +62 -0
  179. data/lib/puppet/util/fileparsing.rb +2 -2
  180. data/lib/puppet/util/posix.rb +54 -5
  181. data/lib/puppet/util/provider_features.rb +1 -1
  182. data/lib/puppet/util/reference.rb +1 -1
  183. data/lib/puppet/util/rubygems.rb +5 -1
  184. data/lib/puppet/util/run_mode.rb +5 -1
  185. data/lib/puppet/util/windows.rb +1 -0
  186. data/lib/puppet/util/windows/api_types.rb +60 -33
  187. data/lib/puppet/util/windows/eventlog.rb +1 -6
  188. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  189. data/lib/puppet/util/windows/principal.rb +8 -6
  190. data/lib/puppet/util/windows/registry.rb +11 -11
  191. data/lib/puppet/util/windows/security.rb +4 -4
  192. data/lib/puppet/util/windows/service.rb +43 -26
  193. data/lib/puppet/util/windows/user.rb +242 -8
  194. data/lib/puppet/version.rb +1 -1
  195. data/locales/puppet.pot +501 -443
  196. data/man/man5/puppet.conf.5 +70 -24
  197. data/man/man8/puppet-agent.8 +8 -5
  198. data/man/man8/puppet-apply.8 +2 -2
  199. data/man/man8/puppet-catalog.8 +1 -1
  200. data/man/man8/puppet-config.8 +6 -6
  201. data/man/man8/puppet-describe.8 +1 -1
  202. data/man/man8/puppet-device.8 +2 -2
  203. data/man/man8/puppet-doc.8 +1 -1
  204. data/man/man8/puppet-epp.8 +1 -1
  205. data/man/man8/puppet-facts.8 +32 -1
  206. data/man/man8/puppet-filebucket.8 +3 -3
  207. data/man/man8/puppet-generate.8 +1 -1
  208. data/man/man8/puppet-help.8 +1 -1
  209. data/man/man8/puppet-key.8 +1 -1
  210. data/man/man8/puppet-lookup.8 +2 -2
  211. data/man/man8/puppet-man.8 +1 -1
  212. data/man/man8/puppet-module.8 +1 -1
  213. data/man/man8/puppet-node.8 +7 -4
  214. data/man/man8/puppet-parser.8 +1 -1
  215. data/man/man8/puppet-plugin.8 +1 -1
  216. data/man/man8/puppet-report.8 +4 -1
  217. data/man/man8/puppet-resource.8 +1 -1
  218. data/man/man8/puppet-script.8 +2 -2
  219. data/man/man8/puppet-ssl.8 +1 -1
  220. data/man/man8/puppet-status.8 +2 -2
  221. data/man/man8/puppet.8 +2 -2
  222. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  223. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  224. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  225. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  226. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  227. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  228. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  229. data/spec/integration/application/agent_spec.rb +263 -54
  230. data/spec/integration/application/apply_spec.rb +168 -149
  231. data/spec/integration/application/doc_spec.rb +16 -6
  232. data/spec/integration/application/filebucket_spec.rb +70 -21
  233. data/spec/integration/application/help_spec.rb +42 -0
  234. data/spec/integration/application/lookup_spec.rb +13 -0
  235. data/spec/integration/application/module_spec.rb +68 -0
  236. data/spec/integration/application/plugin_spec.rb +53 -3
  237. data/spec/integration/configurer_spec.rb +14 -0
  238. data/spec/integration/data_binding_spec.rb +82 -0
  239. data/spec/integration/defaults_spec.rb +20 -3
  240. data/spec/integration/directory_environments_spec.rb +17 -17
  241. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  242. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  243. data/spec/integration/network/http_pool_spec.rb +26 -9
  244. data/spec/integration/node/environment_spec.rb +1 -1
  245. data/spec/integration/parser/compiler_spec.rb +11 -0
  246. data/spec/integration/resource/type_collection_spec.rb +2 -6
  247. data/spec/integration/transaction_spec.rb +4 -9
  248. data/spec/integration/type/file_spec.rb +1 -1
  249. data/spec/integration/util/execution_spec.rb +22 -0
  250. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  251. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  252. data/spec/integration/util/windows/process_spec.rb +26 -32
  253. data/spec/integration/util/windows/registry_spec.rb +7 -17
  254. data/spec/integration/util/windows/user_spec.rb +47 -5
  255. data/spec/integration/util_spec.rb +7 -33
  256. data/spec/lib/puppet_spec/matchers.rb +0 -80
  257. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  258. data/spec/lib/puppet_spec/settings.rb +6 -1
  259. data/spec/shared_contexts/types_setup.rb +2 -0
  260. data/spec/spec_helper.rb +1 -4
  261. data/spec/unit/agent_spec.rb +8 -6
  262. data/spec/unit/application/agent_spec.rb +3 -5
  263. data/spec/unit/application/config_spec.rb +224 -4
  264. data/spec/unit/application/doc_spec.rb +2 -2
  265. data/spec/unit/application/face_base_spec.rb +6 -4
  266. data/spec/unit/application/facts_spec.rb +41 -10
  267. data/spec/unit/application/filebucket_spec.rb +0 -2
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +60 -13
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine/feature_spec.rb +1 -1
  276. data/spec/unit/confine_spec.rb +10 -3
  277. data/spec/unit/context/trusted_information_spec.rb +10 -4
  278. data/spec/unit/defaults_spec.rb +20 -1
  279. data/spec/unit/environments_spec.rb +176 -32
  280. data/spec/unit/face/config_spec.rb +65 -12
  281. data/spec/unit/face/node_spec.rb +2 -13
  282. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  283. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  284. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  285. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  286. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  287. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  288. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  289. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  290. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  291. data/spec/unit/file_system_spec.rb +1 -2
  292. data/spec/unit/forge/module_release_spec.rb +2 -7
  293. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  294. data/spec/unit/http/client_spec.rb +64 -9
  295. data/spec/unit/http/resolver_spec.rb +24 -5
  296. data/spec/unit/http/response_spec.rb +6 -0
  297. data/spec/unit/http/service/ca_spec.rb +2 -3
  298. data/spec/unit/http/service/compiler_spec.rb +51 -3
  299. data/spec/unit/http/service/file_server_spec.rb +2 -3
  300. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  301. data/spec/unit/http/service/report_spec.rb +2 -3
  302. data/spec/unit/http/service_spec.rb +1 -2
  303. data/spec/unit/http/session_spec.rb +8 -21
  304. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  305. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  306. data/spec/unit/indirector/face_spec.rb +0 -1
  307. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  308. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  309. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  310. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  311. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  312. data/spec/unit/indirector/indirection_spec.rb +8 -12
  313. data/spec/unit/indirector/json_spec.rb +8 -8
  314. data/spec/unit/indirector/key/file_spec.rb +0 -1
  315. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  316. data/spec/unit/indirector/node/json_spec.rb +33 -0
  317. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  318. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  319. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  320. data/spec/unit/indirector/request_spec.rb +5 -5
  321. data/spec/unit/indirector/rest_spec.rb +1 -1
  322. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  323. data/spec/unit/indirector/yaml_spec.rb +7 -7
  324. data/spec/unit/indirector_spec.rb +2 -2
  325. data/spec/unit/interface_spec.rb +3 -3
  326. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  327. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  328. data/spec/unit/network/authconfig_spec.rb +0 -3
  329. data/spec/unit/network/format_support_spec.rb +3 -2
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
  331. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  332. data/spec/unit/network/http/connection_spec.rb +42 -32
  333. data/spec/unit/network/http/handler_spec.rb +0 -5
  334. data/spec/unit/node/environment_spec.rb +18 -1
  335. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  336. data/spec/unit/parser/compiler_spec.rb +3 -19
  337. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  338. data/spec/unit/parser/resource_spec.rb +14 -8
  339. data/spec/unit/parser/scope_spec.rb +1 -1
  340. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  341. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  342. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  344. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  345. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  346. data/spec/unit/property_spec.rb +1 -0
  347. data/spec/unit/provider/exec_spec.rb +4 -3
  348. data/spec/unit/provider/nameservice_spec.rb +66 -65
  349. data/spec/unit/provider/package/apt_spec.rb +76 -3
  350. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  351. data/spec/unit/provider/package/base_spec.rb +6 -5
  352. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  353. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  354. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  355. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  356. data/spec/unit/provider/package/pip_spec.rb +6 -11
  357. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  358. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  359. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  360. data/spec/unit/provider/package/yum_spec.rb +31 -0
  361. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  362. data/spec/unit/provider/service/base_spec.rb +2 -4
  363. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  364. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  365. data/spec/unit/provider/service/debian_spec.rb +3 -5
  366. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  368. data/spec/unit/provider/service/init_spec.rb +45 -5
  369. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  370. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  371. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  372. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  373. data/spec/unit/provider/service/runit_spec.rb +2 -1
  374. data/spec/unit/provider/service/smf_spec.rb +1 -1
  375. data/spec/unit/provider/service/src_spec.rb +3 -5
  376. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  377. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  378. data/spec/unit/provider/service/windows_spec.rb +50 -14
  379. data/spec/unit/provider/user/aix_spec.rb +5 -0
  380. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  381. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  382. data/spec/unit/provider/user/pw_spec.rb +2 -0
  383. data/spec/unit/provider/user/useradd_spec.rb +23 -16
  384. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  385. data/spec/unit/provider_spec.rb +8 -10
  386. data/spec/unit/puppet_pal_2pec.rb +40 -0
  387. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  388. data/spec/unit/reports/store_spec.rb +17 -13
  389. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  390. data/spec/unit/resource/type_spec.rb +1 -1
  391. data/spec/unit/resource_spec.rb +14 -13
  392. data/spec/unit/rest/route_spec.rb +4 -4
  393. data/spec/unit/settings_spec.rb +576 -239
  394. data/spec/unit/ssl/base_spec.rb +0 -1
  395. data/spec/unit/ssl/host_spec.rb +0 -5
  396. data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
  397. data/spec/unit/test/test_helper_spec.rb +17 -0
  398. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  399. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  400. data/spec/unit/transaction/persistence_spec.rb +15 -0
  401. data/spec/unit/transaction/report_spec.rb +3 -1
  402. data/spec/unit/transaction_spec.rb +13 -4
  403. data/spec/unit/type/file/content_spec.rb +0 -1
  404. data/spec/unit/type/file/selinux_spec.rb +0 -2
  405. data/spec/unit/type/file/source_spec.rb +4 -4
  406. data/spec/unit/type/file_spec.rb +122 -102
  407. data/spec/unit/type/filebucket_spec.rb +1 -1
  408. data/spec/unit/type/group_spec.rb +13 -6
  409. data/spec/unit/type/resources_spec.rb +7 -7
  410. data/spec/unit/type/service_spec.rb +210 -1
  411. data/spec/unit/type/tidy_spec.rb +0 -1
  412. data/spec/unit/type/user_spec.rb +31 -2
  413. data/spec/unit/type_spec.rb +52 -2
  414. data/spec/unit/util/at_fork_spec.rb +2 -2
  415. data/spec/unit/util/autoload_spec.rb +5 -1
  416. data/spec/unit/util/backups_spec.rb +1 -2
  417. data/spec/unit/util/character_encoding_spec.rb +4 -4
  418. data/spec/unit/util/checksums_spec.rb +16 -0
  419. data/spec/unit/util/command_line_spec.rb +11 -6
  420. data/spec/unit/util/execution_spec.rb +15 -11
  421. data/spec/unit/util/inifile_spec.rb +6 -14
  422. data/spec/unit/util/log_spec.rb +8 -7
  423. data/spec/unit/util/logging_spec.rb +3 -3
  424. data/spec/unit/util/posix_spec.rb +363 -15
  425. data/spec/unit/util/rubygems_spec.rb +2 -2
  426. data/spec/unit/util/run_mode_spec.rb +6 -6
  427. data/spec/unit/util/selinux_spec.rb +76 -52
  428. data/spec/unit/util/storage_spec.rb +3 -1
  429. data/spec/unit/util/suidmanager_spec.rb +44 -41
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util_spec.rb +16 -9
  433. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  434. metadata +52 -53
  435. data/spec/integration/faces/config_spec.rb +0 -91
  436. data/spec/integration/faces/documentation_spec.rb +0 -57
  437. data/spec/integration/file_bucket/file_spec.rb +0 -50
  438. data/spec/integration/file_serving/content_spec.rb +0 -7
  439. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  440. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  441. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  442. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  443. data/spec/integration/module_tool/forge_spec.rb +0 -51
  444. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  445. data/spec/integration/provider/service/init_spec.rb +0 -48
  446. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  447. data/spec/integration/provider/service/windows_spec.rb +0 -50
  448. data/spec/integration/reference/providers_spec.rb +0 -21
  449. data/spec/integration/reports_spec.rb +0 -13
  450. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  451. data/spec/integration/ssl/host_spec.rb +0 -72
  452. data/spec/integration/ssl/key_spec.rb +0 -99
  453. data/spec/integration/test/test_helper_spec.rb +0 -31
  454. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  455. data/spec/unit/face/catalog_spec.rb +0 -6
  456. data/spec/unit/face/man_spec.rb +0 -25
  457. data/spec/unit/face/module_spec.rb +0 -3
  458. data/spec/unit/man_spec.rb +0 -31
@@ -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,61 +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')
160
+ provider.class.resource_type = Puppet::Type.type(:group)
161
+ expect(provider.class.section).to eq('gr')
149
162
  end
150
163
  end
151
164
 
@@ -213,7 +226,7 @@ describe Puppet::Provider::NameService do
213
226
  # encoding
214
227
  allow(Etc).to receive(:getpwent).and_return(*utf_8_mixed_users)
215
228
  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::UTF_8) do
216
- described_class.instances
229
+ provider.class.instances
217
230
  end
218
231
  expect(result.map(&:name)).to eq(
219
232
  [
@@ -228,7 +241,7 @@ describe Puppet::Provider::NameService do
228
241
  it "should have object names in their original encoding/bytes if they would not be valid UTF-8" do
229
242
  allow(Etc).to receive(:getpwent).and_return(*latin_1_mixed_users)
230
243
  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::ISO_8859_1) do
231
- described_class.instances
244
+ provider.class.instances
232
245
  end
233
246
  expect(result.map(&:name)).to eq(
234
247
  [
@@ -243,40 +256,40 @@ describe Puppet::Provider::NameService do
243
256
  it "should pass the Puppet::Etc :canonical_name Struct member to the constructor" do
244
257
  users = [ Struct::Passwd.new(invalid_utf_8_jose, invalid_utf_8_jose, 1002, 2000), nil ]
245
258
  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
259
+ expect(provider.class).to receive(:new).with(:name => escaped_utf_8_jose, :canonical_name => invalid_utf_8_jose, :ensure => :present)
260
+ provider.class.instances
248
261
  end
249
262
  end
250
263
 
251
264
  describe "validate" do
252
265
  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
266
+ expect { provider.class.validate(:foo, 300) }.to_not raise_error
267
+ expect { provider.class.validate('foo', 300) }.to_not raise_error
255
268
  end
256
269
 
257
270
  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
271
+ provider.class.verify(:bar, 'Must be 100') { |val| val == 100 }
272
+ expect { provider.class.validate(:foo, 300) }.to_not raise_error
273
+ expect { provider.class.validate('foo', 300) }.to_not raise_error
261
274
  end
262
275
 
263
276
  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
277
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
278
+ expect { provider.class.validate(:foo, 100) }.to_not raise_error
279
+ expect { provider.class.validate('foo', 100) }.to_not raise_error
267
280
  end
268
281
 
269
282
  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')
283
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
284
+ expect { provider.class.validate(:foo, 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
285
+ expect { provider.class.validate('foo', 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
273
286
  end
274
287
  end
275
288
 
276
289
  describe "getinfo" do
277
290
  before :each do
278
291
  # with section=foo we'll call Etc.getfoonam instead of getpwnam or getgrnam
279
- allow(described_class).to receive(:section).and_return('foo')
292
+ allow(provider.class).to receive(:section).and_return('foo')
280
293
  resource # initialize the resource so our provider has a @resource instance variable
281
294
  end
282
295
 
@@ -296,13 +309,13 @@ describe Puppet::Provider::NameService do
296
309
  # overriding to UTF-8, in @canonical_name for querying that state on disk
297
310
  # again if needed
298
311
  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)
312
+ provider_instance = provider.class.new(:name => 'foo', :canonical_name => 'original_foo', :ensure => :present)
300
313
  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'original_foo')
301
314
  provider_instance.getinfo(true)
302
315
  end
303
316
 
304
317
  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)
318
+ provider_instance = provider.class.new(:name => 'foo', :ensure => :present)
306
319
  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'foo')
307
320
  provider_instance.getinfo(true)
308
321
  end
@@ -310,16 +323,6 @@ describe Puppet::Provider::NameService do
310
323
 
311
324
  describe "info2hash" do
312
325
  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
326
  expect(provider.info2hash(fakeetcobject)).to eq({ :foo => 'fooval', :bar => 'barval' })
324
327
  end
325
328
  end
@@ -330,7 +333,7 @@ describe Puppet::Provider::NameService do
330
333
  end
331
334
 
332
335
  it "should return the munged value otherwise" do
333
- described_class.options(:foo, :munge => proc { |x| x*2 })
336
+ provider.class.options(:foo, :munge => proc { |x| x*2 })
334
337
  expect(provider.munge(:foo, 100)).to eq(200)
335
338
  end
336
339
  end
@@ -341,7 +344,7 @@ describe Puppet::Provider::NameService do
341
344
  end
342
345
 
343
346
  it "should return the unmunged value otherwise" do
344
- described_class.options(:foo, :unmunge => proc { |x| x/2 })
347
+ provider.class.options(:foo, :unmunge => proc { |x| x/2 })
345
348
  expect(provider.unmunge(:foo, 200)).to eq(100)
346
349
  end
347
350
  end
@@ -359,15 +362,13 @@ describe Puppet::Provider::NameService do
359
362
  end
360
363
 
361
364
  describe "get" do
362
- before(:each) {described_class.resource_type = faketype }
363
-
364
365
  it "should return the correct getinfo value" do
365
366
  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 'fooval', :bar => 'barval')
366
367
  expect(provider.get(:bar)).to eq('barval')
367
368
  end
368
369
 
369
370
  it "should unmunge the value first" do
370
- described_class.options(:bar, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
371
+ provider.class.options(:bar, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
371
372
  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 200, :bar => 500)
372
373
  expect(provider.get(:bar)).to eq(250)
373
374
  end
@@ -382,7 +383,7 @@ describe Puppet::Provider::NameService do
382
383
  describe "set" do
383
384
  before :each do
384
385
  resource # initialize resource so our provider has a @resource object
385
- described_class.verify(:foo, 'Must be 100') { |val| val == 100 }
386
+ provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
386
387
  end
387
388
 
388
389
  it "should raise an error on invalid values" do
@@ -396,7 +397,7 @@ describe Puppet::Provider::NameService do
396
397
  end
397
398
 
398
399
  it "should munge the value first" do
399
- described_class.options(:foo, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
400
+ provider.class.options(:foo, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
400
401
  expect(provider).to receive(:modifycmd).with(:foo, 200).and_return(['/bin/modify', '-f', '200' ])
401
402
  expect(provider).to receive(:execute).with(['/bin/modify', '-f', '200'], hash_including(custom_environment: {}))
402
403
  provider.set(:foo, 100)
@@ -11,9 +11,7 @@ describe Puppet::Type.type(:package).provider(:apt) do
11
11
  end
12
12
 
13
13
  let(:provider) do
14
- provider = subject()
15
- provider.resource = resource
16
- provider
14
+ resource.provider
17
15
  end
18
16
 
19
17
  it "should be the default provider on :osfamily => Debian" do
@@ -86,6 +84,81 @@ Version table:
86
84
  provider.run_preseed
87
85
  end
88
86
 
87
+ describe ".instances" do
88
+ before do
89
+ allow(Puppet::Type::Package::ProviderDpkg).to receive(:instances).and_return([provider])
90
+ end
91
+
92
+ context "when package is manual marked" do
93
+ before do
94
+ allow(described_class).to receive(:aptmark).with('showmanual').and_return("#{resource.name}\n")
95
+ end
96
+
97
+ it 'sets mark to manual' do
98
+ expect(described_class.instances.map(&:mark)).to eq([:manual])
99
+ end
100
+ end
101
+
102
+ context 'when package is not manual marked ' do
103
+ before do
104
+ allow(described_class).to receive(:aptmark).with('showmanual').and_return('')
105
+ end
106
+
107
+ it 'does not set mark to manual' do
108
+ expect(described_class.instances.map(&:mark)).to eq([nil])
109
+ end
110
+ end
111
+ end
112
+
113
+ describe 'query' do
114
+ before do
115
+ allow(provider).to receive(:dpkgquery).and_return("name: #{resource.name}" )
116
+ end
117
+
118
+ context "when package is manual marked" do
119
+ before do
120
+ allow(described_class).to receive(:aptmark).with('showmanual').and_return("#{resource.name}\n")
121
+ end
122
+
123
+ it 'sets mark to manual' do
124
+ result = provider.query
125
+ expect(result[:mark]).to eql(:manual)
126
+ end
127
+ end
128
+
129
+ context 'when package is not manual marked ' do
130
+ before do
131
+ allow(described_class).to receive(:aptmark).with('showmanual').and_return('')
132
+ end
133
+
134
+ it 'does not set mark to manual' do
135
+ result = provider.query
136
+ expect(result[:mark]).to be_nil
137
+ end
138
+ end
139
+ end
140
+
141
+ describe 'flush' do
142
+
143
+ context "when package is manual marked" do
144
+ before do
145
+ provider.mark = :manual
146
+ end
147
+
148
+ it 'does not call aptmark' do
149
+ expect(provider).not_to receive(:aptmark)
150
+ provider.flush
151
+ end
152
+ end
153
+
154
+ context 'when package is not manual marked ' do
155
+ it 'calls aptmark' do
156
+ expect(described_class).to receive(:aptmark).with('manual', resource.name)
157
+ provider.flush
158
+ end
159
+ end
160
+ end
161
+
89
162
  describe "when installing" do
90
163
  it "should preseed if a responsefile is provided" do
91
164
  resource[:responsefile] = "/my/file"
@@ -13,6 +13,7 @@ describe Puppet::Type.type(:package).provider(:aptitude) do
13
13
 
14
14
  before do
15
15
  allow(Puppet::Util).to receive(:which).with('/usr/bin/dpkg-query').and_return(dpkgquery_path)
16
+ allow(described_class).to receive(:aptmark).with('showmanual').and_return("")
16
17
  end
17
18
 
18
19
  { :absent => "deinstall ok config-files faff 1.2.3-1\n",
@@ -1,17 +1,18 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/provider/package'
3
3
 
4
+ Puppet::Type.type(:package).provide(:test_base_provider, parent: Puppet::Provider::Package) do
5
+ def query; end
6
+ end
7
+
4
8
  describe Puppet::Provider::Package do
9
+ let(:provider) { Puppet::Type.type(:package).provider(:test_base_provider).new }
10
+
5
11
  it 'returns absent for uninstalled packages when not purgeable' do
6
- provider = Puppet::Provider::Package.new
7
- expect(provider).to receive(:query).and_return(nil)
8
- expect(provider.class).to receive(:feature?).with(:purgeable).and_return(false)
9
12
  expect(provider.properties[:ensure]).to eq(:absent)
10
13
  end
11
14
 
12
15
  it 'returns purged for uninstalled packages when purgeable' do
13
- provider = Puppet::Provider::Package.new
14
- expect(provider).to receive(:query).and_return(nil)
15
16
  expect(provider.class).to receive(:feature?).with(:purgeable).and_return(true)
16
17
  expect(provider.properties[:ensure]).to eq(:purged)
17
18
  end
@@ -32,7 +32,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
32
32
  expect(Puppet::Util::Execution).to receive(:execpipe).with(execpipe_args).and_yield(bash_installed_io)
33
33
 
34
34
  installed = double('bash')
35
- expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg).and_return(installed)
35
+ expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg).and_return(installed)
36
36
 
37
37
  expect(described_class.instances).to eq([installed])
38
38
  end
@@ -41,9 +41,9 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
41
41
  expect(Puppet::Util::Execution).to receive(:execpipe).with(execpipe_args).and_yield(all_installed_io)
42
42
 
43
43
  bash = double('bash')
44
- expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg).and_return(bash)
44
+ expect(described_class).to receive(:new).with(:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg).and_return(bash)
45
45
  vim = double('vim')
46
- expect(described_class).to receive(:new).with(:ensure => "2:7.3.547-6ubuntu5", :error => "ok", :desired => "install", :name => "vim", :status => "installed", :provider => :dpkg).and_return(vim)
46
+ expect(described_class).to receive(:new).with(:ensure => "2:7.3.547-6ubuntu5", :error => "ok", :desired => "install", :name => "vim", :mark => :none, :status => "installed", :provider => :dpkg).and_return(vim)
47
47
 
48
48
  expect(described_class.instances).to eq([bash, vim])
49
49
  end
@@ -107,7 +107,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
107
107
  it "returns a hash of the found package status for an installed package" do
108
108
  dpkg_query_execution_with_multiple_args_returns(query_output, args_with_provides,virtual_packages_query_args)
109
109
  dpkg_query_execution_with_multiple_args_returns(dpkg_query_result, args, query_args)
110
- expect(provider.query).to eq(:ensure => "2.7.13", :error => "ok", :desired => "install", :name => "python", :status => "installed", :provider => :dpkg)
110
+ expect(provider.query).to eq(:ensure => "2.7.13", :error => "ok", :desired => "install", :name => "python", :mark => :none, :status => "installed", :provider => :dpkg)
111
111
  end
112
112
 
113
113
  it "considers the package absent if the dpkg-query result cannot be interpreted" do
@@ -160,6 +160,20 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
160
160
  expect(provider.query[:mark]).to eq(:hold)
161
161
  end
162
162
 
163
+ it "considers the package held if its state is 'hold'" do
164
+ dpkg_query_execution_with_multiple_args_returns(query_output.gsub("install","hold"),args_with_provides,virtual_packages_query_args)
165
+ dpkg_query_execution_with_multiple_args_returns(dpkg_query_result.gsub("install","hold"), args, query_args)
166
+ expect(provider.query[:ensure]).to eq("2.7.13")
167
+ expect(provider.query[:mark]).to eq(:hold)
168
+ end
169
+
170
+ it "considers mark status to be none if package is not held" do
171
+ dpkg_query_execution_with_multiple_args_returns(query_output.gsub("install","ok"),args_with_provides,virtual_packages_query_args)
172
+ dpkg_query_execution_with_multiple_args_returns(dpkg_query_result.gsub("install","ok"), args, query_args)
173
+ expect(provider.query[:ensure]).to eq("2.7.13")
174
+ expect(provider.query[:mark]).to eq(:none)
175
+ end
176
+
163
177
  context "regex check for query search" do
164
178
  let(:resource_name) { 'python-email' }
165
179
  let(:resource) { instance_double('Puppet::Type::Package') }
@@ -168,10 +182,10 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
168
182
  allow(resource).to receive(:[]=)
169
183
  end
170
184
 
171
- it "checks if virtual package regex for query is correctand phisical package is installed" do
185
+ it "checks if virtual package regex for query is correct and physical package is installed" do
172
186
  dpkg_query_execution_with_multiple_args_returns(query_output,args_with_provides,virtual_packages_query_args)
173
187
  dpkg_query_execution_with_multiple_args_returns(dpkg_query_result, args, query_args)
174
- expect(provider.query).to match({:desired=>"install", :ensure=>"2.7.13", :error=>"ok", :name=>"python", :provider=>:dpkg, :status=>"installed"})
188
+ expect(provider.query).to match({:desired => "install", :ensure => "2.7.13", :error => "ok", :name => "python", :mark => :none, :provider => :dpkg, :status => "installed"})
175
189
  end
176
190
 
177
191
  context "regex check with no partial matching" do
@@ -208,7 +222,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
208
222
  it "returns a hash of the found package status for an installed package" do
209
223
  dpkg_query_execution_returns(bash_installed_output)
210
224
 
211
- expect(provider.query).to eq({:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :status => "installed", :provider => :dpkg})
225
+ expect(provider.query).to eq({:ensure => "4.2-5ubuntu3", :error => "ok", :desired => "install", :name => "bash", :mark => :none, :status => "installed", :provider => :dpkg})
212
226
  end
213
227
 
214
228
  it "considers the package absent if the dpkg-query result cannot be interpreted" do
@@ -271,6 +285,7 @@ describe Puppet::Type.type(:package).provider(:dpkg), unless: Puppet::Util::Plat
271
285
  :error => 'ok',
272
286
  :status => 'status',
273
287
  :name => resource_name,
288
+ :mark => :none,
274
289
  :ensure => 'ensure',
275
290
  :provider => :dpkg,
276
291
  }