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
@@ -308,7 +308,7 @@ describe Puppet::Transaction do
308
308
  transaction.evaluate
309
309
 
310
310
  generated.each do |res|
311
- res.must be_tagged(generator.tags)
311
+ res.must be_tagged(*generator.tags)
312
312
  end
313
313
  end
314
314
  end
@@ -404,7 +404,6 @@ describe Puppet::Transaction do
404
404
  it "should otherwise let the resource determine if it is missing tags" do
405
405
  tags = ['one', 'two']
406
406
  @transaction.tags = tags
407
- @resource.expects(:tagged?).with(*tags).returns(false)
408
407
  @transaction.should be_missing_tags(@resource)
409
408
  end
410
409
  end
@@ -478,6 +477,48 @@ describe Puppet::Transaction do
478
477
  end
479
478
  end
480
479
 
480
+ describe "during teardown" do
481
+ before :each do
482
+ @catalog = Puppet::Resource::Catalog.new
483
+ @transaction = Puppet::Transaction.new(@catalog, nil, Puppet::Graph::RandomPrioritizer.new)
484
+ end
485
+
486
+ it "should call ::post_resource_eval on provider classes that support it" do
487
+ @resource = Puppet::Type.type(:notify).new :title => "foo"
488
+ @catalog.add_resource @resource
489
+
490
+ # 'expects' will cause 'respond_to?(:post_resource_eval)' to return true
491
+ @resource.provider.class.expects(:post_resource_eval)
492
+ @transaction.evaluate
493
+ end
494
+
495
+ it "should call ::post_resource_eval even if other providers' ::post_resource_eval fails" do
496
+ @resource3 = Puppet::Type.type(:user).new :title => "bloo"
497
+ @resource3.provider.class.stubs(:post_resource_eval).raises
498
+ @resource4 = Puppet::Type.type(:notify).new :title => "blob"
499
+ @resource4.provider.class.stubs(:post_resource_eval).raises
500
+ @catalog.add_resource @resource3
501
+ @catalog.add_resource @resource4
502
+
503
+ # ruby's Set does not guarantee ordering, so both resource3 and resource4
504
+ # need to expect post_resource_eval, rather than just the 'first' one.
505
+ @resource3.provider.class.expects(:post_resource_eval)
506
+ @resource4.provider.class.expects(:post_resource_eval)
507
+
508
+ @transaction.evaluate
509
+ end
510
+
511
+ it "should call ::post_resource_eval even if one of the resources fails" do
512
+ @resource3 = Puppet::Type.type(:notify).new :title => "bloo"
513
+ @resource3.stubs(:retrieve_resource).raises
514
+ @catalog.add_resource @resource3
515
+
516
+ @resource3.provider.class.expects(:post_resource_eval)
517
+
518
+ @transaction.evaluate
519
+ end
520
+ end
521
+
481
522
  describe 'when checking application run state' do
482
523
  before do
483
524
  @catalog = Puppet::Resource::Catalog.new
@@ -594,32 +635,37 @@ describe Puppet::Transaction, " when determining tags" do
594
635
 
595
636
  it "should default to the tags specified in the :tags setting" do
596
637
  Puppet[:tags] = "one"
597
- @transaction.tags.should == %w{one}
638
+ @transaction.should be_tagged("one")
598
639
  end
599
640
 
600
641
  it "should split tags based on ','" do
601
642
  Puppet[:tags] = "one,two"
602
- @transaction.tags.should == %w{one two}
643
+ @transaction.should be_tagged("one")
644
+ @transaction.should be_tagged("two")
603
645
  end
604
646
 
605
647
  it "should use any tags set after creation" do
606
648
  Puppet[:tags] = ""
607
649
  @transaction.tags = %w{one two}
608
- @transaction.tags.should == %w{one two}
650
+ @transaction.should be_tagged("one")
651
+ @transaction.should be_tagged("two")
609
652
  end
610
653
 
611
654
  it "should always convert assigned tags to an array" do
612
655
  @transaction.tags = "one::two"
613
- @transaction.tags.should == %w{one::two}
656
+ @transaction.should be_tagged("one::two")
614
657
  end
615
658
 
616
659
  it "should accept a comma-delimited string" do
617
660
  @transaction.tags = "one, two"
