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,49 @@
1
+ require 'spec_helper'
2
+ require 'puppet/graph'
3
+
4
+ describe Puppet::Graph::TitleHashPrioritizer do
5
+ it "produces different priorities for different resource references" do
6
+ prioritizer = Puppet::Graph::TitleHashPrioritizer.new
7
+
8
+ expect(prioritizer.generate_priority_for(resource(:notify, "one"))).to_not(
9
+ eq(prioritizer.generate_priority_for(resource(:notify, "two"))))
10
+ end
11
+
12
+ it "always produces the same priority for the same resource ref" do
13
+ a_prioritizer = Puppet::Graph::TitleHashPrioritizer.new
14
+ another_prioritizer = Puppet::Graph::TitleHashPrioritizer.new
15
+
16
+ expect(a_prioritizer.generate_priority_for(resource(:notify, "one"))).to(
17
+ eq(another_prioritizer.generate_priority_for(resource(:notify, "one"))))
18
+ end
19
+
20
+ it "does not use the container when generating priorities" do
21
+ prioritizer = Puppet::Graph::TitleHashPrioritizer.new
22
+
23
+ expect(prioritizer.generate_priority_contained_in(nil, resource(:notify, "one"))).to(
24
+ eq(prioritizer.generate_priority_for(resource(:notify, "one"))))
25
+ end
26
+
27
+ it "can retrieve a previously provided priority with the same resource" do
28
+ prioritizer = Puppet::Graph::TitleHashPrioritizer.new
29
+ resource = resource(:notify, "title")
30
+
31
+ generated = prioritizer.generate_priority_for(resource)
32
+
33
+ expect(prioritizer.priority_of(resource)).to eq(generated)
34
+ end
35
+
36
+ it "can not retrieve the priority of a resource with a different resource with the same title" do
37
+ prioritizer = Puppet::Graph::TitleHashPrioritizer.new
38
+ resource = resource(:notify, "title")
39
+ different_resource = resource(:notify, "title")
40
+
41
+ generated = prioritizer.generate_priority_for(resource)
42
+
43
+ expect(prioritizer.priority_of(different_resource)).to be_nil
44
+ end
45
+
46
+ def resource(type, title)
47
+ Puppet::Resource.new(type, title)
48
+ end
49
+ end
@@ -35,7 +35,7 @@ describe 'HieraPuppet' do
35
35
  end
36
36
 
37
37
  describe 'HieraPuppet#hiera_config_file' do
38
- it "should return nil when we cannot derive the hiera config file form Puppet.settings" do
38
+ it "should return nil when we cannot derive the hiera config file from Puppet.settings" do
39
39
  begin
40
40
  Puppet.settings[:hiera_config] = nil
41
41
  rescue ArgumentError => detail
@@ -89,9 +89,11 @@ describe "Puppet::Resource::Catalog::ActiveRecord", :if => can_use_scratch_datab
89
89
  end
90
90
 
91
91
  it "should set the last compile time on the host" do
92
- now = Time.now
92
+ before = Time.now
93
93
  terminus.save(request)
94
- Puppet::Rails::Host.find_by_name("foo").last_compile.should be_within(1).of(now)
94
+ after = Time.now
95
+
96
+ Puppet::Rails::Host.find_by_name("foo").last_compile.should be_between(before, after)
95
97
  end
96
98
 
97
99
  it "should save the Rails host instance" do
@@ -133,50 +133,44 @@ describe Puppet::Resource::Catalog::Compiler do
133
133
 
134
134
  describe "when extracting facts from the request" do
135
135
  before do
136
+ Puppet::Node::Facts.indirection.terminus_class = :memory
136
137
  Facter.stubs(:value).returns "something"
137
138
  @compiler = Puppet::Resource::Catalog::Compiler.new
138
- @request = Puppet::Indirector::Request.new(:catalog, :find, "hostname", nil)
139
139
 
140
140
  @facts = Puppet::Node::Facts.new('hostname', "fact" => "value", "architecture" => "i386")
