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
@@ -8,13 +8,6 @@ describe "Puppet::Network::HTTP::RackREST", :if => Puppet.features.rack? do
8
8
  Puppet::Network::HTTP::RackREST.ancestors.should be_include(Puppet::Network::HTTP::Handler)
9
9
  end
10
10
 
11
- describe "when initializing" do
12
- it "should call the Handler's initialization hook with its provided arguments" do
13
- Puppet::Network::HTTP::RackREST.any_instance.expects(:initialize_for_puppet).with(:server => "my", :handler => "arguments")
14
- Puppet::Network::HTTP::RackREST.new(:server => "my", :handler => "arguments")
15
- end
16
- end
17
-
18
11
  describe "when serving a request" do
19
12
  before :all do
20
13
  @model_class = stub('indirected model class')
@@ -31,25 +24,32 @@ describe "Puppet::Network::HTTP::RackREST", :if => Puppet.features.rack? do
31
24
  Rack::Request.new(env)
32
25
  end
33
26
 
27
+ let(:minimal_certificate) do
28
+ cert = OpenSSL::X509::Certificate.new
29
+ cert.version = 2
30
+ cert.serial = 0
31
+ cert.not_before = Time.now
32
+ cert.not_after = Time.now + 3600
33
+ cert.public_key = OpenSSL::PKey::RSA.new(512)
34
+ cert.subject = OpenSSL::X509::Name.parse("/CN=testing")
35
+ cert
36
+ end
37
+
34
38
  describe "#headers" do
35
39
  it "should return the headers (parsed from env with prefix 'HTTP_')" do
36
40
  req = mk_req('/', {'HTTP_Accept' => 'myaccept',
37
41
  'HTTP_X_Custom_Header' => 'mycustom',
38
42
  'NOT_HTTP_foo' => 'not an http header'})
39
43
  @handler.headers(req).should == {"accept" => 'myaccept',
40
- "x-custom-header" => 'mycustom'}
44
+ "x-custom-header" => 'mycustom',
45
+ "content-type" => nil }
41
46
  end
42
47
  end
43
48
 
44
49
  describe "and using the HTTP Handler interface" do
45
- it "should return the HTTP_ACCEPT parameter as the accept header" do
46
- req = mk_req('/', 'HTTP_ACCEPT' => 'myaccept')
47
- @handler.accept_header(req).should == "myaccept"
48
- end
49
-
50
50
  it "should return the CONTENT_TYPE parameter as the content type header" do
51
51
  req = mk_req('/', 'CONTENT_TYPE' => 'mycontent')
52
- @handler.content_type_header(req).should == "mycontent"
52
+ @handler.headers(req)['content-type'].should == "mycontent"
53
53
  end
54
54
 
55
55
  it "should use the REQUEST_METHOD as the http method" do
@@ -67,24 +67,15 @@ describe "Puppet::Network::HTTP::RackREST", :if => Puppet.features.rack? do
67
67
  @handler.body(req).should == "mybody"
68
68
  end
69
69
 
70
- it "should return the an OpenSSL::X509::Certificate instance as the client_cert" do
71
- cert = stub 'cert'
72
- req = mk_req('/foo/bar', 'SSL_CLIENT_CERT' => 'certificate in pem format')
73
- OpenSSL::X509::Certificate.expects(:new).with('certificate in pem format').returns(cert)
74
- @handler.client_cert(req).should == cert
70
+ it "should return the an Puppet::SSL::Certificate instance as the client_cert" do
71
+ req = mk_req('/foo/bar', 'SSL_CLIENT_CERT' => minimal_certificate.to_pem)
72
+ expect(@handler.client_cert(req).content.to_pem).to eq(minimal_certificate.to_pem)
75
73
  end
76
74
 
77
75
  it "returns nil when SSL_CLIENT_CERT is empty" do
78
- cert = stub 'cert'
79
76
  req = mk_req('/foo/bar', 'SSL_CLIENT_CERT' => '')
80
- OpenSSL::X509::Certificate.expects(:new).never
81
- @handler.client_cert(req).should be_nil
82
- end
83
77
 
