puppet 3.2.4 → 3.3.0.rc2

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 (562) hide show
  1. data/COMMITTERS.md +101 -42
  2. data/Gemfile +15 -4
  3. data/README.md +5 -1
  4. data/README_DEVELOPER.md +117 -54
  5. data/Rakefile +4 -0
  6. data/ext/build_defaults.yaml +3 -2
  7. data/ext/debian/puppet-common.manpages +33 -1
  8. data/ext/gentoo/init.d/puppet +1 -1
  9. data/ext/gentoo/init.d/puppetmaster +1 -1
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/install.rb +2 -1
  12. data/lib/hiera/backend/puppet_backend.rb +1 -1
  13. data/lib/puppet/application.rb +10 -9
  14. data/lib/puppet/application/agent.rb +87 -93
  15. data/lib/puppet/application/apply.rb +0 -2
  16. data/lib/puppet/application/device.rb +3 -3
  17. data/lib/puppet/application/kick.rb +2 -2
  18. data/lib/puppet/application/master.rb +41 -19
  19. data/lib/puppet/application/queue.rb +5 -3
  20. data/lib/puppet/bindings.rb +147 -0
  21. data/lib/puppet/configurer.rb +25 -15
  22. data/lib/puppet/configurer/fact_handler.rb +2 -9
  23. data/lib/puppet/daemon.rb +44 -33
  24. data/lib/puppet/defaults.rb +57 -26
  25. data/lib/puppet/error.rb +1 -1
  26. data/lib/puppet/external/dot.rb +2 -2
  27. data/lib/puppet/external/nagios/base.rb +1 -6
  28. data/lib/puppet/external/pson/common.rb +2 -2
  29. data/lib/puppet/external/pson/pure/generator.rb +2 -2
  30. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  31. data/lib/puppet/face/ca.rb +1 -1
  32. data/lib/puppet/face/config.rb +1 -1
  33. data/lib/puppet/face/help.rb +2 -2
  34. data/lib/puppet/face/module/list.rb +2 -2
  35. data/lib/puppet/feature/rails.rb +1 -1
  36. data/lib/puppet/file_bucket/dipper.rb +0 -1
  37. data/lib/puppet/file_serving/base.rb +1 -1
  38. data/lib/puppet/file_serving/configuration/parser.rb +20 -14
  39. data/lib/puppet/forge.rb +0 -32
  40. data/lib/puppet/forge/cache.rb +1 -1
  41. data/lib/puppet/forge/errors.rb +3 -3
  42. data/lib/puppet/forge/repository.rb +7 -42
  43. data/lib/puppet/graph.rb +11 -0
  44. data/lib/puppet/graph/key.rb +26 -0
  45. data/lib/puppet/graph/prioritizer.rb +29 -0
  46. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  47. data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
  48. data/lib/puppet/graph/relationship_graph.rb +246 -0
  49. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  50. data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
  51. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  52. data/lib/puppet/indirector.rb +2 -2
  53. data/lib/puppet/indirector/catalog/compiler.rb +10 -7
  54. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
  55. data/lib/puppet/indirector/certificate/rest.rb +1 -1
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +2 -2
  58. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
  59. data/lib/puppet/indirector/facts/network_device.rb +1 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
  61. data/lib/puppet/indirector/indirection.rb +2 -2
  62. data/lib/puppet/indirector/memory.rb +9 -0
  63. data/lib/puppet/indirector/node/ldap.rb +2 -4
  64. data/lib/puppet/indirector/report/processor.rb +1 -2
  65. data/lib/puppet/indirector/report/rest.rb +1 -1
  66. data/lib/puppet/indirector/request.rb +32 -10
  67. data/lib/puppet/indirector/resource/rest.rb +1 -1
  68. data/lib/puppet/indirector/resource_type/parser.rb +31 -12
  69. data/lib/puppet/interface.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +7 -11
  71. data/lib/puppet/interface/option.rb +1 -1
  72. data/lib/puppet/interface/option_builder.rb +1 -1
  73. data/lib/puppet/metatype/manager.rb +2 -2
  74. data/lib/puppet/module.rb +7 -1
  75. data/lib/puppet/module_tool.rb +1 -1
  76. data/lib/puppet/module_tool/applications/application.rb +10 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +6 -3
  78. data/lib/puppet/module_tool/dependency.rb +2 -0
  79. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/metadata.rb +25 -13
  81. data/lib/puppet/module_tool/modulefile.rb +7 -7
  82. data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
  83. data/lib/puppet/module_tool/skeleton.rb +1 -1
  84. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
  85. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
  86. data/lib/puppet/network/auth_config_parser.rb +3 -0
  87. data/lib/puppet/network/authconfig.rb +0 -1
  88. data/lib/puppet/network/authorization.rb +1 -1
  89. data/lib/puppet/network/authstore.rb +2 -2
  90. data/lib/puppet/network/format_handler.rb +25 -114
  91. data/lib/puppet/network/format_support.rb +106 -0
  92. data/lib/puppet/network/formats.rb +10 -4
  93. data/lib/puppet/network/http/compression.rb +1 -1
  94. data/lib/puppet/network/http/connection.rb +76 -32
  95. data/lib/puppet/network/http/handler.rb +122 -61
  96. data/lib/puppet/network/http/rack/rest.rb +1 -1
  97. data/lib/puppet/network/http/webrick/rest.rb +9 -3
  98. data/lib/puppet/network/http_pool.rb +2 -2
  99. data/lib/puppet/network/resolver.rb +1 -0
  100. data/lib/puppet/network/server.rb +5 -81
  101. data/lib/puppet/node/environment.rb +256 -13
  102. data/lib/puppet/node/facts.rb +28 -2
  103. data/lib/puppet/parameter.rb +27 -18
  104. data/lib/puppet/parameter/boolean.rb +20 -0
  105. data/lib/puppet/parameter/path.rb +1 -1
  106. data/lib/puppet/parameter/value.rb +1 -1
  107. data/lib/puppet/parameter/value_collection.rb +1 -1
  108. data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
  109. data/lib/puppet/parser/ast/casestatement.rb +0 -3
  110. data/lib/puppet/parser/ast/lambda.rb +25 -6
  111. data/lib/puppet/parser/ast/leaf.rb +10 -3
  112. data/lib/puppet/parser/ast/nop.rb +1 -1
  113. data/lib/puppet/parser/ast/resource_override.rb +0 -2
  114. data/lib/puppet/parser/compiler.rb +92 -34
  115. data/lib/puppet/parser/files.rb +0 -5
  116. data/lib/puppet/parser/functions/create_resources.rb +23 -46
  117. data/lib/puppet/parser/functions/each.rb +0 -2
  118. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  119. data/lib/puppet/parser/functions/foreach.rb +0 -2
  120. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  121. data/lib/puppet/parser/functions/lookup.rb +44 -0
  122. data/lib/puppet/parser/functions/slice.rb +1 -1
  123. data/lib/puppet/parser/grammar.ra +0 -1
  124. data/lib/puppet/parser/lexer.rb +0 -1
  125. data/lib/puppet/parser/parser.rb +0 -1
  126. data/lib/puppet/parser/parser_factory.rb +3 -2
  127. data/lib/puppet/parser/parser_support.rb +1 -1
  128. data/lib/puppet/parser/relationship.rb +1 -1
  129. data/lib/puppet/parser/scope.rb +49 -24
  130. data/lib/puppet/parser/type_loader.rb +13 -18
  131. data/lib/puppet/pops.rb +45 -0
  132. data/lib/puppet/pops/adaptable.rb +2 -2
  133. data/lib/puppet/pops/adapters.rb +4 -0
  134. data/lib/puppet/pops/binder/binder.rb +421 -0
  135. data/lib/puppet/pops/binder/binder_issues.rb +142 -0
  136. data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
  137. data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
  138. data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
  139. data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
  140. data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
  141. data/lib/puppet/pops/binder/bindings_model.rb +215 -0
  142. data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
  143. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  144. data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
  145. data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
  146. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  147. data/lib/puppet/pops/binder/config/issues.rb +106 -0
  148. data/lib/puppet/pops/binder/hiera2.rb +10 -0
  149. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
  150. data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
  151. data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
  152. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
  153. data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
  154. data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
  155. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
  156. data/lib/puppet/pops/binder/injector.rb +688 -0
  157. data/lib/puppet/pops/binder/injector_entry.rb +53 -0
  158. data/lib/puppet/pops/binder/key_factory.rb +61 -0
  159. data/lib/puppet/pops/binder/producers.rb +829 -0
  160. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
  161. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  162. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
  163. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  164. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
  165. data/lib/puppet/pops/binder/system_bindings.rb +72 -0
  166. data/lib/puppet/pops/issue_reporter.rb +75 -0
  167. data/lib/puppet/pops/issues.rb +9 -5
  168. data/lib/puppet/pops/model/ast_transformer.rb +4 -4
  169. data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
  170. data/lib/puppet/pops/model/factory.rb +25 -13
  171. data/lib/puppet/pops/model/model.rb +1 -1
  172. data/lib/puppet/pops/model/tree_dumper.rb +2 -2
  173. data/lib/puppet/pops/parser/egrammar.ra +0 -1
  174. data/lib/puppet/pops/parser/eparser.rb +1 -2
  175. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  176. data/lib/puppet/pops/parser/lexer.rb +8 -6
  177. data/lib/puppet/pops/types/class_loader.rb +118 -0
  178. data/lib/puppet/pops/types/type_calculator.rb +557 -0
  179. data/lib/puppet/pops/types/type_factory.rb +147 -0
  180. data/lib/puppet/pops/types/type_parser.rb +117 -0
  181. data/lib/puppet/pops/types/types.rb +132 -0
  182. data/lib/puppet/pops/validation.rb +146 -17
  183. data/lib/puppet/pops/validation/checker3_1.rb +1 -1
  184. data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
  185. data/lib/puppet/property.rb +3 -3
  186. data/lib/puppet/property/keyvalue.rb +1 -1
  187. data/lib/puppet/provider.rb +2 -2
  188. data/lib/puppet/provider/aixobject.rb +19 -21
  189. data/lib/puppet/provider/augeas/augeas.rb +3 -1
  190. data/lib/puppet/provider/command.rb +2 -2
  191. data/lib/puppet/provider/group/aix.rb +1 -1
  192. data/lib/puppet/provider/group/ldap.rb +1 -1
  193. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  194. data/lib/puppet/provider/mailalias/aliases.rb +3 -8
  195. data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
  196. data/lib/puppet/provider/mount.rb +8 -3
  197. data/lib/puppet/provider/nameservice.rb +1 -1
  198. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  199. data/lib/puppet/provider/package/appdmg.rb +1 -1
  200. data/lib/puppet/provider/package/apt.rb +0 -1
  201. data/lib/puppet/provider/package/dpkg.rb +86 -32
  202. data/lib/puppet/provider/package/fink.rb +0 -2
  203. data/lib/puppet/provider/package/freebsd.rb +0 -2
  204. data/lib/puppet/provider/package/openbsd.rb +57 -10
  205. data/lib/puppet/provider/package/opkg.rb +0 -1
  206. data/lib/puppet/provider/package/pacman.rb +0 -1
  207. data/lib/puppet/provider/package/pip.rb +1 -1
  208. data/lib/puppet/provider/package/pkgdmg.rb +17 -6
  209. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  210. data/lib/puppet/provider/package/portage.rb +9 -1
  211. data/lib/puppet/provider/package/ports.rb +2 -2
  212. data/lib/puppet/provider/package/rpm.rb +29 -12
  213. data/lib/puppet/provider/package/rug.rb +1 -1
  214. data/lib/puppet/provider/package/urpmi.rb +11 -15
  215. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  216. data/lib/puppet/provider/package/windows/package.rb +1 -26
  217. data/lib/puppet/provider/package/yum.rb +1 -1
  218. data/lib/puppet/provider/package/zypper.rb +22 -3
  219. data/lib/puppet/provider/parsedfile.rb +1 -12
  220. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
  221. data/lib/puppet/provider/service/base.rb +1 -1
  222. data/lib/puppet/provider/service/daemontools.rb +3 -3
  223. data/lib/puppet/provider/service/debian.rb +1 -1
  224. data/lib/puppet/provider/service/init.rb +14 -20
  225. data/lib/puppet/provider/service/openrc.rb +3 -1
  226. data/lib/puppet/provider/service/redhat.rb +5 -8
  227. data/lib/puppet/provider/service/runit.rb +3 -2
  228. data/lib/puppet/provider/service/systemd.rb +1 -1
  229. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  230. data/lib/puppet/provider/sshkey/parsed.rb +0 -2
  231. data/lib/puppet/provider/user/aix.rb +25 -12
  232. data/lib/puppet/provider/user/directoryservice.rb +4 -7
  233. data/lib/puppet/provider/user/ldap.rb +0 -1
  234. data/lib/puppet/provider/user/user_role_add.rb +2 -0
  235. data/lib/puppet/provider/user/useradd.rb +1 -1
  236. data/lib/puppet/provider/zone/solaris.rb +1 -2
  237. data/lib/puppet/reference/metaparameter.rb +1 -1
  238. data/lib/puppet/reference/type.rb +1 -1
  239. data/lib/puppet/reports/rrdgraph.rb +1 -1
  240. data/lib/puppet/reports/tagmail.rb +1 -1
  241. data/lib/puppet/resource.rb +16 -4
  242. data/lib/puppet/resource/catalog.rb +111 -173
  243. data/lib/puppet/resource/status.rb +42 -3
  244. data/lib/puppet/resource/type.rb +33 -46
  245. data/lib/puppet/resource/type_collection.rb +19 -15
  246. data/lib/puppet/run.rb +5 -1
  247. data/lib/puppet/scheduler/scheduler.rb +14 -15
  248. data/lib/puppet/settings.rb +78 -41
  249. data/lib/puppet/settings/boolean_setting.rb +0 -2
  250. data/lib/puppet/settings/config_file.rb +0 -2
  251. data/lib/puppet/settings/directory_setting.rb +0 -2
  252. data/lib/puppet/settings/duration_setting.rb +0 -2
  253. data/lib/puppet/settings/enum_setting.rb +16 -0
  254. data/lib/puppet/settings/file_setting.rb +0 -2
  255. data/lib/puppet/settings/path_setting.rb +0 -2
  256. data/lib/puppet/settings/string_setting.rb +0 -3
  257. data/lib/puppet/settings/terminus_setting.rb +0 -2
  258. data/lib/puppet/ssl/certificate_authority.rb +102 -9
  259. data/lib/puppet/test/test_helper.rb +1 -0
  260. data/lib/puppet/transaction.rb +130 -292
  261. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  262. data/lib/puppet/transaction/event.rb +16 -1
  263. data/lib/puppet/transaction/report.rb +34 -14
  264. data/lib/puppet/transaction/resource_harness.rb +16 -19
  265. data/lib/puppet/type.rb +59 -53
  266. data/lib/puppet/type/component.rb +0 -2
  267. data/lib/puppet/type/cron.rb +13 -2
  268. data/lib/puppet/type/exec.rb +5 -7
  269. data/lib/puppet/type/file.rb +9 -32
  270. data/lib/puppet/type/file/content.rb +4 -1
  271. data/lib/puppet/type/file/ctime.rb +3 -1
  272. data/lib/puppet/type/file/ensure.rb +1 -1
  273. data/lib/puppet/type/file/mode.rb +0 -1
  274. data/lib/puppet/type/file/mtime.rb +2 -1
  275. data/lib/puppet/type/group.rb +7 -9
  276. data/lib/puppet/type/host.rb +1 -2
  277. data/lib/puppet/type/mcx.rb +0 -1
  278. data/lib/puppet/type/mount.rb +38 -6
  279. data/lib/puppet/type/package.rb +2 -2
  280. data/lib/puppet/type/resources.rb +5 -4
  281. data/lib/puppet/type/schedule.rb +1 -4
  282. data/lib/puppet/type/selmodule.rb +1 -1
  283. data/lib/puppet/type/service.rb +1 -3
  284. data/lib/puppet/type/tidy.rb +3 -3
  285. data/lib/puppet/type/user.rb +9 -13
  286. data/lib/puppet/type/yumrepo.rb +11 -7
  287. data/lib/puppet/util.rb +14 -7
  288. data/lib/puppet/util/autoload.rb +0 -1
  289. data/lib/puppet/util/backups.rb +1 -3
  290. data/lib/puppet/util/classgen.rb +1 -1
  291. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
  292. data/lib/puppet/util/command_line/trollop.rb +1 -1
  293. data/lib/puppet/util/constant_inflector.rb +1 -2
  294. data/lib/puppet/util/errors.rb +1 -0
  295. data/lib/puppet/util/file_watcher.rb +28 -0
  296. data/lib/puppet/util/fileparsing.rb +1 -3
  297. data/lib/puppet/util/filetype.rb +0 -1
  298. data/lib/puppet/util/http_proxy.rb +38 -0
  299. data/lib/puppet/util/ldap/manager.rb +1 -2
  300. data/lib/puppet/util/log.rb +31 -10
  301. data/lib/puppet/util/log/destinations.rb +0 -50
  302. data/lib/puppet/util/metric.rb +8 -1
  303. data/lib/puppet/util/monkey_patches.rb +14 -148
  304. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  305. data/lib/puppet/util/network_device/config.rb +6 -9
  306. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  307. data/lib/puppet/util/pidlock.rb +3 -0
  308. data/lib/puppet/util/posix.rb +1 -1
  309. data/lib/puppet/util/profiler.rb +1 -1
  310. data/lib/puppet/util/rdoc.rb +1 -1
  311. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
  312. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
  313. data/lib/puppet/util/retryaction.rb +0 -1
  314. data/lib/puppet/util/symbolic_file_mode.rb +5 -1
  315. data/lib/puppet/util/tagging.rb +0 -2
  316. data/lib/puppet/util/warnings.rb +3 -0
  317. data/lib/puppet/util/watched_file.rb +37 -0
  318. data/lib/puppet/util/watcher.rb +17 -0
  319. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  320. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  321. data/lib/puppet/util/watcher/timer.rb +19 -0
  322. data/lib/puppet/util/windows/user.rb +1 -1
  323. data/lib/puppet/version.rb +1 -1
  324. data/lib/puppetx.rb +109 -0
  325. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  326. data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
  327. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  328. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
  329. data/lib/semver.rb +1 -1
  330. data/man/man8/puppet-kick.8 +1 -1
  331. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  332. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
  333. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
  334. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
  335. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
  336. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
  337. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
  338. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
  339. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
  340. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
  341. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
  342. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
  343. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
  344. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
  345. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
  346. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
  347. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
  348. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
  349. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
  350. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  351. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
  352. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
  353. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
  354. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
  355. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
  356. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
  357. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
  358. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
  359. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
  360. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
  361. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
  362. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
  363. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
  364. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  365. data/spec/integration/agent/logging_spec.rb +178 -0
  366. data/spec/integration/configurer_spec.rb +1 -1
  367. data/spec/integration/defaults_spec.rb +0 -6
  368. data/spec/integration/network/authconfig_spec.rb +19 -0
  369. data/spec/integration/network/server/webrick_spec.rb +10 -11
  370. data/spec/integration/parser/catalog_spec.rb +85 -0
  371. data/spec/integration/provider/cron/crontab_spec.rb +11 -0
  372. data/spec/integration/provider/mount_spec.rb +1 -0
  373. data/spec/integration/transaction_spec.rb +8 -8
  374. data/spec/integration/type/file_spec.rb +1 -1
  375. data/spec/integration/util/settings_spec.rb +58 -11
  376. data/spec/lib/matchers/include_in_order.rb +21 -0
  377. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  378. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  379. data/spec/lib/puppet_spec/compiler.rb +24 -0
  380. data/spec/lib/puppet_spec/pops.rb +16 -0
  381. data/spec/spec_helper.rb +0 -1
  382. data/spec/unit/application/agent_spec.rb +145 -145
  383. data/spec/unit/application/apply_spec.rb +1 -1
  384. data/spec/unit/application/doc_spec.rb +1 -1
  385. data/spec/unit/application/face_base_spec.rb +3 -3
  386. data/spec/unit/application/facts_spec.rb +1 -0
  387. data/spec/unit/application/master_spec.rb +0 -15
  388. data/spec/unit/application/queue_spec.rb +6 -12
  389. data/spec/unit/application/resource_spec.rb +1 -1
  390. data/spec/unit/configurer/fact_handler_spec.rb +19 -50
  391. data/spec/unit/configurer_spec.rb +23 -7
  392. data/spec/unit/daemon_spec.rb +97 -121
  393. data/spec/unit/defaults_spec.rb +44 -0
  394. data/spec/unit/face/node_spec.rb +2 -2
  395. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
  396. data/spec/unit/file_serving/configuration_spec.rb +2 -2
  397. data/spec/unit/file_serving/mount/file_spec.rb +4 -4
  398. data/spec/unit/forge/repository_spec.rb +9 -29
  399. data/spec/unit/graph/key_spec.rb +41 -0
  400. data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
  401. data/spec/unit/graph/relationship_graph_spec.rb +393 -0
  402. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  403. data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
  404. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  405. data/spec/unit/hiera_puppet_spec.rb +1 -1
  406. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
  407. data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
  408. data/spec/unit/indirector/face_spec.rb +1 -1
  409. data/spec/unit/indirector/facts/facter_spec.rb +11 -1
  410. data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
  411. data/spec/unit/indirector/hiera_spec.rb +1 -1
  412. data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
  413. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
  414. data/spec/unit/indirector/request_spec.rb +92 -39
  415. data/spec/unit/indirector/rest_spec.rb +1 -0
  416. data/spec/unit/indirector_spec.rb +2 -2
  417. data/spec/unit/interface/option_builder_spec.rb +1 -0
  418. data/spec/unit/interface/option_spec.rb +1 -0
  419. data/spec/unit/interface_spec.rb +2 -2
  420. data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
  421. data/spec/unit/module_tool/metadata_spec.rb +13 -0
  422. data/spec/unit/network/authstore_spec.rb +1 -1
  423. data/spec/unit/network/format_handler_spec.rb +33 -282
  424. data/spec/unit/network/format_support_spec.rb +199 -0
  425. data/spec/unit/network/formats_spec.rb +2 -2
  426. data/spec/unit/network/http/connection_spec.rb +88 -7
  427. data/spec/unit/network/http/handler_spec.rb +271 -249
  428. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  429. data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
  430. data/spec/unit/network/http_pool_spec.rb +40 -0
  431. data/spec/unit/network/server_spec.rb +18 -207
  432. data/spec/unit/node/facts_spec.rb +68 -17
  433. data/spec/unit/other/selinux_spec.rb +24 -20
  434. data/spec/unit/parameter/boolean_spec.rb +25 -0
  435. data/spec/unit/parameter/value_collection_spec.rb +7 -7
  436. data/spec/unit/parameter_spec.rb +10 -13
  437. data/spec/unit/parser/ast/function_spec.rb +4 -4
  438. data/spec/unit/parser/ast/leaf_spec.rb +45 -6
  439. data/spec/unit/parser/collector_spec.rb +3 -3
  440. data/spec/unit/parser/compiler_spec.rb +4 -3
  441. data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
  442. data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
  443. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  444. data/spec/unit/parser/functions/lookup_spec.rb +96 -0
  445. data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
  446. data/spec/unit/parser/functions/split_spec.rb +2 -2
  447. data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
  448. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
  449. data/spec/unit/parser/functions_spec.rb +7 -7
  450. data/spec/unit/parser/lexer_spec.rb +1 -1
  451. data/spec/unit/parser/methods/collect_spec.rb +43 -0
  452. data/spec/unit/parser/resource_spec.rb +9 -9
  453. data/spec/unit/parser/scope_spec.rb +45 -2
  454. data/spec/unit/parser/type_loader_spec.rb +159 -175
  455. data/spec/unit/pops/binder/binder_spec.rb +62 -0
  456. data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
  457. data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
  458. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  459. data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
  460. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
  461. data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
  462. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
  463. data/spec/unit/pops/binder/injector_spec.rb +789 -0
  464. data/spec/unit/pops/containment_spec.rb +1 -0
  465. data/spec/unit/pops/issues_spec.rb +1 -1
  466. data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
  467. data/spec/unit/pops/parser/lexer_spec.rb +1 -1
  468. data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
  469. data/spec/unit/pops/parser/parser_spec.rb +1 -1
  470. data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
  471. data/spec/unit/pops/types/type_factory_spec.rb +65 -0
  472. data/spec/unit/pops/types/type_parser_spec.rb +93 -0
  473. data/spec/unit/property/list_spec.rb +1 -1
  474. data/spec/unit/property/ordered_list_spec.rb +1 -1
  475. data/spec/unit/provider/aixobject_spec.rb +101 -0
  476. data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
  477. data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
  478. data/spec/unit/provider/mount/parsed_spec.rb +44 -56
  479. data/spec/unit/provider/mount_spec.rb +11 -2
  480. data/spec/unit/provider/naginator_spec.rb +8 -0
  481. data/spec/unit/provider/package/apt_spec.rb +5 -1
  482. data/spec/unit/provider/package/aptitude_spec.rb +9 -5
  483. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  484. data/spec/unit/provider/package/dpkg_spec.rb +274 -99
  485. data/spec/unit/provider/package/openbsd_spec.rb +84 -1
  486. data/spec/unit/provider/package/opkg_spec.rb +3 -3
  487. data/spec/unit/provider/package/pip_spec.rb +16 -0
  488. data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
  489. data/spec/unit/provider/package/rpm_spec.rb +112 -21
  490. data/spec/unit/provider/package/urpmi.rb +80 -0
  491. data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
  492. data/spec/unit/provider/package/yum_spec.rb +85 -0
  493. data/spec/unit/provider/package/zypper_spec.rb +25 -6
  494. data/spec/unit/provider/parsedfile_spec.rb +3 -2
  495. data/spec/unit/provider/service/init_spec.rb +10 -10
  496. data/spec/unit/provider/service/openrc_spec.rb +16 -0
  497. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  498. data/spec/unit/provider/service/redhat_spec.rb +7 -0
  499. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
  500. data/spec/unit/provider/user/aix_spec.rb +89 -0
  501. data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
  502. data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
  503. data/spec/unit/provider_spec.rb +2 -13
  504. data/spec/unit/reports/http_spec.rb +1 -1
  505. data/spec/unit/resource/catalog_spec.rb +23 -97
  506. data/spec/unit/resource/resource_type.json +34 -0
  507. data/spec/unit/resource/status_spec.rb +56 -0
  508. data/spec/unit/resource/type_collection_spec.rb +6 -6
  509. data/spec/unit/resource/type_spec.rb +25 -5
  510. data/spec/unit/resource_spec.rb +68 -24
  511. data/spec/unit/run_spec.rb +16 -0
  512. data/spec/unit/scheduler/scheduler_spec.rb +14 -27
  513. data/spec/unit/semver_spec.rb +5 -0
  514. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  515. data/spec/unit/settings_spec.rb +53 -44
  516. data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
  517. data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
  518. data/spec/unit/transaction/event_manager_spec.rb +2 -2
  519. data/spec/unit/transaction/event_spec.rb +57 -0
  520. data/spec/unit/transaction/report_spec.rb +66 -0
  521. data/spec/unit/transaction/resource_harness_spec.rb +27 -20
  522. data/spec/unit/transaction_spec.rb +182 -390
  523. data/spec/unit/type/augeas_spec.rb +3 -3
  524. data/spec/unit/type/component_spec.rb +0 -9
  525. data/spec/unit/type/computer_spec.rb +1 -1
  526. data/spec/unit/type/cron_spec.rb +2 -2
  527. data/spec/unit/type/exec_spec.rb +4 -2
  528. data/spec/unit/type/file/content_spec.rb +11 -0
  529. data/spec/unit/type/file/group_spec.rb +1 -1
  530. data/spec/unit/type/file_spec.rb +16 -8
  531. data/spec/unit/type/mount_spec.rb +445 -259
  532. data/spec/unit/type/package_spec.rb +4 -4
  533. data/spec/unit/type/resources_spec.rb +30 -1
  534. data/spec/unit/type/user_spec.rb +26 -3
  535. data/spec/unit/type/yumrepo_spec.rb +7 -27
  536. data/spec/unit/type/zone_spec.rb +4 -1
  537. data/spec/unit/type_spec.rb +66 -33
  538. data/spec/unit/util/backups_spec.rb +3 -3
  539. data/spec/unit/util/http_proxy_spec.rb +83 -0
  540. data/spec/unit/util/log_spec.rb +79 -8
  541. data/spec/unit/util/metric_spec.rb +12 -0
  542. data/spec/unit/util/monkey_patches_spec.rb +6 -0
  543. data/spec/unit/util/network_device/config_spec.rb +26 -64
  544. data/spec/unit/util/pidlock_spec.rb +4 -1
  545. data/spec/unit/util/tagging_spec.rb +5 -9
  546. data/spec/unit/util/warnings_spec.rb +1 -1
  547. data/spec/unit/util/watched_file_spec.rb +52 -0
  548. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  549. data/spec/unit/util/watcher_spec.rb +56 -0
  550. data/spec/unit/util_spec.rb +16 -0
  551. metadata +2767 -2576
  552. data/ext/debian/puppet.manpages +0 -32
  553. data/ext/osx/PackageInfo.plist +0 -36
  554. data/ext/osx/createpackage.sh +0 -187
  555. data/ext/redhat/rundir-perms.patch +0 -28
  556. data/lib/puppet/external/base64.rb +0 -19
  557. data/lib/puppet/util/graph.rb +0 -27
  558. data/lib/puppet/util/loadedfile.rb +0 -61
  559. data/lib/puppet/util/log_paths.rb +0 -22
  560. data/lib/puppet/util/subclass_loader.rb +0 -78
  561. data/spec/monkey_patches/publicize_methods.rb +0 -11
  562. data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Type.type(:package).provider(:urpmi) do