141
- Puppet::Node::Facts.indirection.stubs(:save).returns(nil)
141
+ end
142
+
143
+ def a_request_that_contains(facts)
144
+ request = Puppet::Indirector::Request.new(:catalog, :find, "hostname", nil)
145
+ request.options[:facts_format] = "pson"
146
+ request.options[:facts] = CGI.escape(facts.render(:pson))
147
+ request
142
148
  end
143
149
 
144
150
  it "should do nothing if no facts are provided" do
145
- Puppet::Node::Facts.indirection.expects(:convert_from).never
146
- @request.options[:facts] = nil
151
+ request = Puppet::Indirector::Request.new(:catalog, :find, "hostname", nil)
152
+ request.options[:facts] = nil
147
153
 
148
- @compiler.extract_facts_from_request(@request)
154
+ @compiler.extract_facts_from_request(request).should be_nil
149
155
  end
150
156
 
151
- it "should use the Facts class to deserialize the provided facts and update the timestamp" do
152
- @request.options[:facts_format] = "foo"
153
- @request.options[:facts] = "bar"
154
- Puppet::Node::Facts.expects(:convert_from).returns @facts
155
-
157
+ it "deserializes the facts and timestamps them" do
156
158
  @facts.timestamp = Time.parse('2010-11-01')
157
- @now = Time.parse('2010-11-02')
158
- Time.stubs(:now).returns(@now)
159
-
160
- @compiler.extract_facts_from_request(@request)
161
- @facts.timestamp.should == @now
162
- end
159
+ request = a_request_that_contains(@facts)
160
+ now = Time.parse('2010-11-02')
161
+ Time.stubs(:now).returns(now)
163
162
 
164
- it "should use the provided fact format" do
165
- @request.options[:facts_format] = "foo"
166
- @request.options[:facts] = "bar"
167
- Puppet::Node::Facts.expects(:convert_from).with { |format, text| format == "foo" }.returns @facts
163
+ facts = @compiler.extract_facts_from_request(request)
168
164
 
169
- @compiler.extract_facts_from_request(@request)
165
+ facts.timestamp.should == now
170
166
  end
171
167
 
172
168
  it "should convert the facts into a fact instance and save it" do
173
- @request.options[:facts_format] = "foo"
174
- @request.options[:facts] = "bar"
175
- Puppet::Node::Facts.expects(:convert_from).returns @facts
169
+ request = a_request_that_contains(@facts)
176
170
 
177
- Puppet::Node::Facts.indirection.expects(:save).with(@facts)
171
+ Puppet::Node::Facts.indirection.expects(:save).with(equals(@facts))
178
172
 
179
- @compiler.extract_facts_from_request(@request)
173
+ @compiler.extract_facts_from_request(request)
180
174
  end
181
175
  end
182
176
 
@@ -33,7 +33,7 @@ describe Puppet::Indirector::Face do
33
33
 
34
34
  describe "as an instance" do
35
35
  it "should be able to determine its indirection" do
36
- # Loading actions here an get, um, complicated
36
+ # Loading actions here can get, um, complicated
37
37
  Puppet::Face.stubs(:load_actions)
38
38
  Puppet::Indirector::Face.new(:catalog, '0.0.1').indirection.should equal(Puppet::Resource::Catalog.indirection)
39
39
  end
@@ -80,13 +80,23 @@ describe Puppet::Node::Facts::Facter do
80
80
  @facter.find(@request)
81
81
  end
82
82
 
83
- it "should convert all facts into strings" do
83
+ it "should convert facts into strings when stringify_facts is true" do
84
+ Puppet[:stringify_facts] = true
84
85
  facts = Puppet::Node::Facts.new("foo")
85
86
  Puppet::Node::Facts.expects(:new).returns facts
86
87
  facts.expects(:stringify)
87
88
 
88
89
  @facter.find(@request)
89
90
  end
