puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  provider_class = Puppet::Type.type(:package).provider(:pip3)
5
- osfamilies = { ['All', nil] => 'pip3' }
5
+ osfamilies = { ['All', nil] => ['pip3'] }
6
6
 
7
7
  describe provider_class do
8
8
 
@@ -33,30 +33,38 @@ describe provider_class do
33
33
 
34
34
  describe "cmd" do
35
35
 
36
- it "should return pip3 by default" do
36
+ it "should return #{osfamilies[['All', nil]][0]} by default" do
37
37
  Facter.stubs(:value).with(:osfamily).returns("Not RedHat")
38
- expect(provider_class.cmd).to eq('pip3')
38
+ expect(provider_class.cmd[0]).to eq(osfamilies[['All', nil]][0])
39
39
  end
40
-
41
40
  end
42
41
 
43
42
  describe "instances" do
44
43
 
45
- osfamilies.each do |osfamily, pip_cmd|
46
- it "should return an array on #{osfamily} when #{pip_cmd} is present" do
47
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
48
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
49
- provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/pip3")
50
- p = stub("process")
51
- p.expects(:collect).yields("real_package==1.2.5")
52
- provider_class.expects(:execpipe).with("/fake/bin/pip3 freeze").yields(p)
53
- provider_class.instances
54
- end
55
-
56
- it "should return an empty array on #{osfamily} when #{pip_cmd} is missing" do
44
+ osfamilies.each do |osfamily, pip_cmds|
45
+ it "should return an array on #{osfamily} when #{pip_cmds.join(' or ')} is present" do
46
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
47
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
48
+ pip_cmds.each do |pip_cmd|
49
+ pip_cmds.each do |cmd|
50
+ unless cmd == pip_cmd
51
+ provider_class.expects(:which).with(cmd).returns(nil)
52
+ end
53
+ end
54
+ provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
55
+ p = stub("process")
56
+ p.expects(:collect).yields("real_package==1.2.5")
57
+ provider_class.expects(:execpipe).with("/fake/bin/#{pip_cmd} freeze").yields(p)
58
+ provider_class.instances
59
+ end
60
+ end
61
+
62
+ it "should return an empty array on #{osfamily} when #{pip_cmds.join(' and ')} is missing" do
57
63
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
58
64
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
59
- provider_class.expects(:which).with(pip_cmd).returns nil
65
+ pip_cmds.each do |pip_cmd|
66
+ provider_class.expects(:which).with(pip_cmd).returns nil
67
+ end
60
68
  expect(provider_class.instances).to eq([])
61
69
  end
62
70
  end
@@ -224,32 +232,42 @@ describe provider_class do
224
232
  @provider.method(:lazy_pip).call "freeze"
225
233
  end
226
234
 
227
- osfamilies.each do |osfamily, pip_cmd|
228
- it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
229
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
230
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
231
- @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
232
- @provider.expects(:which).with(pip_cmd).returns("/fake/bin/pip3")
233
- @provider.method(:lazy_pip).call "freeze"
234
- end
235
-
236
- it "should fail on #{osfamily} if #{pip_cmd} is missing" do
237
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
238
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
239
- @provider.expects(:pip).with('freeze').raises(NoMethodError)
240
- @provider.expects(:which).with(pip_cmd).returns(nil)
241
- expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
242
- end
243
-
244
- it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
245
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
246
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
247
- @provider.expects(:pip).with('freeze').raises(NoMethodError)
248
- @provider.expects(:which).with(pip_cmd).returns(nil)
249
- expect { @provider.method(:lazy_pip).call("freeze") }.
250
- to raise_error(NoMethodError, "Could not locate the #{pip_cmd} command.")
235
+ osfamilies.each do |osfamily, pip_cmds|
236
+ pip_cmds.each do |pip_cmd|
237
+ it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
238
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
239
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
240
+ @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
241
+ pip_cmds.each do |cmd|
242
+ unless cmd == pip_cmd
243
+ @provider.expects(:which).with(cmd).returns(nil)
244
+ end
245
+ end
246
+ @provider.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
247
+ @provider.method(:lazy_pip).call "freeze"
248
+ end
249
+
250
+ it "should fail on #{osfamily} if #{pip_cmd} is missing" do
251
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
252
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
253
+ @provider.expects(:pip).with('freeze').raises(NoMethodError)
254
+ pip_cmds.each do |pip_cmd|
255
+ @provider.expects(:which).with(pip_cmd).returns(nil)
256
+ end
257
+ expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
258
+ end
259
+
260
+ it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
261
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
262
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
263
+ @provider.expects(:pip).with('freeze').raises(NoMethodError)
264
+ pip_cmds.each do |pip_cmd|
265
+ @provider.expects(:which).with(pip_cmd).returns(nil)
266
+ end
267
+ expect { @provider.method(:lazy_pip).call("freeze") }.
268
+ to raise_error(NoMethodError, "Could not locate command #{pip_cmd}.")
269
+ end
251
270
  end