618
- @transaction.tags.should == %w{one two}
661
+ @transaction.should be_tagged("one")
662
+ @transaction.should be_tagged("two")
619
663
  end
620
664
 
621
665
  it "should accept an empty string" do
666
+ @transaction.tags = "one, two"
667
+ @transaction.should be_tagged("one")
622
668
  @transaction.tags = ""
623
- @transaction.tags.should == []
669
+ @transaction.should_not be_tagged("one")
624
670
  end
625
671
  end
@@ -42,8 +42,8 @@ describe component do
42
42
  component.new(:name => "Class[foo]").pathbuilder.must == ["Foo"]
43
43
  end
44
44
 
45
- it "should produce an empty string if the component models the 'main' class" do
46
- component.new(:name => "Class[main]").pathbuilder.must == [""]
45
+ it "should produce the class name even for the class named main" do
46
+ component.new(:name => "Class[main]").pathbuilder.must == ["Main"]
47
47
  end
48
48
 
49
49
  it "should produce a resource reference if the component does not model a class" do
@@ -8,6 +8,8 @@ describe Puppet::Type.type(:exec) do
8
8
  Puppet.features.stubs(:root?).returns(true)
9
9
 
10
10
  output = rest.delete(:output) || ''
11
+
12
+ output = Puppet::Util::Execution::ProcessOutput.new(output, exitstatus)
11
13
  tries = rest[:tries] || 1
12
14
 
13
15
  args = {
@@ -21,14 +23,12 @@ describe Puppet::Type.type(:exec) do
21
23
  exec = Puppet::Type.type(:exec).new(args)
22
24
 
23
25
  status = stub "process", :exitstatus => exitstatus
24
- Puppet::Util::SUIDManager.expects(:run_and_capture).times(tries).
26
+ Puppet::Util::Execution.expects(:execute).times(tries).
25
27
  with() { |*args|
26
28
  args[0] == command &&
27
- args[1] == nil &&
28
- args[2] == nil &&
29
- args[3][:override_locale] == false &&
30
- args[3].has_key?(:custom_environment)
31
- } .returns([output, status])
29
+ args[1][:override_locale] == false &&
30
+ args[1].has_key?(:custom_environment)
31
+ }.returns(output)
32
32
 
33
33
  return exec
34
34
  end
@@ -61,7 +61,7 @@ describe Puppet::Type.type(:exec) do
61
61
  end
62
62
 
63
63
  describe "when execing" do
64
- it "should use the 'run_and_capture' method to exec" do
64
+ it "should use the 'execute' method to exec" do
65
65
  exec_tester("true").refresh.should == :executed_command
66
66
  end
67
67
 
@@ -753,4 +753,11 @@ describe Puppet::Type.type(:exec) do
753
753
  type.new(:command => abs, :path => path).must be
754
754
  end
755
755
  end
756
+ describe "when providing a umask" do
757
+ it "should fail if an invalid umask is used" do
758
+ resource = Puppet::Type.type(:exec).new :command => @command
759
+ expect { resource[:umask] = '0028'}.to raise_error(Puppet::ResourceError, /umask specification is invalid/)
760
+ expect { resource[:umask] = '28' }.to raise_error(Puppet::ResourceError, /umask specification is invalid/)
761
+ end
762
+ end
756
763
  end
@@ -84,6 +84,13 @@ describe content do
84
84
 
85
85
  @content.should.must == string
86
86
  end
87
+
88
+ it "should convert the value to ASCII-8BIT", :if => "".respond_to?(:encode) do
89
+ @content = content.new(:resource => @resource)
90
+ @content.should= "Let's make a \u{2603}"
91
+
92
+ @content.actual_content.should == "Let's make a \xE2\x98\x83".force_encoding(Encoding::ASCII_8BIT)
93
+ end
87
94
  end
88
95
 
89
96
  describe "when retrieving the current content" do
@@ -329,8 +336,10 @@ describe content do
329
336
  end
330
337
 
331
338
  it "should copy content from the source to the file" do
339
+ dest_file = Puppet::FileSystem::File.new(@filename)
332
340
  @resource.write(@source)
333
- IO.binread(@filename).should == @source_content
341
+
342
+ dest_file.binread.should == @source_content
334
343
  end
335
344
 
336
345
  it "should return the checksum computed" do
@@ -358,8 +367,10 @@ describe content do
358
367
  end
359
368
 
