puppet 3.4.3 → 3.5.0.rc1

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 (811) hide show
  1. data/CONTRIBUTING.md +6 -6
  2. data/Gemfile +22 -16
  3. data/LICENSE +1 -1
  4. data/README.md +33 -11
  5. data/Rakefile +1 -1
  6. data/conf/auth.conf +4 -0
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/debian/control +6 -6
  9. data/ext/ips/transforms +1 -1
  10. data/ext/nagios/naggen +1 -1
  11. data/ext/project_data.yaml +21 -1
  12. data/ext/puppet-test +3 -3
  13. data/ext/redhat/puppet.spec.erb +28 -2
  14. data/ext/suse/puppet.spec +1 -1
  15. data/ext/upload_facts.rb +1 -1
  16. data/ext/windows/service/daemon.rb +99 -20
  17. data/lib/hiera_puppet.rb +2 -2
  18. data/lib/puppet.rb +68 -5
  19. data/lib/puppet/agent.rb +5 -1
  20. data/lib/puppet/application.rb +20 -11
  21. data/lib/puppet/application/agent.rb +1 -1
  22. data/lib/puppet/application/apply.rb +61 -41
  23. data/lib/puppet/application/cert.rb +3 -3
  24. data/lib/puppet/application/device.rb +7 -8
  25. data/lib/puppet/application/doc.rb +1 -1
  26. data/lib/puppet/application/filebucket.rb +3 -3
  27. data/lib/puppet/application/kick.rb +2 -2
  28. data/lib/puppet/application/master.rb +1 -1
  29. data/lib/puppet/application/queue.rb +9 -9
  30. data/lib/puppet/application/resource.rb +2 -2
  31. data/lib/puppet/bindings.rb +6 -6
  32. data/lib/puppet/configurer.rb +17 -14
  33. data/lib/puppet/configurer/fact_handler.rb +1 -1
  34. data/lib/puppet/confine/any.rb +26 -0
  35. data/lib/puppet/confine/exists.rb +1 -1
  36. data/lib/puppet/confiner.rb +1 -0
  37. data/lib/puppet/context.rb +55 -0
  38. data/lib/puppet/context/trusted_information.rb +56 -0
  39. data/lib/puppet/defaults.rb +97 -26
  40. data/lib/puppet/environments.rb +187 -0
  41. data/lib/puppet/error.rb +2 -1
  42. data/lib/puppet/external/pson/common.rb +1 -1
  43. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  44. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  45. data/lib/puppet/face/config.rb +73 -15
  46. data/lib/puppet/face/file/store.rb +1 -1
  47. data/lib/puppet/face/help.rb +2 -1
  48. data/lib/puppet/face/help/action.erb +1 -0
  49. data/lib/puppet/face/help/face.erb +1 -0
  50. data/lib/puppet/face/help/global.erb +1 -0
  51. data/lib/puppet/face/help/man.erb +9 -8
  52. data/lib/puppet/face/module/list.rb +13 -7
  53. data/lib/puppet/face/node/clean.rb +2 -2
  54. data/lib/puppet/face/parser.rb +11 -5
  55. data/lib/puppet/face/status.rb +1 -1
  56. data/lib/puppet/feature/external_facts.rb +2 -2
  57. data/lib/puppet/feature/libuser.rb +1 -1
  58. data/lib/puppet/feature/msgpack.rb +2 -0
  59. data/lib/puppet/feature/rails.rb +2 -2
  60. data/lib/puppet/file_bucket/dipper.rb +9 -9
  61. data/lib/puppet/file_bucket/file.rb +9 -5
  62. data/lib/puppet/file_serving/base.rb +1 -1
  63. data/lib/puppet/file_serving/configuration.rb +1 -1
  64. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  65. data/lib/puppet/file_serving/content.rb +2 -2
  66. data/lib/puppet/file_serving/fileset.rb +4 -4
  67. data/lib/puppet/file_serving/metadata.rb +69 -15
  68. data/lib/puppet/file_serving/mount/file.rb +1 -1
  69. data/lib/puppet/file_system.rb +361 -1
  70. data/lib/puppet/file_system/file18.rb +3 -3
  71. data/lib/puppet/file_system/file19.rb +3 -3
  72. data/lib/puppet/file_system/file19windows.rb +18 -23
  73. data/lib/puppet/file_system/file_impl.rb +145 -0
  74. data/lib/puppet/file_system/memory_file.rb +23 -9
  75. data/lib/puppet/file_system/memory_impl.rb +64 -0
  76. data/lib/puppet/forge.rb +4 -3
  77. data/lib/puppet/forge/repository.rb +0 -1
  78. data/lib/puppet/graph/relationship_graph.rb +7 -7
  79. data/lib/puppet/indirector.rb +1 -0
  80. data/lib/puppet/indirector/catalog/compiler.rb +3 -30
  81. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  82. data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
  83. data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
  84. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  85. data/lib/puppet/indirector/exec.rb +1 -1
  86. data/lib/puppet/indirector/face.rb +3 -2
  87. data/lib/puppet/indirector/facts/facter.rb +1 -1
  88. data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
  89. data/lib/puppet/indirector/file_metadata/file.rb +1 -1
  90. data/lib/puppet/indirector/file_server.rb +1 -1
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +4 -4
  93. data/lib/puppet/indirector/key/file.rb +8 -5
  94. data/lib/puppet/indirector/ldap.rb +1 -1
  95. data/lib/puppet/indirector/memory.rb +4 -0
  96. data/lib/puppet/indirector/msgpack.rb +82 -0
  97. data/lib/puppet/indirector/node/exec.rb +1 -1
  98. data/lib/puppet/indirector/node/ldap.rb +3 -3
  99. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  100. data/lib/puppet/indirector/node/yaml.rb +15 -0
  101. data/lib/puppet/indirector/queue.rb +3 -2
  102. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  103. data/lib/puppet/indirector/request.rb +17 -20
  104. data/lib/puppet/indirector/resource/rest.rb +1 -1
  105. data/lib/puppet/indirector/resource_type/parser.rb +3 -13
  106. data/lib/puppet/indirector/rest.rb +6 -7
  107. data/lib/puppet/indirector/ssl_file.rb +7 -7
  108. data/lib/puppet/indirector/yaml.rb +9 -13
  109. data/lib/puppet/metatype/manager.rb +12 -7
  110. data/lib/puppet/module.rb +14 -9
  111. data/lib/puppet/module_tool.rb +21 -26
  112. data/lib/puppet/module_tool/applications/application.rb +1 -1
  113. data/lib/puppet/module_tool/applications/generator.rb +2 -1
  114. data/lib/puppet/module_tool/applications/installer.rb +9 -4
  115. data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
  116. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  117. data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
  118. data/lib/puppet/module_tool/checksums.rb +1 -1
  119. data/lib/puppet/module_tool/contents_description.rb +2 -0
  120. data/lib/puppet/module_tool/dependency.rb +4 -5
  121. data/lib/puppet/module_tool/errors.rb +2 -0
  122. data/lib/puppet/module_tool/install_directory.rb +3 -0
  123. data/lib/puppet/module_tool/metadata.rb +3 -5
  124. data/lib/puppet/module_tool/modulefile.rb +3 -0
  125. data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
  126. data/lib/puppet/module_tool/skeleton.rb +3 -0
  127. data/lib/puppet/module_tool/tar.rb +3 -0
  128. data/lib/puppet/network/auth_config_parser.rb +1 -1
  129. data/lib/puppet/network/authconfig.rb +5 -2
  130. data/lib/puppet/network/authentication.rb +7 -2
  131. data/lib/puppet/network/authorization.rb +2 -2
  132. data/lib/puppet/network/format_support.rb +4 -0
  133. data/lib/puppet/network/formats.rb +9 -14
  134. data/lib/puppet/network/http.rb +11 -0
  135. data/lib/puppet/network/http/api.rb +0 -2
  136. data/lib/puppet/network/http/api/v1.rb +146 -11
  137. data/lib/puppet/network/http/api/v2.rb +32 -0
  138. data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
  139. data/lib/puppet/network/http/api/v2/environments.rb +21 -0
  140. data/lib/puppet/network/http/connection.rb +94 -37
  141. data/lib/puppet/network/http/error.rb +69 -0
  142. data/lib/puppet/network/http/handler.rb +28 -196
  143. data/lib/puppet/network/http/issues.rb +9 -0
  144. data/lib/puppet/network/http/memory_response.rb +13 -0
  145. data/lib/puppet/network/http/rack/rest.rb +10 -18
  146. data/lib/puppet/network/http/request.rb +56 -0
  147. data/lib/puppet/network/http/response.rb +11 -0
  148. data/lib/puppet/network/http/route.rb +91 -0
  149. data/lib/puppet/network/http/webrick.rb +1 -1
  150. data/lib/puppet/network/http/webrick/rest.rb +7 -12
  151. data/lib/puppet/network/http_pool.rb +3 -3
  152. data/lib/puppet/network/rights.rb +4 -4
  153. data/lib/puppet/node.rb +23 -14
  154. data/lib/puppet/node/environment.rb +149 -125
  155. data/lib/puppet/node/facts.rb +6 -5
  156. data/lib/puppet/parameter.rb +1 -1
  157. data/lib/puppet/parser/ast.rb +1 -1
  158. data/lib/puppet/parser/ast/block_expression.rb +1 -6
  159. data/lib/puppet/parser/ast/collexpr.rb +54 -2
  160. data/lib/puppet/parser/ast/lambda.rb +9 -0
  161. data/lib/puppet/parser/ast/leaf.rb +15 -0
  162. data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
  163. data/lib/puppet/parser/code_merger.rb +13 -0
  164. data/lib/puppet/parser/collector.rb +1 -1
  165. data/lib/puppet/parser/compiler.rb +28 -30
  166. data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
  167. data/lib/puppet/parser/e_parser_adapter.rb +0 -1
  168. data/lib/puppet/parser/files.rb +12 -7
  169. data/lib/puppet/parser/functions.rb +36 -29
  170. data/lib/puppet/parser/functions/collect.rb +1 -1
  171. data/lib/puppet/parser/functions/defined.rb +40 -16
  172. data/lib/puppet/parser/functions/each.rb +55 -41
  173. data/lib/puppet/parser/functions/epp.rb +41 -0
  174. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  175. data/lib/puppet/parser/functions/file.rb +1 -1
  176. data/lib/puppet/parser/functions/filter.rb +68 -16
  177. data/lib/puppet/parser/functions/generate.rb +1 -1
  178. data/lib/puppet/parser/functions/include.rb +3 -2
  179. data/lib/puppet/parser/functions/inline_epp.rb +79 -0
  180. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  181. data/lib/puppet/parser/functions/lookup.rb +127 -27
  182. data/lib/puppet/parser/functions/map.rb +64 -12
  183. data/lib/puppet/parser/functions/reduce.rb +40 -16
  184. data/lib/puppet/parser/functions/select.rb +1 -1
  185. data/lib/puppet/parser/functions/slice.rb +42 -23
  186. data/lib/puppet/parser/grammar.ra +3 -0
  187. data/lib/puppet/parser/lexer.rb +10 -9
  188. data/lib/puppet/parser/parser.rb +15 -12
  189. data/lib/puppet/parser/parser_factory.rb +26 -1
  190. data/lib/puppet/parser/parser_support.rb +13 -4
  191. data/lib/puppet/parser/resource.rb +1 -1
  192. data/lib/puppet/parser/scope.rb +246 -97
  193. data/lib/puppet/parser/templatewrapper.rb +1 -1
  194. data/lib/puppet/parser/type_loader.rb +13 -2
  195. data/lib/puppet/pops.rb +15 -1
  196. data/lib/puppet/pops/adapters.rb +64 -32
  197. data/lib/puppet/pops/binder/binder.rb +122 -150
  198. data/lib/puppet/pops/binder/binder_issues.rb +1 -21
  199. data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
  200. data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
  201. data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
  202. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
  203. data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
  204. data/lib/puppet/pops/binder/bindings_model.rb +17 -31
  205. data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
  206. data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
  207. data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
  208. data/lib/puppet/pops/binder/config/issues.rb +1 -21
  209. data/lib/puppet/pops/binder/injector.rb +86 -7
  210. data/lib/puppet/pops/binder/injector_entry.rb +6 -2
  211. data/lib/puppet/pops/binder/key_factory.rb +7 -1
  212. data/lib/puppet/pops/binder/lookup.rb +191 -0
  213. data/lib/puppet/pops/binder/producers.rb +5 -5
  214. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
  215. data/lib/puppet/pops/binder/system_bindings.rb +4 -16
  216. data/lib/puppet/pops/containment.rb +72 -5
  217. data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
  218. data/lib/puppet/pops/evaluator/closure.rb +57 -0
  219. data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
  220. data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
  221. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
  222. data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
  223. data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
  224. data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
  225. data/lib/puppet/pops/issue_reporter.rb +8 -4
  226. data/lib/puppet/pops/issues.rb +199 -4
  227. data/lib/puppet/pops/label_provider.rb +5 -0
  228. data/lib/puppet/pops/model/ast_transformer.rb +55 -31
  229. data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
  230. data/lib/puppet/pops/model/factory.rb +265 -111
  231. data/lib/puppet/pops/model/model.rb +179 -140
  232. data/lib/puppet/pops/model/model_label_provider.rb +38 -9
  233. data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
  234. data/lib/puppet/pops/parser/code_merger.rb +17 -0
  235. data/lib/puppet/pops/parser/egrammar.ra +110 -61
  236. data/lib/puppet/pops/parser/eparser.rb +1415 -1092
  237. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  238. data/lib/puppet/pops/parser/epp_support.rb +247 -0
  239. data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
  240. data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
  241. data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
  242. data/lib/puppet/pops/parser/lexer.rb +83 -192
  243. data/lib/puppet/pops/parser/lexer2.rb +684 -0
  244. data/lib/puppet/pops/parser/lexer_support.rb +107 -0
  245. data/lib/puppet/pops/parser/locatable.rb +23 -0
  246. data/lib/puppet/pops/parser/locator.rb +291 -0
  247. data/lib/puppet/pops/parser/makefile +1 -8
  248. data/lib/puppet/pops/parser/parser_support.rb +76 -48
  249. data/lib/puppet/pops/parser/slurp_support.rb +95 -0
  250. data/lib/puppet/pops/patterns.rb +13 -4
  251. data/lib/puppet/pops/types/class_loader.rb +2 -2
  252. data/lib/puppet/pops/types/enumeration.rb +34 -0
  253. data/lib/puppet/pops/types/type_calculator.rb +983 -58
  254. data/lib/puppet/pops/types/type_factory.rb +203 -15
  255. data/lib/puppet/pops/types/type_parser.rb +355 -12
  256. data/lib/puppet/pops/types/types.rb +314 -24
  257. data/lib/puppet/pops/utils.rb +23 -7
  258. data/lib/puppet/pops/validation.rb +14 -8
  259. data/lib/puppet/pops/validation/checker3_1.rb +17 -12
  260. data/lib/puppet/pops/validation/checker4_0.rb +514 -0
  261. data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
  262. data/lib/puppet/pops/visitor.rb +146 -4
  263. data/lib/puppet/property.rb +1 -1
  264. data/lib/puppet/property/ensure.rb +1 -1
  265. data/lib/puppet/provider.rb +47 -26
  266. data/lib/puppet/provider/aixobject.rb +3 -3
  267. data/lib/puppet/provider/augeas/augeas.rb +11 -11
  268. data/lib/puppet/provider/cron/crontab.rb +10 -1
  269. data/lib/puppet/provider/exec.rb +1 -1
  270. data/lib/puppet/provider/exec/posix.rb +1 -1
  271. data/lib/puppet/provider/exec/windows.rb +1 -1
  272. data/lib/puppet/provider/file/posix.rb +2 -2
  273. data/lib/puppet/provider/file/windows.rb +15 -9
  274. data/lib/puppet/provider/group/aix.rb +2 -2
  275. data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
  276. data/lib/puppet/provider/mount.rb +7 -0
  277. data/lib/puppet/provider/mount/parsed.rb +0 -1
  278. data/lib/puppet/provider/naginator.rb +1 -1
  279. data/lib/puppet/provider/nameservice.rb +3 -3
  280. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  281. data/lib/puppet/provider/package/aix.rb +1 -1
  282. data/lib/puppet/provider/package/appdmg.rb +1 -4
  283. data/lib/puppet/provider/package/apple.rb +1 -1
  284. data/lib/puppet/provider/package/apt.rb +1 -1
  285. data/lib/puppet/provider/package/blastwave.rb +1 -1
  286. data/lib/puppet/provider/package/fink.rb +1 -1
  287. data/lib/puppet/provider/package/gem.rb +3 -3
  288. data/lib/puppet/provider/package/openbsd.rb +6 -4
  289. data/lib/puppet/provider/package/pacman.rb +58 -5
  290. data/lib/puppet/provider/package/pip.rb +2 -2
  291. data/lib/puppet/provider/package/pkgdmg.rb +25 -10
  292. data/lib/puppet/provider/package/pkgin.rb +48 -23
  293. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  294. data/lib/puppet/provider/package/ports.rb +1 -1
  295. data/lib/puppet/provider/package/portupgrade.rb +7 -7
  296. data/lib/puppet/provider/package/rpm.rb +16 -8
  297. data/lib/puppet/provider/package/windows.rb +1 -1
  298. data/lib/puppet/provider/package/windows/package.rb +1 -1
  299. data/lib/puppet/provider/parsedfile.rb +1 -1
  300. data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
  301. data/lib/puppet/provider/selmodule/semodule.rb +5 -5
  302. data/lib/puppet/provider/service/base.rb +1 -1
  303. data/lib/puppet/provider/service/bsd.rb +3 -3
  304. data/lib/puppet/provider/service/daemontools.rb +20 -20
  305. data/lib/puppet/provider/service/debian.rb +1 -1
  306. data/lib/puppet/provider/service/freebsd.rb +3 -3
  307. data/lib/puppet/provider/service/gentoo.rb +2 -2
  308. data/lib/puppet/provider/service/init.rb +5 -5
  309. data/lib/puppet/provider/service/launchd.rb +4 -4
  310. data/lib/puppet/provider/service/redhat.rb +2 -2
  311. data/lib/puppet/provider/service/runit.rb +4 -4
  312. data/lib/puppet/provider/service/service.rb +3 -4
  313. data/lib/puppet/provider/service/smf.rb +1 -1
  314. data/lib/puppet/provider/service/src.rb +3 -3
  315. data/lib/puppet/provider/service/systemd.rb +4 -4
  316. data/lib/puppet/provider/service/upstart.rb +22 -7
  317. data/lib/puppet/provider/service/windows.rb +7 -7
  318. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
  319. data/lib/puppet/provider/user/aix.rb +5 -5
  320. data/lib/puppet/provider/user/directoryservice.rb +8 -5
  321. data/lib/puppet/provider/user/ldap.rb +1 -1
  322. data/lib/puppet/provider/user/pw.rb +1 -1
  323. data/lib/puppet/provider/user/user_role_add.rb +2 -2
  324. data/lib/puppet/provider/user/useradd.rb +19 -5
  325. data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
  326. data/lib/puppet/provider/zone/solaris.rb +4 -4
  327. data/lib/puppet/rails.rb +16 -11
  328. data/lib/puppet/rails/benchmark.rb +1 -1
  329. data/lib/puppet/rails/resource.rb +5 -1
  330. data/lib/puppet/reference/configuration.rb +1 -1
  331. data/lib/puppet/reference/report.rb +1 -1
  332. data/lib/puppet/relationship.rb +10 -5
  333. data/lib/puppet/reports/http.rb +8 -2
  334. data/lib/puppet/reports/rrdgraph.rb +1 -1
  335. data/lib/puppet/reports/store.rb +3 -3
  336. data/lib/puppet/reports/tagmail.rb +4 -4
  337. data/lib/puppet/resource.rb +37 -44
  338. data/lib/puppet/resource/catalog.rb +18 -20
  339. data/lib/puppet/resource/status.rb +7 -6
  340. data/lib/puppet/resource/type.rb +6 -5
  341. data/lib/puppet/resource/type_collection.rb +2 -2
  342. data/lib/puppet/run.rb +9 -8
  343. data/lib/puppet/settings.rb +395 -244
  344. data/lib/puppet/settings/base_setting.rb +10 -4
  345. data/lib/puppet/settings/config_file.rb +81 -44
  346. data/lib/puppet/settings/directory_setting.rb +1 -2
  347. data/lib/puppet/settings/file_setting.rb +12 -5
  348. data/lib/puppet/settings/ini_file.rb +171 -0
  349. data/lib/puppet/ssl/base.rb +4 -0
  350. data/lib/puppet/ssl/certificate_authority.rb +16 -11
  351. data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
  352. data/lib/puppet/ssl/certificate_factory.rb +50 -5
  353. data/lib/puppet/ssl/certificate_request.rb +2 -2
  354. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  355. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
  356. data/lib/puppet/ssl/host.rb +9 -8
  357. data/lib/puppet/ssl/inventory.rb +1 -1
  358. data/lib/puppet/ssl/key.rb +1 -1
  359. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  360. data/lib/puppet/status.rb +8 -7
  361. data/lib/puppet/test/test_helper.rb +35 -4
  362. data/lib/puppet/transaction/event.rb +6 -5
  363. data/lib/puppet/transaction/report.rb +10 -10
  364. data/lib/puppet/type.rb +1 -3
  365. data/lib/puppet/type/augeas.rb +2 -1
  366. data/lib/puppet/type/cron.rb +41 -11
  367. data/lib/puppet/type/exec.rb +5 -5
  368. data/lib/puppet/type/file.rb +42 -4
  369. data/lib/puppet/type/file/content.rb +5 -6
  370. data/lib/puppet/type/file/ensure.rb +3 -3
  371. data/lib/puppet/type/file/source.rb +12 -6
  372. data/lib/puppet/type/file/target.rb +5 -5
  373. data/lib/puppet/type/k5login.rb +4 -4
  374. data/lib/puppet/type/mount.rb +1 -1
  375. data/lib/puppet/type/package.rb +79 -3
  376. data/lib/puppet/type/resources.rb +34 -5
  377. data/lib/puppet/type/selboolean.rb +1 -1
  378. data/lib/puppet/type/selmodule.rb +1 -1
  379. data/lib/puppet/type/ssh_authorized_key.rb +2 -1
  380. data/lib/puppet/type/sshkey.rb +2 -1
  381. data/lib/puppet/type/tidy.rb +1 -1
  382. data/lib/puppet/type/user.rb +4 -1
  383. data/lib/puppet/type/yumrepo.rb +219 -344
  384. data/lib/puppet/type/zone.rb +15 -5
  385. data/lib/puppet/util.rb +14 -13
  386. data/lib/puppet/util/adsi.rb +19 -3
  387. data/lib/puppet/util/autoload.rb +27 -24
  388. data/lib/puppet/util/backups.rb +6 -6
  389. data/lib/puppet/util/checksums.rb +2 -2
  390. data/lib/puppet/util/classgen.rb +1 -1
  391. data/lib/puppet/util/colors.rb +4 -12
  392. data/lib/puppet/util/command_line.rb +2 -2
  393. data/lib/puppet/util/command_line/trollop.rb +3 -3
  394. data/lib/puppet/util/docs.rb +2 -2
  395. data/lib/puppet/util/errors.rb +8 -1
  396. data/lib/puppet/util/execution.rb +12 -5
  397. data/lib/puppet/util/filetype.rb +5 -5
  398. data/lib/puppet/util/inifile.rb +19 -4
  399. data/lib/puppet/util/instrumentation/data.rb +5 -0
  400. data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
  401. data/lib/puppet/util/instrumentation/listener.rb +6 -1
  402. data/lib/puppet/util/json_lockfile.rb +4 -1
  403. data/lib/puppet/util/ldap/connection.rb +1 -1
  404. data/lib/puppet/util/lockfile.rb +10 -6
  405. data/lib/puppet/util/log.rb +6 -1
  406. data/lib/puppet/util/log/destinations.rb +2 -2
  407. data/lib/puppet/util/metric.rb +9 -4
  408. data/lib/puppet/util/nagios_maker.rb +26 -1
  409. data/lib/puppet/util/network_device.rb +1 -1
  410. data/lib/puppet/util/network_device/config.rb +1 -1
  411. data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
  412. data/lib/puppet/util/plugins.rb +1 -1
  413. data/lib/puppet/util/profiler.rb +13 -1
  414. data/lib/puppet/util/pson.rb +1 -1
  415. data/lib/puppet/util/queue/stomp.rb +2 -2
  416. data/lib/puppet/util/rdoc.rb +1 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  418. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
  419. data/lib/puppet/util/reference.rb +1 -1
  420. data/lib/puppet/util/resource_template.rb +1 -1
  421. data/lib/puppet/util/retryaction.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +2 -2
  423. data/lib/puppet/util/storage.rb +3 -3
  424. data/lib/puppet/util/symbolic_file_mode.rb +1 -1
  425. data/lib/puppet/util/tag_set.rb +15 -3
  426. data/lib/puppet/util/tagging.rb +12 -17
  427. data/lib/puppet/util/watched_file.rb +1 -1
  428. data/lib/puppet/util/watcher.rb +1 -1
  429. data/lib/puppet/util/windows/error.rb +2 -2
  430. data/lib/puppet/util/windows/file.rb +20 -4
  431. data/lib/puppet/util/windows/registry.rb +2 -2
  432. data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
  433. data/lib/puppet/version.rb +1 -1
  434. data/lib/puppetx.rb +1 -21
  435. data/lib/puppetx/puppet/syntax_checker.rb +1 -1
  436. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
  437. data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
  438. data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
  439. data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
  440. data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
  441. data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
  442. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  443. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
  444. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
  445. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
  446. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
  447. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
  448. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
  449. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
  450. data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
  451. data/spec/integration/agent/logging_spec.rb +1 -1
  452. data/spec/integration/application/apply_spec.rb +78 -3
  453. data/spec/integration/application/doc_spec.rb +3 -2
  454. data/spec/integration/configurer_spec.rb +5 -3
  455. data/spec/integration/directory_environments_spec.rb +50 -0
  456. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  457. data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
  458. data/spec/integration/network/authconfig_spec.rb +4 -4
  459. data/spec/integration/network/formats_spec.rb +1 -1
  460. data/spec/integration/node/environment_spec.rb +67 -15
  461. data/spec/integration/node/facts_spec.rb +1 -1
  462. data/spec/integration/node_spec.rb +1 -1
  463. data/spec/integration/parser/catalog_spec.rb +100 -60
  464. data/spec/integration/parser/compiler_spec.rb +102 -13
  465. data/spec/integration/parser/future_compiler_spec.rb +416 -0
  466. data/spec/integration/parser/parser_spec.rb +44 -105
  467. data/spec/integration/parser/scope_spec.rb +614 -528
  468. data/spec/integration/provider/cron/crontab_spec.rb +21 -0
  469. data/spec/integration/provider/mount_spec.rb +15 -2
  470. data/spec/integration/resource/catalog_spec.rb +1 -1
  471. data/spec/integration/resource/type_collection_spec.rb +3 -4
  472. data/spec/integration/ssl/autosign_spec.rb +1 -1
  473. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  474. data/spec/integration/ssl/host_spec.rb +1 -1
  475. data/spec/integration/transaction_spec.rb +13 -13
  476. data/spec/integration/type/exec_spec.rb +2 -2
  477. data/spec/integration/type/file_spec.rb +114 -41
  478. data/spec/integration/type/nagios_spec.rb +80 -0
  479. data/spec/integration/type/tidy_spec.rb +2 -2
  480. data/spec/integration/util/execution_spec.rb +17 -0
  481. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  482. data/spec/integration/util/settings_spec.rb +1 -1
  483. data/spec/integration/util/windows/security_spec.rb +27 -2
  484. data/spec/lib/matchers/include.rb +27 -0
  485. data/spec/lib/matchers/include_spec.rb +32 -0
  486. data/spec/lib/matchers/json.rb +135 -79
  487. data/spec/lib/matchers/match_tokens2.rb +74 -0
  488. data/spec/lib/matchers/resource.rb +35 -0
  489. data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
  490. data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
  491. data/spec/lib/puppet/indirector_testing.rb +12 -2
  492. data/spec/lib/puppet_spec/files.rb +1 -0
  493. data/spec/lib/puppet_spec/matchers.rb +5 -0
  494. data/spec/lib/puppet_spec/modules.rb +1 -1
  495. data/spec/lib/puppet_spec/scope.rb +14 -0
  496. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  497. data/spec/spec_helper.rb +47 -17
  498. data/spec/unit/agent_spec.rb +8 -1
  499. data/spec/unit/application/agent_spec.rb +5 -4
  500. data/spec/unit/application/apply_spec.rb +34 -15
  501. data/spec/unit/application/device_spec.rb +27 -32
  502. data/spec/unit/application/doc_spec.rb +4 -4
  503. data/spec/unit/application/filebucket_spec.rb +1 -1
  504. data/spec/unit/application/master_spec.rb +2 -2
  505. data/spec/unit/application_spec.rb +1 -1
  506. data/spec/unit/configurer/downloader_spec.rb +1 -1
  507. data/spec/unit/configurer/fact_handler_spec.rb +5 -16
  508. data/spec/unit/configurer_spec.rb +2 -2
  509. data/spec/unit/confine/exists_spec.rb +5 -5
  510. data/spec/unit/context/trusted_information_spec.rb +124 -0
  511. data/spec/unit/context_spec.rb +74 -0
  512. data/spec/unit/environments_spec.rb +126 -0
  513. data/spec/unit/face/config_spec.rb +31 -16
  514. data/spec/unit/face/module/build_spec.rb +1 -0
  515. data/spec/unit/face/module/install_spec.rb +21 -104
  516. data/spec/unit/face/module/list_spec.rb +52 -36
  517. data/spec/unit/face/module/uninstall_spec.rb +18 -25
  518. data/spec/unit/face/parser_spec.rb +39 -23
  519. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  520. data/spec/unit/file_serving/base_spec.rb +9 -13
  521. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
  522. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  523. data/spec/unit/file_serving/content_spec.rb +7 -12
  524. data/spec/unit/file_serving/fileset_spec.rb +49 -53
  525. data/spec/unit/file_serving/metadata_spec.rb +83 -32
  526. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  527. data/spec/unit/file_system/tempfile_spec.rb +3 -3
  528. data/spec/unit/file_system_spec.rb +508 -0
  529. data/spec/unit/forge/errors_spec.rb +1 -1
  530. data/spec/unit/forge/repository_spec.rb +1 -3
  531. data/spec/unit/hiera/scope_spec.rb +6 -2
  532. data/spec/unit/hiera_puppet_spec.rb +13 -6
  533. data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
  534. data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
  535. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  536. data/spec/unit/indirector/facts/facter_spec.rb +5 -5
  537. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  538. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  539. data/spec/unit/indirector/file_server_spec.rb +4 -4
  540. data/spec/unit/indirector/json_spec.rb +6 -6
  541. data/spec/unit/indirector/key/file_spec.rb +8 -8
  542. data/spec/unit/indirector/msgpack_spec.rb +191 -0
  543. data/spec/unit/indirector/node/active_record_spec.rb +1 -1
  544. data/spec/unit/indirector/node/ldap_spec.rb +16 -7
  545. data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
  546. data/spec/unit/indirector/node/plain_spec.rb +1 -1
  547. data/spec/unit/indirector/queue_spec.rb +1 -1
  548. data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
  549. data/spec/unit/indirector/request_spec.rb +16 -8
  550. data/spec/unit/indirector/rest_spec.rb +0 -4
  551. data/spec/unit/indirector/ssl_file_spec.rb +12 -11
  552. data/spec/unit/indirector/yaml_spec.rb +4 -4
  553. data/spec/unit/man_spec.rb +32 -0
  554. data/spec/unit/module_spec.rb +60 -46
  555. data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
  556. data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
  557. data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
  558. data/spec/unit/module_tool/tar_spec.rb +1 -1
  559. data/spec/unit/module_tool_spec.rb +17 -90
  560. data/spec/unit/network/authconfig_spec.rb +3 -4
  561. data/spec/unit/network/authentication_spec.rb +20 -6
  562. data/spec/unit/network/authorization_spec.rb +11 -1
  563. data/spec/unit/network/formats_spec.rb +32 -9
  564. data/spec/unit/network/http/api/v1_spec.rb +365 -62
  565. data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
  566. data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
  567. data/spec/unit/network/http/api/v2_spec.rb +14 -0
  568. data/spec/unit/network/http/connection_spec.rb +39 -5
  569. data/spec/unit/network/http/error_spec.rb +30 -0
  570. data/spec/unit/network/http/handler_spec.rb +69 -419
  571. data/spec/unit/network/http/rack/rest_spec.rb +20 -28
  572. data/spec/unit/network/http/route_spec.rb +75 -0
  573. data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
  574. data/spec/unit/network/http_pool_spec.rb +3 -3
  575. data/spec/unit/network/rights_spec.rb +2 -2
  576. data/spec/unit/node/environment_spec.rb +108 -89
  577. data/spec/unit/node/facts_spec.rb +5 -12
  578. data/spec/unit/node_spec.rb +22 -22
  579. data/spec/unit/parser/ast/collection_spec.rb +1 -1
  580. data/spec/unit/parser/ast/leaf_spec.rb +2 -0
  581. data/spec/unit/parser/ast/resource_spec.rb +1 -1
  582. data/spec/unit/parser/compiler_spec.rb +5 -3
  583. data/spec/unit/parser/files_spec.rb +40 -50
  584. data/spec/unit/parser/functions/defined_spec.rb +80 -18
  585. data/spec/unit/parser/functions/epp_spec.rb +88 -0
  586. data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
  587. data/spec/unit/parser/functions/generate_spec.rb +6 -2
  588. data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
  589. data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
  590. data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
  591. data/spec/unit/parser/functions/hiera_spec.rb +5 -2
  592. data/spec/unit/parser/functions/include_spec.rb +0 -1
  593. data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
  594. data/spec/unit/parser/functions/lookup_spec.rb +66 -16
  595. data/spec/unit/parser/functions_spec.rb +25 -91
  596. data/spec/unit/parser/lexer_spec.rb +1 -1
  597. data/spec/unit/parser/methods/filter_spec.rb +56 -0
  598. data/spec/unit/parser/methods/map_spec.rb +94 -5
  599. data/spec/unit/parser/methods/reduce_spec.rb +10 -0
  600. data/spec/unit/parser/methods/shared.rb +2 -18
  601. data/spec/unit/parser/methods/slice_spec.rb +39 -1
  602. data/spec/unit/parser/parser_spec.rb +14 -10
  603. data/spec/unit/parser/resource_spec.rb +3 -9
  604. data/spec/unit/parser/scope_spec.rb +81 -78
  605. data/spec/unit/parser/type_loader_spec.rb +0 -4
  606. data/spec/unit/pops/benchmark_spec.rb +142 -0
  607. data/spec/unit/pops/binder/binder_spec.rb +15 -34
  608. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
  609. data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
  610. data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
  611. data/spec/unit/pops/binder/injector_spec.rb +76 -81
  612. data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
  613. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
  614. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
  615. data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
  616. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
  617. data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
  618. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
  619. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
  620. data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
  621. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
  622. data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
  623. data/spec/unit/pops/factory_spec.rb +6 -29
  624. data/spec/unit/pops/issues_spec.rb +1 -1
  625. data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
  626. data/spec/unit/pops/model/model_spec.rb +2 -2
  627. data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
  628. data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
  629. data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
  630. data/spec/unit/pops/parser/lexer_spec.rb +25 -86
  631. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
  632. data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
  633. data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
  634. data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
  635. data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
  636. data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
  637. data/spec/unit/pops/parser/parser_spec.rb +3 -1
  638. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
  639. data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
  640. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
  641. data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
  642. data/spec/unit/pops/types/enumeration_spec.rb +50 -0
  643. data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
  644. data/spec/unit/pops/types/type_factory_spec.rb +108 -4
  645. data/spec/unit/pops/types/type_parser_spec.rb +114 -10
  646. data/spec/unit/pops/validator/validator_spec.rb +36 -1
  647. data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
  648. data/spec/unit/provider/cron/parsed_spec.rb +27 -31
  649. data/spec/unit/provider/file/posix_spec.rb +2 -2
  650. data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
  651. data/spec/unit/provider/mount_spec.rb +12 -1
  652. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  653. data/spec/unit/provider/package/apt_spec.rb +1 -1
  654. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  655. data/spec/unit/provider/package/gem_spec.rb +12 -0
  656. data/spec/unit/provider/package/msi_spec.rb +4 -0
  657. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  658. data/spec/unit/provider/package/pacman_spec.rb +36 -7
  659. data/spec/unit/provider/package/pkgin_spec.rb +57 -55
  660. data/spec/unit/provider/package/rpm_spec.rb +51 -6
  661. data/spec/unit/provider/service/base_spec.rb +4 -4
  662. data/spec/unit/provider/service/daemontools_spec.rb +8 -13
  663. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  664. data/spec/unit/provider/service/gentoo_spec.rb +24 -24
  665. data/spec/unit/provider/service/init_spec.rb +15 -15
  666. data/spec/unit/provider/service/openbsd_spec.rb +16 -16
  667. data/spec/unit/provider/service/openrc_spec.rb +20 -20
  668. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  669. data/spec/unit/provider/service/runit_spec.rb +5 -8
  670. data/spec/unit/provider/service/src_spec.rb +4 -4
  671. data/spec/unit/provider/service/systemd_spec.rb +24 -14
  672. data/spec/unit/provider/service/upstart_spec.rb +12 -4
  673. data/spec/unit/provider/service/windows_spec.rb +1 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
  675. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  676. data/spec/unit/provider/user/useradd_spec.rb +43 -15
  677. data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
  678. data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
  679. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  680. data/spec/unit/provider_spec.rb +120 -62
  681. data/spec/unit/rails/host_spec.rb +1 -1
  682. data/spec/unit/rails/param_value_spec.rb +4 -0
  683. data/spec/unit/relationship_spec.rb +4 -4
  684. data/spec/unit/reports/http_spec.rb +14 -3
  685. data/spec/unit/reports/rrdgraph_spec.rb +0 -1
  686. data/spec/unit/reports/store_spec.rb +2 -2
  687. data/spec/unit/resource/catalog_spec.rb +17 -29
  688. data/spec/unit/resource/status_spec.rb +1 -1
  689. data/spec/unit/resource/type_collection_spec.rb +28 -47
  690. data/spec/unit/resource/type_spec.rb +12 -23
  691. data/spec/unit/resource_spec.rb +54 -93
  692. data/spec/unit/run_spec.rb +3 -3
  693. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  694. data/spec/unit/settings/config_file_spec.rb +68 -15
  695. data/spec/unit/settings/file_setting_spec.rb +2 -2
  696. data/spec/unit/settings/ini_file_spec.rb +184 -0
  697. data/spec/unit/settings_spec.rb +137 -79
  698. data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
  699. data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
  700. data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
  701. data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
  702. data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
  703. data/spec/unit/ssl/host_spec.rb +8 -20
  704. data/spec/unit/ssl/inventory_spec.rb +2 -2
  705. data/spec/unit/ssl/key_spec.rb +4 -4
  706. data/spec/unit/status_spec.rb +6 -4
  707. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
  708. data/spec/unit/transaction/event_spec.rb +2 -2
  709. data/spec/unit/transaction/report_spec.rb +24 -15
  710. data/spec/unit/transaction/resource_harness_spec.rb +1 -1
  711. data/spec/unit/type/cron_spec.rb +39 -1
  712. data/spec/unit/type/file/content_spec.rb +4 -5
  713. data/spec/unit/type/file/ctime_spec.rb +1 -1
  714. data/spec/unit/type/file/mode_spec.rb +5 -4
  715. data/spec/unit/type/file/mtime_spec.rb +1 -1
  716. data/spec/unit/type/file/source_spec.rb +30 -7
  717. data/spec/unit/type/file_spec.rb +8 -8
  718. data/spec/unit/type/k5login_spec.rb +3 -3
  719. data/spec/unit/type/nagios_spec.rb +6 -0
  720. data/spec/unit/type/package/package_settings_spec.rb +135 -0
  721. data/spec/unit/type/package_spec.rb +13 -1
  722. data/spec/unit/type/resources_spec.rb +155 -0
  723. data/spec/unit/type/service_spec.rb +3 -3
  724. data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
  725. data/spec/unit/type/sshkey_spec.rb +39 -30
  726. data/spec/unit/type/tidy_spec.rb +19 -12
  727. data/spec/unit/type/user_spec.rb +47 -2
  728. data/spec/unit/type/whit_spec.rb +2 -2
  729. data/spec/unit/type/yumrepo_spec.rb +32 -177
  730. data/spec/unit/type/zone_spec.rb +2 -2
  731. data/spec/unit/type_spec.rb +11 -0
  732. data/spec/unit/util/adsi_spec.rb +48 -1
  733. data/spec/unit/util/autoload_spec.rb +24 -39
  734. data/spec/unit/util/backups_spec.rb +25 -28
  735. data/spec/unit/util/checksums_spec.rb +1 -3
  736. data/spec/unit/util/colors_spec.rb +14 -0
  737. data/spec/unit/util/docs_spec.rb +9 -0
  738. data/spec/unit/util/execution_spec.rb +1 -1
  739. data/spec/unit/util/filetype_spec.rb +7 -7
  740. data/spec/unit/util/instrumentation/data_spec.rb +3 -1
  741. data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
  742. data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
  743. data/spec/unit/util/json_lockfile_spec.rb +25 -4
  744. data/spec/unit/util/lockfile_spec.rb +49 -7
  745. data/spec/unit/util/log/destinations_spec.rb +1 -0
  746. data/spec/unit/util/log_spec.rb +1 -1
  747. data/spec/unit/util/metric_spec.rb +1 -1
  748. data/spec/unit/util/pidlock_spec.rb +6 -6
  749. data/spec/unit/util/pson_spec.rb +2 -2
  750. data/spec/unit/util/rdoc/parser_spec.rb +32 -29
  751. data/spec/unit/util/resource_template_spec.rb +3 -3
  752. data/spec/unit/util/selinux_spec.rb +5 -5
  753. data/spec/unit/util/storage_spec.rb +4 -4
  754. data/spec/unit/util/tag_set_spec.rb +1 -1
  755. data/spec/unit/util/watcher_spec.rb +1 -4
  756. data/spec/unit/util/yaml_spec.rb +2 -2
  757. data/spec/unit/util_spec.rb +7 -7
  758. data/tasks/benchmark.rake +0 -1
  759. data/tasks/parallel.rake +408 -0
  760. data/tasks/yard.rake +59 -0
  761. metadata +2889 -2782
  762. checksums.yaml +0 -7
  763. data/README_DEVELOPER.md +0 -809
  764. data/lib/puppet/file_system/file.rb +0 -271
  765. data/lib/puppet/network/http/rack/httphandler.rb +0 -13
  766. data/lib/puppet/pops/binder/hiera2.rb +0 -10
  767. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
  768. data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
  769. data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
  770. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
  771. data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
  772. data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
  773. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
  774. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
  775. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
  776. data/lib/puppet/pops/parser/grammar.ra +0 -746
  777. data/lib/puppet/provider/port/parsed.rb +0 -173
  778. data/lib/puppet/type/port.rb +0 -119
  779. data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
  780. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
  781. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
  782. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
  783. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
  784. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
  785. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
  786. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
  787. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
  788. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
  789. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
  790. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
  791. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
  792. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
  793. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
  794. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
  795. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
  796. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
  797. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
  798. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
  799. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
  800. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
  801. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
  802. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
  803. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
  804. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
  805. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
  806. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
  807. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
  808. data/spec/unit/file_system/file_spec.rb +0 -486
  809. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
  810. data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
  811. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -10,11 +10,21 @@ describe Puppet::Network::Authorization do