4
+
5
+ before do
6
+ Puppet::Util::Execution.expects(:execute).never
7
+ %w[rpm urpmi urpme urpmq].each do |executable|
8
+ Puppet::Util.stubs(:which).with(executable).returns(executable)
9
+ end
10
+ Puppet::Util::Execution.stubs(:execute).with(['rpm', '--version'], anything).returns 'RPM version 4.9.1.3'
11
+ end
12
+
13
+ let(:resource) do
14
+ Puppet::Type.type(:package).new(:name => 'foopkg')
15
+ end
16
+
17
+ before do
18
+ subject.resource = resource
19
+ Puppet::Type.type(:package).stubs(:defaultprovider).returns described_class
20
+ end
21
+
22
+ describe '#install' do
23
+ before do
24
+ subject.stubs(:rpm).with('-q', 'foopkg', any_parameters).returns "foopkg 0 1.2.3.4 5 noarch :DESC:\n"
25
+ end
26
+
27
+ describe 'without a version' do
28
+ it 'installs the unversioned package' do
29
+ resource[:ensure] = :present
30
+ Puppet::Util::Execution.expects(:execute).with(['urpmi', '--auto', 'foopkg'], anything)
31
+ subject.install
32
+ end
33
+ end
34
+
35
+ describe 'with a version' do
36
+ it 'installs the versioned package' do
37
+ resource[:ensure] = '4.5.6'
38
+ Puppet::Util::Execution.expects(:execute).with(['urpmi', '--auto', 'foopkg-4.5.6'], anything)
39
+ subject.install
40
+ end
41
+ end
42
+
43
+ describe "and the package install fails" do
44
+ it "raises an error" do
45
+ Puppet::Util::Execution.stubs(:execute).with(['urpmi', '--auto', 'foopkg'], anything)
46
+ subject.stubs(:query)
47
+ expect { subject.install }.to raise_error Puppet::Error, /Package \S+ was not present after trying to install it/
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '#latest' do
53
+ let(:urpmq_output) { 'foopkg : Lorem ipsum dolor sit amet, consectetur adipisicing elit ( 7.8.9-1.mga2 )' }
54
+
55
+ it "uses urpmq to determine the latest package" do
56
+ Puppet::Util::Execution.expects(:execute).with(['urpmq', '-S', 'foopkg'], anything).returns urpmq_output
57
+ subject.latest.should == '7.8.9-1.mga2'
58
+ end
59
+
60
+ it "falls back to the current version" do
61
+ resource[:ensure] = '5.4.3'
62
+ Puppet::Util::Execution.expects(:execute).with(['urpmq', '-S', 'foopkg'], anything).returns ''
63
+ subject.latest.should == '5.4.3'
64
+ end
65
+ end
66
+
67
+ describe '#update' do
68
+ it 'delegates to #install' do
69
+ subject.expects(:install)
70
+ subject.update
71
+ end
72
+ end
73
+
74
+ describe '#purge' do
75
+ it 'uses urpme to purge packages' do
76
+ Puppet::Util::Execution.expects(:execute).with(['urpme', '--auto', 'foopkg'], anything)
77
+ subject.purge
78
+ end
79
+ end
80
+ end
@@ -77,7 +77,7 @@ describe Puppet::Provider::Package::Windows::ExePackage do
77
77
  it 'should install using the source' do
