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
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
- require 'puppet/forge/errors'
2
+ require 'puppet/forge'
3
3
 
4
4
  describe Puppet::Forge::Errors do
5
5
  describe 'SSLVerifyError' do
@@ -1,9 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
  require 'net/http'
4
- require 'puppet/forge/repository'
5
- require 'puppet/forge/cache'
6
- require 'puppet/forge/errors'
4
+ require 'puppet/forge'
7
5
 
8
6
  describe Puppet::Forge::Repository do
9
7
  let(:consumer_version) { "Test/1.0" }
@@ -1,8 +1,12 @@
1
1
  require 'spec_helper'
2
2
  require 'hiera/scope'
3
3
 
4
+ require 'puppet_spec/scope'
5
+
4
6
  describe Hiera::Scope do
5
- let(:real) { Puppet::Parser::Scope.new_for_test_harness("test_node") }
7
+ include PuppetSpec::Scope
8
+
9
+ let(:real) { create_test_scope_for_node("test_node") }
6
10
  let(:scope) { Hiera::Scope.new(real) }
7
11
 
8
12
  describe "#initialize" do
@@ -57,7 +61,7 @@ describe Hiera::Scope do
57
61
  end
58
62
 
59
63
  it "looks for the class which includes the defined type as the calling_class" do
60
- parent = Puppet::Parser::Scope.new_for_test_harness("parent")
64
+ parent = create_test_scope_for_node("parent")
61
65
  real.parent = parent
