puppet 3.3.2 → 3.4.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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Unit testing for the OpenBSD service provider
4
+
5
+ require 'spec_helper'
6
+
7
+ provider_class = Puppet::Type.type(:service).provider(:openbsd)
8
+
9
+ describe provider_class do
10
+ before :each do
11
+ Puppet::Type.type(:service).stubs(:defaultprovider).returns described_class
12
+ Facter.stubs(:value).with(:operatingsystem).returns :openbsd
13
+ end
14
+
15
+ let :rcscripts do
16
+ [
17
+ 'apmd',
18
+ 'aucat',
19
+ 'cron',
20
+ 'puppetd'
21
+ ]
22
+ end
23
+
24
+ describe "#instances" do
25
+ it "should have an instances method" do
26
+ described_class.should respond_to :instances
27
+ end
28
+
29
+ it "should list all available services" do
30
+ FileTest.expects(:directory?).with('/etc/rc.d').returns true
31
+ Dir.expects(:entries).with('/etc/rc.d').returns rcscripts
32
+
33
+ rcscripts.each do |script|
34
+ FileTest.expects(:executable?).with("/etc/rc.d/#{script}").returns true
35
+ end
36
+
37
+ described_class.instances.map(&:name).should == [
38
+ 'apmd',
39
+ 'aucat',
40
+ 'cron',
41
+ 'puppetd'
42
+ ]
43
+ end
44
+ end
45
+
46
+ describe "#start" do
47
+ it "should use the supplied start command if specified" do
48
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :start => '/bin/foo'))
49
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => true, :override_locale => false, :squelch => true)
50
+ provider.start
51
+ end
52
+
53
+ it "should start the service otherwise" do
54
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd'))
55
+ provider.expects(:execute).with(['/etc/rc.d/sshd', '-f', :start], :failonfail => true, :override_locale => false, :squelch => true)
56
+ provider.expects(:search).with('sshd').returns('/etc/rc.d/sshd')
57
+ provider.start
58
+ end
59
+ end
60
+
61
+ describe "#stop" do
62
+ it "should use the supplied stop command if specified" do
63
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :stop => '/bin/foo'))
64
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => true, :override_locale => false, :squelch => true)
65
+ provider.stop
66
+ end
67
+
68
+ it "should stop the service otherwise" do
69
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd'))
70
+ provider.expects(:execute).with(['/etc/rc.d/sshd', :stop], :failonfail => true, :override_locale => false, :squelch => true)
71
+ provider.expects(:search).with('sshd').returns('/etc/rc.d/sshd')
72
+ provider.stop
73
+ end
74
+ end
75
+
76
+ describe "#status" do
77
+ it "should use the status command from the resource" do
78
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :status => '/bin/foo'))
79
+ provider.expects(:execute).with(['/etc/rc.d/sshd', :status], :failonfail => false, :override_locale => false, :squelch => true).never
80
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => true)
81
+ provider.status
82
+ end
83
+
84
+ it "should return :stopped when status command returns with a non-zero exitcode" do
85
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :status => '/bin/foo'))
86
+ provider.expects(:execute).with(['/etc/rc.d/sshd', :status], :failonfail => false, :override_locale => false, :squelch => true).never
87
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => true)
88
+ $CHILD_STATUS.stubs(:exitstatus).returns 3
89
+ provider.status.should == :stopped
90
+ end
91
+
92
+ it "should return :running when status command returns with a zero exitcode" do
93
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :status => '/bin/foo'))
94
+ provider.expects(:execute).with(['/etc/rc.d/sshd', :status], :failonfail => false, :override_locale => false, :squelch => true).never
95
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => false, :override_locale => false, :squelch => true)
96
+ $CHILD_STATUS.stubs(:exitstatus).returns 0
97
+ provider.status.should == :running
98
+ end
99
+ end
100
+
101
+ describe "#restart" do
102
+ it "should use the supplied restart command if specified" do
103
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :restart => '/bin/foo'))
104
+ provider.expects(:execute).with(['/etc/rc.d/sshd', '-f', :restart], :failonfail => true, :override_locale => false, :squelch => true).never
105
+ provider.expects(:execute).with(['/bin/foo'], :failonfail => true, :override_locale => false, :squelch => true)
106
+ provider.restart
107
+ end
108
+
109
+ it "should restart the service with rc-service restart if hasrestart is true" do
110
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :hasrestart => true))
111
+ provider.expects(:execute).with(['/etc/rc.d/sshd', '-f', :restart], :failonfail => true, :override_locale => false, :squelch => true)
112
+ provider.expects(:search).with('sshd').returns('/etc/rc.d/sshd')
113
+ provider.restart
114
+ end
115
+
116
+ it "should restart the service with rc-service stop/start if hasrestart is false" do
117
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd', :hasrestart => false))
118
+ provider.expects(:execute).with(['/etc/rc.d/sshd', '-f', :restart], :failonfail => true, :override_locale => false, :squelch => true).never
119
+ provider.expects(:execute).with(['/etc/rc.d/sshd', :stop], :failonfail => true, :override_locale => false, :squelch => true)
120
+ provider.expects(:execute).with(['/etc/rc.d/sshd', '-f', :start], :failonfail => true, :override_locale => false, :squelch => true)
121
+ provider.expects(:search).with('sshd').returns('/etc/rc.d/sshd')
122
+ provider.restart
123
+ end
124
+ end
125
+ end
@@ -33,7 +33,7 @@ describe Puppet::Type.type(:service).provider(:openwrt), :as_platform => :posix
33
33
  # All OpenWrt tests operate on the init script directly. It must exist.