10
10
  subject { AuthTest.new }
11
11
 
12
12
  describe "when creating an authconfig object" do
13
- it "creates default ACL entries if no file has been read" do
13
+ before :each do
14
14
  # Other tests may have created an authconfig, so we have to undo that.
15
+ @orig_auth_config = Puppet::Network::AuthConfigLoader.instance_variable_get(:@auth_config)
16
+ @orig_auth_config_file = Puppet::Network::AuthConfigLoader.instance_variable_get(:@auth_config_file)
17
+
15
18
  Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config, nil)
16
19
  Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config_file, nil)
20
+ end
17
21
 
22
+ after :each do
23
+ Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config, @orig_auth_config)
24
+ Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config_file, @orig_auth_config_file)
25
+ end
26
+
27
+ it "creates default ACL entries if no file has been read" do
18
28
  Puppet::Network::AuthConfigParser.expects(:new_from_file).raises Errno::ENOENT
19
29
  Puppet::Network::AuthConfig.any_instance.expects(:insert_default_acl)
20
30
 
@@ -9,7 +9,7 @@ class PsonTest
9
9
  string == other.string
10
10
  end
11
11
 
12
- def self.from_pson(data)
12
+ def self.from_data_hash(data)
13
13
  new(data)
14
14
  end
15
15
 
@@ -43,11 +43,34 @@ describe "Puppet Network Format" do
43
43
  @msgpack.weight.should == 20