62
66
  parent.source = Puppet::Resource::Type.new(:hostclass,
63
67
  "name_of_the_class_including_the_definition",
@@ -1,7 +1,14 @@
1
1
  require 'spec_helper'
2
2
  require 'hiera_puppet'
3
+ require 'puppet_spec/scope'
3
4
 
4
5
  describe 'HieraPuppet' do
6
+ include PuppetSpec::Scope
7
+
8
+ after(:all) do
9
+ HieraPuppet.instance_variable_set(:@hiera, nil)
10
+ end
11
+
5
12
  describe 'HieraPuppet#hiera_config' do
6
13
  let(:hiera_config_data) do
7
14
  { :backend => 'yaml' }
@@ -39,7 +46,7 @@ describe 'HieraPuppet' do
39
46
  begin
40
47
  Puppet.settings[:hiera_config] = nil
41
48
  rescue ArgumentError => detail
42
- raise unless detail.message =~ /unknown configuration parameter/
49
+ raise unless detail.message =~ /unknown setting/
43
50
  end
44
51
  HieraPuppet.send(:hiera_config_file).should be_nil
45
52
  end
@@ -48,11 +55,11 @@ describe 'HieraPuppet' do
48
55
  begin
49
56
  Puppet.settings[:hiera_config] = "/dev/null/my_hiera.yaml"
50
57
  rescue ArgumentError => detail
51
- raise unless detail.message =~ /unknown configuration parameter/
58
+ raise unless detail.message =~ /unknown setting/
52
59
  pending("This example does not apply to Puppet #{Puppet.version} because it does not have this setting")
53
60
  end
54
61
 
55
- Puppet::FileSystem::File.stubs(:exist?).with(Puppet[:hiera_config]).returns(true)
62
+ Puppet::FileSystem.stubs(:exist?).with(Puppet[:hiera_config]).returns(true)
56
63
  HieraPuppet.send(:hiera_config_file).should == Puppet[:hiera_config]
57
64
  end
58
65
 
@@ -60,18 +67,18 @@ describe 'HieraPuppet' do
60
67
  begin
61
68
  Puppet.settings[:hiera_config] = nil
62
69
  rescue ArgumentError => detail
63
- raise unless detail.message =~ /unknown configuration parameter/
70
+ raise unless detail.message =~ /unknown setting/
64
71
  end
65
72
  Puppet.settings[:confdir] = "/dev/null/puppet"
66
73
  hiera_config = File.join(Puppet[:confdir], 'hiera.yaml')
67
- Puppet::FileSystem::File.stubs(:exist?).with(hiera_config).returns(true)
74
+ Puppet::FileSystem.stubs(:exist?).with(hiera_config).returns(true)
68
75
 
69
76
  HieraPuppet.send(:hiera_config_file).should == hiera_config
70
77
  end
71
78
  end
72
79
 
73
80
  describe 'HieraPuppet#lookup' do
74
- let :scope do Puppet::Parser::Scope.new_for_test_harness('foo') end
81
+ let :scope do create_test_scope_for_node('foo') end
75
82
 
76
83
  before :each do
77
84
  Puppet[:hiera_config] = PuppetSpec::Files.tmpfile('hiera_config')
@@ -0,0 +1,12 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/resource/catalog'
4
+ require 'puppet/indirector/catalog/msgpack'
5
+
6
+ describe Puppet::Resource::Catalog::Msgpack, :if => Puppet.features.msgpack? do
7
+ # This is it for local functionality: we don't *do* anything else.
8
+ it "should be registered with the catalog store indirection" do
9
+ Puppet::Resource::Catalog.indirection.terminus(:msgpack).
10
+ should be_an_instance_of described_class
11
+ end
12
+ end
@@ -10,6 +10,11 @@ describe Puppet::Resource::Catalog::StaticCompiler do
10
10
  @num_file_resources = 10
11
11
  end
12
12
 
13
+ before :each do
14
+ Facter.stubs(:to_hash).returns({})
15
+ Facter.stubs(:value)
16
+ end
17
+
13
18
  let(:request) do
14
19
  Puppet::Indirector::Request.new(:the_indirection_named_foo,
15
20
  :find,
@@ -23,10 +28,7 @@ describe Puppet::Resource::Catalog::StaticCompiler do
23
28
  end
24
29
 
25
30
  it "returns nil if there is no compiled catalog" do
26
- compiler = mock('compiler indirection')
27
- compiler.expects(:find).with(request).returns(nil)
28
-
29
- subject.expects(:compiler).returns(compiler)
31
+ subject.expects(:compile).returns(nil)
30
32
  subject.find(request).should be_nil
31
33
  end
32
34
 
@@ -67,9 +69,6 @@ describe Puppet::Resource::Catalog::StaticCompiler do
67
69
 
68
70
  describe "(#15193) when storing content to the filebucket" do
69
71
  it "explicitly uses the indirection method" do
70
- # Do not stub the store_content method which is stubbed by default in the
71
- # value of the stub_methods option.
72
- stub_the_compiler(:stub_methods => false)
73
72
 
74
73
  # We expect the content to be retrieved from the FileServer ...
75
74
  fake_content = mock('FileServer Content')
@@ -96,6 +95,7 @@ describe Puppet::Resource::Catalog::StaticCompiler do
96
95
  end
97
96
 
98
97
  # Obtain the Static Catalog
98
+ subject.stubs(:compile).returns(build_catalog)
99
99
  resource_catalog = subject.find(request)
100
100
 
101
101
  # Ensure all of the file resources were filtered
@@ -136,9 +136,11 @@ describe Puppet::Resource::Catalog::StaticCompiler do
136
136
  # Stub the call to the FileServer metadata API so we don't have to have
137
137
  # a real fileserver initialized for testing.
138
138
  Puppet::FileServing::Metadata.
139
- indirection.stubs(:find).
140
- with() { |*args| args[0] == options[:source].sub('puppet:///','') and args[1] == {:links => :manage, :environment => nil}}.
141
- returns(fake_fileserver_metadata)
139
+ indirection.stubs(:find).with do |uri, opts|
140
+ expect(uri).to eq options[:source].sub('puppet:///','')
141
+ expect(opts[:links]).to eq :manage
142
+ expect(opts[:environment]).to eq nil
143
+ end.returns(fake_fileserver_metadata)
142
144
 
143
145
  # I want a resource that all the file resources require and another
144
146
  # that requires them.
@@ -171,12 +173,41 @@ describe Puppet::Resource::Catalog::StaticCompiler do
171
173
  catalog
172
174
  end
173
175
 
176
+ describe "(#22744) when filtering resources" do
177
+ let(:catalog) { stub_everything 'catalog' }
178
+
179
+ it "should delegate to the catalog instance filtering" do
180
+ catalog.expects(:filter)
181
+ subject.filter(catalog)
182
+ end
183
+
184
+ it "should filter out virtual resources" do
185
+ resource = mock 'resource', :virtual? => true
186
+ catalog.stubs(:filter).yields(resource)
187
+
188
+ subject.filter(catalog)
189
+ end
190
+
191
+ it "should return the same catalog if it doesn't support filtering" do
192
+ catalog.stubs(:respond_to?).with(:filter)
193
+ subject.filter(catalog).should == catalog
194
+ end
195
+
196
+ it "should return the filtered catalog" do
197
+ filtered_catalog = stub 'filtered catalog'
198
+ catalog.stubs(:filter).returns(filtered_catalog)
199
+
200
+ subject.filter(catalog).should == filtered_catalog
201
+ end
202
+
203
+ end
204
+
174
205
  def fileserver_metadata(options = {})
175
206
  yaml = <<EOFILESERVERMETADATA
176
207
  --- !ruby/object:Puppet::FileServing::Metadata
177
208
  checksum: "{md5}361fadf1c712e812d198c4cab5712a79"
178
209
  checksum_type: md5
179
- destination:
210
+ destination:
180
211
  expiration: #{Time.now + 1800}
181
212
  ftype: file
182
213
  group: 0
@@ -26,12 +26,12 @@ describe Puppet::Indirector::DirectFileServer do
26
26
  describe Puppet::Indirector::DirectFileServer, "when finding a single file" do
27
27
 
28
28
  it "should return nil if the file does not exist" do
29
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns false
29
+ Puppet::FileSystem.expects(:exist?).with(@path).returns false
30
30
  @server.find(@request).should be_nil
31
31
  end
32
32
 
33
33
  it "should return a Content instance created with the full path to the file if the file exists" do
34
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
34
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
35
35
  @model.expects(:new).returns(:mycontent)
36
36
  @server.find(@request).should == :mycontent
37
37
  end
@@ -42,7 +42,7 @@ describe Puppet::Indirector::DirectFileServer do
42
42
  before do
43
43
  @data = mock 'content'
44
44
  @data.stubs(:collect)
45
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
45
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
46
46
  end
47
47
 
48
48
  it "should pass the full path to the instance" do
@@ -61,18 +61,18 @@ describe Puppet::Indirector::DirectFileServer do
61
61
 
62
62
  describe Puppet::Indirector::DirectFileServer, "when searching for multiple files" do
63
63
  it "should return nil if the file does not exist" do
64
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns false
64
+ Puppet::FileSystem.expects(:exist?).with(@path).returns false
65
65
  @server.find(@request).should be_nil
66
66
  end
67
67
 
68
68
  it "should use :path2instances from the terminus_helper to return instances if the file exists" do
69
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
69
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
70
70
  @server.expects(:path2instances)
71
71
  @server.search(@request)
72
72
  end
73
73
 
74
74
  it "should pass the original request to :path2instances" do
75
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
75
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
76
76
  @server.expects(:path2instances).with(@request, @path)
77
77
  @server.search(@request)
78
78
  end
@@ -144,17 +144,17 @@ describe Puppet::Node::Facts::Facter do
144
144
  end
145
145
 
146
146
  it "should include pluginfactdest when loading external facts",
147
- :if => Puppet.features.external_facts?, :unless => Puppet.features.microsoft_windows? do
147
+ :if => (Puppet.features.external_facts? and not Puppet.features.microsoft_windows?) do
148
148
  Puppet[:pluginfactdest] = "/plugin/dest"
149
149
  @facter.find(@request)
150
- Facter::Util::Config.external_facts_dirs.include?("/plugin/dest")
150
+ Facter.search_external_path.include?("/plugin/dest")
151
151
  end
152
152
 
153
153
  it "should include pluginfactdest when loading external facts",
154
- :if => Puppet.features.external_facts?, :if => Puppet.features.microsoft_windows? do
154
+ :if => (Puppet.features.external_facts? and Puppet.features.microsoft_windows?) do
155
155
  Puppet[:pluginfactdest] = "/plugin/dest"
156
156
  @facter.find(@request)
157
- Facter::Util::Config.external_facts_dirs.include?("C:/plugin/dest")
157
+ Facter.search_external_path.include?("C:/plugin/dest")
158
158
  end
159
159
 
160
160
  describe "when loading fact plugins from disk" do
@@ -191,7 +191,7 @@ describe Puppet::Node::Facts::Facter do
191
191
  mod = Puppet::Module.new("mymodule", "#{one}/mymodule", @request.environment)
192
192
  @request.environment.stubs(:modules).returns([mod])
193
193
  @facter.find(@request)
194
- Facter::Util::Config.external_facts_dirs.include?("#{one}/mymodule/facts.d")
194
+ Facter.search_external_path.include?("#{one}/mymodule/facts.d")
195
195
  end
196
196
  end
197
197
  end
@@ -68,10 +68,10 @@ describe Puppet::FileBucketFile::File do
68
68
  checksum = save_bucket_file("stuff\r\n", "/foo/bar")
69
69
 
70
70
  dir_path = "#{Puppet[:bucketdir]}/f/c/7/7/7/c/0/b/fc777c0bc467e1ab98b4c6915af802ec"
71
- contents_file = Puppet::FileSystem::File.new("#{dir_path}/contents")
72
- paths_file = Puppet::FileSystem::File.new("#{dir_path}/paths")
73
- contents_file.binread.should == "stuff\r\n"
74
- paths_file.read.should == "foo/bar\n"
71
+ contents_file = "#{dir_path}/contents"
72
+ paths_file = "#{dir_path}/paths"
73
+ Puppet::FileSystem.binread(contents_file).should == "stuff\r\n"
74
+ Puppet::FileSystem.read(paths_file).should == "foo/bar\n"
75
75
  end
76
76
 
77
77
  it "should leave the paths file alone if the path is already stored" do
@@ -19,7 +19,7 @@ describe Puppet::Indirector::FileMetadata::File do
19
19
  @uri = Puppet::Util.path_to_uri(@path).to_s
20
20
  @data = mock 'metadata'
21
21
  @data.stubs(:collect)
22
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
22
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
23
23
 
24
24
  @request = Puppet::Indirector::Request.new(:file_metadata, :find, @uri, nil)
25
25
  end
@@ -42,7 +42,7 @@ describe Puppet::Indirector::FileMetadata::File do
42
42
  end
43
43
 
44
44
  it "should collect the attributes of the instances returned" do
45
- Puppet::FileSystem::File.expects(:exist?).with(@path).returns true
45
+ Puppet::FileSystem.expects(:exist?).with(@path).returns true
46
46
  @metadata.expects(:path2instances).returns( [mock("one", :collect => nil), mock("two", :collect => nil)] )
47
47
  @metadata.search(@request)
48
48
  end
@@ -154,7 +154,7 @@ describe Puppet::Indirector::FileServer do
154
154
 
155
155
  @mount.expects(:search).with { |key, request| key == "rel/path" }.returns %w{/one /two}
156
156
 
157
- Puppet::FileSystem::File.stubs(:exist?).returns true
157
+ Puppet::FileSystem.stubs(:exist?).returns true
158
158
 
159
159
  one = mock 'fileset_one'
160
160
  Puppet::FileServing::Fileset.expects(:new).with("/one", @request).returns(one)
@@ -171,7 +171,7 @@ describe Puppet::Indirector::FileServer do
171
171
 
172
172
  @mount.expects(:search).with { |key, request| key == "rel/path" }.returns []
173
173
 
174
- Puppet::FileSystem::File.stubs(:exist?).returns true
174
+ Puppet::FileSystem.stubs(:exist?).returns true
175
175
 
176
176
  Puppet::FileServing::Fileset.expects(:merge).returns("one" => "/one", "two" => "/two")
177
177
 
@@ -193,7 +193,7 @@ describe Puppet::Indirector::FileServer do
193
193
 
194
194
  @mount.expects(:search).with { |key, request| key == "rel/path" }.returns []
195
195
 
196
- Puppet::FileSystem::File.stubs(:exist?).returns true
196
+ Puppet::FileSystem.stubs(:exist?).returns true
197
197
 
198
198
  Puppet::FileServing::Fileset.expects(:merge).returns("one" => "/one")
199
199
 
@@ -211,7 +211,7 @@ describe Puppet::Indirector::FileServer do
211
211
 
212
212
  @mount.expects(:search).with { |key, options| key == "rel/path" }.returns []
213
213
 
214
- Puppet::FileSystem::File.stubs(:exist?).returns true
214
+ Puppet::FileSystem.stubs(:exist?).returns true
215
215
 
216
216
  Puppet::FileServing::Fileset.expects(:merge).returns("one" => "/one")
217
217
 
@@ -120,7 +120,7 @@ describe Puppet::Indirector::JSON do
120
120
 
121
121
  subject.save(request)
122
122
 
123
- File.should be_directory target
123
+ File.should be_directory(target)
124
124
  end
125
125
  end
126
126
 
@@ -131,20 +131,20 @@ describe Puppet::Indirector::JSON do
131
131
  with_content('hello') do
132
132
  subject.destroy(request)
133
133
  end
134
- Puppet::FileSystem::File.exist?(file).should be_false
134
+ Puppet::FileSystem.exist?(file).should be_false
135
135
  end
136
136
 
137
137
  it "silently succeeds when files don't exist" do
138
- Puppet::FileSystem::File.unlink(file) rescue nil
138
+ Puppet::FileSystem.unlink(file) rescue nil
139
139
  subject.destroy(request).should be_true
140
140
  end
141
141
 
142
142
  it "raises an informative error for other failures" do
143
- Puppet::FileSystem::File.stubs(:unlink).with(file).raises(Errno::EPERM, 'fake permission problem')
143
+ Puppet::FileSystem.stubs(:unlink).with(file).raises(Errno::EPERM, 'fake permission problem')
144
144
  with_content('hello') do
145
- expect { subject.destroy(request) }.to raise_error Puppet::Error
145
+ expect { subject.destroy(request) }.to raise_error(Puppet::Error)
146
146
  end
147
- Puppet::FileSystem::File.unstub(:unlink) # thanks, mocha
147
+ Puppet::FileSystem.unstub(:unlink) # thanks, mocha
148
148
  end
149
149
  end
150
150
  end
@@ -76,20 +76,20 @@ describe Puppet::SSL::Key::File do
76
76
  end
77
77
 
78
78
  it "should destroy the public key when destroying the private key" do
79
- Puppet::FileSystem::File.stubs(:unlink).with(@private_key_path)
80
- Puppet::FileSystem::File.stubs(:exist?).with(@private_key_path).returns true
81
- Puppet::FileSystem::File.expects(:exist?).with(@public_key_path).returns true
82
- Puppet::FileSystem::File.expects(:unlink).with(@public_key_path)
79
+ Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@private_key_path))
80
+ Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@private_key_path)).returns true
81
+ Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@public_key_path)).returns true
82
+ Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@public_key_path))
83
83
 
