puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin

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

Potentially problematic release.


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

Files changed (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +89 -34
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -1,9 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
- module Puppet::Util::Plist
5
- end
6
-
7
4
  describe Puppet::Type.type(:package).provider(:pkgdmg) do
8
5
  let(:resource) { Puppet::Type.type(:package).new(:name => 'foo', :provider => :pkgdmg) }
9
6
  let(:provider) { described_class.new(resource) }
@@ -7,14 +7,30 @@ provider = Puppet::Type.type(:package).provider(:portage)
7
7
  describe provider do
8
8
  before do
9
9
  packagename="sl"
10
- @resource = stub('resource', :[] => packagename,:should => true)
10
+ @resource = stub('resource', :should => true)
11
+ @resource.stubs(:[]).with(:name).returns(packagename)
12
+ @resource.stubs(:[]).with(:category).returns(nil)
13
+
14
+ unslotted_packagename = "dev-lang/ruby"
15
+ @unslotted_resource = stub('resource', :should => true)
16
+ @unslotted_resource.stubs(:[]).with(:name).returns(unslotted_packagename)
17
+ @unslotted_resource.stubs(:[]).with(:category).returns(nil)
18
+
19
+ slotted_packagename = "dev-lang/ruby:1.9"
20
+ @slotted_resource = stub('resource', :should => true)
21
+ @slotted_resource.stubs(:[]).with(:name).returns(slotted_packagename)
22
+ @slotted_resource.stubs(:[]).with(:category).returns(nil)
23
+
11
24
  @provider = provider.new(@resource)
12
-
25
+ @unslotted_provider = provider.new(@unslotted_resource)
26
+ @slotted_provider = provider.new(@slotted_resource)
27
+
13
28
  portage = stub(:executable => "foo",:execute => true)
14
29
  Puppet::Provider::CommandDefiner.stubs(:define).returns(portage)
15
30
 
16
31
  @nomatch_result = ""
17
- @match_result = "app-misc sl [] [] http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html http://www.izumix.org.uk/sl/ sophisticated graphical program which corrects your miss typing\n"
32
+ @match_result = "app-misc sl [] [] [] [] http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html http://www.izumix.org.uk/sl/ sophisticated graphical program which corrects your miss typing\n"
33
+ @slot_match_result = "dev-lang ruby [2.0.0] [2.1.0] [1.8.7:1.8,1.9.2:1.9,2.0.0:2.0] [1.9.3:1.9,2.0.1:2.0,2.1.0:2.1] http://www.ruby-lang.org/ An object-oriented scripting language\n"
18
34
  end
19
35
 
20
36
  it "is versionable" do
@@ -27,20 +43,20 @@ describe provider do
27
43
 
28
44
  it "uses :emerge to install packages" do
29
45
  @provider.expects(:emerge)
30
-
46
+
31
47
  @provider.install
32
48
  end
33
49
 
34
50
  it "uses query to find the latest package" do
35
51
  @provider.expects(:query).returns({:versions_available => "myversion"})
36
-
52
+
37
53
  @provider.latest
38
54
  end
39
55
 
40
56
  it "uses eix to search the lastest version of a package" do
41
57
  @provider.stubs(:update_eix)
42
58
  @provider.expects(:eix).returns(StringIO.new(@match_result))
43
-
59
+
44
60
  @provider.query
45
61
  end
46
62
 
@@ -56,14 +72,54 @@ describe provider do
56
72
  @provider.stubs(:update_eix)
57
73
  @provider.expects(:eix).returns(StringIO.new(@match_result))
58
74
  @provider.class.expects(:eix_search_arguments).returns([])
59
-
75
+
60
76
  @provider.query
61
77
  end
62
78
 
63
79
  it "can handle search output with empty square brackets" do
64
80
  @provider.stubs(:update_eix)
65
81
  @provider.expects(:eix).returns(StringIO.new(@match_result))
66
-
82
+
67
83
  expect(@provider.query[:name]).to eq("sl")
68
84
  end
85
+
86
+ it "can provide the package name without slot" do
87
+ expect(@slotted_provider.package_name_without_slot).to eq("dev-lang/ruby")
88
+ end
89
+
90
+ it "can extract the slot from the package name" do
91
+ expect(@slotted_provider.package_slot).to eq("1.9")
92
+ end
93
+
94
+ it "returns nil for as the slot when no slot is specified" do
95
+ expect(@provider.package_slot).to be_nil
96
+ end
97
+
98
+ it "provides correct package atoms for unslotted packages" do
99
+ expect(@provider.package_atom_with_version("1.0")).to eq("=sl-1.0")
100
+ end
101
+
102
+ it "provides correct package atoms for slotted packages" do
103
+ expect(@slotted_provider.package_atom_with_version("1.9.3")).to eq("=dev-lang/ruby-1.9.3:1.9")
104
+ end
105
+
106
+ it "can handle search output with slots for unslotted packages" do
107
+ @unslotted_provider.stubs(:update_eix)
108
+ @unslotted_provider.expects(:eix).returns(StringIO.new(@slot_match_result))
109
+
110
+ result = @unslotted_provider.query
111
+ expect(result[:name]).to eq("ruby")
112
+ expect(result[:ensure]).to eq("2.0.0")
113
+ expect(result[:version_available]).to eq("2.1.0")
114
+ end
115
+
116
+ it "can handle search output with slots" do
117
+ @slotted_provider.stubs(:update_eix)
118
+ @slotted_provider.expects(:eix).returns(StringIO.new(@slot_match_result))
119
+
120
+ result = @slotted_provider.query
121
+ expect(result[:name]).to eq("ruby")
122
+ expect(result[:ensure]).to eq("1.9.2")
123
+ expect(result[:version_available]).to eq("1.9.3")
124
+ end
69
125
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ # Note that much of the functionality of the tdnf provider is already tested with yum provider tests,
4
+ # as yum is the parent provider, via dnf
5
+
6
+ provider_class = Puppet::Type.type(:package).provider(:tdnf)
7
+
8
+ context 'default' do
9
+ it 'should be the default provider on PhotonOS' do
10
+ Facter.stubs(:value).with(:osfamily).returns(:redhat)
11
+ Facter.stubs(:value).with(:operatingsystem).returns("PhotonOS")
12
+ expect(provider_class).to be_default
13
+ end
14
+ end
15
+
16
+ describe provider_class do
17
+ it_behaves_like 'RHEL package provider', provider_class, 'tdnf'
18
+ end
@@ -61,7 +61,10 @@ describe Puppet::Provider::Package::Windows::Package do
61
61
 
62
62
  expect {
63
63
  subject.with_key{ |key, values| }
64
- }.to raise_error(Puppet::Util::Windows::Error, /Access is denied/)
64
+ }.to raise_error do |error|
65
+ expect(error).to be_a(Puppet::Util::Windows::Error)
66
+ expect(error.code).to eq(5) # ERROR_ACCESS_DENIED
67
+ end
65
68
  end