360
369
  it "should write the contents to the file" do
370
+ dest_file = Puppet::FileSystem::File.new(@filename)
361
371
  @resource.write(@source)
362
- IO.binread(@filename).should == @source_content
372
+
373
+ dest_file.binread.should == @source_content
363
374
  end
364
375
 
365
376
  it "should not write anything if source is not found" do
@@ -16,7 +16,7 @@ describe Puppet::Type.type(:file).attrclass(:ctime) do
16
16
  @resource[:audit] = [:ctime]
17
17
 
18
18
  # this .to_resource audit behavior is magical :-(
19
- @resource.to_resource[:ctime].should == File.stat(@filename).ctime
19
+ @resource.to_resource[:ctime].should == Puppet::FileSystem::File.new(@filename).stat.ctime
20
20
  end
21
21
 
22
22
  it "should return absent if auditing an absent file" do
@@ -18,6 +18,10 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
18
18
  expect { mode.value = '0755' }.not_to raise_error
19
19
  end
20
20
 
21
+ it "should accept valid symbolic strings" do
22
+ expect { mode.value = 'g+w,u-x' }.not_to raise_error
23
+ end
24
+
21
25
  it "should not accept strings other than octal numbers" do
22
26
  expect do
23
27
  mode.value = 'readable please!'
@@ -35,6 +39,10 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
35
39
  mode.munge('0644').should == '644'
36
40
  end
37
41
 
42
+ it "should accept symbolic strings as arguments and return them intact" do
43
+ mode.munge('u=rw,go=r').should == 'u=rw,go=r'
44
+ end
45
+
38
46
  it "should accept integers are arguments" do
39
47
  mode.munge(0644).should == '644'
40
48
  end
@@ -72,11 +80,34 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
72
80
  mode.must_not be_insync('755')
73
81
  end
74
82
 
75
- it "should return true if the file is a link and we are managing links", :unless => Puppet.features.microsoft_windows? do
76
- File.symlink('anything', path)
83
+ it "should return true if the file is a link and we are managing links", :if => Puppet.features.manages_symlinks? do
84
+ Puppet::FileSystem::File.new('anything').symlink(path)
77
85
 
78
86
  mode.must be_insync('644')
79
87
  end
88
+
89
+ describe "with a symbolic mode" do
90
+ let(:resource_sym) { Puppet::Type.type(:file).new :path => path, :mode => 'u+w,g-w' }
91
+ let(:mode_sym) { resource_sym.property(:mode) }
92
+
93
+ it "should return true if the mode matches, regardless of other bits" do
94
+ FileUtils.touch(path)
95
+
96
+ mode_sym.must be_insync('644')
97
+ end
98
+
99
+ it "should return false if the mode requires 0's where there are 1's" do
100
+ FileUtils.touch(path)
101
+
102
+ mode_sym.must_not be_insync('624')
103
+ end
104
+
105
+ it "should return false if the mode requires 1's where there are 0's" do
106
+ FileUtils.touch(path)
107
+
108
+ mode_sym.must_not be_insync('044')
109
+ end
110
+ end
80
111
  end
81
112
 
82
113
  describe "#retrieve" do
@@ -145,4 +176,19 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
145
176
  end
146
177
  end
147
178
  end
179
+
180
+ describe "#sync with a symbolic mode" do
181
+ let(:resource_sym) { Puppet::Type.type(:file).new :path => path, :mode => 'u+w,g-w' }
182
+ let(:mode_sym) { resource_sym.property(:mode) }
183
+
184
+ before { FileUtils.touch(path) }
185
+
186
+ it "changes only the requested bits" do
187
+ # lower nibble must be set to 4 for the sake of passing on Windows
188
+ FileUtils.chmod 0464, path
189
+ mode_sym.sync
190
+ file = Puppet::FileSystem::File.new(path)
191
+ (file.stat.mode & 0777).to_s(8).should == "644"
192
+ end
193
+ end
148
194
  end
@@ -16,7 +16,7 @@ describe Puppet::Type.type(:file).attrclass(:mtime) do
16
16
  @resource[:audit] = [:mtime]
17
17
 
18
18
  # this .to_resource audit behavior is magical :-(
19
- @resource.to_resource[:mtime].should == File.stat(@filename).mtime
19
+ @resource.to_resource[:mtime].should == Puppet::FileSystem::File.new(@filename).stat.mtime
20
20
  end