84
- it "(#16769) does not raise error 'header too long'" do
85
- cert = stub 'cert'
86
- req = mk_req('/foo/bar', 'SSL_CLIENT_CERT' => '')
87
- lambda { @handler.client_cert(req) }.should_not raise_error
78
+ @handler.client_cert(req).should be_nil
88
79
  end
89
80
 
90
81
  it "should set the response's content-type header when setting the content type" do
@@ -134,7 +125,8 @@ describe "Puppet::Network::HTTP::RackREST", :if => Puppet.features.rack? do
134
125
  it "should ensure the body has been partially read on failure" do
135
126
  req = mk_req('/production/report/foo')
136
127
  req.body.expects(:read).with(1)
137
- req.stubs(:check_authorization).raises(Exception)
128
+
129
+ @handler.stubs(:headers).raises(Exception)
138
130
 
139
131
  @handler.process(req, @response)
140
132
  end
@@ -0,0 +1,75 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/indirector_testing'
4
+
5
+ require 'puppet/network/http'
6
+
7
+ describe Puppet::Network::HTTP::Route do
8
+ def request(method, path)
9
+ Puppet::Network::HTTP::Request.from_hash({
10
+ :method => method,
11
+ :path => path,
12
+ :routing_path => path })
13
+ end
14
+
15
+ def respond(text)
16
+ lambda { |req, res| res.respond_with(200, "text/plain", text) }
17
+ end
18
+
19
+ let(:req) { request("GET", "/vtest/foo") }
20
+ let(:res) { Puppet::Network::HTTP::MemoryResponse.new }
21
+
22
+ describe "an HTTP Route" do
23
+ it "can match a request" do
24
+ route = Puppet::Network::HTTP::Route.path(%r{^/vtest})
25
+ expect(route.matches?(req)).to be_true
26
+ end
27
+
28
+ it "will raise a Method Not Allowed error when no handler for the request's method is given" do
29
+ route = Puppet::Network::HTTP::Route.path(%r{^/vtest}).post(respond("ignored"))
30
+ expect do
31
+ route.process(req, res)
32
+ end.to raise_error(Puppet::Network::HTTP::Error::HTTPMethodNotAllowedError)
33
+ end
34
+
35
+ it "can match any HTTP method" do
36
+ route = Puppet::Network::HTTP::Route.path(%r{^/vtest/foo}).any(respond("used"))
37
+ expect(route.matches?(req)).to be_true
38
+
39
+ route.process(req, res)
40
+
41
+ expect(res.body).to eq("used")
42
+ end
43
+
44
+ it "calls the method handlers in turn" do
45
+ call_count = 0
46
+ handler = lambda { |request, response| call_count += 1 }
47
+ route = Puppet::Network::HTTP::Route.path(%r{^/vtest/foo}).get(handler, handler)
48
+
49
+ route.process(req, res)
50
+ expect(call_count).to eq(2)
51
+ end
52
+
53
+ it "stops calling handlers if one of them raises an error" do
54
+ ignored_called = false
55
+ ignored = lambda { |req, res| ignored_called = true }
56
+ raise_error = lambda { |req, res| raise Puppet::Network::HTTP::Error::HTTPNotAuthorizedError, "go away" }
57
+ route = Puppet::Network::HTTP::Route.path(%r{^/vtest/foo}).get(raise_error, ignored)
58
+
59
+ expect do
60
+ route.process(req, res)
61
+ end.to raise_error(Puppet::Network::HTTP::Error::HTTPNotAuthorizedError)
62
+ expect(ignored_called).to be_false
63
+ end
64
+
65
+ it "chains to other routes after calling its handlers" do
66
+ inner_route = Puppet::Network::HTTP::Route.path(%r{^/inner}).any(respond("inner"))
67
+ unused_inner_route = Puppet::Network::HTTP::Route.path(%r{^/unused_inner}).any(respond("unused"))
68
+
69
+ top_route = Puppet::Network::HTTP::Route.path(%r{^/vtest}).any(respond("top")).chain(unused_inner_route, inner_route)
70
+ top_route.process(request("GET", "/vtest/inner"), res)
71
+
72
+ expect(res.body).to eq("topinner")
73
+ end
74
+ end
75
+ end
@@ -9,31 +9,14 @@ describe Puppet::Network::HTTP::WEBrickREST do
9
9
  Puppet::Network::HTTP::WEBrickREST.ancestors.should be_include(Puppet::Network::HTTP::Handler)