78
78
  cmd = subject.install_command({:source => source})
79
79
 
80
- cmd.should == ['cmd.exe', '/c', 'start', '/w', source]
80
+ cmd.should == ['cmd.exe', '/c', 'start', '"puppet-install"', '/w', source]
81
81
  end
82
82
  end
83
83
 
@@ -108,4 +108,89 @@ describe provider do
108
108
  end
109
109
  end
110
110
  end
111
+
112
+ describe 'prefetching' do
113
+ let(:nevra_format) { Puppet::Type::Package::ProviderRpm::NEVRA_FORMAT }
114
+
115
+ let(:packages) do
116
+ <<-RPM_OUTPUT
117
+ cracklib-dicts 0 2.8.9 3.3 x86_64 :DESC: The standard CrackLib dictionaries
118
+ basesystem 0 8.0 5.1.1.el5.centos noarch :DESC: The skeleton package which defines a simple Red Hat Enterprise Linux system
119
+ chkconfig 0 1.3.30.2 2.el5 x86_64 :DESC: A system tool for maintaining the /etc/rc*.d hierarchy
120
+ myresource 0 1.2.3.4 5.el4 noarch :DESC: Now with summary
121
+ mysummaryless 0 1.2.3.4 5.el4 noarch :DESC:
122
+ RPM_OUTPUT
123
+ end
124
+
125
+ let(:yumhelper_output) do
126
+ <<-YUMHELPER_OUTPUT
127
+ * base: centos.tcpdiag.net
128
+ * extras: centos.mirrors.hoobly.com
129
+ * updates: mirrors.arsc.edu
130
+ _pkg nss-tools 0 3.14.3 4.el6_4 x86_64
131
+ _pkg pixman 0 0.26.2 5.el6_4 x86_64
132
+ _pkg myresource 0 1.2.3.4 5.el4 noarch
133
+ _pkg mysummaryless 0 1.2.3.4 5.el4 noarch
134
+ YUMHELPER_OUTPUT
135
+ end
136
+
137
+ let(:execute_options) do
138
+ {:failonfail => true, :combine => true, :custom_environment => {}}
139
+ end
140
+
141
+ let(:rpm_version) { "RPM version 4.8.0\n" }
142
+
143
+ let(:package_type) { Puppet::Type.type(:package) }
144
+ let(:yum_provider) { provider }
145
+
146
+ def pretend_we_are_root_for_yum_provider
147
+ Process.stubs(:euid).returns(0)
148
+ end
149
+
150
+ def expect_yum_provider_to_provide_rpm
151
+ Puppet::Type::Package::ProviderYum.stubs(:rpm).with('--version').returns(rpm_version)
152
+ Puppet::Type::Package::ProviderYum.expects(:command).with(:rpm).returns("/bin/rpm")
153
+ end
154
+
155
+ def expect_execpipe_to_provide_package_info_for_an_rpm_query
156
+ Puppet::Util::Execution.expects(:execpipe).with("/bin/rpm -qa --nosignature --nodigest --qf #{nevra_format}").yields(packages)
157
+ end
158
+
159
+ def expect_python_yumhelper_call_to_return_latest_info
160
+ Puppet::Type::Package::ProviderYum.expects(:python).with(regexp_matches(/yumhelper.py$/)).returns(yumhelper_output)
161
+ end
162
+
163
+ def a_package_type_instance_with_yum_provider_and_ensure_latest(name)
164
+ type_instance = package_type.new(:name => name)
165
+ type_instance.provider = yum_provider.new
166
+ type_instance[:ensure] = :latest
167
+ return type_instance
168
+ end
169
+
170
+ before do
171
+ pretend_we_are_root_for_yum_provider
172
+ expect_yum_provider_to_provide_rpm
173
+ expect_execpipe_to_provide_package_info_for_an_rpm_query
174
+ expect_python_yumhelper_call_to_return_latest_info
175
+ end
176
+
177
+ it "injects latest provider info into passed resources when prefetching" do
178
+ myresource = a_package_type_instance_with_yum_provider_and_ensure_latest('myresource')
179
+ mysummaryless = a_package_type_instance_with_yum_provider_and_ensure_latest('mysummaryless')
180
+
181
+ yum_provider.prefetch({ "myresource" => myresource, "mysummaryless" => mysummaryless })
182
+
183
+ expect(@logs.map(&:message).grep(/^Failed to match rpm line/)).to be_empty
184
+ expect(myresource.provider.latest_info).to eq({
185
+ :name=>"myresource",
186
+ :epoch=>"0",
187
+ :version=>"1.2.3.4",
188
+ :release=>"5.el4",
189
+ :arch=>"noarch",
190
+ :description=>nil,
191
+ :provider=>:yum,
192
+ :ensure=>"1.2.3.4-5.el4"
193
+ })
194
+ end
195
+ end
111
196
  end