66
69
  end
67
70
 
@@ -131,7 +131,10 @@ describe Puppet::Type.type(:package).provider(:windows) do
131
131
 
132
132
  expect do
133
133
  provider.install
134
- end.to raise_error(Puppet::Util::Windows::Error, /Access is denied/)
134
+ end.to raise_error do |error|
135
+ expect(error).to be_a(Puppet::Util::Windows::Error)
136
+ expect(error.code).to eq(5) # ERROR_ACCESS_DENIED
137
+ end
135
138
  end
136
139
  end
137
140
 
@@ -183,7 +186,10 @@ describe Puppet::Type.type(:package).provider(:windows) do
183
186
 
184
187
  expect do
185
188
  provider.uninstall
186
- end.to raise_error(Puppet::Util::Windows::Error, /Failed to uninstall.*Access is denied/)
189
+ end.to raise_error do |error|
190
+ expect(error).to be_a(Puppet::Util::Windows::Error)
191
+ expect(error.code).to eq(5) # ERROR_ACCESS_DENIED
192
+ end
187
193
  end
188
194
  end
189
195
 
@@ -5,356 +5,18 @@ provider_class = Puppet::Type.type(:package).provider(:yum)
5
5
 
6
6
  describe provider_class do
7
7
  include PuppetSpec::Fixtures