10
10
  end
11
11
 
12
- describe "when initializing" do
13
- it "should call the Handler's initialization hook with its provided arguments as the server and handler" do
14
- server = WEBrick::HTTPServer.new(:BindAddress => '127.0.0.1',
15
- # Probablistically going to succeed
16
- # even if we run more than one test
17
- # instance at once.
18
- :Port => 40000 + rand(10000),
19
- # Just discard any log output, thanks.
20
- :Logger => stub_everything('logger'))
21
-
22
- Puppet::Network::HTTP::WEBrickREST.any_instance.
23
- expects(:initialize_for_puppet).with(:server => server, :handler => "arguments")
24
-
25
- Puppet::Network::HTTP::WEBrickREST.new(server, "arguments")
26
- end
27
- end
28
-
29
12
  describe "when receiving a request" do
30
13
  before do
31
14
  @request = stub('webrick http request', :query => {}, :peeraddr => %w{eh boo host ip}, :client_cert => nil)
32
- @response = stub('webrick http response', :status= => true, :body= => true)
15
+ @response = mock('webrick http response')
33
16
  @model_class = stub('indirected model class')
34
17
  @webrick = stub('webrick http server', :mount => true, :[] => {})
35
18
  Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@model_class)
36
- @handler = Puppet::Network::HTTP::WEBrickREST.new(@webrick, :foo)
19
+ @handler = Puppet::Network::HTTP::WEBrickREST.new(@webrick)
37
20
  end
38
21
 
39
22
  it "should delegate its :service method to its :process method" do
@@ -56,16 +39,6 @@ describe Puppet::Network::HTTP::WEBrickREST do
56
39
  end
57
40
 
58
41
  describe "when using the Handler interface" do
59
- it "should use the 'accept' request parameter as the Accept header" do
60
- @request.expects(:[]).with("accept").returns "foobar"
61
- @handler.accept_header(@request).should == "foobar"
62
- end
63
-
64
- it "should use the 'content-type' request header as the Content-Type header" do
65
- @request.expects(:[]).with("content-type").returns "foobar"
66
- @handler.content_type_header(@request).should == "foobar"
67
- end
68
-
69
42
  it "should use the request method as the http method" do
70
43
  @request.expects(:request_method).returns "FOO"
71
44
  @handler.http_method(@request).should == "FOO"
@@ -93,32 +66,21 @@ describe Puppet::Network::HTTP::WEBrickREST do
93
66
  @handler.set_response(@response, "mybody", 200)
94
67
  end
95
68
 
96
- describe "when the result is a File" do
97
- before(:each) do
98
- stat = stub 'stat', :size => 100
99
- @file = stub 'file', :stat => stat, :path => "/tmp/path"
100
- @file.stubs(:is_a?).with(File).returns(true)
101
- end
102
-
103
- it "should serve it" do
104
- @response.stubs(:[]=)
105
-
106
- @response.expects(:status=).with 200
107
- @response.expects(:body=).with @file
69
+ it "serves a file" do
70
+ stat = stub 'stat', :size => 100
71
+ @file = stub 'file', :stat => stat, :path => "/tmp/path"
72
+ @file.stubs(:is_a?).with(File).returns(true)
108
73
 
109
- @handler.set_response(@response, @file, 200)
110
- end
111
-
112
- it "should set the Content-Length header" do
113
- @response.expects(:[]=).with('content-length', 100)
74
+ @response.expects(:[]=).with('content-length', 100)
75
+ @response.expects(:status=).with 200
76
+ @response.expects(:body=).with @file
114
77
 
115
- @handler.set_response(@response, @file, 200)
116
- end
78
+ @handler.set_response(@response, @file, 200)
117
79
  end
118
80
 
119
81
  it "should set the status and message on the response when setting the response for a failed query" do
120
82
  @response.expects(:status=).with 400
121
- @response.expects(:reason_phrase=).with "mybody"
83
+ @response.expects(:body=).with "mybody"
122
84
 
123
85
  @handler.set_response(@response, "mybody", 400)