@@ -39,13 +39,18 @@ describe provider_class do
39
39
  @provider.should respond_to(:latest)
40
40
  end
41
41
 
42
+ it "should have a install_options method" do
43
+ @provider = provider_class.new
44
+ @provider.should respond_to(:install_options)
45
+ end
46
+
42
47
  describe "when installing with zypper version >= 1.0" do
43
48
  it "should use a command-line with versioned package'" do
44
49
  @resource.stubs(:should).with(:ensure).returns "1.2.3-4.5.6"
45
50
  @provider.stubs(:zypper_version).returns "1.2.8"
46
51
 
47
52
  @provider.expects(:zypper).with('--quiet', :install,
48
- '--auto-agree-with-licenses', '--no-confirm', 'mypackage-1.2.3-4.5.6')
53
+ '--auto-agree-with-licenses', '--no-confirm', nil, 'mypackage-1.2.3-4.5.6')
49
54
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
50
55
  @provider.install
51
56
  end
@@ -54,7 +59,7 @@ describe provider_class do
54
59
  @resource.stubs(:should).with(:ensure).returns :latest
55
60
  @provider.stubs(:zypper_version).returns "1.2.8"
56
61
  @provider.expects(:zypper).with('--quiet', :install,
57
- '--auto-agree-with-licenses', '--no-confirm', 'mypackage')
62
+ '--auto-agree-with-licenses', '--no-confirm', nil, 'mypackage')
58
63
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
59
64
  @provider.install