8
-
9
- let(:name) { 'mypackage' }
10
- let(:resource) do
11
- Puppet::Type.type(:package).new(
12
- :name => name,
13
- :ensure => :installed,
14
- :provider => 'yum'
15
- )
16
- end
17
-
18
- let(:provider) do
19
- provider = provider_class.new
20
- provider.resource = resource
21
- provider
22
- end
23
-
24
- let(:arch) { 'x86_64' }
25
- let(:arch_resource) do
26
- Puppet::Type.type(:package).new(
27
- :name => "#{name}.#{arch}",
28
- :ensure => :installed,
29
- :provider => 'yum'
30
- )
31
- end
32
-
33
- let(:arch_provider) do
34
- provider = provider_class.new
35
- provider.resource = arch_resource
36
- provider
37
- end
38
-
39
- before do
40
- provider_class.stubs(:command).with(:cmd).returns('/usr/bin/yum')
41
- provider.stubs(:rpm).returns 'rpm'
42
- provider.stubs(:get).with(:version).returns '1'
43
- provider.stubs(:get).with(:release).returns '1'
44
- provider.stubs(:get).with(:arch).returns 'i386'
45
- end
46
-
47
- describe 'provider features' do
48
- it { is_expected.to be_versionable }
49
- it { is_expected.to be_install_options }
50
- it { is_expected.to be_virtual_packages }
51
- end
52
-
53
- # provider should repond to the following methods
54
- [:install, :latest, :update, :purge, :install_options].each do |method|
55
- it "should have a(n) #{method}" do
56
- expect(provider).to respond_to(method)
57
- end
58
- end
59
-
60
- describe 'when installing' do
61
- before(:each) do
62
- Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
63
- provider.stubs(:which).with("rpm").returns("/bin/rpm")
64
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:combine => true, :custom_environment => {}, :failonfail => true}).returns("4.10.1\n").at_most_once
65
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('6')
66
- end
67
-
68
- it 'should call yum install for :installed' do
69
- resource.stubs(:should).with(:ensure).returns :installed
70
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, 'mypackage'])
71
- provider.install
72
- end
73
-
74
- context 'on el-5' do
75
- before(:each) do
76
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('5')
77
- end
78
-
79
- it 'should catch yum install failures when status code is wrong' do
80
- resource.stubs(:should).with(:ensure).returns :installed
81
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-e', '0', '-y', :install, name]).returns("No package #{name} available.")
82
- expect {
83
- provider.install
84
- }.to raise_error(Puppet::Error, "Could not find package #{name}")
85
- end
86
- end
87
-
88
- it 'should use :install to update' do
89
- provider.expects(:install)
90
- provider.update
91
- end
92
-
93
- it 'should be able to set version' do
94
- version = '1.2'
95
- resource[:ensure] = version
96
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "#{name}-#{version}"])
97
- provider.stubs(:query).returns :ensure => version
98
- provider.install
99
- end
100
-
101
- it 'should handle partial versions specified' do
102
- version = '1.3.4'
103
- resource[:ensure] = version
104
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, 'mypackage-1.3.4'])
105
- provider.stubs(:query).returns :ensure => '1.3.4-1.el6'
106
- provider.install
107
- end
108
-
109
- it 'should be able to downgrade' do
110
- current_version = '1.2'
111
- version = '1.0'
112
- resource[:ensure] = '1.0'
113
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :downgrade, "#{name}-#{version}"])
114
- provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
115
- provider.install
116
- end
117
-
118
- it 'should accept install options' do
119
- resource[:ensure] = :installed
120
- resource[:install_options] = ['-t', {'-x' => 'expackage'}]
121
-
122
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', ['-t', '-x=expackage'], :install, name])
123
- provider.install
124
- end
125
-
126
- it 'allow virtual packages' do
127
- resource[:ensure] = :installed
128
- resource[:allow_virtual] = true
129
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :list, name]).never
130
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, name])
131
- provider.install
132
- end
133
-
134
- it 'moves architecture to end of version' do
135
- version = '1.2.3'
136
- arch_resource[:ensure] = version
137
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "#{name}-#{version}.#{arch}"])
138
- arch_provider.stubs(:query).returns :ensure => version
139
- arch_provider.install
140
- end
141
- end
142
-
143
- describe 'when uninstalling' do
144
- it 'should use erase to purge' do
145
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/yum', '-y', :erase, name])
146
- provider.purge
147
- end
148
- end
149
-
150
- it 'should be versionable' do
151
- expect(provider).to be_versionable
152
- end
153
-
154
- describe 'determining the latest version available for a package' do
155
-
156
- it "passes the value of enablerepo install_options when querying" do
157
- resource[:install_options] = [
158
- {'--enablerepo' => 'contrib'},
159
- {'--enablerepo' => 'centosplus'},
160
- ]
161
- provider.stubs(:properties).returns({:ensure => '3.4.5'})
162
-
163
- described_class.expects(:latest_package_version).with(name, ['contrib', 'centosplus'], [], [])
164
- provider.latest
165
- end
166
-
167
- it "passes the value of disablerepo install_options when querying" do
168
- resource[:install_options] = [
169
- {'--disablerepo' => 'updates'},
170
- {'--disablerepo' => 'centosplus'},
171
- ]
172
- provider.stubs(:properties).returns({:ensure => '3.4.5'})
173
-
174
- described_class.expects(:latest_package_version).with(name, [], ['updates', 'centosplus'], [])
175
- provider.latest
176
- end
177
-
178
- it "passes the value of disableexcludes install_options when querying" do
179
- resource[:install_options] = [
180
- {'--disableexcludes' => 'main'},
181
- {'--disableexcludes' => 'centosplus'},
182
- ]
183
- provider.stubs(:properties).returns({:ensure => '3.4.5'})
184
-
185
- described_class.expects(:latest_package_version).with(name, [], [], ['main', 'centosplus'])
186
- provider.latest
187
- end
188
-
189
- describe 'and a newer version is not available' do
190
- before :each do
191
- described_class.stubs(:latest_package_version).with(name, [], [], []).returns nil
192
- end
193
-
194
- it 'raises an error the package is not installed' do
195
- provider.stubs(:properties).returns({:ensure => :absent})
196
- expect {
197
- provider.latest
198
- }.to raise_error(Puppet::DevError, 'Tried to get latest on a missing package')
199
- end
200
-
201
- it 'returns version of the currently installed package' do
202
- provider.stubs(:properties).returns({:ensure => '3.4.5'})
203
- expect(provider.latest).to eq('3.4.5')
204
- end
205
- end
206
-
207
- describe 'and a newer version is available' do
208
- let(:latest_version) do
209
- {
210
- :name => name,
211
- :epoch => '1',
212
- :version => '2.3.4',
213
- :release => '5',
214
- :arch => 'i686',
215
- }
216
- end
217
-
218
- it 'includes the epoch in the version string' do
219
- described_class.stubs(:latest_package_version).with(name, [], [], []).returns(latest_version)
220
- expect(provider.latest).to eq('1:2.3.4-5')
221
- end
222
- end
223
- end
224
-
225
- describe "lazy loading of latest package versions" do
226
- before { described_class.clear }
227
- after { described_class.clear }
228
-
229
- let(:mypackage_version) do
230
- {
231
- :name => name,
232
- :epoch => '1',
233
- :version => '2.3.4',
234
- :release => '5',
235
- :arch => 'i686',
236
- }
237
- end
238
-
239
- let(:mypackage_newerversion) do
240
- {
241
- :name => name,
242
- :epoch => '1',
243
- :version => '4.5.6',
244
- :release => '7',
245
- :arch => 'i686',
246
- }
247
- end
248
-
249
- let(:latest_versions) { {name => [mypackage_version]} }
250
- let(:enabled_versions) { {name => [mypackage_newerversion]} }
251
-
252
- it "returns the version hash if the package was found" do
253
- described_class.expects(:check_updates).with([], [], []).once.returns(latest_versions)
254
- version = described_class.latest_package_version(name, [], [], [])
255
- expect(version).to eq(mypackage_version)
256
- end
257
-
258
- it "is nil if the package was not found in the query" do
259
- described_class.expects(:check_updates).with([], [], []).once.returns(latest_versions)
260
- version = described_class.latest_package_version('nopackage', [], [], [])
261
- expect(version).to be_nil
262
- end
263
-
264
- it "caches the package list and reuses that for subsequent queries" do
265
- described_class.expects(:check_updates).with([], [], []).once.returns(latest_versions)
266
-
267
- 2.times {
268
- version = described_class.latest_package_version(name, [], [], [])
269
- expect(version).to eq mypackage_version
270
- }
271
- end
272
-
273
- it "caches separate lists for each combination of 'enablerepo' and 'disablerepo' and 'disableexcludes'" do
274
- described_class.expects(:check_updates).with([], [], []).once.returns(latest_versions)
275
- described_class.expects(:check_updates).with(['enabled'], ['disabled'], ['disableexcludes']).once.returns(enabled_versions)
276
-
277
- 2.times {
278
- version = described_class.latest_package_version(name, [], [], [])
279
- expect(version).to eq mypackage_version
280
- }
281
-
282
- 2.times {
283
- version = described_class.latest_package_version(name, ['enabled'], ['disabled'], ['disableexcludes'])
284
- expect(version).to eq(mypackage_newerversion)
285
- }
286
- end
287
- end
288
-
289
- describe "executing yum check-update" do
290
- it "passes repos to enable to 'yum check-update'" do
291
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
292
- expect(args).to eq %w[/usr/bin/yum check-update --enablerepo=updates --enablerepo=centosplus]
293
- end.returns(stub(:exitstatus => 0))
294
- described_class.check_updates(%w[updates centosplus], [], [])
295
- end
296
-
297
- it "passes repos to disable to 'yum check-update'" do
298
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
299
- expect(args).to eq %w[/usr/bin/yum check-update --disablerepo=updates --disablerepo=centosplus]
300
- end.returns(stub(:exitstatus => 0))
301
- described_class.check_updates([],%w[updates centosplus], [])
302
- end
303
-
304
- it "passes a combination of repos to enable and disable to 'yum check-update'" do
305
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
306
- expect(args).to eq %w[/usr/bin/yum check-update --enablerepo=os --enablerepo=contrib --disablerepo=updates --disablerepo=centosplus]
307
- end.returns(stub(:exitstatus => 0))
308
- described_class.check_updates(%w[os contrib], %w[updates centosplus], [])
309
- end
310
-
311
- it "passes disableexcludes to 'yum check-update'" do
312
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
313
- expect(args).to eq %w[/usr/bin/yum check-update --disableexcludes=main --disableexcludes=centosplus]
314
- end.returns(stub(:exitstatus => 0))
315
- described_class.check_updates([], [], %w[main centosplus])
316
- end
317
-
318
- it "passes all options to 'yum check-update'" do
319
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
320
- expect(args).to eq %w[/usr/bin/yum check-update --enablerepo=a --enablerepo=b --disablerepo=c
321
- --disablerepo=d --disableexcludes=e --disableexcludes=f]
322
- end.returns(stub(:exitstatus => 0))
323
- described_class.check_updates(%w[a b], %w[c d], %w[e f])
324
- end
325
-
326
- it "returns an empty hash if 'yum check-update' returned 0" do
327
- Puppet::Util::Execution.expects(:execute).returns(stub :exitstatus => 0)
328
- expect(described_class.check_updates([], [], [])).to be_empty
329
- end
330
-
331
- it "returns a populated hash if 'yum check-update returned 100'" do
332
- output = stub(:exitstatus => 100)
333
- Puppet::Util::Execution.expects(:execute).returns(output)
334
- described_class.expects(:parse_updates).with(output).returns({:has => :updates})
335
- expect(described_class.check_updates([], [], [])).to eq({:has => :updates})
336
- end
337
-
338
- it "returns an empty hash if 'yum check-update' returned an exit code that was not 0 or 100" do
339
- Puppet::Util::Execution.expects(:execute).returns(stub(:exitstatus => 1))
340
- described_class.expects(:warning).with('Could not check for updates, \'/usr/bin/yum check-update\' exited with 1')
341
- expect(described_class.check_updates([], [], [])).to eq({})
342
- end
343
- end
8
+ it_behaves_like 'RHEL package provider', provider_class, 'yum'
344
9
 
