puppet 3.1.1 → 3.2.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'spec_helper'
2
3
  require 'net/http'
3
4
  require 'puppet/forge/repository'
@@ -91,7 +92,7 @@ describe Puppet::Forge::Repository do
91
92
  http.expects(:request).with() do |request|
92
93
  puppet_version = /Puppet\/\d+\..*/
93
94
  os_info = /\(.*\)/
94
- ruby_version = /Ruby\/\d+\.\d+\.\d+(-p\d+)? \(\d{4}-\d{2}-\d{2}; .*\)/
95
+ ruby_version = /Ruby\/\d+\.\d+\.\d+(-p-?\d+)? \(\d{4}-\d{2}-\d{2}; .*\)/
95
96
 
96
97
  request["User-Agent"] =~ /^#{consumer_version} #{puppet_version} #{os_info} #{ruby_version}/
97
98
  end
@@ -100,6 +101,15 @@ describe Puppet::Forge::Repository do
100
101
  repository.make_http_request("the_path")
101
102
  end
102
103
 
104
+ it "escapes the received URI" do
105
+ unescaped_uri = "héllo world !! ç à"
106
+ performs_an_http_request do |http|
107
+ http.expects(:request).with(responds_with(:path, URI.escape(unescaped_uri)))
108
+ end
109
+
110
+ repository.make_http_request(unescaped_uri)
111
+ end
112
+
103
113
  def performs_an_http_request(result = nil, &block)
104
114
  http = mock("http client")
105
115
  yield http
@@ -36,15 +36,25 @@ describe Puppet::Forge do
36
36
 
37
37
  context "when the connection to the forge fails" do
38
38
  before :each do
39
- repository_responds_with(stub(:body => '{}', :code => '404'))
39
+ repository_responds_with(stub(:body => '{}', :code => '404', :message => "not found"))
40
40
  end
41
41
 
42
42
  it "raises an error for search" do
43
- expect { forge.search('bacula') }.to raise_error RuntimeError
43
+ expect { forge.search('bacula') }.to raise_error Puppet::Forge::Errors::ResponseError, "Could not execute operation for 'bacula'. Detail: 404 not found."
44
44
  end
45
45
 
46
46
  it "raises an error for remote_dependency_info" do
47
- expect { forge.remote_dependency_info('puppetlabs', 'bacula', '0.0.1') }.to raise_error RuntimeError
47
+ expect { forge.remote_dependency_info('puppetlabs', 'bacula', '0.0.1') }.to raise_error Puppet::Forge::Errors::ResponseError, "Could not execute operation for 'puppetlabs/bacula'. Detail: 404 not found."
48
+ end
49
+ end
50
+
51
+ context "when the API responses with an error" do
52
+ before :each do
53
+ repository_responds_with(stub(:body => '{"error":"invalid module"}', :code => '410', :message => "Gone"))
54
+ end
55
+
56
+ it "raises an error for remote_dependency_info" do
57
+ expect { forge.remote_dependency_info('puppetlabs', 'bacula', '0.0.1') }.to raise_error Puppet::Forge::Errors::ResponseError, "Could not execute operation for 'puppetlabs/bacula'. Detail: invalid module / 410 Gone."
48
58
  end
49
59
  end
50
60
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'hiera/backend/puppet_backend'
3
3
  require 'hiera/scope'
4
+ require 'hiera/config'
4
5
 
5
6
  describe Hiera::Backend::Puppet_backend do
6
7
 
@@ -2,59 +2,82 @@ require 'spec_helper'
2
2
  require 'hiera/scope'
3
3
 
4
4
  describe Hiera::Scope do
5
+ let(:real) { Puppet::Parser::Scope.new_for_test_harness("test_node") }
6
+ let(:scope) { Hiera::Scope.new(real) }
7
+
5
8
  describe "#initialize" do
6
9
  it "should store the supplied puppet scope" do
7
- real = {}
8
- scope = Hiera::Scope.new(real)
9
10
  scope.real.should == real
10
11
  end
11
12
  end
12
13
 
13
14
  describe "#[]" do
15
+ it "should return nil when no value is found" do
16
+ scope["foo"].should == nil
17
+ end
18
+
14
19
  it "should treat '' as nil" do
15
- real = mock
16
- real.expects(:lookupvar).with("foo").returns("")
20
+ real["foo"] = ""
17
21
 
18
- scope = Hiera::Scope.new(real)
19
22
  scope["foo"].should == nil