60
65
  end
@@ -66,7 +71,7 @@ describe provider_class do
66
71
  @provider.stubs(:zypper_version).returns "0.6.104"
67
72
 
68
73
  @provider.expects(:zypper).with('--terse', :install,
69
- '--auto-agree-with-licenses', '--no-confirm', 'mypackage-1.2.3-4.5.6')
74
+ '--auto-agree-with-licenses', '--no-confirm', nil, 'mypackage-1.2.3-4.5.6')
70
75
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
71
76
  @provider.install
72
77
  end
@@ -75,7 +80,7 @@ describe provider_class do
75
80
  @resource.stubs(:should).with(:ensure).returns :latest
76
81
  @provider.stubs(:zypper_version).returns "0.6.104"
77
82
  @provider.expects(:zypper).with('--terse', :install,
78
- '--auto-agree-with-licenses', '--no-confirm', 'mypackage')
83
+ '--auto-agree-with-licenses', '--no-confirm', nil, 'mypackage')
79
84
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
80
85
  @provider.install
81
86
  end
@@ -87,7 +92,7 @@ describe provider_class do
87
92
  @provider.stubs(:zypper_version).returns "0.6.13"
88
93
 
89
94
  @provider.expects(:zypper).with('--terse', :install,
90
- '--no-confirm', 'mypackage-1.2.3-4.5.6')
95
+ '--no-confirm', nil, 'mypackage-1.2.3-4.5.6')
91
96
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
92
97
  @provider.install