44
44
  end
45
45
 
46
- it "should fail when one element does not have a from_pson" do
46
+ it "should fail when one element does not have a from_data_hash" do
47
47
  expect do
48
48
  @msgpack.intern_multiple(Hash, MessagePack.pack(["foo"]))
49
49
  end.to raise_error(NoMethodError)
50
50
  end
51
+
52
+ it "should be able to serialize a catalog" do
53
+ cat = Puppet::Resource::Catalog.new('foo')
54
+ cat.add_resource(Puppet::Resource.new(:file, 'my_file'))
55
+ catunpack = MessagePack.unpack(cat.to_msgpack)
56
+ catunpack.should include(
57
+ "tags"=>[],
58
+ "name"=>"foo",
59
+ "version"=>nil,
60
+ "environment"=>"",
61
+ "edges"=>[],
62
+ "classes"=>[]
63
+ )
64
+ catunpack["resources"][0].should include(
65
+ "type"=>"File",
66
+ "title"=>"my_file",
67
+ "exported"=>false
68
+ )
69
+ catunpack["resources"][0]["tags"].should include(
70
+ "file",
71
+ "my_file"
72
+ )
73
+ end
51
74
  end
52
75
 
53
76
  it "should include a yaml format" do
@@ -293,10 +316,10 @@ describe "Puppet Network Format" do
293
316
  @pson.render_multiple(instances).should == "foo"