252
-
253
271
  end
254
272
 
255
273
  end
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  provider_class = Puppet::Type.type(:package).provider(:pip)
5
- osfamilies = { ['RedHat', '6'] => 'pip-python', ['RedHat', '7'] => 'pip', ['Not RedHat', nil] => 'pip' }
5
+ osfamilies = { ['All', nil] => ['pip', 'pip-python'] }
6
6
 
7
7
  describe provider_class do
8
8
 
@@ -12,7 +12,6 @@ describe provider_class do
12
12
  @client = stub_everything('client')
13
13
  @client.stubs(:call).with('package_releases', 'real_package').returns(["1.3", "1.2.5", "1.2.4"])
14
14
  @client.stubs(:call).with('package_releases', 'fake_package').returns([])
15
- XMLRPC::Client.stubs(:new2).returns(@client)
16
15
  end
17
16
 
18
17
  describe "parse" do
@@ -32,42 +31,44 @@ describe provider_class do
32
31
  end
33
32
 
34
33
  describe "cmd" do
35
- it "should return pip-python on RedHat < 7 systems" do
36
- Facter.stubs(:value).with(:osfamily).returns("RedHat")
37
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns("6")
38
- expect(provider_class.cmd).to eq('pip-python')
39
- end
40
-
41
- it "should return pip on RedHat >= 7 systems" do
42
- Facter.stubs(:value).with(:osfamily).returns("RedHat")
43
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns("7")
44
- expect(provider_class.cmd).to eq('pip')
34
+ it "should return pip-python on legacy systems" do
35
+ Facter.stubs(:value).with(:osfamily).returns("legacy")
36
+ expect(provider_class.cmd[1]).to eq('pip-python')
45
37
  end
46
38
 
47
39
  it "should return pip by default" do
48
- Facter.stubs(:value).with(:osfamily).returns("Not RedHat")
49
- expect(provider_class.cmd).to eq('pip')
40
+ Facter.stubs(:value).with(:osfamily).returns("All")
41
+ expect(provider_class.cmd[0]).to eq('pip')
50
42
  end
51
43
 
52
44
  end
53
45
 
54
46
  describe "instances" do
55
47
 
56
- osfamilies.each do |osfamily, pip_cmd|
57
- it "should return an array on #{osfamily} when #{pip_cmd} is present" do
48
+ osfamilies.each do |osfamily, pip_cmds|
49
+ it "should return an array on #{osfamily} when #{pip_cmds.join(' or ')} is present" do
58
50
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
59
51
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
60
- provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/pip")
61
- p = stub("process")
62
- p.expects(:collect).yields("real_package==1.2.5")
63
- provider_class.expects(:execpipe).with("/fake/bin/pip freeze").yields(p)
64
- provider_class.instances
52
+ pip_cmds.each do |pip_cmd|
53
+ pip_cmds.each do |cmd|
54
+ unless cmd == pip_cmd
55
+ provider_class.expects(:which).with(cmd).returns(nil)
56
+ end
57
+ end
58
+ provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
59
+ p = stub("process")
60
+ p.expects(:collect).yields("real_package==1.2.5")
61
+ provider_class.expects(:execpipe).with("/fake/bin/#{pip_cmd} freeze").yields(p)
62
+ provider_class.instances
63
+ end
65
64
  end
66
65
 
67
- it "should return an empty array on #{osfamily} when #{pip_cmd} is missing" do
66
+ it "should return an empty array on #{osfamily} when #{pip_cmds.join(' and ')} are missing" do
68
67
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
69
68
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
70
- provider_class.expects(:which).with(pip_cmd).returns nil
69
+ pip_cmds.each do |cmd|
70
+ provider_class.expects(:which).with(cmd).returns nil
71
+ end
71
72
  expect(provider_class.instances).to eq([])