91
+
92
+ it "should sanitize facts when stringify_facts is false" do
93
+ Puppet[:stringify_facts] = false
94
+ facts = Puppet::Node::Facts.new("foo")
95
+ Puppet::Node::Facts.expects(:new).returns facts
96
+ facts.expects(:sanitize)
97
+
98
+ @facter.find(@request)
99
+ end
90
100
  end
91
101
 
92
102
  describe Puppet::Node::Facts::Facter, " when saving facts" do
@@ -55,13 +55,23 @@ describe Puppet::Node::Facts::NetworkDevice do
55
55
  @device.find(@request)
56
56
  end
57
57
 
58
- it "should convert all facts into strings" do
58
+ it "should convert facts into strings when stringify_facts is true" do
59
+ Puppet[:stringify_facts] = true
59
60
  facts = Puppet::Node::Facts.new("foo")
60
61
  Puppet::Node::Facts.expects(:new).returns facts
61
62
  facts.expects(:stringify)
62
63
 
63
64
  @device.find(@request)
64
65
  end
66
+
67
+ it "should sanitizer facts when stringify_facts is false" do
68
+ Puppet[:stringify_facts] = false
69
+ facts = Puppet::Node::Facts.new("foo")
70
+ Puppet::Node::Facts.expects(:new).returns facts
71
+ facts.expects(:sanitize)
72
+
73
+ @device.find(@request)
74
+ end
65
75
  end
66
76
 
67
77
  describe Puppet::Node::Facts::NetworkDevice, " when saving facts" do
@@ -127,7 +127,7 @@ describe Puppet::Indirector::Hiera do
127
127
 
128
128
  let(:data_binder) { @hiera_class.new }
129
129
 
130
- it "support looking up an integer" do
130
+ it "should support looking up an integer" do
131
131
  data_binder.find(request_integer).should == 3000
132
132
  end
133
133
 
@@ -28,7 +28,7 @@ describe Puppet::Indirector::InstrumentationData::Local do
28
28
  end
29
29
 
30
30
  describe "when finding instrumentation data" do
31
- it "should return a Instrumentation Data instance matching the key" do
31
+ it "should return an Instrumentation Data instance matching the key" do
32
32
  end
33
33
  end
34
34
 
@@ -28,7 +28,7 @@ describe Puppet::Indirector::InstrumentationListener::Local do
28
28
  end
29
29
 
30
30
  describe "when finding listeners" do
31
- it "should return a Instrumentation Listener instance matching the key" do
31
+ it "should return an Instrumentation Listener instance matching the key" do
32
32
  Puppet::Util::Instrumentation.expects(:[]).with("me").returns(:instance)
33
33
  @listener.find(@request).should == :instance
34
34
  end
@@ -33,15 +33,15 @@ describe Puppet::Indirector::Request do
33
33
  end
34
34
 
35
35
  it "should support options specified as a hash" do
36
- lambda { Puppet::Indirector::Request.new(:ind, :method, :key, nil, :one => :two) }.should_not raise_error(ArgumentError)
36
+ expect { Puppet::Indirector::Request.new(:ind, :method, :key, nil, :one => :two) }.to_not raise_error
37
37
  end
38
38
 
39
39
  it "should support nil options" do
40
- lambda { Puppet::Indirector::Request.new(:ind, :method, :key, nil, nil) }.should_not raise_error(ArgumentError)
40
+ expect { Puppet::Indirector::Request.new(:ind, :method, :key, nil, nil) }.to_not raise_error
41
41
  end
42
42
 
43
43
  it "should support unspecified options" do
44
- lambda { Puppet::Indirector::Request.new(:ind, :method, :key, nil) }.should_not raise_error(ArgumentError)
44
+ expect { Puppet::Indirector::Request.new(:ind, :method, :key, nil) }.to_not raise_error
45
45
  end
46
46
 
47
47
  it "should use an empty options hash if nil was provided" do
@@ -190,7 +190,7 @@ describe Puppet::Indirector::Request do
190
190
  Puppet::Indirector::Indirection.expects(:instance).with(:myind).returns nil