294
317
  end
295
318
 
296
- it "should intern by calling 'PSON.parse' on the text and then using from_pson to convert the data into an instance" do
319
+ it "should intern by calling 'PSON.parse' on the text and then using from_data_hash to convert the data into an instance" do
297
320
  text = "foo"
298
321
  PSON.expects(:parse).with("foo").returns("type" => "PsonTest", "data" => "foo")
299
- PsonTest.expects(:from_pson).with("foo").returns "parsed_pson"
322
+ PsonTest.expects(:from_data_hash).with("foo").returns "parsed_pson"
300
323
  @pson.intern(PsonTest, text).should == "parsed_pson"
301
324
  end
302
325
 
@@ -304,22 +327,22 @@ describe "Puppet Network Format" do
304
327
  text = "foo"
305
328
  instance = PsonTest.new("foo")
306
329
  PSON.expects(:parse).with("foo").returns(instance)
307
- PsonTest.expects(:from_pson).never
330
+ PsonTest.expects(:from_data_hash).never
308
331
  @pson.intern(PsonTest, text).should equal(instance)
309
332
  end
310
333
 
311
- it "should intern by calling 'PSON.parse' on the text and then using from_pson to convert the actual into an instance if the pson has no class/data separation" do
334
+ it "should intern by calling 'PSON.parse' on the text and then using from_data_hash to convert the actual into an instance if the pson has no class/data separation" do
312
335
  text = "foo"