72
73
  end
73
74
  end
@@ -118,23 +119,52 @@ describe provider_class do
118
119
  end
119
120
 
120
121
  describe "latest" do
122
+ context "connecting directly" do
121
123
 
122
- it "should find a version number for real_package" do
123
- @resource[:name] = "real_package"
124
- expect(@provider.latest).not_to eq(nil)
125
- end
124
+ before :each do
125
+ XMLRPC::Client.expects(:new2).with("http://pypi.python.org/pypi", nil).returns(@client)
126
+ end
126
127
 
127
- it "should not find a version number for fake_package" do
128
- @resource[:name] = "fake_package"
129
- expect(@provider.latest).to eq(nil)
130
- end
128
+ it "should find a version number for real_package" do
129
+ @resource[:name] = "real_package"
130
+ expect(@provider.latest).not_to eq(nil)
131
+ end
131
132
 
132
- it "should handle a timeout gracefully" do
133
- @resource[:name] = "fake_package"
134
- @client.stubs(:call).raises(Timeout::Error)
135
- expect { @provider.latest }.to raise_error(Puppet::Error)
133
+ it "should not find a version number for fake_package" do
134
+ @resource[:name] = "fake_package"
135
+ expect(@provider.latest).to eq(nil)
136
+ end
137
+
138
+ it "should handle a timeout gracefully" do
139
+ @resource[:name] = "fake_package"
140
+ @client.stubs(:call).raises(Timeout::Error)
141
+ expect { @provider.latest }.to raise_error(Puppet::Error)
142
+ end
136
143
  end
137
144
 
145
+ context "connecting via a proxy" do
146
+ before :each do
147
+ Puppet::Util::HttpProxy.expects(:http_proxy_host).returns 'some_host'
148
+ Puppet::Util::HttpProxy.expects(:http_proxy_port).returns 'some_port'
149
+ XMLRPC::Client.expects(:new2).with("http://pypi.python.org/pypi", "some_host:some_port").returns(@client)
150
+ end
151
+
152
+ it "should find a version number for real_package" do
153
+ @resource[:name] = "real_package"
154
+ expect(@provider.latest).not_to eq(nil)
155
+ end
156
+
157
+ it "should not find a version number for fake_package" do
158
+ @resource[:name] = "fake_package"
159
+ expect(@provider.latest).to eq(nil)
160
+ end
161
+
162
+ it "should handle a timeout gracefully" do
163
+ @resource[:name] = "fake_package"
164
+ @client.stubs(:call).raises(Timeout::Error)
165
+ expect { @provider.latest }.to raise_error(Puppet::Error)
166
+ end
167
+ end
138
168
  end
139
169
 
140
170
  describe "install" do
@@ -235,30 +265,41 @@ describe provider_class do
235
265
  @provider.method(:lazy_pip).call "freeze"
236
266
  end
237
267
 
238
- osfamilies.each do |osfamily, pip_cmd|
239
- it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
240
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
241
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
242
- @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
243
- @provider.expects(:which).with(pip_cmd).returns("/fake/bin/pip")
244
- @provider.method(:lazy_pip).call "freeze"
268
+ osfamilies.each do |osfamily, pip_cmds|
269
+ pip_cmds.each do |pip_cmd|
270
+ it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
271
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
272
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
273
+ @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
274
+ pip_cmds.each do |cmd|
275
+ unless cmd == pip_cmd
276
+ @provider.expects(:which).with(cmd).returns(nil)
277
+ end
278
+ end
279
+ @provider.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
280
+ @provider.method(:lazy_pip).call "freeze"
281
+ end
245
282
  end
246
283
 
247
- it "should fail on #{osfamily} if #{pip_cmd} is missing" do
284
+ it "should fail on #{osfamily} if #{pip_cmds.join(' and ')} are missing" do
248
285
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
249
286
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
250
287
  @provider.expects(:pip).with('freeze').raises(NoMethodError)
251
- @provider.expects(:which).with(pip_cmd).returns(nil)
288
+ pip_cmds.each do |pip_cmd|
289
+ @provider.expects(:which).with(pip_cmd).returns(nil)
290
+ end
252
291
  expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
253
292
  end
254
293
 
255
- it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
294
+ it "should output a useful error message on #{osfamily} if #{pip_cmds.join(' and ')} are missing" do
256
295
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
257
296
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
258
297
  @provider.expects(:pip).with('freeze').raises(NoMethodError)