34
34
  File.stubs(:directory?).with('/etc/init.d').returns true
35
35
 
36
- File.stubs(:exist?).with('/etc/init.d/myservice').returns true
36
+ Puppet::FileSystem::File.stubs(:exist?).with('/etc/init.d/myservice').returns true
37
37
  FileTest.stubs(:file?).with('/etc/init.d/myservice').returns true
38
38
  FileTest.stubs(:executable?).with('/etc/init.d/myservice').returns true
39
39
  end
@@ -96,18 +96,25 @@ describe provider_class do
96
96
  end
97
97
 
98
98
  describe "when enabling" do
99
- it "should create a symlink between daemon dir and service dir" do
100
- FileTest.stubs(:symlink?).returns(false)
101
- File.expects(:symlink).with(File.join(@daemondir,"myservice"), File.join(@servicedir,"myservice")).returns(0)
99
+ it "should create a symlink between daemon dir and service dir", :if => Puppet.features.manages_symlinks? do
100
+ daemon_path = File.join(@daemondir,"myservice")
101
+ mock_daemon = mock(daemon_path)
102
+ Puppet::FileSystem::File.expects(:new).with(daemon_path).returns(mock_daemon)
103
+ service_path = File.join(@servicedir,"myservice")
104
+ mock_service = mock(service_path, :symlink? => false)
105
+ Puppet::FileSystem::File.expects(:new).with(service_path).returns(mock_service)
106
+ mock_daemon.expects(:symlink).with(File.join(@servicedir,"myservice")).returns(0)
102
107
  @provider.enable
103
108
  end
104
109
  end
105
110
 
106
111
  describe "when disabling" do
107
112
  it "should remove the '/etc/service/myservice' symlink" do
113
+ path = File.join(@servicedir,"myservice")
114
+ mocked_file = mock(path, :symlink? => true)
108
115
  FileTest.stubs(:directory?).returns(false)
109
- FileTest.stubs(:symlink?).returns(true)
110
- File.expects(:unlink).with(File.join(@servicedir,"myservice")).returns(0)
116
+ Puppet::FileSystem::File.expects(:new).with(path).returns(mocked_file)
117
+ Puppet::FileSystem::File.expects(:unlink).with(path).returns(0)
111
118
  @provider.disable
112
119
  end
113
120
  end