345
10
  describe "parsing the output of check-update" do
346
-
347
11
  describe "with no multiline entries" do
348
- let(:check_update) { File.read(my_fixture('yum-check-update-simple.txt')) }
12
+ let(:check_update) { File.read(my_fixture("yum-check-update-simple.txt")) }
349
13
  let(:output) { described_class.parse_updates(check_update) }
350
-
351
14
  it 'creates an entry for each package keyed on the package name' do
352
15
  expect(output['curl']).to eq([{:name => 'curl', :epoch => '0', :version => '7.32.0', :release => '10.fc20', :arch => 'i686'}, {:name => 'curl', :epoch => '0', :version => '7.32.0', :release => '10.fc20', :arch => 'x86_64'}])
353
16
  expect(output['gawk']).to eq([{:name => 'gawk', :epoch => '0', :version => '4.1.0', :release => '3.fc20', :arch => 'i686'}])
354
17
  expect(output['dhclient']).to eq([{:name => 'dhclient', :epoch => '12', :version => '4.1.1', :release => '38.P1.fc20', :arch => 'i686'}])
355
18
  expect(output['selinux-policy']).to eq([{:name => 'selinux-policy', :epoch => '0', :version => '3.12.1', :release => '163.fc20', :arch => 'noarch'}])
356
19
  end