20
23
  end
21
24
 
22
- it "sould return found data" do
23
- real = mock
24
- real.expects(:lookupvar).with("foo").returns("bar")
25
+ it "should return found data" do
26
+ real["foo"] = "bar"
25
27
 
26
- scope = Hiera::Scope.new(real)
27
28
  scope["foo"].should == "bar"
28
29
  end
29
30
 
30
- it "should get calling_class and calling_module from puppet scope" do
31
- real = mock
32
- resource = mock
33
- resource.expects(:name).returns("Foo::Bar").twice
31
+ it "preserves the case of a string that is found" do
32
+ real["foo"] = "CAPITAL!"
33
+
34
+ scope["foo"].should == "CAPITAL!"
35
+ end
36
+
37
+ it "aliases $module_name as calling_module" do
38
+ real["module_name"] = "the_module"
39
+
40
+ scope["calling_module"].should == "the_module"
41
+ end
42
+
43
+ it "uses the name of the of the scope's class as the calling_class" do
44
+ real.source = Puppet::Resource::Type.new(:hostclass,
45
+ "testing",
46
+ :module_name => "the_module")
47
+
48
+ scope["calling_class"].should == "testing"
49
+ end
50
+
51
+ it "downcases the calling_class" do
52
+ real.source = Puppet::Resource::Type.new(:hostclass,
53
+ "UPPER CASE",
54
+ :module_name => "the_module")
55
+
56
+ scope["calling_class"].should == "upper case"
57
+ end
34
58
 
35
- real.expects(:resource).returns(resource).twice
59
+ it "looks for the class which includes the defined type as the calling_class" do
60
+ parent = Puppet::Parser::Scope.new_for_test_harness("parent")
61
+ real.parent = parent
62
+ parent.source = Puppet::Resource::Type.new(:hostclass,
63
+ "name_of_the_class_including_the_definition",
64
+ :module_name => "class_module")
65
+ real.source = Puppet::Resource::Type.new(:definition,
66
+ "definition_name",
67
+ :module_name => "definition_module")
36
68
 
37
- scope = Hiera::Scope.new(real)
38
- scope["calling_class"].should == "foo::bar"
39
- scope["calling_module"].should == "foo"
69
+ scope["calling_class"].should == "name_of_the_class_including_the_definition"
40
70
  end
41
71
  end
42
72
 
43
73
  describe "#include?" do
44
74
  it "should correctly report missing data" do
45
- real = mock
46
- real.expects(:lookupvar).with("foo").returns("")
75
+ real["foo"] = ""
47
76
 
48
- scope = Hiera::Scope.new(real)
49
77
  scope.include?("foo").should == false
50
78
  end
51
79
 
52
80
  it "should always return true for calling_class and calling_module" do
53
- real = mock
54
- real.expects(:lookupvar).with("calling_class").never
55
- real.expects(:lookupvar).with("calling_module").never
56
-
57
- scope = Hiera::Scope.new(real)
58
81
  scope.include?("calling_class").should == true
59
82
  scope.include?("calling_module").should == true
60
83
  end
@@ -4,20 +4,23 @@ require 'spec_helper'
4
4
  describe "Puppet::Resource::Catalog::ActiveRecord", :if => can_use_scratch_database? do
5
5
  include PuppetSpec::Files
6
6
 
7
- require 'puppet/rails'
8
-
9
7
  before :each do
10
8
  require 'puppet/indirector/catalog/active_record'
11
9
  setup_scratch_database
12
10
  end
13
11
 
12
+ after :each do
13
+ Puppet::Rails.teardown
14
+ end
15
+
14
16
  let :terminus do
15
17
  Puppet::Resource::Catalog::ActiveRecord.new
16
18
  end
17
19
 
18
20
  it "should issue a deprecation warning" do
19
21
  Puppet.expects(:deprecation_warning).with() { |msg| msg =~ /ActiveRecord-based storeconfigs and inventory are deprecated/ }
20
- terminus
22
+
23
+ Puppet::Resource::Catalog::ActiveRecord.new
21
24
  end
22
25
 
23
26
  it "should be a subclass of the ActiveRecord terminus class" do
@@ -28,17 +28,12 @@ describe Puppet::Resource::Catalog::Compiler do
28
28
  node1 = stub 'node1', :merge => nil
29
29
  node2 = stub 'node2', :merge => nil
30
30
  compiler.stubs(:compile)