21
21
 
22
22
  it "should return absent if auditing an absent file" do
@@ -154,11 +154,10 @@ describe Puppet::Type.type(:file).attrclass(:source) do
154
154
 
155
155
  describe "when copying the source values" do
156
156
  before do
157
-
158
157
  @resource = Puppet::Type.type(:file).new :path => @foobar
159
158
 
160
159
  @source = source.new(:resource => @resource)
161
- @metadata = stub 'metadata', :owner => 100, :group => 200, :mode => 123, :checksum => "{md5}asdfasdf", :ftype => "file", :source => @foobar
160
+ @metadata = stub 'metadata', :owner => 100, :group => 200, :mode => "173", :checksum => "{md5}asdfasdf", :ftype => "file", :source => @foobar
162
161
  @source.stubs(:metadata).returns @metadata
163
162
 
164
163
  Puppet.features.stubs(:root?).returns true
@@ -202,7 +201,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
202
201
  @resource[:content].must == @metadata.checksum
203
202
  end
204
203
 
205
- it "should not copy the metadata's owner to the resource if it is already set" do
204
+ it "should not copy the metadata's owner, group, checksum and mode to the resource if they are already set" do
206
205
  @resource[:owner] = 1
207
206
  @resource[:group] = 2
208
207
  @resource[:mode] = 3
@@ -217,26 +216,153 @@ describe Puppet::Type.type(:file).attrclass(:source) do
217
216
  end
218
217
 
219
218
  describe "and puppet is not running as root" do
220
- it "should not try to set the owner" do
221
- Puppet.features.expects(:root?).returns false
219
+ before do
220
+ Puppet.features.stubs(:root?).returns false
221
+ end
222
222
 
223
+ it "should not try to set the owner" do
223
224
  @source.copy_source_values
224
225
  @resource[:owner].should be_nil
225
226
  end
227
+
228
+ it "should not try to set the group" do
229
+ @source.copy_source_values
230
+ @resource[:group].should be_nil
231
+ end
232
+ end
233
+
234
+ context "when source_permissions is `use_when_creating`" do
235
+ before :each do
236
+ @resource[:source_permissions] = "use_when_creating"
237
+ Puppet.features.expects(:root?).returns true
238
+ @source.stubs(:local?).returns(false)
239
+ end
240
+
241
+ context "when managing a new file" do
242
+ it "should copy owner and group from local sources" do
243
+ @source.stubs(:local?).returns true
244
+
245
+ @source.copy_source_values
246
+
247
+ @resource[:owner].must == 100
248
+ @resource[:group].must == 200
249
+ @resource[:mode].must == "173"
250
+ end
251
+
252
+ it "copies the remote owner" do
253
+ @source.copy_source_values
254
+
255
+ @resource[:owner].must == 100
256
+ end
257
+
258
+ it "copies the remote group" do
259
+ @source.copy_source_values
260
+
261
+ @resource[:group].must == 200
262
+ end
263
+
264
+ it "copies the remote mode" do
265
+ @source.copy_source_values
266
+
267
+ @resource[:mode].must == "173"
268
+ end
269
+ end
270
+
271
+ context "when managing an existing file" do
272
+ before :each do
273
+ Puppet::FileSystem::File.stubs(:exist?).with(@resource[:path]).returns(true)
274
+ end
275
+
276
+ it "should not copy owner, group or mode from local sources" do
277
+ @source.stubs(:local?).returns true
278
+
279
+ @source.copy_source_values
280
+
281
+ @resource[:owner].must be_nil
282
+ @resource[:group].must be_nil
283
+ @resource[:mode].must be_nil
284
+ end
285
+
286
+ it "preserves the local owner" do
287
+ @source.copy_source_values
288
+
289
+ @resource[:owner].must be_nil
290
+ end
291
+
292
+ it "preserves the local group" do
293
+ @source.copy_source_values
294
+
295
+ @resource[:group].must be_nil
296
+ end
297
+
298
+ it "preserves the local mode" do
299
+ @source.copy_source_values
300
+
301
+ @resource[:mode].must be_nil
302
+ end
303
+ end
304
+ end
305
+
306
+ context "when source_permissions is `ignore`" do
307
+ before :each do
308
+ @resource[:source_permissions] = "ignore"
309
+ @source.stubs(:local?).returns(false)
310
+ Puppet.features.expects(:root?).returns true
311
+ end
312
+
313
+ it "should not copy owner, group or mode from local sources" do
314
+ @source.stubs(:local?).returns true
315
+
316
+ @source.copy_source_values
317
+
318
+ @resource[:owner].must be_nil
319
+ @resource[:group].must be_nil
320
+ @resource[:mode].must be_nil
321
+ end
322
+
323
+ it "preserves the local owner" do
324
+ @source.copy_source_values
325
+
326
+ @resource[:owner].must be_nil
327
+ end
328
+
329
+ it "preserves the local group" do
330
+ @source.copy_source_values
331
+
332
+ @resource[:group].must be_nil
333
+ end
334
+
335
+ it "preserves the local mode" do
336
+ @source.copy_source_values
337
+
338
+ @resource[:mode].must be_nil
339
+ end
226
340
  end