313
336
  PSON.expects(:parse).with("foo").returns("foo")
314
- PsonTest.expects(:from_pson).with("foo").returns "parsed_pson"
337
+ PsonTest.expects(:from_data_hash).with("foo").returns "parsed_pson"
315
338
  @pson.intern(PsonTest, text).should == "parsed_pson"
316
339
  end
317
340
 
318
341
  it "should intern multiples by parsing the text and using 'class.intern' on each resulting data structure" do
319
342
  text = "foo"
320
343
  PSON.expects(:parse).with("foo").returns ["bar", "baz"]
321
- PsonTest.expects(:from_pson).with("bar").returns "BAR"
322
- PsonTest.expects(:from_pson).with("baz").returns "BAZ"
344
+ PsonTest.expects(:from_data_hash).with("bar").returns "BAR"
345
+ PsonTest.expects(:from_data_hash).with("baz").returns "BAZ"
323
346
  @pson.intern_multiple(PsonTest, text).should == %w{BAR BAZ}
324
347
  end
325
348
 
@@ -1,216 +1,519 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
+ require 'puppet/network/http'
4
5
  require 'puppet/network/http/api/v1'
5
-
6
- class V1RestApiTester
7
- include Puppet::Network::HTTP::API::V1
8
- end
6
+ require 'puppet/indirector_testing'
9
7
 