84
84
  @searcher.destroy(@request)
85
85
  end
86
86
 
87
87
  it "should not fail if the public key does not exist when deleting the private key" do
88
- Puppet::FileSystem::File.stubs(:unlink).with(@private_key_path)
88
+ Puppet::FileSystem.stubs(:unlink).with(Puppet::FileSystem.pathname(@private_key_path))
89
89
 
90
- Puppet::FileSystem::File.stubs(:exist?).with(@private_key_path).returns true
91
- Puppet::FileSystem::File.expects(:exist?).with(@public_key_path).returns false
92
- Puppet::FileSystem::File.expects(:unlink).with(@public_key_path).never
90
+ Puppet::FileSystem.stubs(:exist?).with(Puppet::FileSystem.pathname(@private_key_path)).returns true
91
+ Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@public_key_path)).returns false
92
+ Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@public_key_path)).never
93
93
 
94
94
  @searcher.destroy(@request)
95
95
  end
@@ -0,0 +1,191 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet_spec/files'
4
+ require 'puppet/indirector/indirector_testing/msgpack'
5
+
6
+ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do
7
+ include PuppetSpec::Files
8
+
9
+ subject { Puppet::IndirectorTesting::Msgpack.new }
10
+ let :model do Puppet::IndirectorTesting end
11
+ let :indirection do model.indirection end
12
+
13
+ context "#path" do
14
+ before :each do
15
+ Puppet[:server_datadir] = '/sample/datadir/master'
16
+ Puppet[:client_datadir] = '/sample/datadir/client'
17
+ end
18
+
19
+ it "uses the :server_datadir setting if this is the master" do
20
+ Puppet.run_mode.stubs(:master?).returns(true)
21
+ expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.msgpack')
22
+ subject.path('testing').should == expected
23
+ end
24
+
25
+ it "uses the :client_datadir setting if this is not the master" do
26
+ Puppet.run_mode.stubs(:master?).returns(false)
27
+ expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.msgpack')
28
+ subject.path('testing').should == expected
29
+ end
30
+
31
+ it "overrides the default extension with a supplied value" do
32
+ Puppet.run_mode.stubs(:master?).returns(true)
33
+ expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-msgpack')
34
+ subject.path('testing', '.not-msgpack').should == expected
35
+ end
36
+
37
+ ['../foo', '..\\foo', './../foo', '.\\..\\foo',
38
+ '/foo', '//foo', '\\foo', '\\\\goo',
39
+ "test\0/../bar", "test\0\\..\\bar",
40
+ "..\\/bar", "/tmp/bar", "/tmp\\bar", "tmp\\bar",
41
+ " / bar", " /../ bar", " \\..\\ bar",
42
+ "c:\\foo", "c:/foo", "\\\\?\\UNC\\bar", "\\\\foo\\bar",
43
+ "\\\\?\\c:\\foo", "//?/UNC/bar", "//foo/bar",
44
+ "//?/c:/foo",
45
+ ].each do |input|
46
+ it "should resist directory traversal attacks (#{input.inspect})" do
47
+ expect { subject.path(input) }.to raise_error ArgumentError, 'invalid key'
48
+ end
49
+ end
50
+ end
51
+
52
+ context "handling requests" do
53
+ before :each do
54
+ Puppet.run_mode.stubs(:master?).returns(true)
55
+ Puppet[:server_datadir] = tmpdir('msgpackdir')
56
+ FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
57
+ end
58
+
59
+ let :file do subject.path(request.key) end
60
+
61
+ def with_content(text)
62
+ FileUtils.mkdir_p(File.dirname(file))
63
+ File.open(file, 'w') {|f| f.write text }
64
+ yield if block_given?
65
+ end
66
+
67
+ it "data saves and then loads again correctly" do
68
+ subject.save(indirection.request(:save, 'example', model.new('banana')))
69
+ subject.find(indirection.request(:find, 'example', nil)).value.should == 'banana'
70
+ end
71
+
72
+ context "#find" do
73
+ let :request do indirection.request(:find, 'example', nil) end
74
+
75
+ it "returns nil if the file doesn't exist" do
76
+ subject.find(request).should be_nil
77
+ end
78
+
79
+ it "raises a descriptive error when the file can't be read" do
80
+ with_content(model.new('foo').to_msgpack) do
81
+ # I don't like this, but there isn't a credible alternative that
82
+ # also works on Windows, so a stub it is. At least the expectation
83
+ # will fail if the implementation changes. Sorry to the next dev.
84
+ File.expects(:read).with(file).raises(Errno::EPERM)
85
+ expect { subject.find(request) }.
86
+ to raise_error Puppet::Error, /Could not read MessagePack/
87
+ end
88
+ end
89
+
90
+ it "raises a descriptive error when the file content is invalid" do
91
+ with_content("this is totally invalid MessagePack") do
92
+ expect { subject.find(request) }.
93
+ to raise_error Puppet::Error, /Could not parse MessagePack data/
94
+ end
95
+ end
96
+
97
+ it "should return an instance of the indirected object when valid" do
98
+ with_content(model.new(1).to_msgpack) do
99
+ instance = subject.find(request)
100
+ instance.should be_an_instance_of model
101
+ instance.value.should == 1
102
+ end
103
+ end
104
+ end
105
+
106
+ context "#save" do
107
+ let :instance do model.new(4) end
108
+ let :request do indirection.request(:find, 'example', instance) end
109
+
110
+ it "should save the instance of the request as MessagePack to disk" do
111
+ subject.save(request)
112
+ content = File.read(file)
113
+ MessagePack.unpack(content)['value'].should == 4
114
+ end
115
+
116
+ it "should create the indirection directory if required" do
117
+ target = File.join(Puppet[:server_datadir], 'indirector_testing')
118
+ Dir.rmdir(target)
119
+
120
+ subject.save(request)
121
+
122
+ File.should be_directory(target)
123
+ end
124
+ end
125
+
126
+ context "#destroy" do
127
+ let :request do indirection.request(:find, 'example', nil) end
128
+
129
+ it "removes an existing file" do
130
+ with_content('hello') do
131
+ subject.destroy(request)
132
+ end
133
+ Puppet::FileSystem.exist?(file).should be_false
134
+ end
135
+
136
+ it "silently succeeds when files don't exist" do
137
+ Puppet::FileSystem.unlink(file) rescue nil
138
+ subject.destroy(request).should be_true
139
+ end
140
+
141
+ it "raises an informative error for other failures" do
142
+ Puppet::FileSystem.stubs(:unlink).with(file).raises(Errno::EPERM, 'fake permission problem')
143
+ with_content('hello') do
144
+ expect { subject.destroy(request) }.to raise_error(Puppet::Error)
145
+ end
146
+ Puppet::FileSystem.unstub(:unlink) # thanks, mocha
147
+ end
148
+ end
149
+ end
150
+
151
+ context "#search" do
152
+ before :each do
153
+ Puppet.run_mode.stubs(:master?).returns(true)
154
+ Puppet[:server_datadir] = tmpdir('msgpackdir')
155
+ FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
156
+ end
157
+
158
+ def request(glob)
159
+ indirection.request(:search, glob, nil)
160
+ end
161
+
162
+ def create_file(name, value = 12)
163
+ File.open(subject.path(name, ''), 'w') do |f|
164
+ f.write Puppet::IndirectorTesting.new(value).to_msgpack
165
+ end
166
+ end
167
+
168
+ it "returns an empty array when nothing matches the key as a glob" do
169
+ subject.search(request('*')).should == []
170
+ end
171
+
172
+ it "returns an array with one item if one item matches" do
173
+ create_file('foo.msgpack', 'foo')
174
+ create_file('bar.msgpack', 'bar')
175
+ subject.search(request('f*')).map(&:value).should == ['foo']
176
+ end
177
+
178
+ it "returns an array of items when more than one item matches" do
179
+ create_file('foo.msgpack', 'foo')
180
+ create_file('bar.msgpack', 'bar')
181
+ create_file('baz.msgpack', 'baz')
182
+ subject.search(request('b*')).map(&:value).should =~ ['bar', 'baz']
183
+ end
184
+
185
+ it "only items with the .msgpack extension" do
186
+ create_file('foo.msgpack', 'foo-msgpack')
187
+ create_file('foo.msgpack~', 'foo-backup')
188
+ subject.search(request('f*')).map(&:value).should == ['foo-msgpack']
189
+ end
190
+ end
191
+ end