@@ -51,8 +51,8 @@ describe Puppet::Type.type(:service).provider(:upstart) do
51
51
  describe "#search" do
52
52
  it "searches through paths to find a matching conf file" do
53
53
  File.stubs(:directory?).returns(true)
54
- File.stubs(:exists?).returns(false)
55
- File.expects(:exists?).with("/etc/init/foo-bar.conf").returns(true)
54
+ Puppet::FileSystem::File.stubs(:exist?).returns(false)
55
+ Puppet::FileSystem::File.expects(:exist?).with("/etc/init/foo-bar.conf").returns(true)
56
56
  resource = Puppet::Type.type(:service).new(:name => "foo-bar", :provider => :upstart)
57
57
  provider = provider_class.new(resource)
58
58
 
@@ -61,8 +61,8 @@ describe Puppet::Type.type(:service).provider(:upstart) do
61
61
 
62
62
  it "searches for just the name of a compound named service" do
63
63
  File.stubs(:directory?).returns(true)
64
- File.stubs(:exists?).returns(false)
65
- File.expects(:exists?).with("/etc/init/network-interface.conf").returns(true)
64
+ Puppet::FileSystem::File.stubs(:exist?).returns(false)
65
+ Puppet::FileSystem::File.expects(:exist?).with("/etc/init/network-interface.conf").returns(true)
66
66
  resource = Puppet::Type.type(:service).new(:name => "network-interface INTERFACE=lo", :provider => :upstart)
67
67
  provider = provider_class.new(resource)
68
68
 
@@ -162,7 +162,7 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
162
162
  end
163
163
 
164
164
  it "should create the directory" do
165
- File.stubs(:exist?).with("/tmp/.ssh_dir").returns false
165
+ Puppet::FileSystem::File.stubs(:exist?).with("/tmp/.ssh_dir").returns false
166
166
  Dir.expects(:mkdir).with("/tmp/.ssh_dir", 0700)
167
167
  @provider.flush
168
168
  end
@@ -199,19 +199,19 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
199
199
  end
200
200
 
201
201
  it "should create the directory if it doesn't exist" do
202
- File.stubs(:exist?).with(@dir).returns false
202
+ Puppet::FileSystem::File.stubs(:exist?).with(@dir).returns false
203
203
  Dir.expects(:mkdir).with(@dir,0700)
204
204
  @provider.flush
205
205
  end
206
206
 
207
207
  it "should not create or chown the directory if it already exist" do
208
- File.stubs(:exist?).with(@dir).returns false
208
+ Puppet::FileSystem::File.stubs(:exist?).with(@dir).returns false
209
209
  Dir.expects(:mkdir).never
210
210
  @provider.flush
211
211
  end
212
212
 
213
213
  it "should absolutely not chown the directory to the user if it creates it" do
214
- File.stubs(:exist?).with(@dir).returns false
214
+ Puppet::FileSystem::File.stubs(:exist?).with(@dir).returns false
215
215
  Dir.stubs(:mkdir).with(@dir,0700)
216
216
  uid = Puppet::Util.uid("nobody")
217
217
  File.expects(:chown).never
@@ -219,7 +219,7 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
219
219
  end
220
220
 
221
221
  it "should not create or chown the directory if it already exist" do
222
- File.stubs(:exist?).with(@dir).returns false
222
+ Puppet::FileSystem::File.stubs(:exist?).with(@dir).returns false
223
223
  Dir.expects(:mkdir).never
224
224
  File.expects(:chown).never
225
225
  @provider.flush
@@ -704,7 +704,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
704
704
  let(:stub_password_file) { stub('connection') }
705
705
 
706
706
  it 'should return a sha1 hash read from disk' do
707
- File.expects(:exists?).with(password_hash_file).returns(true)
707
+ Puppet::FileSystem::File.expects(:exist?).with(password_hash_file).returns(true)
708
708
  File.expects(:file?).with(password_hash_file).returns(true)
709
709
  File.expects(:readable?).with(password_hash_file).returns(true)