31
- Puppet::Node.indirection.stubs(:find).with('node1', anything).returns(node1)
32
- Puppet::Node.indirection.stubs(:find).with('node2', anything).returns(node2)
31
+ Puppet::Node.indirection.stubs(:find).with('node1', has_entry(:environment => anything)).returns(node1)
32
+ Puppet::Node.indirection.stubs(:find).with('node2', has_entry(:environment => anything)).returns(node2)
33
33
 
34
34
  compiler.find(Puppet::Indirector::Request.new(:catalog, :find, 'node1', nil, :node => 'node1'))
35
35
  compiler.find(Puppet::Indirector::Request.new(:catalog, :find, 'node2', nil, :node => 'node2'))
36
36
  end
37
-
38
- it "should provide a method for determining if the catalog is networked" do
39
- compiler = Puppet::Resource::Catalog::Compiler.new
40
- compiler.should respond_to(:networked?)
41
- end
42
37
  end
43
38
 
44
39
  describe "when finding catalogs" do
@@ -134,26 +129,6 @@ describe Puppet::Resource::Catalog::Compiler do
134
129
  Puppet::Parser::Compiler.expects(:compile).returns result
135
130
  @compiler.find(@request).should equal(result)
136
131
  end
137
-
138
- it "should benchmark the compile process" do
139
- Puppet::Node.indirection.stubs(:find).returns(@node)
140
- @compiler.stubs(:networked?).returns(true)
141
- @compiler.expects(:benchmark).with do |level, message|
142
- level == :notice and message =~ /^Compiled catalog/
143
- end
144
- Puppet::Parser::Compiler.stubs(:compile)
145
- @compiler.find(@request)
146
- end
147
-
148
- it "should log the benchmark result" do
149
- Puppet::Node.indirection.stubs(:find).returns(@node)
150
- @compiler.stubs(:networked?).returns(true)
151
- Puppet::Parser::Compiler.stubs(:compile)
152
-
153
- Puppet.expects(:notice).with { |msg| msg =~ /Compiled catalog/ }
154
-
155
- @compiler.find(@request)
156
- end
157
132
  end
158
133
 
159
134
  describe "when extracting facts from the request" do
@@ -180,7 +155,7 @@ describe Puppet::Resource::Catalog::Compiler do
180
155
 
181
156
  @facts.timestamp = Time.parse('2010-11-01')
182
157
  @now = Time.parse('2010-11-02')
183
- Time.expects(:now).returns(@now)
158
+ Time.stubs(:now).returns(@now)
184
159
 
185
160
  @compiler.extract_facts_from_request(@request)
186
161
  @facts.timestamp.should == @now
@@ -137,7 +137,7 @@ describe Puppet::Resource::Catalog::StaticCompiler do
137
137
  # a real fileserver initialized for testing.
138
138
  Puppet::FileServing::Metadata.
139
139
  indirection.stubs(:find).
140
- with() { |*args| args[0] == options[:source].sub('puppet:///','') }.
140
+ with() { |*args| args[0] == options[:source].sub('puppet:///','') and args[1] == {:links => :manage, :environment => nil}}.
141
141
  returns(fake_fileserver_metadata)
142
142
 
143
143
  # I want a resource that all the file resources require and another
@@ -1,171 +1,175 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
- require 'puppet/rails'
4
3
 
5
4
  describe "Puppet::Node::Facts::InventoryActiveRecord", :if => can_use_scratch_database? do
6
5
  include PuppetSpec::Files
7
6
 
8
7
  let(:terminus) { Puppet::Node::Facts::InventoryActiveRecord.new }
9
8
 
10
- before :all do
11
- require 'puppet/indirector/facts/inventory_active_record'
12
- end
13
-
14
- after :each do
15
- Puppet::Node::Facts.indirection.reset_terminus_class
16
- end
17
-
18
9
  before :each do
19
- Puppet::Node.indirection.reset_terminus_class
20
- Puppet::Node.indirection.cache_class = nil
21
-
10
+ require 'puppet/indirector/facts/inventory_active_record'
22
11
  Puppet::Node::Facts.indirection.terminus_class = :inventory_active_record
23
12
  setup_scratch_database
24
13
  end
25
14
 