124
86
  end
@@ -135,6 +97,12 @@ describe Puppet::Network::HTTP::WEBrickREST do
135
97
  @request
136
98
  end
137
99
 
100
+ def certificate_with_subject(subj)
101
+ cert = OpenSSL::X509::Certificate.new
102
+ cert.subject = OpenSSL::X509::Name.parse(subj)
103
+ cert
104
+ end
105
+
138
106
  it "has no parameters when there is no query string" do
139
107
  only_server_side_information = [:authenticated, :ip, :node]
140
108
  @request.stubs(:query).returns(nil)
@@ -238,10 +206,8 @@ describe Puppet::Network::HTTP::WEBrickREST do
238
206
  end
239
207
 
240
208
  it "should pass the client's certificate name to model method if a certificate is present" do
241
- subj = stub 'subj'
242
- cert = stub 'cert', :subject => subj
243
- @request.stubs(:client_cert).returns cert
244
- Puppet::Util::SSL.expects(:cn_from_subject).with(subj).returns 'host.domain.com'
209
+ @request.stubs(:client_cert).returns(certificate_with_subject("/CN=host.domain.com"))
210
+
245
211
  @handler.params(@request)[:node].should == "host.domain.com"
246
212
  end
247
213
 
@@ -254,15 +220,12 @@ describe Puppet::Network::HTTP::WEBrickREST do
254
220
  end
255
221
 
256
222
  it "should resolve the node name with an ip address look-up if CN parsing fails" do
257
- subj = stub 'subj'
258
- cert = stub 'cert', :subject => subj
259
- @request.stubs(:client_cert).returns cert
260
- Puppet::Util::SSL.expects(:cn_from_subject).with(subj).returns nil
223
+ @request.stubs(:client_cert).returns(certificate_with_subject("/C=company"))
261
224
 
262
225
  @handler.expects(:resolve_node).returns(:resolved_node)
263
226
 
264
227
  @handler.params(@request)[:node].should == :resolved_node
265
228
  end
266
- end
229
+ end
267
230
  end
268
231
  end
@@ -32,12 +32,12 @@ describe Puppet::Network::HttpPool do
32
32
  ca_cert_file = File.expand_path('/path/to/ssl/certs/ca_cert.pem')
33
33
 
34
34
  Puppet[:ssl_client_ca_auth] = ca_cert_file
35
- Puppet::FileSystem::File.stubs(:exist?).with(ca_cert_file).returns(true)
35
+ Puppet::FileSystem.stubs(:exist?).with(ca_cert_file).returns(true)
36
36
  end
37
37
 
38
38
  def setup_standard_hostcert
39
39
  host_cert_file = File.expand_path('/path/to/ssl/certs/host_cert.pem')
40
- Puppet::FileSystem::File.stubs(:exist?).with(host_cert_file).returns(true)
40
+ Puppet::FileSystem.stubs(:exist?).with(host_cert_file).returns(true)
41
41
 
42
42
  Puppet[:hostcert] = host_cert_file
43
43
  end
@@ -67,7 +67,7 @@ describe Puppet::Network::HttpPool do
67
67
 
68
68
  it "should not cache http instances" do
69
69
  Puppet::Network::HttpPool.http_instance("me", 54321).
70
- should_not equal Puppet::Network::HttpPool.http_instance("me", 54321)
70
+ should_not equal(Puppet::Network::HttpPool.http_instance("me", 54321))
71
71
  end
72
72
  end
73
73
 
@@ -16,13 +16,13 @@ describe Puppet::Network::Rights do
16
16
  right.allow("*")
17
17
  right.restrict_method(allowed_method)
18
18
  right.restrict_authenticated(:any)
19
- rights.is_request_forbidden_and_why?(:indirection_name, :head, "key", {}).should == nil
19
+ rights.is_request_forbidden_and_why?(:head, "/indirection_name/key", {}).should == nil
20
20
  end
21
21
  end
22
22
 
23
23
  it "should disallow the request if neither :find nor :save is allowed" do
24
24
  rights = Puppet::Network::Rights.new