710
710
  File.expects(:new).with(password_hash_file).returns(stub_password_file)
@@ -714,18 +714,18 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
714
714
  end
715
715
 
716
716
  it 'should return nil if the password_hash_file does not exist' do
717
- File.expects(:exists?).with(password_hash_file).returns(false)
717
+ Puppet::FileSystem::File.expects(:exist?).with(password_hash_file).returns(false)
718
718
  provider.class.get_sha1('user_guid').should == nil
719
719
  end
720
720
 
721
721
  it 'should return nil if the password_hash_file is not a file' do
722
- File.expects(:exists?).with(password_hash_file).returns(true)
722
+ Puppet::FileSystem::File.expects(:exist?).with(password_hash_file).returns(true)
723
723
  File.expects(:file?).with(password_hash_file).returns(false)
724
724
  provider.class.get_sha1('user_guid').should == nil
725
725
  end
726
726
 
727
727
  it 'should raise an error if the password_hash_file is not readable' do
728
- File.expects(:exists?).with(password_hash_file).returns(true)
728
+ Puppet::FileSystem::File.expects(:exist?).with(password_hash_file).returns(true)
729
729
  File.expects(:file?).with(password_hash_file).returns(true)
730
730
  File.expects(:readable?).with(password_hash_file).returns(false)
731
731
  expect { provider.class.get_sha1('user_guid').should == nil }.to raise_error Puppet::Error, /Could not read password hash file at #{password_hash_file}/
@@ -138,7 +138,7 @@ net:
138
138
  it "should not require path if sysidcfg is specified" do
139
139
  resource[:path] = '/mypath'
140
140
  resource[:sysidcfg] = 'dummy'
141
- File.stubs(:exists?).with('/mypath/root/etc/sysidcfg').returns true
141
+ Puppet::FileSystem::File.stubs(:exist?).with('/mypath/root/etc/sysidcfg').returns true
142
142
  File.stubs(:directory?).with('/mypath/root/etc').returns true
143
143
  provider.expects(:zoneadm).with(:boot)
144
144
  provider.start
@@ -349,10 +349,10 @@ describe Puppet::Provider do
349
349
  command = Puppet::Util.which('sh') || Puppet::Util.which('cmd.exe')
350
350
  parent.commands :sh => command
351
351
 
352
- FileTest.should be_exists parent.command(:sh)
352
+ Puppet::FileSystem::File.exist?(parent.command(:sh)).should be_true
353
353
  parent.command(:sh).should =~ /#{Regexp.escape(command)}$/
354
354
 
355
- FileTest.should be_exists child.command(:sh)
355
+ Puppet::FileSystem::File.exist?(child.command(:sh)).should be_true
356
356
  child.command(:sh).should =~ /#{Regexp.escape(command)}$/
357
357
  end
358
358
 
@@ -15,65 +15,50 @@ describe processor do
15
15
  http.expects(:post).returns(httpok)
16
16
  end
17
17
 
18
- it "should use the reporturl setting's host, port and ssl option" do
19
- uri = URI.parse(Puppet[:reporturl])
20
- ssl = (uri.scheme == 'https')
21
- Net::HTTP.expects(:new).with(
22
- uri.host, uri.port, optionally(anything, anything)
23
- ).returns http
24
- http.expects(:use_ssl=).with(ssl)
25
- subject.process
26
- end
18
+ it "configures the connection for ssl when using https" do
19
+ Puppet[:reporturl] = 'https://testing:8080/the/path'
27
20
 
