puppet 4.5.3-x86-mingw32 → 4.6.1-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 (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 +91 -48
  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
@@ -208,6 +208,12 @@ describe 'The type calculator' do
208
208
  end
209
209
  end
210
210
 
211
+ context 'sensitive' do
212
+ it 'translates to PSensitiveType' do
213
+ expect(calculator.infer(PSensitiveType::Sensitive.new("hunter2")).class).to eq(PSensitiveType)
214
+ end
215
+ end
216
+
211
217
  context 'version' do
212
218
  it 'translates to PVersionType' do
213
219
  expect(calculator.infer(Semantic::Version.new(1,0,0)).class).to eq(PSemVerType)
@@ -651,7 +657,7 @@ describe 'The type calculator' do
651
657
  # Add a non-empty variant
652
658
  all_instances << variant_t(PAnyType::DEFAULT, PUnitType::DEFAULT)
653
659
  # Add a type alias that doesn't resolve to 't'
654
- all_instances << type_alias_t('MyInt', 'Integer').resolve(TypeParser.new, nil)
660
+ all_instances << type_alias_t('MyInt', 'Integer').resolve(TypeParser.singleton, nil)
655
661
 
656
662
  all_instances.each { |i| expect(i).not_to be_assignable_to(t) }
657
663
  end
@@ -1347,7 +1353,7 @@ describe 'The type calculator' do
1347
1353
  end
1348
1354
 
1349
1355
  context 'for TypeAlias, such that' do
1350
- let!(:parser) { TypeParser.new }
1356
+ let!(:parser) { TypeParser.singleton }
1351
1357
 
1352
1358
  it 'it is assignable to the type that it is an alias for' do
1353
1359
  t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
@@ -1715,7 +1721,7 @@ describe 'The type calculator' do
1715
1721
  factory = Model::Factory
1716
1722
  params = [factory.PARAM('a')]
1717
1723
  the_block = factory.LAMBDA(params,factory.literal(42))
1718
- the_closure = Evaluator::Closure.new(:fake_evaluator, the_block, :fake_scope)
1724
+ the_closure = Evaluator::Closure::Dynamic.new(:fake_evaluator, the_block, :fake_scope)
1719
1725
  expect(calculator.instance?(all_callables_t, the_closure)).to be_truthy
1720
1726
  expect(calculator.instance?(callable_t(object_t), the_closure)).to be_truthy
1721
1727
  expect(calculator.instance?(callable_t(object_t, object_t), the_closure)).to be_falsey
@@ -1740,7 +1746,7 @@ describe 'The type calculator' do
1740
1746
  end
1741
1747
 
1742
1748
  context 'and t is a TypeAlias' do
1743
- let!(:parser) { TypeParser.new }
1749
+ let!(:parser) { TypeParser.singleton }
1744
1750
 
1745
1751
  it 'should consider x an instance of the aliased simple type' do
1746
1752
  t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
@@ -336,7 +336,7 @@ end
336
336
  end
337
337
 
338
338
  it "should yield \"SemVer['1.x', '3.x']\" for the PSemVerType['1.x', '3.x']" do
339
- expect(s.string(PSemVerType.new('1.x', '3.x'))).to eq("SemVer['1.x', '3.x']")
339
+ expect(s.string(PSemVerType.new(['1.x', '3.x']))).to eq("SemVer['1.x', '3.x']")
340
340
  end
341
341
 
342
342
  it 'should present a valid simple name' do
@@ -138,7 +138,7 @@ describe 'the type mismatch describer' do
138
138
  end
139
139
 
140
140
  context 'when using present tense' do
141
- let(:parser) { TypeParser.new }
141
+ let(:parser) { TypeParser.singleton }
142
142
  let(:subject) { TypeMismatchDescriber.singleton }
143
143
  it 'reports a missing parameter as "has no parameter"' do
144
144
  t = parser.parse('Struct[{a=>String}]')
@@ -166,7 +166,7 @@ describe 'the type mismatch describer' do
166
166
  end
167
167
 
168
168
  context 'when using past tense' do
169
- let(:parser) { TypeParser.new }
169
+ let(:parser) { TypeParser.singleton }
170
170
  let(:subject) { TypeMismatchDescriber.singleton }
171
171
  it 'reports a missing parameter as "did not have a parameter"' do
172
172
  t = parser.parse('Struct[{a=>String}]')
@@ -6,7 +6,7 @@ module Types
6
6
  describe TypeParser do
7
7
  extend RSpec::Matchers::DSL
8
8
 
9
- let(:parser) { TypeParser.new }
9
+ let(:parser) { TypeParser.singleton }
10
10
  let(:types) { TypeFactory }
11
11
  it "rejects a puppet expression" do
12
12
  expect { parser.parse("1 + 1") }.to raise_error(Puppet::ParseError, /The expression <1 \+ 1> is not a valid type specification/)
@@ -542,7 +542,7 @@ describe 'Puppet Type System' do
542
542
  type Integer = String
543
543
  notice 'hello' =~ Integer
544
544
  CODE
545
- expect{ eval_and_collect_notices(code) }.to raise_error(/Attempt to redefine entity 'type\/integer'. Originally set by Puppet-Type-System\/Static-Loader/)
545
+ expect{ eval_and_collect_notices(code) }.to raise_error(/Attempt to redefine entity 'http:\/\/puppet\.com\/2016\.1\/runtime\/type\/integer'. Originally set by Puppet-Type-System\/Static-Loader/)
546
546
  end
547
547
  end
548
548
 
@@ -16,9 +16,26 @@ describe "validating 4x" do
16
16
  acceptor
17
17
  end
18
18
 
19
- it 'should raise error for illegal names' do
19
+ it 'should raise error for illegal class names' do
20
20
  expect(validate(parse('class aaa::_bbb {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
21
21
  expect(validate(parse('class Aaa {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
22
+ expect(validate(parse('class ::aaa {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
23
+ end
24
+
25
+ it 'should raise error for illegal define names' do
26
+ expect(validate(parse('define aaa::_bbb {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
27
+ expect(validate(parse('define Aaa {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
28
+ expect(validate(parse('define ::aaa {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
29
+ end
30
+
31
+ it 'should raise error for illegal function names' do
32
+ expect(validate(parse('function aaa::_bbb() {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
33
+ expect(validate(parse('function Aaa() {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
34
+ expect(validate(parse('function ::aaa() {}'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
35
+ end
36
+
37
+ it 'should raise error for illegal type names' do
38
+ expect(validate(parse('type ::Aaa = Any'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_DEFINITION_NAME)
22
39
  end
23
40
 
24
41
  it 'should raise error for illegal variable names' do
@@ -146,6 +146,11 @@ describe Puppet::Property do
146
146
  property.class.stubs(:value_collection).returns(collection)
147
147
  expect(property.event.invalidate_refreshes).to be_truthy
148
148
  end
149
+
150
+ it "sets the redacted field on the event when the property is sensitive" do
151
+ property.sensitive = true
152
+ expect(property.event.redacted).to eq true
153
+ end
149
154
  end
150
155
 
151
156
  describe "when defining new values" do
@@ -413,6 +418,7 @@ describe Puppet::Property do
413
418
  it "should return true if should is empty with is => #{input.inspect}" do
414
419
  property.should = []
415
420
  expect(property).to be_insync(input)
421
+ expect(property.insync_values?([], input)).to be true
416
422
  end
417
423
  end
418
424
  end
@@ -427,35 +433,52 @@ describe Puppet::Property do
427
433
  it_should_behave_like "#insync?"
428
434
 
429
435
  context "if the should value is an array" do
430
- before :each do property.should = [1, 2] end
436
+ let(:input) { [1,2] }
437
+ before :each do property.should = input end
431
438
 
432
439
  it "should match if is exactly matches" do
433
- expect(property).to be_insync [1, 2]
440
+ val = [1, 2]
441
+ expect(property).to be_insync val
442
+ expect(property.insync_values?(input, val)).to be true
434
443
  end
435
444
 
436
445
  it "should match if it matches, but all stringified" do
437
- expect(property).to be_insync ["1", "2"]
446
+ val = ["1", "2"]
447
+ expect(property).to be_insync val
448
+ expect(property.insync_values?(input, val)).to be true
438
449
  end
439
450
 
440
451
  it "should not match if some-but-not-all values are stringified" do
441
- expect(property).to_not be_insync ["1", 2]
442
- expect(property).to_not be_insync [1, "2"]
452
+ val = ["1", 2]
453
+ expect(property).to_not be_insync val
454
+ expect(property.insync_values?(input, val)).to_not be true
455
+ val = [1, "2"]
456
+ expect(property).to_not be_insync val
457
+ expect(property.insync_values?(input, val)).to_not be true
443
458
  end
444
459
 
445
460
  it "should not match if order is different but content the same" do
446
- expect(property).to_not be_insync [2, 1]
461
+ val = [2, 1]
462
+ expect(property).to_not be_insync val
463
+ expect(property.insync_values?(input, val)).to_not be true
447
464
  end
448
465
 
449
466
  it "should not match if there are more items in should than is" do
450
- expect(property).to_not be_insync [1]
467
+ val = [1]
468
+ expect(property).to_not be_insync val
469
+ expect(property.insync_values?(input, val)).to_not be true
451
470
  end
452
471
 
453
472
  it "should not match if there are less items in should than is" do
454
- expect(property).to_not be_insync [1, 2, 3]
473
+ val = [1, 2, 3]
474
+ expect(property).to_not be_insync val
475
+ expect(property.insync_values?(input, val)).to_not be true
455
476
  end
456
477
 
457
478
  it "should not match if `is` is empty but `should` isn't" do
458
- expect(property).to_not be_insync []
479
+ val = []
480
+ expect(property).to_not be_insync val
481
+ expect(property.insync_values?(input, val)).to_not be true
459
482
  end
460
483
  end
461
484
  end
@@ -474,26 +497,33 @@ describe Puppet::Property do
474
497
  [0, 1, 2], # matching value in the middle
475
498
  ].each do |input|
476
499
  it "should by true if one unmodified should value of #{input.inspect} matches what is" do
500
+ val = 1
477
501
  property.should = input
478
- expect(property).to be_insync 1
502
+ expect(property).to be_insync val
503
+ expect(property.insync_values?(input, val)).to be true
479
504
  end
480
505
 
481
506
  it "should be true if one stringified should value of #{input.inspect} matches what is" do
507
+ val = "1"
482
508
  property.should = input
483
- expect(property).to be_insync "1"
509
+ expect(property).to be_insync val
510
+ expect(property.insync_values?(input, val)).to be true
484
511
  end
485
512
  end
486
513
 
487
514
  it "should not match if we expect a string but get the non-stringified value" do
488
515
  property.should = ["1"]
489
516
  expect(property).to_not be_insync 1
517
+ expect(property.insync_values?(["1"], 1)).to_not be true
490
518
  end
491
519
 
492
520
  [[0], [0, 2]].each do |input|
493
521
  it "should not match if no should values match what is" do
494
522
  property.should = input
495
523
  expect(property).to_not be_insync 1
524
+ expect(property.insync_values?(input, 1)).to_not be true
496
525
  expect(property).to_not be_insync "1" # shouldn't match either.
526
+ expect(property.insync_values?(input, "1")).to_not be true
497
527
  end
498
528
  end
499
529
  end
@@ -514,4 +544,11 @@ describe Puppet::Property do
514
544
  expect(property.property_matches?(1, "1")).to be_falsey
515
545
  end
516
546
  end
547
+
548
+ describe "#insync_values?" do
549
+ it "should log an exception when insync? throws one" do
550
+ property.expects(:insync?).raises ArgumentError
551
+ expect(property.insync_values?("foo","bar")).to be nil
552
+ end
553
+ end
517
554
  end
@@ -17,6 +17,8 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
17
17
  before :each do
18
18
  Puppet::Util::Windows::ADSI.stubs(:computer_name).returns('testcomputername')
19
19
  Puppet::Util::Windows::ADSI.stubs(:connect).returns connection
20
+ # this would normally query the system, but not needed for these tests
21
+ Puppet::Util::Windows::ADSI::Group.stubs(:localized_domains).returns([])
20
22
  end
21
23
 
22
24
  describe ".instances" do
@@ -278,6 +280,14 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
278
280
  end
279
281
 
280
282
  it "should prefer the domain component from the resolved SID" do
281
- expect(provider.members_to_s(['.\Administrators'])).to eq('BUILTIN\Administrators')
283
+ # must lookup well known S-1-5-32-544 as actual 'Administrators' name may be localized
284
+ admins_sid_bytes = [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0]
285
+ admins_group = Puppet::Util::Windows::SID::Principal.lookup_account_sid(admins_sid_bytes)
286
+ # prefix just the name like .\Administrators
287
+ converted = provider.members_to_s([".\\#{admins_group.account}"])
288
+
289
+ # and ensure equivalent of BUILTIN\Administrators, without a leading .
290
+ expect(converted).to eq(admins_group.domain_account)
291
+ expect(converted[0]).to_not eq('.')
282
292
  end
283
293
  end
@@ -26,103 +26,5 @@ context 'default' do
26
26
  end
27
27
 
28
28
  describe provider_class do
29
- let(:name) { 'mypackage' }
30
- let(:resource) do
31
- Puppet::Type.type(:package).new(
32
- :name => name,
33
- :ensure => :installed,
34
- :provider => 'dnf'
35
- )
36
- end
37
-
38
- let(:provider) do
39
- provider = provider_class.new
40
- provider.resource = resource
41
- provider
42
- end
43
-
44
- before do
45
- provider_class.stubs(:command).with(:cmd).returns('/usr/bin/dnf')
46
- provider.stubs(:rpm).returns 'rpm'
47
- provider.stubs(:get).with(:version).returns '1'
48
- provider.stubs(:get).with(:release).returns '1'
49
- provider.stubs(:get).with(:arch).returns 'i386'
50
- end
51
-
52
- describe 'provider features' do
53
- it { is_expected.to be_versionable }
54
- it { is_expected.to be_install_options }
55
- it { is_expected.to be_virtual_packages }
56
- end
57
-
58
- describe "default provider" do
59
- before do
60
- Facter.expects(:value).with(:operatingsystem).returns("fedora")
61
- end
62
-
63
- it "should be the default provider on Fedora 22" do
64
- Facter.expects(:value).with(:operatingsystemmajrelease).returns('22')
65
- expect(described_class.default?).to be_truthy
66
- end
67
-
68
- it "should be the default provider on Fedora 23" do
69
- Facter.expects(:value).with(:operatingsystemmajrelease).returns('23')
70
- expect(described_class.default?).to be_truthy
71
- end
72
- end
73
-
74
- # provider should repond to the following methods
75
- [:install, :latest, :update, :purge, :install_options].each do |method|
76
- it "should have a(n) #{method}" do
77
- expect(provider).to respond_to(method)
78
- end
79
- end
80
-
81
- describe 'when installing' do
82
- before(:each) do
83
- Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
84
- provider.stubs(:which).with("rpm").returns("/bin/rpm")
85
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:combine => true, :custom_environment => {}, :failonfail => true}).returns("4.10.1\n").at_most_once
86
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('22')
87
- end
88
-
89
- it 'should call dnf install for :installed' do
90
- resource.stubs(:should).with(:ensure).returns :installed
91
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', :install, 'mypackage'])
92
- provider.install
93
- end
94
-
95
- it 'should be able to downgrade' do
96
- current_version = '1.2'
97
- version = '1.0'
98
- resource[:ensure] = '1.0'
99
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', :downgrade, "#{name}-#{version}"])
100
- provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
101
- provider.install
102
- end
103
-
104
- it 'should accept install options' do
105
- resource[:ensure] = :installed
106
- resource[:install_options] = ['-t', {'-x' => 'expackage'}]
107
-
108
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', ['-t', '-x=expackage'], :install, name])
109
- provider.install
110
- end
111
- end
112
-
113
- describe 'when uninstalling' do
114
- it 'should use erase to purge' do
115
- Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-y', :erase, name])
116
- provider.purge
117
- end
118
- end
119
-
120
- describe "executing yum check-update" do
121
- it "passes repos to enable to 'yum check-update'" do
122
- Puppet::Util::Execution.expects(:execute).with do |args, *rest|
123
- expect(args).to eq %w[/usr/bin/dnf check-update --enablerepo=updates --enablerepo=fedoraplus]
124
- end.returns(stub(:exitstatus => 0))
125
- described_class.check_updates(%w[updates fedoraplus], [], [])
126
- end
127
- end
29
+ it_behaves_like 'RHEL package provider', provider_class, 'dnf'
128
30
  end
@@ -438,13 +438,13 @@ EOF
438
438
 
439
439
  it 'should raise an error on non-zero pacman exit without a filter' do
440
440
  executor.expects(:open).with('| /usr/bin/pacman -Sgg 2>&1').returns 'error!'
441
- $CHILD_STATUS.stubs(:exitstatus).returns 1
441
+ Puppet::Util::Execution.expects(:exitstatus).returns 1
442
442
  expect { described_class.get_installed_groups(installed_packages) }.to raise_error(Puppet::ExecutionFailure, 'error!')
443
443
  end
444
444
 
445
445
  it 'should return empty groups on non-zero pacman exit with a filter' do
446
446
  executor.expects(:open).with('| /usr/bin/pacman -Sgg git 2>&1').returns ''
447
- $CHILD_STATUS.stubs(:exitstatus).returns 1
447
+ Puppet::Util::Execution.expects(:exitstatus).returns 1
448
448
  expect(described_class.get_installed_groups(installed_packages, 'git')).to eq({})
449
449
  end
450
450
 
@@ -452,7 +452,7 @@ EOF
452
452
  pipe = stub()
453
453
  pipe.expects(:each_line)
454
454
  executor.expects(:open).with('| /usr/bin/pacman -Sgg 2>&1').yields(pipe).returns ''
455
- $CHILD_STATUS.stubs(:exitstatus).returns 0
455
+ Puppet::Util::Execution.expects(:exitstatus).returns 0
456
456
  expect(described_class.get_installed_groups(installed_packages)).to eq({})
457
457
  end
458
458
 
@@ -460,7 +460,7 @@ EOF
460
460
  pipe = stub()
461
461
  pipe.expects(:each_line).multiple_yields(*groups)
462
462
  executor.expects(:open).with('| /usr/bin/pacman -Sgg 2>&1').yields(pipe).returns ''
463
- $CHILD_STATUS.stubs(:exitstatus).returns 0
463
+ Puppet::Util::Execution.expects(:exitstatus).returns 0
464
464
  expect(described_class.get_installed_groups(installed_packages)).to eq({'foo' => 'package1 1.0, package2 2.0'})
465
465
  end
466
466
  end
@@ -209,6 +209,20 @@ describe provider_class do
209
209
  @resource[:name] = "fake_package"
210
210
  expect(@provider.latest).to eq(nil)
211
211
  end
212
+
213
+ it "should handle out-of-order version numbers for real_package" do
214
+ p = StringIO.new(
215
+ <<-EOS
216
+ Collecting real-package==versionplease
217
+ Could not find a version that satisfies the requirement real-package==versionplease (from versions: 1.11, 13.0.3, 1.6, 1.9, 1.3.2, 14.0.1, 12.0.7, 13.0.3, 1.7.2, 1.8.4, 1.6.1, 0.9.2, 1.3, 1.8.3, 12.1.1, 1.1, 1.11.6, 1.4.8, 1.6.3, 1.10.1, 14.0.2, 1.11.3, 14.0.3, 1.4rc1, 0.8.4, 1.0, 12.0.5, 14.0.6, 1.11.5, 1.7.1.1, 1.11.4, 13.0.1, 13.1.2, 1.3.3, 0.8.2, 14.0.0, 12.0, 1.8, 1.3.4, 12.0, 1.2, 12.0.6, 0.9.1, 13.1.1, 14.0.5, 15.0.2, 15.0.0, 1.4.5, 1.4.3, 13.1.1, 1.11.2, 13.1.2, 1.3.1, 13.1.0, 12.0.2, 1.11.1, 12.0.1, 12.1.0, 0.9, 1.4.4, 13.0.0, 1.4.9, 12.1.0, 1.7.1, 1.4.2, 14.0.5, 0.8.1, 1.4.6, 0.8.3, 1.11.3, 1.5.1, 1.4.7, 13.0.2, 12.0.7, 13.0.0, 1.9.1, 1.8.2, 14.0.1, 14.0.0, 14.0.4, 1.6.2, 15.0.1, 13.1.0, 0.8, 1.7, 15.0.2, 12.0.5, 13.0.1, 1.8.1, 1.11.6, 15.0.1, 12.0.4, 12.1.1, 13.0.2, 1.11.4, 1.10, 14.0.4, 14.0.6, 1.4.1, 1.4, 1.5.2, 12.0.2, 12.0.1, 14.0.3, 14.0.2, 1.11.1, 1.7.1.2, 15.0.0, 12.0.4, 1.6.4, 1.11.2, 1.5)
218
+ No distributions matching the version for real-package==versionplease
219
+ EOS
220
+ )
221
+ Puppet::Util::Execution.expects(:execpipe).with(["/fake/bin/pip", "install", "real_package==versionplease"]).yields(p).once
222
+ @resource[:name] = "real_package"
223
+ latest = @provider.latest
224
+ expect(latest).to eq('15.0.2')
225
+ end
212
226
  end
213
227
 
214
228
  end
@@ -5,6 +5,12 @@ describe Puppet::Type.type(:package).provider(:pkg) do
5
5
  let (:resource) { Puppet::Resource.new(:package, 'dummy', :parameters => {:name => 'dummy', :ensure => :latest}) }
6
6
  let (:provider) { described_class.new(resource) }
7
7
 
8
+ if Puppet.features.microsoft_windows?
9
+ # Get a pid for $CHILD_STATUS to latch on to
10
+ command = "cmd.exe /c \"exit 0\""
11
+ Puppet::Util::Execution.execute(command, {:failonfail => false})
12
+ end
13
+
8
14
  before :each do
9
15
  described_class.stubs(:command).with(:pkg).returns('/bin/pkg')
10
16
  end