26
- it "should issue a deprecation warning" do
27
- Puppet.expects(:deprecation_warning).with() { |msg| msg =~ /ActiveRecord-based storeconfigs and inventory are deprecated/ }
28
- terminus
29
- end
30
-
31
- describe "#save" do
32
- let(:node) {
33
- Puppet::Rails::InventoryNode.new(:name => "foo", :timestamp => Time.now)
34
- }
35
-
36
- let(:facts) {
37
- Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin")
38
- }
39
-
40
- it "should retry on ActiveRecord error" do
41
- Puppet::Rails::InventoryNode.expects(:create).twice.raises(ActiveRecord::StatementInvalid).returns node
42
-
43
- Puppet::Node::Facts.indirection.save(facts)
44
- end
45
-
46
- it "should use an existing node if possible" do
47
- node.save
48
- Puppet::Node::Facts.indirection.save(facts)
49
-
50
- Puppet::Rails::InventoryNode.count.should == 1
51
- Puppet::Rails::InventoryNode.first.should == node
52
- end
53
-
54
- it "should create a new node if one can't be found" do
55
- # This test isn't valid if there are nodes to begin with
56
- Puppet::Rails::InventoryNode.count.should == 0
57
-
58
- Puppet::Node::Facts.indirection.save(facts)
59
-
60
- Puppet::Rails::InventoryNode.count.should == 1
61
- Puppet::Rails::InventoryNode.first.name.should == "foo"
62
- end
63
-
64
- it "should save the facts" do
65
- Puppet::Node::Facts.indirection.save(facts)
66
-
67
- Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should =~ [["uptime_days","60"],["kernel","Darwin"]]
68
- end
69
-
70
- it "should remove the previous facts for an existing node" do
71
- facts = Puppet::Node::Facts.new("foo", "uptime_days" => "30", "kernel" => "Darwin")
72
- Puppet::Node::Facts.indirection.save(facts)
73
- bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "35", "kernel" => "Linux")
74
- foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "is_virtual" => "false")
75
- Puppet::Node::Facts.indirection.save(bar_facts)
76
- Puppet::Node::Facts.indirection.save(foo_facts)
77
-
78
- Puppet::Node::Facts.indirection.find("bar").should == bar_facts
79
- Puppet::Node::Facts.indirection.find("foo").should == foo_facts
80
- Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should_not include(["uptime_days", "30"], ["kernel", "Darwin"])
81
- end
15
+ after :each do
16
+ Puppet::Rails.teardown
82
17
  end
83
18
 