10
8
  describe Puppet::Network::HTTP::API::V1 do
11
- before do
12
- @tester = V1RestApiTester.new
9
+ let(:not_found_code) { Puppet::Network::HTTP::Error::HTTPNotFoundError::CODE }
10
+ let(:not_acceptable_code) { Puppet::Network::HTTP::Error::HTTPNotAcceptableError::CODE }
11
+ let(:not_authorized_code) { Puppet::Network::HTTP::Error::HTTPNotAuthorizedError::CODE }
12
+
13
+ let(:indirection) { Puppet::IndirectorTesting.indirection }
14
+ let(:handler) { Puppet::Network::HTTP::API::V1.new }
15
+ let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
16
+
17
+ def a_request_that_heads(data, request = {})
18
+ Puppet::Network::HTTP::Request.from_hash({
19
+ :headers => {
20
+ 'accept' => request[:accept_header],
21
+ 'content-type' => "text/yaml", },
22
+ :method => "HEAD",
23
+ :path => "/production/#{indirection.name}/#{data.value}",
24
+ :params => {},
25
+ })
26
+ end
27
+
28
+ def a_request_that_submits(data, request = {})
29
+ Puppet::Network::HTTP::Request.from_hash({
30
+ :headers => {
31
+ 'accept' => request[:accept_header],
32
+ 'content-type' => request[:content_type_header] || "text/yaml", },
33
+ :method => "PUT",
34
+ :path => "/production/#{indirection.name}/#{data.value}",
35
+ :params => {},
36
+ :body => request[:body] || data.render("text/yaml")
37
+ })
38
+ end
39
+
40
+ def a_request_that_destroys(data, request = {})
41
+ Puppet::Network::HTTP::Request.from_hash({
42
+ :headers => {
43
+ 'accept' => request[:accept_header],
44
+ 'content-type' => "text/yaml", },
45
+ :method => "DELETE",
46
+ :path => "/production/#{indirection.name}/#{data.value}",
47
+ :params => {},
48
+ :body => ''
49
+ })
13
50
  end
14
51
 
15
- it "should be able to convert a URI into a request" do
16
- @tester.should respond_to(:uri2indirection)
52
+ def a_request_that_finds(data, request = {})
53
+ Puppet::Network::HTTP::Request.from_hash({
54
+ :headers => {
55
+ 'accept' => request[:accept_header],
56
+ 'content-type' => "text/yaml", },
57
+ :method => "GET",
58
+ :path => "/production/#{indirection.name}/#{data.value}",
59
+ :params => {},
60
+ :body => ''
61
+ })
17
62
  end
18
63
 
19
- it "should be able to convert a request into a URI" do
20
- @tester.should respond_to(:indirection2uri)
64
+ def a_request_that_searches(key, request = {})
65
+ Puppet::Network::HTTP::Request.from_hash({
66
+ :headers => {
67
+ 'accept' => request[:accept_header],
68
+ 'content-type' => "text/yaml", },
69
+ :method => "GET",
70
+ :path => "/production/#{indirection.name}s/#{key}",
71
+ :params => {},
72
+ :body => ''
73
+ })
74
+ end
75
+
76
+
77
+ before do
78
+ Puppet::IndirectorTesting.indirection.terminus_class = :memory
79
+ Puppet::IndirectorTesting.indirection.terminus.clear
80
+ handler.stubs(:check_authorization)
81
+ handler.stubs(:warn_if_near_expiration)
21
82
  end
22
83
 
23
84
  describe "when converting a URI into a request" do
24
85
  before do
25
- @tester.stubs(:handler).returns "foo"
86
+ handler.stubs(:handler).returns "foo"
26
87
  end
27
88
 
28
89
  it "should require the http method, the URI, and the query parameters" do
29
90
  # Not a terribly useful test, but an important statement for the spec
30
- lambda { @tester.uri2indirection("/foo") }.should raise_error(ArgumentError)
91
+ lambda { handler.uri2indirection("/foo") }.should raise_error(ArgumentError)
31
92
  end
32
93
 
33
94
  it "should use the first field of the URI as the environment" do
34
- @tester.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].to_s.should == "env"
95
+ handler.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].to_s.should == "env"
35
96
  end
36
97
 
37
98
  it "should fail if the environment is not alphanumeric" do
38
- lambda { @tester.uri2indirection("GET", "/env ness/foo/bar", {}) }.should raise_error(ArgumentError)
99
+ lambda { handler.uri2indirection("GET", "/env ness/foo/bar", {}) }.should raise_error(ArgumentError)
39
100
  end
40
101
 
41
102
  it "should use the environment from the URI even if one is specified in the parameters" do
42
- @tester.uri2indirection("GET", "/env/foo/bar", {:environment => "otherenv"})[3][:environment].to_s.should == "env"
103
+ handler.uri2indirection("GET", "/env/foo/bar", {:environment => "otherenv"})[3][:environment].to_s.should == "env"
43
104
  end
44
105
 
45
106
  it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
46
- @tester.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
107
+ handler.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
47
108
  end
48
109
 
49
110
  it "should pass allowed parameters through" do
50
- @tester.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
111
+ handler.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
51
112
  end
52
113
 
53
114
  it "should return the environment as a Puppet::Node::Environment" do
54
- @tester.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].should be_a Puppet::Node::Environment
115
+ handler.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].should be_a Puppet::Node::Environment
55
116
  end
56
117
 
57
118
  it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
58
- @tester.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
119
+ handler.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
59
120
  end
60
121
 
61
122
  it "should pass allowed parameters through" do
62
- @tester.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
123
+ handler.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
63
124
  end
64
125
 
65
126
  it "should use the second field of the URI as the indirection name" do
66
- @tester.uri2indirection("GET", "/env/foo/bar", {})[0].should == "foo"
127
+ handler.uri2indirection("GET", "/env/foo/bar", {})[0].should == "foo"
67
128
  end
68
129
 