357
-
358
20
  it 'creates an entry for each package keyed on the package name and package architecture' do
359
21
  expect(output['curl.i686']).to eq([{:name => 'curl', :epoch => '0', :version => '7.32.0', :release => '10.fc20', :arch => 'i686'}])
360
22
  expect(output['curl.x86_64']).to eq([{:name => 'curl', :epoch => '0', :version => '7.32.0', :release => '10.fc20', :arch => 'x86_64'}])
@@ -363,20 +25,16 @@ describe provider_class do
363
25
  expect(output['selinux-policy.noarch']).to eq([{:name => 'selinux-policy', :epoch => '0', :version => '3.12.1', :release => '163.fc20', :arch => 'noarch'}])
364
26
  end
365
27
  end
366
-
367
28
  describe "with multiline entries" do
368
- let(:check_update) { File.read(my_fixture('yum-check-update-multiline.txt')) }
29
+ let(:check_update) { File.read(my_fixture("yum-check-update-multiline.txt")) }
369
30
  let(:output) { described_class.parse_updates(check_update) }
370
-
371
31
  it "parses multi-line values as a single package tuple" do
372
32
  expect(output['libpcap']).to eq([{:name => 'libpcap', :epoch => '14', :version => '1.4.0', :release => '1.20130826git2dbcaa1.el6', :arch => 'x86_64'}])