25
- why_forbidden = rights.is_request_forbidden_and_why?(:indirection_name, :head, "key", {})
25
+ why_forbidden = rights.is_request_forbidden_and_why?(:head, "/indirection_name/key", {})
26
26
  why_forbidden.should be_instance_of(Puppet::Network::AuthorizationError)
27
27
  why_forbidden.to_s.should == "Forbidden request: access to /indirection_name/key [find]"
28
28
  end
@@ -17,10 +17,6 @@ describe Puppet::Node::Environment do
17
17
  end
18
18
 
19
19
  shared_examples_for 'the environment' do
20
- it "should use the filetimeout for the ttl for the modulepath" do
21
- Puppet::Node::Environment.attr_ttl(:modulepath).should == Integer(Puppet[:filetimeout])
22
- end
23
-
24
20
  it "should use the filetimeout for the ttl for the module list" do
25
21
  Puppet::Node::Environment.attr_ttl(:modules).should == Integer(Puppet[:filetimeout])
26
22
  end
@@ -47,6 +43,43 @@ describe Puppet::Node::Environment do
47
43
  Puppet::Node::Environment.new(one).should equal(one)
48
44
  end
49
45
 
46
+ describe "overriding an existing environment" do
47
+ let(:original_path) { [tmpdir('original')] }
48
+ let(:new_path) { [tmpdir('new')] }
49
+ let(:environment) { Puppet::Node::Environment.create(:overridden, original_path, 'orig.pp') }
50
+
51
+ it "overrides modulepath" do
52
+ overridden = environment.override_with(:modulepath => new_path)
53
+ expect(overridden).to_not be_equal(environment)
54
+ expect(overridden.name).to eq(:overridden)
55
+ expect(overridden.manifest).to eq(File.expand_path('orig.pp'))
56
+ expect(overridden.modulepath).to eq(new_path)
57
+ end
58
+
59
+ it "overrides manifest" do
60
+ overridden = environment.override_with(:manifest => 'new.pp')
61
+ expect(overridden).to_not be_equal(environment)
62
+ expect(overridden.name).to eq(:overridden)
63
+ expect(overridden.manifest).to eq(File.expand_path('new.pp'))
64
+ expect(overridden.modulepath).to eq(original_path)
65
+ end
66
+ end
67
+
68
+ describe "watching a file" do
69
+ let(:filename) { "filename" }
70
+
71
+ it "accepts a File" do
72
+ file = tmpfile(filename)
73
+ env.known_resource_types.expects(:watch_file).with(file.to_s)
74
+ env.watch_file(file)
75
+ end
76
+
77
+ it "accepts a String" do
78
+ env.known_resource_types.expects(:watch_file).with(filename)
79
+ env.watch_file(filename)
80
+ end
81
+ end
82
+
50
83
  describe "when managing known resource types" do
51
84
  before do
52
85
  @collection = Puppet::Resource::TypeCollection.new(env)
@@ -96,35 +129,14 @@ describe Puppet::Node::Environment do
96
129
  end
97
130
 
98
131
  it "should prefix the value of the 'PUPPETLIB' environment variable to the module path if present" do
99
- Puppet::Util.withenv("PUPPETLIB" => %w{/l1 /l2}.join(File::PATH_SEPARATOR)) do
100
- module_path = %w{/one /two}.join(File::PATH_SEPARATOR)
101
- env.expects(:validate_dirs).with(%w{/l1 /l2 /one /two}).returns %w{/l1 /l2 /one /two}
102
- env.expects(:[]).with(:modulepath).returns module_path
103
-
104
- env.modulepath.should == %w{/l1 /l2 /one /two}
105
- end
106
- end
107
-
108
- describe "when validating modulepath or manifestdir directories" do
109
- before :each do
110
- @path_one = tmpdir("path_one")
111
- @path_two = tmpdir("path_one")
112
- sep = File::PATH_SEPARATOR
113
- Puppet[:modulepath] = "#{@path_one}#{sep}#{@path_two}"
114
- end
115
-
116
- it "should not return non-directories" do
117
- FileTest.expects(:directory?).with(@path_one).returns true
118
- FileTest.expects(:directory?).with(@path_two).returns false
119
-
120
- env.validate_dirs([@path_one, @path_two]).should == [@path_one]
121
- end
122
-
123
- it "should use the current working directory to fully-qualify unqualified paths" do
124
- FileTest.stubs(:directory?).returns true
125
- two = File.expand_path("two")
126
-
127
- env.validate_dirs([@path_one, 'two']).should == [@path_one, two]
132
+ first_puppetlib = tmpdir('puppetlib1')
133
+ second_puppetlib = tmpdir('puppetlib2')
134
+ first_moduledir = tmpdir('moduledir1')
135
+ second_moduledir = tmpdir('moduledir2')
136
+ Puppet::Util.withenv("PUPPETLIB" => [first_puppetlib, second_puppetlib].join(File::PATH_SEPARATOR)) do
137
+ Puppet[:modulepath] = [first_moduledir, second_moduledir].join(File::PATH_SEPARATOR)
138
+
139
+ env.modulepath.should == [first_puppetlib, second_puppetlib, first_moduledir, second_moduledir]
128
140
  end