259
- @provider.expects(:which).with(pip_cmd).returns(nil)
298
+ pip_cmds.each do |pip_cmd|
299
+ @provider.expects(:which).with(pip_cmd).returns(nil)
300
+ end
260
301
  expect { @provider.method(:lazy_pip).call("freeze") }.
261
- to raise_error(NoMethodError, "Could not locate the #{pip_cmd} command.")
302
+ to raise_error(NoMethodError, "Could not locate command #{pip_cmds.join(' and ')}.")
262
303
  end
263
304
 
264
305
  end
@@ -1,6 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
+ module Puppet::Util::Plist
5
+ end
6
+
4
7
  describe Puppet::Type.type(:package).provider(:pkgdmg) do
5
8
  let(:resource) { Puppet::Type.type(:package).new(:name => 'foo', :provider => :pkgdmg) }
6
9
  let(:provider) { described_class.new(resource) }
@@ -26,8 +29,7 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
26
29
  # These tests shouldn't be this messy. The pkgdmg provider needs work...
27
30
  describe "when installing a pkgdmg" do
28
31
  let(:fake_mountpoint) { "/tmp/dmg.foo" }
29
- let(:empty_hdiutil_plist) { Plist::Emit.dump({}) }
30
- let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
32
+ let(:fake_hdiutil_plist) { {"system-entities" => [{"mount-point" => fake_mountpoint}]} }
31
33
 
32
34
  before do
33
35
  fh = mock 'filehandle'
@@ -39,20 +41,23 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
39
41
  end
40
42
 
41
43
  it "should fail when a disk image with no system entities is mounted" do
42
- described_class.stubs(:hdiutil).returns(empty_hdiutil_plist)
44
+ described_class.stubs(:hdiutil).returns 'empty plist'
45
+ Puppet::Util::Plist.expects(:parse_plist).with('empty plist').returns({})
43
46
  expect { provider.install }.to raise_error(Puppet::Error, /No disk entities/)
44
47
  end
45
48
 
46
49
  it "should call hdiutil to mount and eject the disk image" do
47
50
  Dir.stubs(:entries).returns []
48
51
  provider.class.expects(:hdiutil).with("eject", fake_mountpoint).returns 0
49
- provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns fake_hdiutil_plist
52
+ provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns 'a plist'
53
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
50
54
  provider.install
51
55
  end
52
56
 
53
57
  it "should call installpkg if a pkg/mpkg is found on the dmg" do
54
58
  Dir.stubs(:entries).returns ["foo.pkg"]
55
- provider.class.stubs(:hdiutil).returns fake_hdiutil_plist
59
+ provider.class.stubs(:hdiutil).returns 'a plist'
60
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
56
61
  provider.class.expects(:installpkg).with("#{fake_mountpoint}/foo.pkg", resource[:name], "foo.dmg").returns ""
57
62
  provider.install
58
63
  end
@@ -70,7 +75,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
70
75
  described_class.expects(:curl).with do |*args|
71
76
  args[0] == "-o" && args[1].include?(tmpdir) && args.include?("--fail") && ! args.include?("-k")
72
77
  end
73
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
78
+ described_class.stubs(:hdiutil).returns 'a plist'
79
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
74
80
  described_class.expects(:installpkg)
75
81
 
76
82
  provider.install
@@ -86,7 +92,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
86
92
  expect(args).to be_include 'some_host:some_port'
87
93
  expect(args).to be_include '--proxy'
88
94
  end
89
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
95
+ described_class.stubs(:hdiutil).returns 'a plist'
96
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
90
97
  described_class.expects(:installpkg)
91
98
 
92
99
  provider.install
@@ -102,7 +109,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
102
109
  expect(args).to be_include 'some_host'
103
110
  expect(args).to be_include '--proxy'
104
111
  end
105
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
112
+ described_class.stubs(:hdiutil).returns 'a plist'
113
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
106
114
  described_class.expects(:installpkg)
107
115
 
108
116
  provider.install
@@ -119,7 +127,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
119
127
  expect(args).not_to be_include '--proxy'
120
128
  true
121
129
  end
122
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
130
+ described_class.stubs(:hdiutil).returns 'a plist'
131
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
123
132
  described_class.expects(:installpkg)
124
133
 
125
134
  provider.install
@@ -151,12 +151,14 @@ describe provider_class do
151
151
 
152
152
  describe "get_latest_version" do