191
191
  request = Puppet::Indirector::Request.new(:myind, :method, :key, nil)
192
192
 
193
- lambda { request.model }.should raise_error(ArgumentError)
193
+ expect { request.model }.to raise_error(ArgumentError)
194
194
  end
195
195
 
196
196
  it "should have a method for determining if the request is plural or singular" do
@@ -243,76 +243,129 @@ describe Puppet::Indirector::Request do
243
243
  end
244
244
 
245
245
  describe "when building a query string from its options" do
246
- before do
247
- @request = Puppet::Indirector::Request.new(:myind, :find, "my key", nil)
246
+ def a_request_with_options(options)
247
+ Puppet::Indirector::Request.new(:myind, :find, "my key", nil, options)
248
+ end
249
+
250
+ def the_parsed_query_string_from(request)
251
+ CGI.parse(request.query_string.sub(/^\?/, ''))
248
252
  end
249
253
 
250
254
  it "should return an empty query string if there are no options" do
251
- @request.stubs(:options).returns nil
252
- @request.query_string.should == ""
255
+ request = a_request_with_options(nil)
256
+
257
+ request.query_string.should == ""
253
258
  end
254
259
 
255
260
  it "should return an empty query string if the options are empty" do
256
- @request.stubs(:options).returns({})
257
- @request.query_string.should == ""
261
+ request = a_request_with_options({})
262
+
263
+ request.query_string.should == ""
258
264
  end
259
265
 
260
266
  it "should prefix the query string with '?'" do
261
- @request.stubs(:options).returns(:one => "two")
262
- @request.query_string.should =~ /^\?/
267
+ request = a_request_with_options(:one => "two")
268
+
269
+ request.query_string.should =~ /^\?/
263
270
  end
264
271
 
265
272
  it "should include all options in the query string, separated by '&'" do
266
- @request.stubs(:options).returns(:one => "two", :three => "four")
267
- @request.query_string.sub(/^\?/, '').split("&").sort.should == %w{one=two three=four}.sort
273
+ request = a_request_with_options(:one => "two", :three => "four")
274
+
275
+ the_parsed_query_string_from(request).should == {
276
+ "one" => ["two"],
277
+ "three" => ["four"]
278
+ }
268
279
  end
269
280
 
270
281
  it "should ignore nil options" do
271
- @request.stubs(:options).returns(:one => "two", :three => nil)
272
- @request.query_string.should_not be_include("three")
282
+ request = a_request_with_options(:one => "two", :three => nil)
283
+
284
+ the_parsed_query_string_from(request).should == {
285
+ "one" => ["two"]
286
+ }
273
287
  end
274
288
 
275
289
  it "should convert 'true' option values into strings" do
276
- @request.stubs(:options).returns(:one => true)
277
- @request.query_string.should == "?one=true"
290
+ request = a_request_with_options(:one => true)
291
+
292
+ the_parsed_query_string_from(request).should == {
293
+ "one" => ["true"]
294
+ }
278
295
  end
279
296
 
280
297
  it "should convert 'false' option values into strings" do
281
- @request.stubs(:options).returns(:one => false)
282
- @request.query_string.should == "?one=false"
298
+ request = a_request_with_options(:one => false)
299
+
300
+ the_parsed_query_string_from(request).should == {
301
+ "one" => ["false"]
302
+ }
283
303
  end
284
304
 
285
305
  it "should convert to a string all option values that are integers" do
286
- @request.stubs(:options).returns(:one => 50)
287
- @request.query_string.should == "?one=50"
306
+ request = a_request_with_options(:one => 50)
307
+
308
+ the_parsed_query_string_from(request).should == {
309
+ "one" => ["50"]
310
+ }
288
311
  end
289
312
 
290
313
  it "should convert to a string all option values that are floating point numbers" do