129
141
  end
130
142
 
@@ -138,7 +150,11 @@ describe Puppet::Node::Environment do
138
150
  end
139
151
 
140
152
  it "should ask the Puppet settings instance for the setting qualified with the environment name" do
141
- Puppet.settings.set_value(:server, "myval", :testing)
153
+ Puppet.settings.parse_config(<<-CONF)
154
+ [testing]
155
+ server = myval
156
+ CONF
157
+
142
158
  env[:server].should == "myval"
143
159
  end
144
160
 
@@ -158,7 +174,7 @@ describe Puppet::Node::Environment do
158
174
 
159
175
  it "should return nil if asked for a module that does not exist in its path" do
160
176
  modpath = tmpdir('modpath')
161
- env.modulepath = [modpath]
177
+ env = Puppet::Node::Environment.create(:testing, [modpath], '')
162
178
 
163
179
  env.module("one").should be_nil
164
180
  end
@@ -344,99 +360,93 @@ describe Puppet::Node::Environment do
344
360
 
345
361
  end
346
362
  end
347
-
348
- it "should cache the module list" do
349
- env.modulepath = %w{/a}
350
- Dir.expects(:entries).once.with("/a").returns %w{foo}
351
-
352
- env.modules
353
- env.modules
354
- end
355
363
  end
356
364
 
357
- describe Puppet::Node::Environment::Helper do
358
- before do
359
- @helper = Object.new
360
- @helper.extend(Puppet::Node::Environment::Helper)
361
- end
362
-
363
- it "should be able to set and retrieve the environment as a symbol" do
364
- @helper.environment = :foo
365
- @helper.environment.name.should == :foo
366
- end
365
+ describe "when performing initial import" do
366
+ def parser_and_environment(name)
367
+ env = Puppet::Node::Environment.new(name)
368
+ parser = Puppet::Parser::ParserFactory.parser(env)
369
+ Puppet::Parser::ParserFactory.stubs(:parser).returns(parser)
367
370
 
368
- it "should accept an environment directly" do
369
- @helper.environment = Puppet::Node::Environment.new(:foo)
370
- @helper.environment.name.should == :foo
371
+ [parser, env]
371
372
  end
372
373
 
373
- it "should accept an environment as a string" do
374
- @helper.environment = 'foo'
375
- @helper.environment.name.should == :foo
376
- end
377
- end
374
+ it "should set the parser's string to the 'code' setting and parse if code is available" do
375
+ Puppet[:code] = "my code"
376
+ parser, env = parser_and_environment('testing')
378
377
 
379
- describe "when performing initial import" do
380
- before do
381
- @parser = Puppet::Parser::ParserFactory.parser("test")
382
- # @parser = Puppet::Parser::EParserAdapter.new(Puppet::Parser::Parser.new("test")) # TODO: FIX PARSER FACTORY
383
- Puppet::Parser::ParserFactory.stubs(:parser).returns @parser
384
- end
378
+ parser.expects(:string=).with "my code"
379
+ parser.expects(:parse)
385
380
 
386
- it "should set the parser's string to the 'code' setting and parse if code is available" do
387
- Puppet.settings[:code] = "my code"
388
- @parser.expects(:string=).with "my code"
389
- @parser.expects(:parse)
390
381
  env.instance_eval { perform_initial_import }