69
130
  it "should fail if the indirection name is not alphanumeric" do
70
- lambda { @tester.uri2indirection("GET", "/env/foo ness/bar", {}) }.should raise_error(ArgumentError)
131
+ lambda { handler.uri2indirection("GET", "/env/foo ness/bar", {}) }.should raise_error(ArgumentError)
71
132
  end
72
133
 
73
134
  it "should use the remainder of the URI as the indirection key" do
74
- @tester.uri2indirection("GET", "/env/foo/bar", {})[2].should == "bar"
135
+ handler.uri2indirection("GET", "/env/foo/bar", {})[2].should == "bar"
75
136
  end
76
137
 
77
138
  it "should support the indirection key being a /-separated file path" do
78
- @tester.uri2indirection("GET", "/env/foo/bee/baz/bomb", {})[2].should == "bee/baz/bomb"
139
+ handler.uri2indirection("GET", "/env/foo/bee/baz/bomb", {})[2].should == "bee/baz/bomb"
79
140
  end
80
141
 
81
142
  it "should fail if no indirection key is specified" do
82
- lambda { @tester.uri2indirection("GET", "/env/foo/", {}) }.should raise_error(ArgumentError)
83
- lambda { @tester.uri2indirection("GET", "/env/foo", {}) }.should raise_error(ArgumentError)
143
+ lambda { handler.uri2indirection("GET", "/env/foo/", {}) }.should raise_error(ArgumentError)
144
+ lambda { handler.uri2indirection("GET", "/env/foo", {}) }.should raise_error(ArgumentError)
84
145
  end
85
146
 
86
147
  it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is singular" do
87
- @tester.uri2indirection("GET", "/env/foo/bar", {})[1].should == :find
148
+ handler.uri2indirection("GET", "/env/foo/bar", {})[1].should == :find
88
149
  end
89
150
 
90
151
  it "should choose 'find' as the indirection method if the http method is a POST and the indirection name is singular" do
91
- @tester.uri2indirection("POST", "/env/foo/bar", {})[1].should == :find
152
+ handler.uri2indirection("POST", "/env/foo/bar", {})[1].should == :find
92
153
  end
93
154
 
94
155
  it "should choose 'head' as the indirection method if the http method is a HEAD and the indirection name is singular" do
95
- @tester.uri2indirection("HEAD", "/env/foo/bar", {})[1].should == :head
156
+ handler.uri2indirection("HEAD", "/env/foo/bar", {})[1].should == :head
96
157
  end
97
158
 
98
159
  it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is plural" do
99
- @tester.uri2indirection("GET", "/env/foos/bar", {})[1].should == :search
160
+ handler.uri2indirection("GET", "/env/foos/bar", {})[1].should == :search
100
161
  end
101
162
 
102
163
  it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is facts" do
103
- @tester.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
164
+ handler.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
104
165
  end
105
166
 
106
167
  it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is facts" do
107
- @tester.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
168
+ handler.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
108
169
  end
109
170
 
110
171
  it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is inventory" do
111
- @tester.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
172
+ handler.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
112
173
  end
113
174
 
114
175
  it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is facts" do
115
- @tester.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
176
+ handler.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
116
177
  end
117
178
 
118
179
  it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is facts" do
119
- @tester.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
180
+ handler.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
120
181
  end
121
182
 
122
183
  it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is inventory" do
123
- @tester.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
184
+ handler.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
124
185
  end
125
186
 
126
187
  it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is facts_search" do
127
- @tester.uri2indirection("GET", "/env/facts_search/bar", {})[1].should == :search
188
+ handler.uri2indirection("GET", "/env/facts_search/bar", {})[1].should == :search
128
189
  end
129
190
 
130
191
  it "should change indirection name to 'facts' if the http method is a GET and the indirection name is facts_search" do
131
- @tester.uri2indirection("GET", "/env/facts_search/bar", {})[0].should == 'facts'
192
+ handler.uri2indirection("GET", "/env/facts_search/bar", {})[0].should == 'facts'
132
193
  end
133
194
 
134
195
  it "should not change indirection name from 'facts' if the http method is a GET and the indirection name is facts" do
135
- @tester.uri2indirection("GET", "/env/facts/bar", {})[0].should == 'facts'
196
+ handler.uri2indirection("GET", "/env/facts/bar", {})[0].should == 'facts'
136
197
  end
137
198
 
138
199
  it "should change indirection name to 'status' if the http method is a GET and the indirection name is statuses" do
139
- @tester.uri2indirection("GET", "/env/statuses/bar", {})[0].should == 'status'
200
+ handler.uri2indirection("GET", "/env/statuses/bar", {})[0].should == 'status'
140
201
  end
141
202
 
142
203
  it "should change indirection name to 'probe' if the http method is a GET and the indirection name is probes" do
143
- @tester.uri2indirection("GET", "/env/probes/bar", {})[0].should == 'probe'
204
+ handler.uri2indirection("GET", "/env/probes/bar", {})[0].should == 'probe'
144
205
  end
145
206
 
146
207
  it "should choose 'delete' as the indirection method if the http method is a DELETE and the indirection name is singular" do
147
- @tester.uri2indirection("DELETE", "/env/foo/bar", {})[1].should == :destroy
208
+ handler.uri2indirection("DELETE", "/env/foo/bar", {})[1].should == :destroy
148
209
  end
149
210
 
150
211
  it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is singular" do
151
- @tester.uri2indirection("PUT", "/env/foo/bar", {})[1].should == :save
212
+ handler.uri2indirection("PUT", "/env/foo/bar", {})[1].should == :save
152
213
  end
153
214
 
154
215
  it "should fail if an indirection method cannot be picked" do
155
- lambda { @tester.uri2indirection("UPDATE", "/env/foo/bar", {}) }.should raise_error(ArgumentError)
216
+ lambda { handler.uri2indirection("UPDATE", "/env/foo/bar", {}) }.should raise_error(ArgumentError)
156
217
  end
157
218
 
158
219
  it "should URI unescape the indirection key" do
159
220
  escaped = URI.escape("foo bar")
160
- indirection_name, method, key, params = @tester.uri2indirection("GET", "/env/foo/#{escaped}", {})
221
+ indirection_name, method, key, params = handler.uri2indirection("GET", "/env/foo/#{escaped}", {})
161
222
  key.should == "foo bar"
162
223
  end
163
224
  end
164
225
 
165
226
  describe "when converting a request into a URI" do