153
153
  it "should rereturn nil when the current package is the latest" do
154
- nmap_latest_version = provider_class.get_latest_version('security/nmap')
154
+ version_list = File.read(my_fixture('pkg.version'))
155
+ nmap_latest_version = provider_class.get_latest_version('security/nmap', version_list)
155
156
  expect(nmap_latest_version).to be_nil
156
157
  end
157
158
 
158
159
  it "should match the package name exactly" do
159
- bash_comp_latest_version = provider_class.get_latest_version('shells/bash-completion')
160
+ version_list = File.read(my_fixture('pkg.version'))
161
+ bash_comp_latest_version = provider_class.get_latest_version('shells/bash-completion', version_list)
160
162
  expect(bash_comp_latest_version).to eq('2.1_3')
161
163
  end
162
164
  end
@@ -12,7 +12,6 @@ describe provider_class do
12
12
  chkconfig 0 1.3.30.2 2.el5 x86_64
13
13
  myresource 0 1.2.3.4 5.el4 noarch
14
14
  mysummaryless 0 1.2.3.4 5.el4 noarch
15
- tomcat 1 1.2.3.4 5.fc22 noarch
16
15
  RPM_OUTPUT
17
16
  end
18
17
 
@@ -117,18 +116,7 @@ describe provider_class do
117
116
  :ensure => "1.3.30.2-2.el5",
118
117
  }
119
118
  )
120
- expect(installed_packages[3].properties).to eq(
121
- {
122
- :provider => :rpm,
123
- :name => "myresource",
124
- :epoch => "0",
125
- :version => "1.2.3.4",
126
- :release => "5.el4",
127
- :arch => "noarch",
128
- :ensure => "1.2.3.4-5.el4",
129
- }
130
- )
131
- expect(installed_packages[4].properties).to eq(
119
+ expect(installed_packages.last.properties).to eq(
132
120
  {
133
121
  :provider => :rpm,
134
122
  :name => "mysummaryless",
@@ -139,17 +127,6 @@ describe provider_class do
139
127
  :ensure => "1.2.3.4-5.el4",
140
128
  }
141
129
  )
142
- expect(installed_packages[5].properties).to eq(
143
- {
144
- :provider => :rpm,
145
- :name => "tomcat",
146
- :epoch => "1",
147
- :version => "1.2.3.4",
148
- :release => "5.fc22",
149
- :arch => "noarch",
150
- :ensure => "1:1.2.3.4-5.fc22",
151
- }
152
- )
153
130
  end
154
131
  end
155
132
 
@@ -292,7 +269,7 @@ describe provider_class do
292
269
  line.gsub(field, delimiter),
293
270
  package_hash.merge(
294
271
  field.to_sym => delimiter,
295
- :ensure => 'epoch:version-release'.gsub(field, delimiter)
272
+ :ensure => 'version-release'.gsub(field, delimiter)
296
273
  )
297
274
  )
298
275
  end
@@ -448,7 +448,7 @@ describe provider_class do
448
448
 
449
449
  it "returns an empty hash if 'yum check-update' returned an exit code that was not 0 or 100" do
450
450
  Puppet::Util::Execution.expects(:execute).returns(stub(:exitstatus => 1))
451
- described_class.expects(:warn)
451
+ described_class.expects(:warning).with('Could not check for updates, \'/usr/bin/yum check-update\' exited with 1')
452
452
  expect(described_class.check_updates([], [], [])).to eq({})
453
453
  end
454
454
  end
@@ -505,6 +505,17 @@ describe provider_class do
505
505
  expect(output).to include("yum-plugin-fastestmirror.noarch")
506
506
  end
507
507
  end
508
+ describe "with broken update notices" do
509
+ let(:check_update) { File.read(my_fixture('yum-check-update-broken-notices.txt')) }
510
+ let(:output) { described_class.parse_updates(check_update) }
511
+
512
+ it "ignores all entries including and after 'Update'" do
513
+ expect(output).not_to include("Update")
514
+ end
515
+ it "includes updates before 'Update'" do
516
+ expect(output).to include("yum-plugin-fastestmirror.noarch")
517
+ end
518
+ end
508
519
  end
509
520
 
510
521
  describe "parsing a line from yum check-update" do
@@ -214,4 +214,18 @@ describe provider_class do
214
214
  @provider.install
215
215
  end
216
216
  end