93
98
  end
@@ -96,7 +101,7 @@ describe provider_class do
96
101
  @resource.stubs(:should).with(:ensure).returns :latest
97
102
  @provider.stubs(:zypper_version).returns "0.6.13"
98
103
  @provider.expects(:zypper).with('--terse', :install,
99
- '--no-confirm', 'mypackage')
104
+ '--no-confirm', nil, 'mypackage')
100
105
  @provider.expects(:query).returns "mypackage 0 1.2.3 4.5.6 x86_64"
101
106
  @provider.install
102
107
  end
@@ -119,4 +124,18 @@ describe provider_class do
119
124
  end
120
125
  end
121
126
 
127
+ describe "when installing with zypper install options" do
128
+ it "should install the package without checking keys" do
129
+ @resource.stubs(:[]).with(:name).returns "php5"
130
+ @resource.stubs(:should).with(:install_options).returns ['--no-gpg-check', {'-p' => '/vagrant/files/localrepo/'}]
131
+ @resource.stubs(:should).with(:ensure).returns "5.4.10-4.5.6"
132
+ @provider.stubs(:zypper_version).returns "1.2.8"
133
+
134
+ @provider.expects(:install_options).returns "--no-gpg-check -p \"/vagrant/files/localrepo/\""
135
+ @provider.expects(:zypper).with('--quiet', :install,
136
+ '--auto-agree-with-licenses', '--no-confirm', '--no-gpg-check -p "/vagrant/files/localrepo/"', 'php5-5.4.10-4.5.6')
137
+ @provider.expects(:query).returns "php5 0 5.4.10 4.5.6 x86_64"
138
+ @provider.install
139
+ end
140
+ end
122
141
  end