28
- it "uses ssl if reporturl has the https protocol" do
29
- Puppet[:reporturl] = "https://myhost.mydomain:1234/report/upload"
30
- uri = URI.parse(Puppet[:reporturl])
31
- Net::HTTP.expects(:new).with(
32
- uri.host, uri.port, optionally(anything, anything)
21
+ Puppet::Network::HttpPool.expects(:http_instance).with(
22
+ 'testing', 8080, true
33
23
  ).returns http
34
- http.expects(:use_ssl=).with(true)
24
+
35
25
  subject.process
36
26
  end
37
27
 
38
- it "does not use ssl if reporturl has plain http protocol" do
39
- Puppet[:reporturl] = "http://myhost.mydomain:1234/report/upload"
40
- uri = URI.parse(Puppet[:reporturl])
41
- Net::HTTP.expects(:new).with(
42
- uri.host, uri.port, optionally(anything, anything)
28
+ it "does not configure the connectino for ssl when using http" do
29
+ Puppet[:reporturl] = "http://testing:8080/the/path"
30
+
31
+ Puppet::Network::HttpPool.expects(:http_instance).with(
32
+ 'testing', 8080, false
43
33
  ).returns http
44
- http.expects(:use_ssl=).with(false)
34
+
45
35
  subject.process
46
36
  end
47
37
  end
48
38
 
49
39
  describe "when making a request" do
50
- let(:http) { stub_everything "http" }
40
+ let(:connection) { stub_everything "connection" }
51
41
  let(:httpok) { Net::HTTPOK.new('1.1', 200, '') }
52
42
 
53
43
  before :each do
54
- Net::HTTP.expects(:new).returns(http)
44
+ Puppet::Network::HttpPool.expects(:http_instance).returns(connection)
55
45
  end
56
46
 
57
47
  it "should use the path specified by the 'reporturl' setting" do
58
- http.expects(:post).with {|path, data, headers|
59
- path.should == URI.parse(Puppet[:reporturl]).path
60
- }.returns(httpok)
48
+ report_path = URI.parse(Puppet[:reporturl]).path
49
+ connection.expects(:post).with(report_path, anything, anything).returns(httpok)
61
50
 
62
51
  subject.process
63
52
  end
64
53
 
65
54
  it "should give the body as the report as YAML" do
66
- http.expects(:post).with {|path, data, headers|
67
- data.should == subject.to_yaml
68
- }.returns(httpok)
55
+ connection.expects(:post).with(anything, subject.to_yaml, anything).returns(httpok)
69
56
 
70
57
  subject.process
71
58
  end
72
59
 
73
60
  it "should set content-type to 'application/x-yaml'" do
74
- http.expects(:post).with {|path, data, headers|
75
- headers["Content-Type"].should == "application/x-yaml"
76
- }.returns(httpok)
61
+ connection.expects(:post).with(anything, anything, has_entry("Content-Type" => "application/x-yaml")).returns(httpok)
77
62
 
78
63
  subject.process
79
64
  end
@@ -82,7 +67,7 @@ describe processor do
82
67
  if code.to_i >= 200 and code.to_i < 300
83
68
  it "should succeed on http code #{code}" do
84
69
  response = klass.new('1.1', code, '')
85
- http.expects(:post).returns(response)
70
+ connection.expects(:post).returns(response)
86
71
 
87
72
  Puppet.expects(:err).never
88
73
  subject.process
@@ -92,7 +77,7 @@ describe processor do
92
77
  if code.to_i >= 300 && ![301, 302, 307].include?(code.to_i)
93
78
  it "should log error on http code #{code}" do
94
79
  response = klass.new('1.1', code, '')
95
- http.expects(:post).returns(response)
80
+ connection.expects(:post).returns(response)
96
81
 
97
82
  Puppet.expects(:err)
98
83
  subject.process
@@ -47,7 +47,7 @@ describe processor do
47
47
 
48
48
  it "rejects invalid hostnames" do
49
49
  @report.host = ".."
50
- FileTest.expects(:exists?).never
50
+ Puppet::FileSystem::File.expects(:exist?).never
51
51
  Tempfile.expects(:new).never
52
52
  expect { @report.process }.to raise_error(ArgumentError, /Invalid node/)
53
53
  end
@@ -55,7 +55,7 @@ describe processor do
55
55
 
56
56
  describe "::destroy" do
57
57
  it "rejects invalid hostnames" do
58
- File.expects(:unlink).never
58
+ Puppet::FileSystem::File.expects(:unlink).never
59
59
  expect { processor.destroy("..") }.to raise_error(ArgumentError, /Invalid node/)
60
60
  end
61
61
  end
@@ -1,5 +1,18 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+
5
+ # the json-schema gem doesn't support windows
6
+ if not Puppet.features.microsoft_windows?
7
+ CATALOG_SCHEMA = JSON.parse(File.read(File.join(File.dirname(__FILE__), '../../../api/schemas/catalog.json')))
8
+
9
+ describe "catalog schema" do
10
+ it "should validate against the json meta-schema" do
11
+ JSON::Validator.validate!(JSON_META_SCHEMA, CATALOG_SCHEMA)
12
+ end
13
+ end
14
+
15
+ end
3
16
 
4
17
  describe Puppet::Resource::Catalog, "when compiling" do
5
18
  include PuppetSpec::Files
@@ -86,26 +99,28 @@ describe Puppet::Resource::Catalog, "when compiling" do
86
99
  it "should accept tags" do
87
100
  config = Puppet::Resource::Catalog.new("mynode")
88
101
  config.tag("one")
89
- config.tags.should == %w{one}
102
+ config.should be_tagged("one")
90
103
  end
91
104
 
92
105
  it "should accept multiple tags at once" do
93
106
  config = Puppet::Resource::Catalog.new("mynode")
94
107
  config.tag("one", "two")
95
- config.tags.should == %w{one two}
108
+ config.should be_tagged("one")
109
+ config.should be_tagged("two")
96
110
  end
97
111
 
98
112
  it "should convert all tags to strings" do
99
113
  config = Puppet::Resource::Catalog.new("mynode")
100
114
  config.tag("one", :two)
101
- config.tags.should == %w{one two}
115
+ config.should be_tagged("one")
116
+ config.should be_tagged("two")
102
117
  end
103
118
 
104
119
  it "should tag with both the qualified name and the split name" do
105
120
  config = Puppet::Resource::Catalog.new("mynode")
106
121
  config.tag("one::two")
107
- config.tags.include?("one").should be_true
108
- config.tags.include?("one::two").should be_true
122
+ config.should be_tagged("one")
123
+ config.should be_tagged("one::two")
109
124
  end
110
125
 
111
126
  it "should accept classes" do
@@ -119,7 +134,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
119
134
  it "should tag itself with passed class names" do
120
135
  config = Puppet::Resource::Catalog.new("mynode")
121
136
  config.add_class("one")
122
- config.tags.should == %w{one}
137
+ config.should be_tagged("one")
123
138
  end
124
139
  end
125
140
 
@@ -204,12 +219,12 @@ describe Puppet::Resource::Catalog, "when compiling" do
204
219
 
205
220
  @r1 = stub_everything 'r1', :ref => "File[/a]"
206
221
  @r1.stubs(:respond_to?).with(:ref).returns(true)
207
- @r1.stubs(:dup).returns(@r1)
222
+ @r1.stubs(:copy_as_resource).returns(@r1)
208
223
  @r1.stubs(:is_a?).with(Puppet::Resource).returns(true)
209
224
 
210
225
  @r2 = stub_everything 'r2', :ref => "File[/b]"
211
226
  @r2.stubs(:respond_to?).with(:ref).returns(true)
212
- @r2.stubs(:dup).returns(@r2)
227
+ @r2.stubs(:copy_as_resource).returns(@r2)
213
228
  @r2.stubs(:is_a?).with(Puppet::Resource).returns(true)
214
229
 
215
230
  @resources = [@r1,@r2]
@@ -720,6 +735,60 @@ describe Puppet::Resource::Catalog, "when compiling" do
720
735
  end
721
736
  end
722
737
 
738
+ describe Puppet::Resource::Catalog, "when converting a resource catalog to pson" do
739
+ include PuppetSpec::Compiler
740
+
741
+ def validate_json_for_catalog(catalog)
742
+ JSON::Validator.validate!(CATALOG_SCHEMA, catalog.to_pson)
743
+ end
744
+
745
+ it "should validate an empty catalog against the schema", :unless => Puppet.features.microsoft_windows? do
746
+ empty_catalog = compile_to_catalog("")
747
+ validate_json_for_catalog(empty_catalog)
748
+ end
749
+
750
+ it "should validate a noop catalog against the schema", :unless => Puppet.features.microsoft_windows? do
751
+ noop_catalog = compile_to_catalog("create_resources('file', {})")
752
+ validate_json_for_catalog(noop_catalog)
753
+ end
754
+
755
+ it "should validate a single resource catalog against the schema", :unless => Puppet.features.microsoft_windows? do
756
+ catalog = compile_to_catalog("create_resources('file', {'/etc/foo'=>{'ensure'=>'present'}})")
757
+ validate_json_for_catalog(catalog)
758
+ end
759
+
760
+ it "should validate a virtual resource catalog against the schema", :unless => Puppet.features.microsoft_windows? do
761
+ catalog = compile_to_catalog("create_resources('@file', {'/etc/foo'=>{'ensure'=>'present'}})\nrealize(File['/etc/foo'])")
762
+ validate_json_for_catalog(catalog)
763
+ end
764
+
765
+ it "should validate a single exported resource catalog against the schema", :unless => Puppet.features.microsoft_windows? do
766
+ catalog = compile_to_catalog("create_resources('@@file', {'/etc/foo'=>{'ensure'=>'present'}})")
767
+ validate_json_for_catalog(catalog)
768
+ end
769
+
770
+ it "should validate a two resource catalog against the schema", :unless => Puppet.features.microsoft_windows? do
771
+ catalog = compile_to_catalog("create_resources('notify', {'foo'=>{'message'=>'one'}, 'bar'=>{'message'=>'two'}})")
772
+ validate_json_for_catalog(catalog)
773
+ end
774
+
775
+ it "should validate a two parameter class catalog against the schema", :unless => Puppet.features.microsoft_windows? do
776
+ catalog = compile_to_catalog(<<-MANIFEST)
777
+ class multi_param_class ($one, $two) {
778
+ notify {'foo':
779
+ message => "One is $one, two is $two",
780
+ }
781
+ }
782
+
783
+ class {'multi_param_class':
784
+ one => 'hello',
785
+ two => 'world',
786
+ }
787
+ MANIFEST
788
+ validate_json_for_catalog(catalog)
789
+ end
790
+ end
791
+
723
792
  describe Puppet::Resource::Catalog, "when converting to pson" do
724
793
  before do
725
794
  @catalog = Puppet::Resource::Catalog.new("myhost")
@@ -742,11 +811,11 @@ describe Puppet::Resource::Catalog, "when converting to pson" do
742
811
  PSON.parse @catalog.to_pson
743
812
  end
744
813
 
745
- [:name, :version, :tags, :classes].each do |param|
814
+ [:name, :version, :classes].each do |param|
746
815
  it "should set its #{param} to the #{param} of the resource" do
747
816
  @catalog.send(param.to_s + "=", "testing") unless @catalog.send(param)
748
817
 
749
- pson_output_should { |hash| hash['data'][param.to_s] == @catalog.send(param) }
818
+ pson_output_should { |hash| hash['data'][param.to_s].should == @catalog.send(param) }
750
819
  PSON.parse @catalog.to_pson
751
820
  end
752
821
  end
@@ -815,7 +884,8 @@ describe Puppet::Resource::Catalog, "when converting from pson" do
815
884
  it "should set any provided tags on the catalog" do
816
885
  @data['tags'] = %w{one two}
817
886
  PSON.parse @pson.to_pson
818
- @catalog.tags.should == @data['tags']
887
+ @catalog.should be_tagged("one")
888
+ @catalog.should be_tagged("two")
819
889
  end
820
890
 
821
891
  it "should set any provided classes on the catalog" do