227
341
 
228
342
  describe "on Windows" do
229
343
  before :each do
230
344
  Puppet.features.stubs(:microsoft_windows?).returns true
231
345
  end
346
+ let(:deprecation_message) { "Copying owner/mode/group from the" <<
347
+ " source file on Windows is deprecated;" <<
348
+ " use source_permissions => ignore." }
232
349
 
233
- it "should not copy owner and group from remote sources" do
350
+ it "should copy only mode from remote sources" do
234
351
  @source.stubs(:local?).returns false
235
352
 
236
353
  @source.copy_source_values
237
354
 
238
355
  @resource[:owner].must be_nil
239
356
  @resource[:group].must be_nil
357
+ @resource[:mode].must == "173"
358
+ end
359
+
360
+ it "should copy mode from remote sources" do
361
+ @source.stubs(:local?).returns false
362
+
363
+ @source.copy_source_values
364
+
365
+ @resource[:mode].must == "173"
240
366
  end
241
367
 
242
368
  it "should copy owner and group from local sources" do
@@ -246,6 +372,51 @@ describe Puppet::Type.type(:file).attrclass(:source) do
246
372
 
247
373
  @resource[:owner].must == 100
248
374
  @resource[:group].must == 200
375
+ @resource[:mode].must == "173"
376
+ end
377
+
378
+ it "should issue deprecation warning when copying metadata from remote sources when group, owner, and mode are unspecified" do
379
+ @source.stubs(:local?).returns false
380
+ Puppet.expects(:deprecation_warning).with(deprecation_message).at_least_once
381
+
382
+ @source.copy_source_values
383
+ end
384
+
385
+ it "should issue deprecation warning when copying metadata from remote sources if only user is unspecified" do
386
+ @source.stubs(:local?).returns false
387
+ Puppet.expects(:deprecation_warning).with(deprecation_message).at_least_once
388
+ @resource[:group] = 2
389
+ @resource[:mode] = 3
390
+
391
+ @source.copy_source_values
392
+ end
393
+
394
+ it "should issue deprecation warning when copying metadata from remote sources if only group is unspecified" do
395
+ @source.stubs(:local?).returns false
396
+ Puppet.expects(:deprecation_warning).with(deprecation_message).at_least_once
397
+ @resource[:owner] = 1
398
+ @resource[:mode] = 3
399
+
400
+ @source.copy_source_values
401
+ end
402
+
403
+ it "should issue deprecation warning when copying metadata from remote sources if only mode is unspecified" do
404
+ @source.stubs(:local?).returns false
405
+ Puppet.expects(:deprecation_warning).with(deprecation_message).at_least_once
406
+ @resource[:owner] = 1
407
+ @resource[:group] = 2
408
+
409
+ @source.copy_source_values
410
+ end
411
+
412
+ it "should not issue deprecation warning when copying metadata from remote sources if group, owner, and mode are all specified" do
413
+ @source.stubs(:local?).returns false
414
+ Puppet.expects(:deprecation_warning).with(deprecation_message).never
415
+ @resource[:owner] = 1
416
+ @resource[:group] = 2
417
+ @resource[:mode] = 3
418
+
419
+ @source.copy_source_values
249
420
  end
250
421
  end
251
422
  end
@@ -358,5 +529,4 @@ describe Puppet::Type.type(:file).attrclass(:source) do
358
529
  end
359
530
  end
360
531
  end
361
-
362
532
  end