84
- describe "#find" do
85
- before do
86
- @foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin")
87
- @bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "30", "kernel" => "Linux")
88
- Puppet::Node::Facts.indirection.save(@foo_facts)
89
- Puppet::Node::Facts.indirection.save(@bar_facts)
90
- end
91
-
92
- it "should identify facts by node name" do
93
- Puppet::Node::Facts.indirection.find("foo").should == @foo_facts
94
- end
95
-
96
- it "should return nil if no node instance can be found" do
97
- Puppet::Node::Facts.indirection.find("non-existent node").should == nil
19
+ context "under Ruby 1.x", :if => (RUBY_VERSION[0] == '1' and can_use_scratch_database?) do
20
+ describe "#initialize" do
21
+ it "should issue a deprecation warning" do
22
+ Puppet.expects(:deprecation_warning).with() { |msg| msg =~ /ActiveRecord-based storeconfigs and inventory are deprecated/ }
23
+ terminus
24
+ end
25
+ end
26
+
27
+ describe "#save" do
28
+ let(:node) {
29
+ Puppet::Rails::InventoryNode.new(:name => "foo", :timestamp => Time.now)
30
+ }
31
+
32
+ let(:facts) {
33
+ Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin")
34
+ }
35
+
36
+ it "should retry on ActiveRecord error" do
37
+ Puppet::Rails::InventoryNode.expects(:create).twice.raises(ActiveRecord::StatementInvalid).returns node
38
+
39
+ Puppet::Node::Facts.indirection.save(facts)
40
+ end
41
+
42
+ it "should use an existing node if possible" do
43
+ node.save
44
+ Puppet::Node::Facts.indirection.save(facts)
45
+
46
+ Puppet::Rails::InventoryNode.count.should == 1
47
+ Puppet::Rails::InventoryNode.first.should == node
48
+ end
49
+
50
+ it "should create a new node if one can't be found" do
51
+ # This test isn't valid if there are nodes to begin with
52
+ Puppet::Rails::InventoryNode.count.should == 0
53
+
54
+ Puppet::Node::Facts.indirection.save(facts)
55
+
56
+ Puppet::Rails::InventoryNode.count.should == 1
57
+ Puppet::Rails::InventoryNode.first.name.should == "foo"
58
+ end
59
+
60
+ it "should save the facts" do
61
+ Puppet::Node::Facts.indirection.save(facts)
62
+
63
+ Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should =~ [["uptime_days","60"],["kernel","Darwin"]]
64
+ end
65
+
66
+ it "should remove the previous facts for an existing node" do
67
+ facts = Puppet::Node::Facts.new("foo", "uptime_days" => "30", "kernel" => "Darwin")
68
+ Puppet::Node::Facts.indirection.save(facts)
69
+ bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "35", "kernel" => "Linux")
70
+ foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "is_virtual" => "false")
71
+ Puppet::Node::Facts.indirection.save(bar_facts)
72
+ Puppet::Node::Facts.indirection.save(foo_facts)
73
+
74
+ Puppet::Node::Facts.indirection.find("bar").should == bar_facts
75
+ Puppet::Node::Facts.indirection.find("foo").should == foo_facts
76
+ Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should_not include(["uptime_days", "30"], ["kernel", "Darwin"])
77
+ end
78
+ end
79
+
80
+ describe "#find" do
81
+ before do
82
+ @foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin")
83
+ @bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "30", "kernel" => "Linux")
84
+ Puppet::Node::Facts.indirection.save(@foo_facts)
85
+ Puppet::Node::Facts.indirection.save(@bar_facts)
86
+ end
87
+
88
+ it "should identify facts by node name" do
89
+ Puppet::Node::Facts.indirection.find("foo").should == @foo_facts
90
+ end
91
+
92
+ it "should return nil if no node instance can be found" do
93
+ Puppet::Node::Facts.indirection.find("non-existent node").should == nil
94
+ end
95
+ end
96
+
97
+ describe "#search" do
98
+ def search_request(conditions)
99
+ Puppet::Indirector::Request.new(:facts, :search, nil, nil, conditions)
100
+ end
101
+
102
+ before :each do
103
+ @now = Time.now
104
+ @foo = Puppet::Node::Facts.new("foo", "fact1" => "value1", "fact2" => "value2", "uptime_days" => "30")
105
+ @bar = Puppet::Node::Facts.new("bar", "fact1" => "value1", "uptime_days" => "60")
106
+ @baz = Puppet::Node::Facts.new("baz", "fact1" => "value2", "fact2" => "value1", "uptime_days" => "90")
107
+ @bat = Puppet::Node::Facts.new("bat")
108
+ @foo.timestamp = @now - 3600*1
109
+ @bar.timestamp = @now - 3600*3
110
+ @baz.timestamp = @now - 3600*5
111
+ @bat.timestamp = @now - 3600*7
112
+ [@foo, @bar, @baz, @bat].each {|facts| Puppet::Node::Facts.indirection.save(facts)}
113
+ end
114
+
115
+ it "should return node names that match 'equal' constraints" do
116
+ request = search_request('facts.fact1.eq' => 'value1',
117
+ 'facts.fact2.eq' => 'value2')
118
+ terminus.search(request).should == ["foo"]
119
+ end
120
+
121
+ it "should return node names that match 'not equal' constraints" do
122
+ request = search_request('facts.fact1.ne' => 'value2')
123
+ terminus.search(request).should == ["bar","foo"]
124
+ end
125
+
126
+ it "should return node names that match strict inequality constraints" do
127
+ request = search_request('facts.uptime_days.gt' => '20',
128
+ 'facts.uptime_days.lt' => '70')
129
+ terminus.search(request).should == ["bar","foo"]
130
+ end
131
+
132
+ it "should return node names that match non-strict inequality constraints" do
133
+ request = search_request('facts.uptime_days.ge' => '30',
134
+ 'facts.uptime_days.le' => '60')
135
+ terminus.search(request).should == ["bar","foo"]
136
+ end
137
+
138
+ it "should return node names whose facts are within a given timeframe" do
139
+ request = search_request('meta.timestamp.ge' => @now - 3600*5,
140
+ 'meta.timestamp.le' => @now - 3600*1)
141
+ terminus.search(request).should == ["bar","baz","foo"]
142
+ end
143
+
144
+ it "should return node names whose facts are from a specific time" do
145
+ request = search_request('meta.timestamp.eq' => @now - 3600*3)
146
+ terminus.search(request).should == ["bar"]
147
+ end
148
+
149
+ it "should return node names whose facts are not from a specific time" do
150
+ request = search_request('meta.timestamp.ne' => @now - 3600*1)
151
+ terminus.search(request).should == ["bar","bat","baz"]
152
+ end
153
+
154
+ it "should perform strict searches on nodes by timestamp" do
155
+ request = search_request('meta.timestamp.gt' => @now - 3600*5,
156
+ 'meta.timestamp.lt' => @now - 3600*1)
157
+ terminus.search(request).should == ["bar"]
158
+ end
159
+
160
+ it "should search nodes based on both facts and timestamp values" do
161
+ request = search_request('facts.uptime_days.gt' => '45',
162
+ 'meta.timestamp.lt' => @now - 3600*4)
163
+ terminus.search(request).should == ["baz"]
164
+ end
98
165
  end