373
33
  end
374
34
  end
375
-
376
35
  describe "with obsoleted packages" do
377
- let(:check_update) { File.read(my_fixture('yum-check-update-obsoletes.txt')) }
36
+ let(:check_update) { File.read(my_fixture("yum-check-update-obsoletes.txt")) }
378
37
  let(:output) { described_class.parse_updates(check_update) }
379
-
380
38
  it "ignores all entries including and after 'Obsoleting Packages'" do
381
39
  expect(output).not_to include("Obsoleting")
382
40
  expect(output).not_to include("NetworkManager-bluetooth.x86_64")
@@ -384,9 +42,8 @@ describe provider_class do
384
42
  end
385
43
  end
386
44
  describe "with security notifications" do
387
- let(:check_update) { File.read(my_fixture('yum-check-update-security.txt')) }
45
+ let(:check_update) { File.read(my_fixture("yum-check-update-security.txt")) }
388
46
  let(:output) { described_class.parse_updates(check_update) }
389
-
390
47
  it "ignores all entries including and after 'Security'" do
391
48
  expect(output).not_to include("Security")
392
49
  end
@@ -395,9 +52,8 @@ describe provider_class do
395
52
  end
396
53
  end
397
54
  describe "with broken update notices" do
398
- let(:check_update) { File.read(my_fixture('yum-check-update-broken-notices.txt')) }
55
+ let(:check_update) { File.read(my_fixture("yum-check-update-broken-notices.txt")) }
399
56
  let(:output) { described_class.parse_updates(check_update) }
400
-
401
57
  it "ignores all entries including and after 'Update'" do
402
58
  expect(output).not_to include("Update")
403
59
  end
@@ -406,31 +62,4 @@ describe provider_class do
406
62
  end
407
63
  end
408
64
  end
409
-
410
- describe "parsing a line from yum check-update" do
411
- it "splits up the package name and architecture fields" do
412
- checkupdate = %w[curl.i686 7.32.0-10.fc20]
413
-
414
- parsed = described_class.update_to_hash(*checkupdate)
415
- expect(parsed[:name]).to eq 'curl'
416
- expect(parsed[:arch]).to eq 'i686'
417
- end
418
-
419
- it "splits up the epoch, version, and release fields" do
420
- checkupdate = %w[dhclient.i686 12:4.1.1-38.P1.el6.centos]
421
- parsed = described_class.update_to_hash(*checkupdate)
422
- expect(parsed[:epoch]).to eq '12'
423
- expect(parsed[:version]).to eq '4.1.1'
424
- expect(parsed[:release]).to eq '38.P1.el6.centos'
425
- end
426
-
427
- it "sets the epoch to 0 when an epoch is not specified" do
428
- checkupdate = %w[curl.i686 7.32.0-10.fc20]
429
-
430
- parsed = described_class.update_to_hash(*checkupdate)
431
- expect(parsed[:epoch]).to eq '0'
432
- expect(parsed[:version]).to eq '7.32.0'
433
- expect(parsed[:release]).to eq '10.fc20'
434
- end
435
- end
436
65
  end