291
- @request.stubs(:options).returns(:one => 1.2)
292
- @request.query_string.should == "?one=1.2"
314
+ request = a_request_with_options(:one => 1.2)
315
+
316
+ the_parsed_query_string_from(request).should == {
317
+ "one" => ["1.2"]
318
+ }
293
319
  end
294
320
 
295
321
  it "should CGI-escape all option values that are strings" do
296
- escaping = CGI.escape("one two")
297
- @request.stubs(:options).returns(:one => "one two")
298
- @request.query_string.should == "?one=#{escaping}"
322
+ request = a_request_with_options(:one => "one two")
323
+
324
+ the_parsed_query_string_from(request).should == {
325
+ "one" => ["one two"]
326
+ }
299
327
  end
300
328
 
301
- it "should YAML-dump and CGI-escape arrays" do
302
- escaping = CGI.escape(YAML.dump(%w{one two}))
303
- @request.stubs(:options).returns(:one => %w{one two})
304
- @request.query_string.should == "?one=#{escaping}"
329
+ it "should convert an array of values into multiple entries for the same key" do
330
+ request = a_request_with_options(:one => %w{one two})
331
+
332
+ the_parsed_query_string_from(request).should == {
333
+ "one" => ["one", "two"]
334
+ }
335
+ end
336
+
337
+ it "should stringify simple data types inside an array" do
338
+ request = a_request_with_options(:one => ['one', nil])
339
+
340
+ the_parsed_query_string_from(request).should == {
341
+ "one" => ["one"]
342
+ }
343
+ end
344
+
345
+ it "should error if an array contains another array" do
346
+ request = a_request_with_options(:one => ['one', ["not allowed"]])
347
+
348
+ expect { request.query_string }.to raise_error(ArgumentError)
349
+ end
350
+
351
+ it "should error if an array contains illegal data" do
352
+ request = a_request_with_options(:one => ['one', { :not => "allowed" }])
353
+
354
+ expect { request.query_string }.to raise_error(ArgumentError)
305
355
  end
306
356
 
307
357
  it "should convert to a string and CGI-escape all option values that are symbols" do
308
- escaping = CGI.escape("sym bol")
309
- @request.stubs(:options).returns(:one => :"sym bol")
310
- @request.query_string.should == "?one=#{escaping}"
358
+ request = a_request_with_options(:one => :"sym bol")
359
+
360
+ the_parsed_query_string_from(request).should == {
361
+ "one" => ["sym bol"]
362
+ }
311
363
  end
312
364
 
313
365
  it "should fail if options other than booleans or strings are provided" do
314
- @request.stubs(:options).returns(:one => {:one => :two})
315
- lambda { @request.query_string }.should raise_error(ArgumentError)
366
+ request = a_request_with_options(:one => { :one => :two })
367
+
368
+ expect { request.query_string }.to raise_error(ArgumentError)
316
369
  end
317
370
  end
318
371
 
@@ -372,7 +425,7 @@ describe Puppet::Indirector::Request do
372
425
  it "should fail if no key is provided" do
373
426
  json = PSON.parse(@request.to_pson)
374
427
  json['data'].delete("key")
375
- lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
428
+ expect { from_json(json.to_pson) }.to raise_error(ArgumentError)
376
429
  end
377
430
 
378
431
  it "should set its indirector name" do
@@ -382,7 +435,7 @@ describe Puppet::Indirector::Request do
382
435
  it "should fail if no type is provided" do
383
436
  json = PSON.parse(@request.to_pson)
384
437
  json['data'].delete("type")
385
- lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
438
+ expect { from_json(json.to_pson) }.to raise_error(ArgumentError)
386
439
  end
387
440
 
388
441
  it "should set its method" do
@@ -392,7 +445,7 @@ describe Puppet::Indirector::Request do
392
445
  it "should fail if no method is provided" do
393
446
  json = PSON.parse(@request.to_pson)
394
447
  json['data'].delete("method")
395
- lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
448
+ expect { from_json(json.to_pson) }.to raise_error(ArgumentError)
396
449
  end
397
450
 
398
451
  it "should initialize with all attributes and options" do