99
166
  end
100
167
 
101
- describe "#search" do
102
- def search_request(conditions)
103
- Puppet::Indirector::Request.new(:facts, :search, nil, nil, conditions)
104
- end
105
-
106
- before :each do
107
- @now = Time.now
108
- @foo = Puppet::Node::Facts.new("foo", "fact1" => "value1", "fact2" => "value2", "uptime_days" => "30")
109
- @bar = Puppet::Node::Facts.new("bar", "fact1" => "value1", "uptime_days" => "60")
110
- @baz = Puppet::Node::Facts.new("baz", "fact1" => "value2", "fact2" => "value1", "uptime_days" => "90")
111
- @bat = Puppet::Node::Facts.new("bat")
112
- @foo.timestamp = @now - 3600*1
113
- @bar.timestamp = @now - 3600*3
114
- @baz.timestamp = @now - 3600*5
115
- @bat.timestamp = @now - 3600*7
116
- [@foo, @bar, @baz, @bat].each {|facts| Puppet::Node::Facts.indirection.save(facts)}
117
- end
118
-
119
- it "should return node names that match 'equal' constraints" do
120
- request = search_request('facts.fact1.eq' => 'value1',
121
- 'facts.fact2.eq' => 'value2')
122
- terminus.search(request).should == ["foo"]
123
- end
124
-
125
- it "should return node names that match 'not equal' constraints" do
126
- request = search_request('facts.fact1.ne' => 'value2')
127
- terminus.search(request).should == ["bar","foo"]
128
- end
129
-
130
- it "should return node names that match strict inequality constraints" do
131
- request = search_request('facts.uptime_days.gt' => '20',
132
- 'facts.uptime_days.lt' => '70')
133
- terminus.search(request).should == ["bar","foo"]
134
- end
135
-
136
- it "should return node names that match non-strict inequality constraints" do
137
- request = search_request('facts.uptime_days.ge' => '30',
138
- 'facts.uptime_days.le' => '60')
139
- terminus.search(request).should == ["bar","foo"]
140
- end
141
-
142
- it "should return node names whose facts are within a given timeframe" do
143
- request = search_request('meta.timestamp.ge' => @now - 3600*5,
144
- 'meta.timestamp.le' => @now - 3600*1)
145
- terminus.search(request).should == ["bar","baz","foo"]
146
- end
147
-
148
- it "should return node names whose facts are from a specific time" do
149
- request = search_request('meta.timestamp.eq' => @now - 3600*3)
150
- terminus.search(request).should == ["bar"]
151
- end
152
-
153
- it "should return node names whose facts are not from a specific time" do
154
- request = search_request('meta.timestamp.ne' => @now - 3600*1)
155
- terminus.search(request).should == ["bar","bat","baz"]
156
- end
157
-
158
- it "should perform strict searches on nodes by timestamp" do
159
- request = search_request('meta.timestamp.gt' => @now - 3600*5,
160
- 'meta.timestamp.lt' => @now - 3600*1)
161
- terminus.search(request).should == ["bar"]
162
- end
163
-
164
- it "should search nodes based on both facts and timestamp values" do
165
- request = search_request('facts.uptime_days.gt' => '45',
166
- 'meta.timestamp.lt' => @now - 3600*4)
167
- terminus.search(request).should == ["baz"]
168
+ context "under Ruby 2.x", :if => (RUBY_VERSION[0] == '2' and can_use_scratch_database?) do
169
+ describe "#initialize" do
170
+ it "should raise error under Ruby 2" do
171
+ lambda { terminus }.should raise_error(Puppet::Error, /Ruby 2/)
172
+ end
168
173
  end
169
174
  end
170
175
  end
171
-