@@ -1,11 +1,11 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'puppet_spec/files'
3
4
 
4
5
  require 'puppet/provider/parsedfile'
5
6
 
6
7
  # Most of the tests for this are still in test/ral/provider/parsedfile.rb.
7
8
  describe Puppet::Provider::ParsedFile do
8
-
9
9
  # The ParsedFile provider class is meant to be used as an abstract base class
10
10
  # but also stores a lot of state within the singleton class. To avoid
11
11
  # sharing data between classes we construct an anonymous class that inherits
@@ -136,9 +136,10 @@ describe Puppet::Provider::ParsedFile do
136
136
  end
137
137
 
138
138
  describe "A very basic provider based on ParsedFile" do
139
+ include PuppetSpec::Files
139
140
 
140
141
  let(:input_text) { File.read(my_fixture('simple.txt')) }
141
- let(:target) { File.expand_path("/tmp/test") }
142
+ let(:target) { tmpfile('parsedfile_spec') }
142
143
 
143
144
  subject do
144
145
  example_provider_class = Class.new(Puppet::Provider::ParsedFile)
@@ -103,28 +103,28 @@ describe Puppet::Type.type(:service).provider(:init) do
103
103
  end
104
104
 
105
105
  it "should be able to find the init script in the service path" do
106
- File.expects(:stat).with("#{paths[0]}/myservice").returns true
107
- File.expects(:stat).with("#{paths[1]}/myservice").never # first one wins
106
+ File.expects(:exist?).with("#{paths[0]}/myservice").returns true
107
+ File.expects(:exist?).with("#{paths[1]}/myservice").never # first one wins
108
108
  provider.initscript.should == "/service/path/myservice"
109
109
  end
110
110
 
111
111
  it "should be able to find the init script in an alternate service path" do
