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
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ce22f48d6ff156cc3bce494d7d78a7cbec873e71
4
- data.tar.gz: 3977c8d441e6629f8f30bda14521112c649ce0fe
5
- SHA512:
6
- metadata.gz: 60e002a57f5b2d7b52bf114e94ca07d2c72c3457ef1505e8b28e7a2fc04a618627b37712b471001ecfb642efaa8da723581db646f08a48fb3afa26f4e5246642
7
- data.tar.gz: 79108cfb2a13238829fda9a759a0106bb549f887dcf7b9b5be76e311f34110b5e047fa1a00562f9a0cd9066ea378aed3ace944d352167cbc4e6912d57a8bef96
@@ -1,809 +0,0 @@
1
- # Developer README #
2
-
3
- This file is intended to provide a place for developers and contributors to
4
- document what other developers need to know about changes made to Puppet.
5
-
6
- # Internal Structures
7
-
8
- ## Two Types of Catalog
9
-
10
- When working on subsystems of Puppet that deal with the catalog it is important
11
- to be aware of the two different types of Catalog. Developers will often find
12
- this difference while working on the static compiler and types and providers.
13
-
14
- The two different types of catalog becomes relevant when writing spec tests
15
- because we frequently need to wire up a fake catalog so that we can exercise
16
- types, providers, or termini that filter the catalog.
17
-
18
- The two different types of catalogs are so-called "resource" catalogs and "RAL"
19
- (resource abstraction layer) catalogs. At a high level, the resource catalog
20
- is the in-memory object we serialize and transfer around the network. The
21
- compiler terminus is expected to produce a resource catalog. The agent takes a
22
- resource catalog and converts it into a RAL catalog. The RAL catalog is what
23
- is used to apply the configuration model to the system.
24
-
25
- Resource dependency information is most easily obtained from a RAL catalog by
26
- walking the graph instance produced by the `relationship_graph` method.
27
-
28
- ### Resource Catalog
29
-
30
- If you're writing spec tests for something that deals with a catalog "server
31
- side," a new catalog terminus for example, then you'll be dealing with a
32
- resource catalog. You can produce a resource catalog suitable for spec tests
33
- using something like this:
34
-
35
- let(:catalog) do
36
- catalog = Puppet::Resource::Catalog.new("node-name-val") # NOT certname!
37
- rsrc = Puppet::Resource.new("file", "sshd_config",
38
- :parameters => {
39
- :ensure => 'file',
40
- :source => 'puppet:///modules/filetest/sshd_config',
41
- }
42
- )
43
- rsrc.file = 'site.pp'
44
- rsrc.line = 21
45
- catalog.add_resource(rsrc)
46
- end
47
-
48
- The resources in this catalog may be accessed using `catalog.resources`.
49
- Resource dependencies are not easily walked using a resource catalog however.
50
- To walk the dependency tree convert the catalog to a RAL catalog as described
51
- in
52
-
53
- ### RAL Catalog
54
-
55
- The resource catalog may be converted to a RAL catalog using `catalog.to_ral`.
56
- The RAL catalog contains `Puppet::Type` instances instead of `Puppet::Resource`
57
- instances as is the case with the resource catalog.
58
-
59
- One very useful feature of the RAL catalog are the methods to work with
60
- resource relationships. For example:
61
-
62
- irb> catalog = catalog.to_ral
63
- irb> graph = catalog.relationship_graph
64
- irb> pp graph.edges
65
- [{ Notify[alpha] => File[/tmp/file_20.txt] },
66
- { Notify[alpha] => File[/tmp/file_21.txt] },
67
- { Notify[alpha] => File[/tmp/file_22.txt] },
68
- { Notify[alpha] => File[/tmp/file_23.txt] },
69
- { Notify[alpha] => File[/tmp/file_24.txt] },
70
- { Notify[alpha] => File[/tmp/file_25.txt] },
71
- { Notify[alpha] => File[/tmp/file_26.txt] },
72
- { Notify[alpha] => File[/tmp/file_27.txt] },
73
- { Notify[alpha] => File[/tmp/file_28.txt] },
74
- { Notify[alpha] => File[/tmp/file_29.txt] },
75
- { File[/tmp/file_20.txt] => Notify[omega] },
76
- { File[/tmp/file_21.txt] => Notify[omega] },
77
- { File[/tmp/file_22.txt] => Notify[omega] },
78
- { File[/tmp/file_23.txt] => Notify[omega] },
79
- { File[/tmp/file_24.txt] => Notify[omega] },
80
- { File[/tmp/file_25.txt] => Notify[omega] },
81
- { File[/tmp/file_26.txt] => Notify[omega] },
82
- { File[/tmp/file_27.txt] => Notify[omega] },
83
- { File[/tmp/file_28.txt] => Notify[omega] },
84
- { File[/tmp/file_29.txt] => Notify[omega] }]
85
-
86
- If the `relationship_graph` method is throwing exceptions at you, there's a
87
- good chance the catalog is not a RAL catalog.
88
-
89
- ## Settings Catalog ##
90
-
91
- Be aware that Puppet creates a mini catalog and applies this catalog locally to
92
- manage file resource from the settings. This behavior made it difficult and
93
- time consuming to track down a race condition in
94
- [2888](http://projects.puppetlabs.com/issues/2888).
95
-
96
- Even more surprising, the `File[puppetdlockfile]` resource is only added to the
97
- settings catalog if the file exists on disk. This caused the race condition as
98
- it will exist when a separate process holds the lock while applying the
99
- catalog.
100
-
101
- It may be sufficient to simply be aware of the settings catalog and the
102
- potential for race conditions it presents. An effective way to be reasonably
103
- sure and track down the problem is to wrap the File.open method like so:
104
-
105
- # We're wrapping ourselves around the File.open method.
106
- # As described at: http://goo.gl/lDsv6
107
- class File
108
- WHITELIST = [ /pidlock.rb:39/ ]
109
-
110
- class << self
111
- alias xxx_orig_open open
112
- end
113
-
114
- def self.open(name, *rest, &block)
115
- # Check the whitelist for any "good" File.open calls against the #
116
- puppetdlock file
117
- white_listed = caller(0).find do |line|
118
- JJM_WHITELIST.find { |re| re.match(line) }
119
- end
120
-
121
- # If you drop into IRB here, take a look at your caller, it might be
122
- # the ghost in the machine you're looking for.
123
- binding.pry if name =~ /puppetdlock/ and not white_listed
124
- xxx_orig_open(name, *rest, &block)
125
- end
126
- end
127
-
128
- The settings catalog is populated by the `Puppet::Util::Settings#to\_catalog`
129
- method.
130
-
131
- # Ruby Dependencies #
132
-
133
- To install the dependencies run:
134
-
135
- $ bundle install --path .bundle/gems/
136
-
137
- Once this is done, you can interact with puppet through bundler using `bundle
138
- exec <command>` which will ensure that `<command>` is executed in the context
139
- of puppet's dependencies.
140
-
141
- For example to run the specs:
142
-
143
- $ bundle exec rake spec
144
-
145
- To run puppet itself (for a resource lookup say):
146
-
147
- $ bundle exec puppet resource host localhost
148
-
149
- which should return something like:
150
-
151
- host { 'localhost':
152
- ensure => 'present',
153
- ip => '127.0.0.1',
154
- target => '/etc/hosts',
155
- }
156
-
157
- # Running Tests #
158
-
159
- Puppet Labs projects use a common convention of using Rake to run unit tests.
160
- The tests can be run with the following rake task:
161
-
162
- bundle exec rake spec
163
-
164
- This allows the Rakefile to set up the environment beforehand if needed. This
165
- method is how the unit tests are run in [Jenkins](https://jenkins.puppetlabs.com).
166
-
167
- Under the hood Puppet's tests use `rspec`. To run all of them, you can directly
168
- use 'rspec':
169
-
170
- bundle exec rspec
171
-
172
- To run a single file's worth of tests (much faster!), give the filename, and use
173
- the nested format to see the descriptions:
174
-
175
- bundle exec rspec spec/unit/ssl/host_spec.rb --format nested
176
-
177
- ## Testing dependency version requirements
178
-
179
- Puppet is only compatible with certain versions of RSpec and Mocha. If you are
180
- not using Bundler to install the required test libraries you must ensure that
181
- you are using the right library versions. Using unsupported versions of Mocha
182
- and RSpec will probably display many spurious failures. The supported versions
183
- of RSpec and Mocha can be found in the project Gemfile.
184
-
185
- # A brief introduction to testing in Puppet
186
-
187
- Puppet relies heavily on automated testing to ensure that Puppet behaves as
188
- expected and that new features don't interfere with existing behavior. There are
189
- three primary sets of tests that Puppet uses: _unit tests_, _integration tests_,
190
- and _acceptance tests_.
191
-
192
- - - -
193
-
194
- Unit tests are used to test the individual components of Puppet to ensure that
195
- they function as expected in isolation. Unit tests are designed to hide the
196
- actual system implementations and provide canned information so that only the
197
- intended behavior is tested, rather than the targeted code and everything else
198
- connected to it. Unit tests should never affect the state of the system that's
199
- running the test.
200
-
201
- - - -
202
-
203
- Integration tests serve to test different units of code together to ensure that
204
- they interact correctly. While individual methods might perform correctly, when
205
- used with the rest of the system they might fail, so integration tests are a
206
- higher level version of unit tests that serve to check the behavior of
207
- individual subsystems.
208
-
209
- All of the unit and integration tests for Puppet are kept in the spec/ directory.
210
-
211
- - - -
212
-
213
- Acceptance tests are used to test high level behaviors of Puppet that deal with
214
- a number of concerns and aren't easily tested with normal unit tests. Acceptance
215
- tests function by changing system state and checking the system after
216
- the fact to make sure that the intended behavior occurred. Because of this
217
- acceptance tests can be destructive, so the systems being tested should be
218
- throwaway systems.
219
-
220
- All of the acceptance tests for Puppet are kept in the acceptance/tests/
221
- directory.
222
-
223
- ## Puppet Continuous integration
224
-
225
- * Travis-ci (unit tests only): https://travis-ci.org/puppetlabs/puppet/
226
- * Jenkins (unit and acceptance tests): https://jenkins.puppetlabs.com/view/Puppet%20FOSS/
227
-
228
- ## RSpec
229
-
230
- Puppet uses RSpec to perform unit and integration tests. RSpec handles a number
231
- of concerns to make testing easier:
232
-
233
- * Executing examples and ensuring the actual behavior matches the expected behavior (examples)
234
- * Grouping tests (describe and contexts)
235
- * Setting up test environments and cleaning up afterwards (before and after blocks)
236
- * Isolating tests (mocks and stubs)
237
-
238
- #### Examples and expectations
239
-
240
- At the most basic level, RSpec provides a framework for executing tests (which
241
- are called examples) and ensuring that the actual behavior matches the expected
242
- behavior (which are done with expectations)
243
-
244
- ```ruby
245
- # This is an example; it sets the test name and defines the test to run
246
- specify "one equals one" do
247
- # 'should' is an expectation; it adds a check to make sure that the left argument
248
- # matches the right argument
249
- 1.should == 1
250
- end
251
-
252
- # Examples can be declared with either 'it' or 'specify'
253
- it "one doesn't equal two" do
254
- 1.should_not == 2
255
- end
256
- ```
257
-
258
- Good examples generally do as little setup as possible and only test one or two
259
- things; it makes tests easier to understand and easier to debug.
260
-
261
- More complete documentation on expectations is available at https://www.relishapp.com/rspec/rspec-expectations/docs
262
-
263
- ### Example groups
264
-
265
- Example groups are fairly self explanatory; they group similar examples into a
266
- set.
267
-
268
- ```ruby
269
- describe "the number one" do
270
-
271
- it "is larger than zero" do
272
- 1.should be > 0
273
- end
274
-
275
- it "is an odd number" do
276
- 1.odd?.should be true
277
- end
278
-
279
- it "is not nil" do
280
- 1.should_not be_nil
281
- end
282
- end
283
- ```
284
-
285
- Example groups have a number of uses that we'll get into later, but one of the
286
- simplest demonstrations of what they do is how they help to format
287
- documentation:
288
-
289
- ```
290
- rspec ex.rb --format documentation
291
-
292
- the number one
293
- is larger than zero
294
- is an odd number
295
- is not nil
296
-
297
- Finished in 0.00516 seconds
298
- 3 examples, 0 failures
299
- ```
300
-
301
- ### Setting up and tearing down tests
302
-
303
- Examples may require some setup before they can run, and might need to clean up
304
- afterwards. `before` and `after` blocks can be used before this, and can be
305
- used inside of example groups to limit how many examples they affect.
306
-
307
- ```ruby
308
-
309
- describe "something that could warn" do
310
- before :each do
311
- # Disable warnings for this test
312
- $VERBOSE = nil
313
- end
314
-
315
- after do
316
- # Enable warnings afterwards
317
- $VERBOSE = true
318
- end
319
-
320
- it "doesn't generate a warning" do
321
- MY_CONSTANT = 1
322
- # reassigning a normally prints out 'warning: already initialized constant FOO'
323
- MY_CONSTANT = 2
324
- end
325
- end
326
- ```
327
-
328
- ### Setting up helper data
329
-
330
- Some examples may require setting up data before hand and making it available to
331
- tests. RSpec provides helper methods with the `let` method call that can be used
332
- inside of tests.
333
-
334
- ```ruby
335
- describe "a helper object" do
336
- # This creates an array with three elements that we can retrieve in tests. A
337
- # new copy will be made for each test.
338
- let(:my_helper) do
339
- ['foo', 'bar', 'baz']
340
- end
341
-
342
- it "should be an array" do
343
- my_helper.should be_a_kind_of Array
344
- end
345
-
346
- it "should have three elements" do
347
- my_helper.should have(3).items
348
- end
349
- end
350
- ```
351
-
352
- Like `before` blocks, helper objects like this are used to avoid doing a lot of
353
- setup in individual examples and share setup between similar tests.
354
-
355
- ### Isolating tests with stubs
356
-
357
- RSpec allows you to provide fake data during testing to make sure that
358
- individual tests are only running the code being tested. You can stub out entire
359
- objects, or just stub out individual methods on an object. When a method is
360
- stubbed the method itself will never be called.
361
-
362
- While RSpec comes with its own stubbing framework, Puppet uses the Mocha
363
- framework.
364
-
365
- A brief usage guide for Mocha is available at http://gofreerange.com/mocha/docs/#Usage,
366
- and an overview of Mocha expectations is available at http://gofreerange.com/mocha/docs/Mocha/Expectation.html
367
-
368
- ```ruby
369
- describe "stubbing a method on an object" do
370
- let(:my_helper) do
371
- ['foo', 'bar', 'baz']
372
- end
373
-
374
- it 'should have three items before being stubbed' do
375
- my_helper.size.should == 3
376
- end
377
-
378
- describe 'when stubbing the size' do
379
- before do
380
- my_helper.stubs(:size).returns 10
381
- end
382
-
383
- it 'should have the stubbed value for size' do
384
- my_helper.size.should == 10
385
- end
386
- end
387
- end
388
- ```
389
-
390
- Entire objects can be stubbed as well.
391
-
392
- ```ruby
393
- describe "stubbing an object" do
394
- let(:my_helper) do
395
- stub(:not_an_array, :size => 10)
396
- end
397
-
398
- it 'should have the stubbed size'
399
- my_helper.size.should == 10
400
- end
401
- end
402
- ```
403
-
404
- ### Adding expectations with mocks
405
-
406
- It's possible to combine the concepts of stubbing and expectations so that a
407
- method has to be called for the test to pass (like an expectation), and can
408
- return a fixed value (like a stub).
409
-
410
- ```ruby
411
- describe "mocking a method on an object" do
412
- let(:my_helper) do
413
- ['foo', 'bar', 'baz']
414
- end
415
-
416
- describe "when mocking the size" do
417
- before do
418
- my_helper.expects(:size).returns 10
419
- end
420
-
421
- it "adds an expectation that a method was called" do
422
- my_helper.size
423
- end
424
- end
425
- end
426
- ```
427
-
428
- Like stubs, entire objects can be mocked.
429
-
430
- ```ruby
431
- describe "mocking an object" do
432
- let(:my_helper) do
433
- mock(:not_an_array)
434
- end
435
-
436
- before do
437
- not_an_array.expects(:size).returns 10
438
- end
439
-
440
- it "adds an expectation that the method was called" do
441
- not_an_array.size
442
- end
443
- end
444
- ```
445
- ### Writing tests without side effects
446
-
447
- When properly written each test should be able to run in isolation, and tests
448
- should be able to be run in any order. This makes tests more reliable and allows
449
- a single test to be run if only that test is failing, instead of running all
450
- 17000+ tests each time something is changed. However, there are a number of ways
451
- that can make tests fail when run in isolation or out of order.
452
-
453
- #### Using instance variables
454
-
455
- Puppet has a number of older tests that use `before` blocks and instance
456
- variables to set up fixture data, instead of `let` blocks. These can retain
457
- state between tests, which can lead to test failures when tests are run out of
458
- order.
459
-
460
- ```ruby
461
- # test.rb
462
- RSpec.configure do |c|
463
- c.mock_framework = :mocha
464
- end
465
-
466
- describe "fixture data" do
467
- describe "using instance variables" do
468
-
469
- # BAD
470
- before :all do
471
- # This fixture will be created only once and will retain the `foo` stub
472
- # between tests.
473
- @fixture = stub 'test data'
474
- end
475
-
476
- it "can be stubbed" do
477
- @fixture.stubs(:foo).returns :bar
478
- @fixture.foo.should == :bar
479
- end
480
-
481
- it "should not keep state between tests" do
482
- # The foo stub was added in the previous test and shouldn't be present
483
- # in this test.
484
- expect { @fixture.foo }.to raise_error
485
- end
486
- end
487
-
488
- describe "using `let` blocks" do
489
-
490
- # GOOD
491
- # This will be recreated between tests so that state isn't retained.
492
- let(:fixture) { stub 'test data' }
493
-
494
- it "can be stubbed" do
495
- fixture.stubs(:foo).returns :bar
496
- fixture.foo.should == :bar
497
- end
498
-
499
- it "should not keep state between tests" do
500
- # since let blocks are regenerated between tests, the foo stub added in
501
- # the previous test will not be present here.
502
- expect { fixture.foo }.to raise_error
503
- end
504
- end
505
- end
506
- ```
507
-
508
- ```
509
- bundle exec rspec test.rb -fd
510
-
511
- fixture data
512
- using instance variables
513
- can be stubbed
514
- should not keep state between tests (FAILED - 1)
515
- using `let` blocks
516
- can be stubbed
517
- should not keep state between tests
518
-
519
- Failures:
520
-
521
- 1) fixture data using instance variables should not keep state between tests
522
- Failure/Error: expect { @fixture.foo }.to raise_error
523
- expected Exception but nothing was raised
524
- # ./test.rb:17:in `block (3 levels) in <top (required)>'
525
-
526
- Finished in 0.00248 seconds
527
- 4 examples, 1 failure
528
-
529
- Failed examples:
530
-
531
- rspec ./test.rb:16 # fixture data using instance variables should not keep state between tests
532
- ```
533
-
534
-
535
- ### RSpec references
536
-
537
- * RSpec core docs: https://www.relishapp.com/rspec/rspec-core/docs
538
- * RSpec guidelines with Ruby: http://betterspecs.org/
539
-
540
- ### Puppet-acceptance
541
-
542
- [puppet-acceptance]: https://github.com/puppetlabs/puppet-acceptance
543
- [test::unit]: http://test-unit.rubyforge.org/
544
-
545
- Puppet has a custom acceptance testing framework called
546
- [puppet-acceptance][puppet-acceptance] for running acceptance tests.
547
- Puppet-acceptance runs the tests by configuring one or more VMs, copying the
548
- test cases onto the VMs, performing the tests and collecting the results, and
549
- ensuring that the results match the intended behavior. It uses
550
- [test::unit][test::unit] to perform the actual assertions.
551
-
552
- # UTF-8 Handling #
553
-
554
- As Ruby 1.9 becomes more commonly used with Puppet, developers should be aware
555
- of major changes to the way Strings and Regexp objects are handled.
556
- Specifically, every instance of these two classes will have an encoding
557
- attribute determined in a number of ways.
558
-
559
- * If the source file has an encoding specified in the magic comment at the
560
- top, the instance will take on that encoding.
561
- * Otherwise, the encoding will be determined by the LC\_LANG or LANG
562
- environment variables.
563
- * Otherwise, the encoding will default to ASCII-8BIT
564
-
565
- ## References ##
566
-
567
- Excellent information about the differences between encodings in Ruby 1.8 and
568
- Ruby 1.9 is published in this blog series:
569
- [Understanding M17n](http://links.puppetlabs.com/understanding_m17n)
570
-
571
- ## Encodings of Regexp and String instances ##
572
-
573
- In general, please be aware that Ruby 1.9 regular expressions need to be
574
- compatible with the encoding of a string being used to match them. If they are
575
- not compatible you can expect to receive and error such as:
576
-
577
- Encoding::CompatibilityError: incompatible encoding regexp match (ASCII-8BIT
578
- regexp with UTF-8 string)
579
-
580
- In addition, some escape sequences were valid in Ruby 1.8 are no longer valid
581
- in 1.9 if the regular expression is not marked as an ASCII-8BIT object. You
582
- may expect errors like this in this situation:
583
-
584
- SyntaxError: (irb):7: invalid multibyte escape: /\xFF/
585
-
586
- This error is particularly common when serializing a string to other
587
- representations like JSON or YAML. To resolve the problem you can explicitly
588
- mark the regular expression as ASCII-8BIT using the /n flag:
589
-
590
- "a" =~ /\342\230\203/n
591
-
592
- Finally, any time you're thinking of a string as an array of bytes rather than
593
- an array of characters, common when escaping a string, you should work with
594
- everything in ASCII-8BIT. Changing the encoding will not change the data
595
- itself and allow the Regexp and the String to deal with bytes rather than
596
- characters.
597
-
598
- Puppet provides a monkey patch to String which returns an encoding suitable for
599
- byte manipulations:
600
-
601
- # Example of how to escape non ASCII printable characters for YAML.
602
- >> snowman = "☃"
603
- >> snowman.to_ascii8bit.gsub(/([\x80-\xFF])/n) { |x| "\\x#{x.unpack("C")[0].to_s(16)} }
604
- => "\\xe2\\x98\\x83"
605
-
606
- If the Regexp is not marked as ASCII-8BIT using /n, then you can expect the
607
- SyntaxError, invalid multibyte escape as mentioned above.
608
-
609
- # Windows #
610
-
611
- If you'd like to run Puppet from source on Windows platforms, the
612
- include `ext/envpuppet.bat` will help.
613
-
614
- To quickly run Puppet from source, assuming you already have Ruby installed
615
- from [rubyinstaller.org](http://rubyinstaller.org).
616
-
617
- C:\> cd C:\work\puppet
618
- C:\work\puppet> set PATH=%PATH%;C:\work\puppet\ext
619
- C:\work\puppet> envpuppet bundle install
620
- C:\work\puppet> envpuppet puppet --version
621
- 2.7.9
622
-
623
- When writing a test that cannot possibly run on Windows, e.g. there is
624
- no mount type on windows, do the following:
625
-
626
- describe Puppet::MyClass, :unless => Puppet.features.microsoft_windows? do
627
- ..
628
- end
629
-
630
- If the test doesn't currently pass on Windows, e.g. due to on going porting, then use an rspec conditional pending block:
631
-
632
- pending("porting to Windows", :if => Puppet.features.microsoft_windows?) do
633
- <example1>
634
- end
635
-
636
- pending("porting to Windows", :if => Puppet.features.microsoft_windows?) do
637
- <example2>
638
- end
639
-
640
- Then run the test as:
641
-
642
- C:\work\puppet> envpuppet bundle exec rspec spec
643
-
644
- ## Common Issues ##
645
-
646
- * Don't assume file paths start with '/', as that is not a valid path on
647
- Windows. Use Puppet::Util.absolute\_path? to validate that a path is fully
648
- qualified.
649
-
650
- * Use File.expand\_path('/tmp') in tests to generate a fully qualified path
651
- that is valid on POSIX and Windows. In the latter case, the current working
652
- directory will be used to expand the path.
653
-
654
- * Always use binary mode when performing file I/O, unless you explicitly want
655
- Ruby to translate between unix and dos line endings. For example, opening an
656
- executable file in text mode will almost certainly corrupt the resulting
657
- stream, as will occur when using:
658
-
659
- IO.open(path, 'r') { |f| ... }
660
- IO.read(path)
661
-
662
- If in doubt, specify binary mode explicitly:
663
-
664
- IO.open(path, 'rb')
665
-
666
- * Don't assume file paths are separated by ':'. Use `File::PATH_SEPARATOR`
667
- instead, which is ':' on POSIX and ';' on Windows.
668
-
669
- * On Windows, `File::SEPARATOR` is '/', and `File::ALT_SEPARATOR` is '\'. On
670
- POSIX systems, `File::ALT_SEPARATOR` is nil. In general, use '/' as the
671
- separator as most Windows APIs, e.g. CreateFile, accept both types of
672
- separators.
673
-
674
- * Don't use waitpid/waitpid2 if you need the child process' exit code,
675
- as the child process may exit before it has a chance to open the
676
- child's HANDLE and retrieve its exit code. Use Puppet::Util.execute.
677
-
678
- * Don't assume 'C' drive. Use environment variables to look these up:
679
-
680
- "#{ENV['windir']}/system32/netsh.exe"
681
-
682
- # Configuration Directory #
683
-
684
- In Puppet 3.x we've simplified the behavior of selecting a configuration file
685
- to load. The intended behavior of reading `puppet.conf` is:
686
-
687
- 1. Use the explicit configuration provided by --confdir or --config if present
688
- 2. If running as root (`Puppet.features.root?`) then use the system
689
- `puppet.conf`
690
- 3. Otherwise, use `~/.puppet/puppet.conf`.
691
-
692
- When Puppet master is started from Rack, Puppet 3.x will read from
693
- ~/.puppet/puppet.conf by default. This is intended behavior. Rack
694
- configurations should start Puppet master with an explicit configuration
695
- directory using `ARGV << "--confdir" << "/etc/puppet"`. Please see the
696
- `ext/rack/config.ru` file for an up-to-date example.
697
-
698
- # Determining the Puppet Version
699
-
700
- If you need to programmatically work with the Puppet version, please use the
701
- following:
702
-
703
- require 'puppet/version'
704
- # Get the version baked into the sourcecode:
705
- version = Puppet.version
706
- # Set the version (e.g. in a Rakefile based on `git describe`)
707
- Puppet.version = '2.3.4'
708
-
709
- Please do not monkey patch the constant `Puppet::PUPPETVERSION` or obtain the
710
- version using the constant. The only supported way to set and get the Puppet
711
- version is through the accessor methods.
712
-
713
- # Static Compiler
714
-
715
- The static compiler was added to Puppet in the 2.7.0 release.
716
- [1](http://links.puppetlabs.com/static-compiler-announce)
717
-
718
- The static compiler is intended to provide a configuration catalog that
719
- requires a minimal amount of network communication in order to apply the
720
- catalog to the system. As implemented in Puppet 2.7.x and Puppet 3.0.x this
721
- intention takes the form of replacing all of the source parameters of File
722
- resources with a content parameter containing an address in the form of a
723
- checksum. The expected behavior is that the process applying the catalog to
724
- the node will retrieve the file content from the FileBucket instead of the
725
- FileServer.
726
-
727
- The high level approach can be described as follows. The `StaticCompiler` is a
728
- terminus that inserts itself between the "normal" compiler terminus and the
729
- request. The static compiler takes the resource catalog produced by the
730
- compiler and filters all File resources. Any file resource that contains a
731
- source parameter with a value starting with 'puppet://' is filtered in the
732
- following way in a "standard" single master / networked agents deployment
733
- scenario:
734
-
735
- 1. The content, owner, group, and mode values are retrieved from th
736
- FileServer by the master.
737
- 2. The file content is stored in the file bucket on the master.
738
- 3. The source parameter value is stripped from the File resource.
739
- 4. The content parameter value is set in the File resource using the form
740
- '{XXX}1234567890' which can be thought of as a content address indexed by
741
- checksum.
742
- 5. The owner, group and mode values are set in the File resource if they are
743
- not already set.
744
- 6. The filtered catalog is returned in the response.
745
-
746
- In addition to the catalog terminus, the process requesting the catalog needs
747
- to obtain the file content. The default behavior of `puppet agent` is to
748
- obtain file contents from the local client bucket. The method we expect users
749
- to employ to reconfigure the agent to use the server bucket is to declare the
750
- `Filebucket[puppet]` resource with the address of the master. For example:
751
-
752
- node default {
753
- filebucket { puppet:
754
- server => $server,
755
- path => false,
756
- }
757
- class { filetest: }
758
- }
759
-
760
- This special filebucket resource named "puppet" will cause the agent to fetch
761
- file contents specified by checksum from the remote filebucket instead of the
762
- default clientbucket.
763
-
764
- ## Trying out the Static Compiler
765
-
766
- Create a module that recursively downloads something. The jeffmccune-filetest
767
- module will recursively copy the rubygems source tree.
768
-
769
- $ bundle exec puppet module install jeffmccune-filetest
770
-
771
- Start the master with the StaticCompiler turned on:
772
-
773
- $ bundle exec puppet master \
774
- --catalog_terminus=static_compiler \
775
- --verbose \
776
- --no-daemonize
777
-
778
- Add the special Filebucket[puppet] resource:
779
-
780
- # site.pp
781
- node default {
782
- filebucket { puppet: server => $server, path => false }
783
- class { filetest: }
784
- }
785
-
786
- Get the static catalog:
787
-
788
- $ bundle exec puppet agent --test
789
-
790
- You should expect all file metadata to be contained in the catalog, including a
791
- checksum representing the content. When managing an out of sync file resource,
792
- the real contents should be fetched from the server instead of the
793
- clientbucket.
794
-
795
- Package Maintainers
796
- =====
797
-
798
- Software Version API
799
- -----
800
-
801
- Please see the public API regarding the software version as described in
802
- `lib/puppet/version.rb`. Puppet provides the means to easily specify the exact
803
- version of the software packaged using the VERSION file, for example:
804
-
805
- $ git describe --match "3.0.*" > lib/puppet/VERSION
806
- $ ruby -r puppet/version -e 'puts Puppet.version'
807
- 3.0.1-260-g9ca4e54
808
-
809
- EOF