166
- before do
167
- @request = Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv")
168
- end
227
+ let(:request) { Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv") }
169
228
 
170
229
  it "should use the environment as the first field of the URI" do
171
- @tester.indirection2uri(@request).split("/")[1].should == "myenv"
230
+ handler.class.indirection2uri(request).split("/")[1].should == "myenv"
172
231
  end
173
232
 
174
233
  it "should use the indirection as the second field of the URI" do
175
- @tester.indirection2uri(@request).split("/")[2].should == "foo"
234
+ handler.class.indirection2uri(request).split("/")[2].should == "foo"
176
235
  end
177
236
 
178
237
  it "should pluralize the indirection name if the method is 'search'" do
179
- @request.stubs(:method).returns :search
180
- @tester.indirection2uri(@request).split("/")[2].should == "foos"
238
+ request.stubs(:method).returns :search
239
+ handler.class.indirection2uri(request).split("/")[2].should == "foos"
181
240
  end
182
241
 
183
242
  it "should use the escaped key as the remainder of the URI" do
184
243
  escaped = URI.escape("with spaces")
185
- @tester.indirection2uri(@request).split("/")[3].sub(/\?.+/, '').should == escaped
244
+ handler.class.indirection2uri(request).split("/")[3].sub(/\?.+/, '').should == escaped
186
245
  end
187
246
 
188
247
  it "should add the query string to the URI" do
189
- @request.expects(:query_string).returns "?query"
190
- @tester.indirection2uri(@request).should =~ /\?query$/
248
+ request.expects(:query_string).returns "?query"
249
+ handler.class.indirection2uri(request).should =~ /\?query$/
191
250
  end
192
251
  end
193
252
 
194
253
  describe "when converting a request into a URI with body" do
195
- before :each do
196
- @request = Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv")
197
- end
254
+ let(:request) { Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv") }
198
255
 
199
256
  it "should use the environment as the first field of the URI" do
200
- @tester.request_to_uri_and_body(@request).first.split("/")[1].should == "myenv"
257
+ handler.class.request_to_uri_and_body(request).first.split("/")[1].should == "myenv"
201
258
  end
202
259
 
203
260
  it "should use the indirection as the second field of the URI" do
204
- @tester.request_to_uri_and_body(@request).first.split("/")[2].should == "foo"
261
+ handler.class.request_to_uri_and_body(request).first.split("/")[2].should == "foo"
205
262
  end
206
263
 
207
264
  it "should use the escaped key as the remainder of the URI" do
208
265
  escaped = URI.escape("with spaces")
209
- @tester.request_to_uri_and_body(@request).first.split("/")[3].sub(/\?.+/, '').should == escaped
266
+ handler.class.request_to_uri_and_body(request).first.split("/")[3].sub(/\?.+/, '').should == escaped
210
267
  end
211
268
 
212
269
  it "should return the URI and body separately" do
213
- @tester.request_to_uri_and_body(@request).should == ["/myenv/foo/with%20spaces", "foo=bar"]
270
+ handler.class.request_to_uri_and_body(request).should == ["/myenv/foo/with%20spaces", "foo=bar"]
271
+ end
272
+ end
273
+
274
+ describe "when processing a request" do
275
+ it "should return not_authorized_code if the request is not authorized" do
276
+ request = a_request_that_heads(Puppet::IndirectorTesting.new("my data"))
277
+
278
+ handler.expects(:check_authorization).raises(Puppet::Network::AuthorizationError.new("forbidden"))
279
+
280
+ handler.call(request, response)
281
+
282
+ expect(response.code).to eq(not_authorized_code)
283
+ end
284
+
285
+ it "should return an error code if the indirection does not support remote requests" do
286
+ request = a_request_that_heads(Puppet::IndirectorTesting.new("my data"))
287
+
288
+ indirection.expects(:allow_remote_requests?).returns(false)
289
+
290
+ handler.call(request, response)
291
+
292
+ expect(response.code).to eq(not_found_code)
293
+ end
294
+
295
+ it "should serialize a controller exception when an exception is thrown while finding the model instance" do
296
+ request = a_request_that_finds(Puppet::IndirectorTesting.new("key"))
297
+ handler.expects(:do_find).raises(ArgumentError, "The exception")
298
+
299
+ handler.call(request, response)
300
+
301
+ expect(response.code).to eq(400)
302
+ expect(response.body).to eq("The exception")
303
+ expect(response.type).to eq("text/plain")
304
+ end
305
+ end
306
+
307
+ describe "when finding a model instance" do
308
+ it "uses the first supported format for the response" do
309
+ data = Puppet::IndirectorTesting.new("my data")
310
+ indirection.save(data, "my data")
311
+ request = a_request_that_finds(data, :accept_header => "unknown, pson, yaml")
312
+
313
+ handler.call(request, response)
314
+
315
+ expect(response.body).to eq(data.render(:pson))
316
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
317
+ end
318
+
319
+ it "responds with a not_acceptable_code error when no accept header is provided" do
320
+ data = Puppet::IndirectorTesting.new("my data")
321
+ indirection.save(data, "my data")
322
+ request = a_request_that_finds(data, :accept_header => nil)
323
+
324
+ handler.call(request, response)
325
+
326
+ expect(response.code).to eq(not_acceptable_code)
327
+ end
328
+
329
+ it "raises an error when no accepted formats are known" do
330
+ data = Puppet::IndirectorTesting.new("my data")
331
+ indirection.save(data, "my data")
332
+ request = a_request_that_finds(data, :accept_header => "unknown, also/unknown")
333
+
334
+ handler.call(request, response)
335
+
336
+ expect(response.code).to eq(not_acceptable_code)
337
+ end
338
+
339
+ it "should pass the result through without rendering it if the result is a string" do
340
+ data = Puppet::IndirectorTesting.new("my data")
341
+ data_string = "my data string"
342
+ request = a_request_that_finds(data, :accept_header => "pson")
343
+ indirection.expects(:find).returns(data_string)
344
+
345
+ handler.call(request, response)
346
+
347
+ expect(response.body).to eq(data_string)
348
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
349
+ end
350
+
351
+ it "should return a not_found_code when no model instance can be found" do
352
+ data = Puppet::IndirectorTesting.new("my data")
353
+ request = a_request_that_finds(data, :accept_header => "unknown, pson, yaml")
354
+
355
+ handler.call(request, response)
356
+ expect(response.code).to eq(not_found_code)
357
+ end
358
+ end
359
+
360
+ describe "when searching for model instances" do
361
+ it "uses the first supported format for the response" do
362
+ data = Puppet::IndirectorTesting.new("my data")
363
+ indirection.save(data, "my data")
364
+ request = a_request_that_searches("my", :accept_header => "unknown, pson, yaml")
365
+
366
+ handler.call(request, response)
367
+
368
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
369
+ expect(response.body).to eq(Puppet::IndirectorTesting.render_multiple(:pson, [data]))
370
+ end
371
+
372
+ it "should return [] when searching returns an empty array" do
373
+ request = a_request_that_searches("nothing", :accept_header => "unknown, pson, yaml")
374
+
375
+ handler.call(request, response)
376
+
377
+ expect(response.body).to eq("[]")
378
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
379
+ end
380
+
381
+ it "should return a not_found_code when searching returns nil" do
382
+ request = a_request_that_searches("nothing", :accept_header => "unknown, pson, yaml")
383
+ indirection.expects(:search).returns(nil)
384
+
385
+ handler.call(request, response)
386
+
387
+ expect(response.code).to eq(not_found_code)
388
+ end
389
+ end
390
+
391
+ describe "when destroying a model instance" do
392
+ it "destroys the data indicated in the request" do
393
+ data = Puppet::IndirectorTesting.new("my data")
394
+ indirection.save(data, "my data")
395
+ request = a_request_that_destroys(data)
396
+
397
+ handler.call(request, response)
398
+
399
+ Puppet::IndirectorTesting.indirection.find("my data").should be_nil
400
+ end
401
+
402
+ it "responds with yaml when no Accept header is given" do
403
+ data = Puppet::IndirectorTesting.new("my data")
404
+ indirection.save(data, "my data")
405
+ request = a_request_that_destroys(data, :accept_header => nil)
406
+
407
+ handler.call(request, response)
408
+
409
+ expect(response.body).to eq(data.render(:yaml))
410
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:yaml))
411
+ end
412
+
413
+ it "uses the first supported format for the response" do
414
+ data = Puppet::IndirectorTesting.new("my data")
415
+ indirection.save(data, "my data")
416
+ request = a_request_that_destroys(data, :accept_header => "unknown, pson, yaml")
417
+
418
+ handler.call(request, response)
419
+
420
+ expect(response.body).to eq(data.render(:pson))
421
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
422
+ end
423
+
424
+ it "raises an error and does not destroy when no accepted formats are known" do
425
+ data = Puppet::IndirectorTesting.new("my data")
426
+ indirection.save(data, "my data")
427
+ request = a_request_that_submits(data, :accept_header => "unknown, also/unknown")
428
+
429
+ handler.call(request, response)
430
+
431
+ expect(response.code).to eq(not_acceptable_code)
432
+ Puppet::IndirectorTesting.indirection.find("my data").should_not be_nil
433
+ end
434
+ end
435
+
436
+ describe "when saving a model instance" do
437
+ it "allows an empty body when the format supports it" do
438
+ class Puppet::IndirectorTesting::Nonvalidatingmemory < Puppet::IndirectorTesting::Memory
439
+ def validate_key(_)
440
+ # nothing
441
+ end
442
+ end
443
+
444
+ indirection.terminus_class = :nonvalidatingmemory
445
+
446
+ data = Puppet::IndirectorTesting.new("test")
447
+ request = a_request_that_submits(data,
448
+ :content_type_header => "application/x-raw",
449
+ :body => '')
450
+
451
+ handler.call(request, response)
452
+
453
+ Puppet::IndirectorTesting.indirection.find("test").name.should == ''
454
+ end
455
+
456
+ it "saves the data sent in the request" do
457
+ data = Puppet::IndirectorTesting.new("my data")
458
+ request = a_request_that_submits(data)
459
+
460
+ handler.call(request, response)
461
+
462
+ saved = Puppet::IndirectorTesting.indirection.find("my data")
463
+ expect(saved.name).to eq(data.name)
464
+ end
465
+
466
+ it "responds with yaml when no Accept header is given" do
467
+ data = Puppet::IndirectorTesting.new("my data")
468
+ request = a_request_that_submits(data, :accept_header => nil)
469
+
470
+ handler.call(request, response)
471
+
472
+ expect(response.body).to eq(data.render(:yaml))
473
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:yaml))
474
+ end
475
+
476
+ it "uses the first supported format for the response" do
477
+ data = Puppet::IndirectorTesting.new("my data")
478
+ request = a_request_that_submits(data, :accept_header => "unknown, pson, yaml")
479
+
480
+ handler.call(request, response)
481
+
482
+ expect(response.body).to eq(data.render(:pson))
483
+ expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
484
+ end
485
+
486
+ it "raises an error and does not save when no accepted formats are known" do
487
+ data = Puppet::IndirectorTesting.new("my data")
488
+ request = a_request_that_submits(data, :accept_header => "unknown, also/unknown")
489
+
490
+ handler.call(request, response)
491
+
492
+ expect(Puppet::IndirectorTesting.indirection.find("my data")).to be_nil
493
+ expect(response.code).to eq(not_acceptable_code)
494
+ end
495
+ end
496
+
497
+ describe "when performing head operation" do
498
+ it "should not generate a response when a model head call succeeds" do
499
+ data = Puppet::IndirectorTesting.new("my data")
500
+ indirection.save(data, "my data")
501
+ request = a_request_that_heads(data)
502
+
503
+ handler.call(request, response)
504
+
505
+ expect(response.code).to eq(nil)
506
+ end
507
+
508
+ it "should return a not_found_code when the model head call returns false" do
509
+ data = Puppet::IndirectorTesting.new("my data")
510
+ request = a_request_that_heads(data)
511
+
512
+ handler.call(request, response)
513
+
514
+ expect(response.code).to eq(not_found_code)
515
+ expect(response.type).to eq("text/plain")
516
+ expect(response.body).to eq("Not Found: Could not find indirector_testing my data")
214
517
  end
215
518
  end
216
519
  end