391
382
  end
392
383
 
393
384
  it "should set the parser's file to the 'manifest' setting and parse if no code is available and the manifest is available" do
394
385
  filename = tmpfile('myfile')
395
- File.open(filename, 'w'){|f| }
396
- Puppet.settings[:manifest] = filename
397
- @parser.expects(:file=).with filename
398
- @parser.expects(:parse)
386
+ Puppet[:manifest] = filename
387
+ parser, env = parser_and_environment('testing')
388
+
389
+ parser.expects(:file=).with filename
390
+ parser.expects(:parse)
391
+
399
392
  env.instance_eval { perform_initial_import }
400
393
  end
401
394
 
402
395
  it "should pass the manifest file to the parser even if it does not exist on disk" do
403
396
  filename = tmpfile('myfile')
404
- Puppet.settings[:code] = ""
405
- Puppet.settings[:manifest] = filename
406
- @parser.expects(:file=).with(filename).once
407
- @parser.expects(:parse).once
397
+ Puppet[:code] = ""
398
+ Puppet[:manifest] = filename
399
+ parser, env = parser_and_environment('testing')
400
+
401
+ parser.expects(:file=).with(filename).once
402
+ parser.expects(:parse).once
403
+
408
404
  env.instance_eval { perform_initial_import }
409
405
  end
410
406
 
411
407
  it "should fail helpfully if there is an error importing" do
412
- Puppet::FileSystem::File.stubs(:exist?).returns true
413
- @parser.expects(:file=).once
414
- @parser.expects(:parse).raises ArgumentError
415
- lambda { env.known_resource_types }.should raise_error(Puppet::Error)
408
+ Puppet::FileSystem.stubs(:exist?).returns true
409
+ parser, env = parser_and_environment('testing')
410
+
411
+ parser.expects(:file=).once
412
+ parser.expects(:parse).raises ArgumentError
413
+
414
+ expect do
415
+ env.known_resource_types
416
+ end.to raise_error(Puppet::Error)
416
417
  end
417
418
 
418
419
  it "should not do anything if the ignore_import settings is set" do
419
- Puppet.settings[:ignoreimport] = true
420
- @parser.expects(:string=).never
421
- @parser.expects(:file=).never
422
- @parser.expects(:parse).never
420
+ Puppet[:ignoreimport] = true
421
+ parser, env = parser_and_environment('testing')
422
+
423
+ parser.expects(:string=).never
424
+ parser.expects(:file=).never
425
+ parser.expects(:parse).never
426
+
423
427
  env.instance_eval { perform_initial_import }
424
428
  end
425
429
 
426
430
  it "should mark the type collection as needing a reparse when there is an error parsing" do
427
- @parser.expects(:parse).raises Puppet::ParseError.new("Syntax error at ...")
431
+ parser, env = parser_and_environment('testing')
428
432
 
429
- lambda { env.known_resource_types }.should raise_error(Puppet::Error, /Syntax error at .../)
433
+ parser.expects(:parse).raises Puppet::ParseError.new("Syntax error at ...")
434
+
435
+ expect do
436
+ env.known_resource_types
437
+ end.to raise_error(Puppet::Error, /Syntax error at .../)
430
438
  env.known_resource_types.require_reparse?.should be_true
431
439
  end
432
440
  end
433
441
  end
442
+
434
443
  describe 'with classic parser' do
435
444
  before :each do
436
445
  Puppet[:parser] = 'current'
437
446
  end
438
447
  it_behaves_like 'the environment'
439
448
  end
449
+
440
450
  describe 'with future parser' do
441
451
  before :each do
442
452
  Puppet[:parser] = 'future'
@@ -444,4 +454,13 @@ describe Puppet::Node::Environment do
444
454
  it_behaves_like 'the environment'
445
455
  end
446
456
 
457
+ describe '#current' do
458
+ it 'should return the current context' do
459
+ env = Puppet::Node::Environment.new(:test)
460
+ Puppet::Context.any_instance.expects(:lookup).with(:current_environment).returns(env)
461
+ Puppet.expects(:deprecation_warning).once
462
+ Puppet::Node::Environment.current.should equal(env)
463
+ end
464
+ end
465
+
447
466
  end