112
- File.expects(:stat).with("#{paths[0]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[0]}/myservice"
113
- File.expects(:stat).with("#{paths[1]}/myservice").returns true
112
+ File.expects(:exist?).with("#{paths[0]}/myservice").returns false
113
+ File.expects(:exist?).with("#{paths[1]}/myservice").returns true
114
114
  provider.initscript.should == "/alt/service/path/myservice"
115
115
  end
116
116
 
117
117
  it "should be able to find the init script if it ends with .sh" do
118
- File.expects(:stat).with("#{paths[0]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[0]}/myservice"
119
- File.expects(:stat).with("#{paths[1]}/myservice").raises Errno::ENOENT, "No such file or directory - #{paths[1]}/myservice"
120
- File.expects(:stat).with("#{paths[0]}/myservice.sh").returns true
118
+ File.expects(:exist?).with("#{paths[0]}/myservice").returns false
119
+ File.expects(:exist?).with("#{paths[1]}/myservice").returns false
120
+ File.expects(:exist?).with("#{paths[0]}/myservice.sh").returns true
121
121
  provider.initscript.should == "/service/path/myservice.sh"
122
122
  end
123
123
 
124
124
  it "should fail if the service isn't there" do
125
125
  paths.each do |path|
126
- File.expects(:stat).with("#{path}/myservice").raises Errno::ENOENT, "No such file or directory - #{path}/myservice"
127
- File.expects(:stat).with("#{path}/myservice.sh").raises Errno::ENOENT, "No such file or directory - #{path}/myservice.sh"
126
+ File.expects(:exist?).with("#{path}/myservice").returns false
127
+ File.expects(:exist?).with("#{path}/myservice.sh").returns false
128
128
  end
129
129
  expect { provider.initscript }.to raise_error(Puppet::Error, "Could not find init script for 'myservice'")
130
130
  end
@@ -134,7 +134,7 @@ describe Puppet::Type.type(:service).provider(:init) do
134
134
  before :each do
135
135
  File.stubs(:directory?).with("/service/path").returns true
136
136
  File.stubs(:directory?).with("/alt/service/path").returns true
137
- File.stubs(:stat).with("/service/path/myservice").returns true
137
+ File.stubs(:exist?).with("/service/path/myservice").returns true
138
138
  end
139
139
 
140
140
  [:start, :stop, :status, :restart].each do |method|
@@ -7,7 +7,10 @@ describe Puppet::Type.type(:service).provider(:openrc) do
7
7
  before :each do
8
8
  Puppet::Type.type(:service).stubs(:defaultprovider).returns described_class
9
9
  ['/sbin/rc-service', '/bin/rc-status', '/sbin/rc-update'].each do |command|
10
+ # Puppet::Util is both mixed in to providers and is also invoked directly
11
+ # by Puppet::Provider::CommandDefiner, so we have to stub both out.
10
12
  described_class.stubs(:which).with(command).returns(command)
13
+ Puppet::Util.stubs(:which).with(command).returns(command)
11
14
  end
12
15
  end
13
16
 
@@ -58,6 +61,19 @@ describe Puppet::Type.type(:service).provider(:openrc) do
58
61
  end
59
62
  end
60
63
 
64
+ describe 'when invoking `rc-status`' do
65
+ subject { described_class.new(Puppet::Type.type(:service).new(:name => 'urandom')) }
66
+ it "clears the RC_SVCNAME environment variable" do
67
+ Puppet::Util.withenv(:RC_SVCNAME => 'puppet') do
68
+ Puppet::Util::Execution.expects(:execute).with(
69
+ includes('/bin/rc-status'),
70
+ has_entry(:custom_environment, {:RC_SVCNAME => nil})
71
+ ).returns ''
72
+ subject.enabled?
73
+ end
74
+ end
75
+ end
76
+
61
77
  describe "#enabled?" do
62
78
 
63
79
  before :each do
@@ -33,7 +33,7 @@ describe Puppet::Type.type(:service).provider(:openwrt), :as_platform => :posix
33
33
  # All OpenWrt tests operate on the init script directly. It must exist.
34
34
  File.stubs(:directory?).with('/etc/init.d').returns true
35
35
 
36
- File.stubs(:stat).with('/etc/init.d/myservice')
36
+ File.stubs(:exist?).with('/etc/init.d/myservice').returns true
37
37
  FileTest.stubs(:file?).with('/etc/init.d/myservice').returns true
38
38
  FileTest.stubs(:executable?).with('/etc/init.d/myservice').returns true
39
39
  end
@@ -69,6 +69,13 @@ describe provider_class, :as_platform => :posix do
69
69
  @provider.should respond_to(:enabled?)
70
70
  end
71
71
 
72
+ it "should use --check on SuSE" do
73
+ Facter.expects(:value).with(:osfamily).returns 'Suse'
74
+ provider_class.expects(:chkconfig).with(@resource[:name], '--check')
75
+
76
+ @provider.enabled?
77
+ end
78
+
72
79
  it "should have an enable method" do
73
80
  @provider.should respond_to(:enable)
74
81
  end
@@ -51,7 +51,7 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
51
51
  genkey(key).should == "ssh-dss AAAAfsfddsjldjgksdflgkjsfdlgkj Just_Testing\n"
52
52
  end
53
53
 
54
- it "should be able to generate a authorized_keys file with options" do
54
+ it "should be able to generate an authorized_keys file with options" do
55
55
 
56
56
  key = mkkey(:name => "root@localhost",
57
57
  :key => "AAAAfsfddsjldjgksdflgkjsfdlgkj",
@@ -246,7 +246,7 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
246
246
  end
247
247
  end
248
248
 
249
- describe "and a invalid user has been specified with no target" do
249
+ describe "and an invalid user has been specified with no target" do
250
250
  it "should catch an exception and raise a Puppet error" do
251
251
  @resource[:user] = "thisusershouldnotexist"
252
252
 
@@ -39,4 +39,93 @@ guest id=100 pgrp=usr groups=usr home=/home/guest
39
39
  provider_class.list_all.should == ['root', 'guest']
40
40
  end
41
41
 
42
+ describe "#managed_attribute_keys" do
43
+ let(:existing_attributes) do
44
+ { :account_locked => 'false',
45
+ :admin => 'false',
46
+ :login => 'true',
47
+ 'su' => 'true'
48
+ }
49
+ end
50
+
51
+ before(:each) do
52
+ original_parameters = { :attributes => attribute_array }
53
+ @resource.stubs(:original_parameters).returns(original_parameters)
54
+ end
55
+
56
+ describe "invoked via manifest" do
57
+ let(:attribute_array) { ["rlogin=false", "login =true"] }
58
+
59
+ it "should return only the keys of the attribute key=value pair from manifest" do
60
+ keys = @provider.managed_attribute_keys(existing_attributes)
61
+ keys.should be_include(:rlogin)
62
+ keys.should be_include(:login)
63
+ keys.should_not be_include(:su)
64
+ end
65
+
66
+ it "should strip spaces from symbols" do
67
+ keys = @provider.managed_attribute_keys(existing_attributes)
68
+ keys.should be_include(:login)
69
+ keys.should_not be_include(:"login ")
70
+ end
71
+
72
+ it "should have the same count as that from the manifest" do
73
+ keys = @provider.managed_attribute_keys(existing_attributes)
74
+ keys.size.should == attribute_array.size
75
+ end
76
+
77
+ it "should convert the keys to symbols" do
78
+ keys = @provider.managed_attribute_keys(existing_attributes)
79
+ all_symbols = keys.all? {|k| k.is_a? Symbol}
80
+ all_symbols.should be_true
81
+ end
82
+ end
83
+
84
+ describe "invoked via RAL" do
85
+ let(:attribute_array) { nil }
86
+
87
+ it "should return the keys in supplied hash" do
88
+ keys = @provider.managed_attribute_keys(existing_attributes)
89
+ keys.should_not be_include(:rlogin)
90
+ keys.should be_include(:login)
91
+ keys.should be_include(:su)
92
+ end
93
+
94
+ it "should convert the keys to symbols" do
95
+ keys = @provider.managed_attribute_keys(existing_attributes)
96
+ all_symbols = keys.all? {|k| k.is_a? Symbol}
97
+ all_symbols.should be_true
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "#should_include?" do
103
+ it "should exclude keys translated into something else" do
104
+ managed_keys = [:rlogin]
105
+ @provider.class.attribute_mapping_from.stubs(:include?).with(:rlogin).returns(true)
106
+ @provider.class.stubs(:attribute_ignore).returns([])
107
+ @provider.should_include?(:rlogin, managed_keys).should be_false
108
+ end
109
+
110
+ it "should exclude keys explicitly ignored" do
111
+ managed_keys = [:rlogin]
112
+ @provider.class.attribute_mapping_from.stubs(:include?).with(:rlogin).returns(false)
113
+ @provider.class.stubs(:attribute_ignore).returns([:rlogin])
114
+ @provider.should_include?(:rlogin, managed_keys).should be_false
115
+ end
116
+
117
+ it "should exclude keys not specified in manifest" do
118
+ managed_keys = [:su]
119
+ @provider.class.attribute_mapping_from.stubs(:include?).with(:rlogin).returns(false)
120
+ @provider.class.stubs(:attribute_ignore).returns([])
121
+ @provider.should_include?(:rlogin, managed_keys).should be_false
122
+ end
123
+
124
+ it "should include keys specified in manifest if not translated or ignored" do
125
+ managed_keys = [:rlogin]
126
+ @provider.class.attribute_mapping_from.stubs(:include?).with(:rlogin).returns(false)
127
+ @provider.class.stubs(:attribute_ignore).returns([])
128
+ @provider.should_include?(:rlogin, managed_keys).should be_true
129
+ end
130
+ end
42
131
  end