217
+
218
+ describe 'when uninstalling' do
219
+ it 'should use remove to uninstall on zypper version 1.6 and above' do
220
+ @provider.stubs(:zypper_version).returns '1.6.308'
221
+ @provider.expects(:zypper).with(:remove, '--no-confirm', 'mypackage')
222
+ @provider.uninstall
223
+ end
224
+
225
+ it 'should use remove --force-solution to uninstall on zypper versions between 1.0 and 1.6' do
226
+ @provider.stubs(:zypper_version).returns '1.0.2'
227
+ @provider.expects(:zypper).with(:remove, '--no-confirm', '--force-resolution', 'mypackage')
228
+ @provider.uninstall
229
+ end
230
+ end
217
231
  end
@@ -27,6 +27,7 @@ describe provider_class do
27
27
 
28
28
  @provider.stubs(:command).with(:update_rc).returns "update_rc"
29
29
  @provider.stubs(:command).with(:invoke_rc).returns "invoke_rc"
30
+ @provider.stubs(:command).with(:service).returns "service"
30
31
 
31
32
  @provider.stubs(:update_rc)
32
33
  @provider.stubs(:invoke_rc)
@@ -142,30 +143,11 @@ describe provider_class do
142
143
  end
143
144
 
144
145
  describe "when checking service status" do
145
- context "On systems which use the systemd-sysvinit compatibility layer" do
146
- it "should call systemctl to determine running status in Debian" do
147
- Facter.stubs(:value).with(:operatingsystem).returns('Debian')
148
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('8')
149
- @resource.stubs(:[]).with(:hasstatus).returns(:true)
150
- expect(@provider.statuscmd).to eq(["systemctl", "is-active", @resource[:name]])
151
- end
152
-
153
- it "should call systemctl to determine running status in Ubuntu" do
154
- Facter.stubs(:value).with(:operatingsystem).returns('Ubuntu')
155
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('15.04')
156
- @resource.stubs(:[]).with(:hasstatus).returns(:true)
157
- expect(@provider.statuscmd).to eq(["systemctl", "is-active", @resource[:name]])
158
- end
159
- end
160
-
161
- context "On systems which only use sysvinit" do
162
- it "should use the service init script" do
163
- Facter.stubs(:value).with(:operatingsystem).returns('Debian')
164
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns('7')
165
- @resource.stubs(:[]).with(:hasstatus).returns(:true)
166
- @provider.stubs(:initscript).returns("/etc/init.d/script")
167
- expect(@provider.statuscmd).to eq(["/etc/init.d/script", :status])
168
- end
146
+ it "should use the service command" do
147
+ Facter.stubs(:value).with(:operatingsystem).returns('Debian')
148
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns('8')
149
+ @resource.stubs(:[]).with(:hasstatus).returns(:true)
150
+ expect(@provider.statuscmd).to eq(["service", @resource[:name], "status"])
169
151
  end
170
152
  end
171
153
  end
@@ -39,7 +39,7 @@ describe Puppet::Type.type(:service).provider(:init) do
39
39
  before :each do
40
40
  described_class.stubs(:defpath).returns('tmp')
41
41
 
42
- @services = ['one', 'two', 'three', 'four']
42
+ @services = ['one', 'two', 'three', 'four', 'umountfs']
43
43
  Dir.stubs(:entries).with('tmp').returns @services
44
44
  FileTest.expects(:directory?).with('tmp').returns(true)
45
45
  FileTest.stubs(:executable?).returns(true)
@@ -59,6 +59,16 @@ describe Puppet::Type.type(:service).provider(:init) do
59
59
  expect(described_class.get_services(described_class.defpath, exclude).map(&:name)).to eq(@services - [exclude])
60
60
  end
61
61
 
62
+ it "should omit Yocto services on cisco-wrlinux" do
63
+ Facter.stubs(:value).with(:osfamily).returns 'cisco-wrlinux'
64
+ exclude = 'umountfs'
65
+ expect(described_class.get_services(described_class.defpath).map(&:name)).to eq(@services - [exclude])
66
+ end
67
+
68
+ it "should not omit Yocto services on non cisco-wrlinux platforms" do
69
+ expect(described_class.get_services(described_class.defpath).map(&:name)).to eq(@services)
70
+ end
71
+
62
72
  it "should use defpath" do
63
73
  expect(described_class.instances).to be_all { |provider| provider.get(:path) == described_class.defpath }
64
74
  end