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
@@ -21,21 +21,28 @@ describe Puppet::Type.type(:file) do
21
21
  File.join(parent, 'file_testing')
22
22
  end
23
23
 
24
+ let(:dir) do
25
+ # we create a directory first so backups of :path that are stored in
26
+ # the same directory will also be removed after the tests
27
+ parent = tmpdir('file_spec')
28
+ File.join(parent, 'dir_testing')
29
+ end
30
+
24
31
  if Puppet.features.posix?
25
32
  def set_mode(mode, file)
26
33
  File.chmod(mode, file)
27
34
  end
28
35
 
29
36
  def get_mode(file)
30
- File.lstat(file).mode
37
+ Puppet::FileSystem::File.new(file).lstat.mode
31
38
  end
32
39
 
33
40
  def get_owner(file)
34
- File.lstat(file).uid
41
+ Puppet::FileSystem::File.new(file).lstat.uid
35
42
  end
36
43
 
37
44
  def get_group(file)
38
- File.lstat(file).gid
45
+ Puppet::FileSystem::File.new(file).lstat.gid
39
46
  end
40
47
  else
41
48
  class SecurityHelper
@@ -57,6 +64,10 @@ describe Puppet::Type.type(:file) do
57
64
  def get_group(file)
58
65
  SecurityHelper.get_group(file)
59
66
  end
67
+
68
+ def get_aces_for_path_by_sid(path, sid)
69
+ SecurityHelper.get_aces_for_path_by_sid(path, sid)
70
+ end
60
71
  end
61
72
 
62
73
  before do
@@ -72,7 +83,7 @@ describe Puppet::Type.type(:file) do
72
83
  status = catalog.apply.report.resource_statuses["File[#{source}]"]
73
84
  status.should_not be_failed
74
85
  status.should_not be_changed
75
- File.should_not be_exist(source)
86
+ Puppet::FileSystem::File.exist?(source).should be_false
76
87
  end
77
88
 
78
89
  describe "when ensure is absent" do
@@ -81,14 +92,14 @@ describe Puppet::Type.type(:file) do
81
92
  catalog.add_resource(described_class.new(:path => path, :ensure => :absent, :backup => :false))
82
93
  report = catalog.apply.report
83
94
  report.resource_statuses["File[#{path}]"].should_not be_failed
84
- File.should_not be_exist(path)
95
+ Puppet::FileSystem::File.exist?(path).should be_false
85
96
  end
86
97
 
87
98
  it "should do nothing if file is not present" do
88
99
  catalog.add_resource(described_class.new(:path => path, :ensure => :absent, :backup => :false))
89
100
  report = catalog.apply.report
90
101
  report.resource_statuses["File[#{path}]"].should_not be_failed
91
- File.should_not be_exist(path)
102
+ Puppet::FileSystem::File.exist?(path).should be_false
92
103
  end
93
104
 
94
105
  # issue #14599
@@ -204,7 +215,7 @@ describe Puppet::Type.type(:file) do
204
215
  end
205
216
  end
206
217
 
207
- describe "for links", :unless => Puppet.features.microsoft_windows? do
218
+ describe "for links", :if => described_class.defaultprovider.feature?(:manages_symlinks) do
208
219
  let(:link) { tmpfile('link_mode') }
209
220
 
210
221
  describe "when managing links" do
@@ -214,7 +225,7 @@ describe Puppet::Type.type(:file) do
214
225
  FileUtils.touch(link_target)
215
226
  File.chmod(0444, link_target)
216
227
 
217
- File.symlink(link_target, link)
228
+ Puppet::FileSystem::File.new(link_target).symlink(link)
218
229
  end
219
230
 
220
231
  it "should not set the executable bit on the link nor the target" do
@@ -222,8 +233,8 @@ describe Puppet::Type.type(:file) do
222
233
 
223
234
  catalog.apply
224
235
 
225
- (File.stat(link).mode & 07777) == 0666
226
- (File.lstat(link_target).mode & 07777) == 0444
236
+ (Puppet::FileSystem::File.new(link).stat.mode & 07777) == 0666
237
+ (Puppet::FileSystem::File.new(link_target).lstat.mode & 07777) == 0444
227
238
  end
228
239
 
229
240
  it "should ignore dangling symlinks (#6856)" do
@@ -232,7 +243,7 @@ describe Puppet::Type.type(:file) do
232
243
  catalog.add_resource described_class.new(:path => link, :ensure => :link, :mode => 0666, :target => link_target, :links => :manage)
233
244
  catalog.apply
234
245
 
235
- File.should_not be_exist(link)
246
+ Puppet::FileSystem::File.exist?(link).should be_false
236
247
  end
237
248
 
238
249
  it "should create a link to the target if ensure is omitted" do
@@ -240,9 +251,9 @@ describe Puppet::Type.type(:file) do
240
251
  catalog.add_resource described_class.new(:path => link, :target => link_target)
241
252
  catalog.apply
242
253
 
243
- File.should be_exist link
244
- File.lstat(link).ftype.should == 'link'
245
- File.readlink(link).should == link_target
254
+ Puppet::FileSystem::File.exist?(link).should be_true
255
+ Puppet::FileSystem::File.new(link).lstat.ftype.should == 'link'
256
+ Puppet::FileSystem::File.new(link).readlink().should == link_target
246
257
  end
247
258
  end
248
259
 
@@ -251,7 +262,7 @@ describe Puppet::Type.type(:file) do
251
262
  target = tmpfile('dangling')
252
263
 
253
264
  FileUtils.touch(target)
254
- File.symlink(target, link)
265
+ Puppet::FileSystem::File.new(target).symlink(link)
255
266
  File.delete(target)
256
267
 
257
268
  catalog.add_resource described_class.new(:path => path, :source => link, :mode => 0600, :links => :follow)
@@ -264,7 +275,7 @@ describe Puppet::Type.type(:file) do
264
275
  before :each do
265
276
  File.chmod(0600, link_target)
266
277
 
267
- File.symlink(link_target, link)
278
+ Puppet::FileSystem::File.new(link_target).symlink(link)
268
279
  end
269
280
 
270
281
  after :each do
@@ -327,7 +338,7 @@ describe Puppet::Type.type(:file) do
327
338
  before :each do
328
339
  FileUtils.touch(link_target)
329
340
 
330
- File.symlink(link_target, link)
341
+ Puppet::FileSystem::File.new(link_target).symlink(link)
331
342
  end
332
343
 
333
344
  it "should create the file, not a symlink (#2817, #10315)" do
@@ -357,8 +368,8 @@ describe Puppet::Type.type(:file) do
357
368
  File.chmod(0666, real_target)
358
369
 
359
370
  # link -> target -> real_target
360
- File.symlink(real_target, target)
361
- File.symlink(target, link)
371
+ Puppet::FileSystem::File.new(real_target).symlink(target)
372
+ Puppet::FileSystem::File.new(target).symlink(link)
362
373
  end
363
374
 
364
375
  after :each do
@@ -397,13 +408,13 @@ describe Puppet::Type.type(:file) do
397
408
  catalog.add_resource file
398
409
  catalog.add_resource filebucket
399
410
 
400
- File.open(file[:path], "wb") { |f| f.puts "bar" }
411
+ File.open(file[:path], "w") { |f| f.write("bar") }
401
412
 
402
- md5 = Digest::MD5.hexdigest(IO.binread(file[:path]))
413
+ md5 = Digest::MD5.hexdigest("bar")
403
414
 
404
415
  catalog.apply
405
416
 
406
- filebucket.bucket.getfile(md5).should == "bar\n"
417
+ filebucket.bucket.getfile(md5).should == "bar"
407
418
  end
408
419
 
409
420
  it "should backup files in the local directory when a backup string is provided" do
@@ -415,7 +426,7 @@ describe Puppet::Type.type(:file) do
415
426
  catalog.apply
416
427
 
417
428
  backup = file[:path] + ".bak"
418
- FileTest.should be_exist(backup)
429
+ Puppet::FileSystem::File.exist?(backup).should be_true
419
430
  File.read(backup).should == "bar\n"
420
431
  end
421
432
 
@@ -437,7 +448,7 @@ describe Puppet::Type.type(:file) do
437
448
  File.read(file[:path]).should == "bar\n"
438
449
  end
439
450
 
440
- it "should not backup symlinks", :unless => Puppet.features.microsoft_windows? do
451
+ it "should not backup symlinks", :if => described_class.defaultprovider.feature?(:manages_symlinks) do
441
452
  link = tmpfile("link")
442
453
  dest1 = tmpfile("dest1")
443
454
  dest2 = tmpfile("dest2")
@@ -447,14 +458,14 @@ describe Puppet::Type.type(:file) do
447
458
  catalog.add_resource bucket
448
459
 
449
460
  File.open(dest1, "w") { |f| f.puts "whatever" }
450
- File.symlink(dest1, link)
461
+ Puppet::FileSystem::File.new(dest1).symlink(link)
451
462
 
452
463
  md5 = Digest::MD5.hexdigest(File.read(file[:path]))
453
464
 
454
465
  catalog.apply
455
466
 
456
- File.readlink(link).should == dest2
457
- File.exist?(bucket[:path]).should be_false
467
+ Puppet::FileSystem::File.new(link).readlink().should == dest2
468
+ Puppet::FileSystem::File.exist?(bucket[:path]).should be_false
458
469
  end
459
470
 
460
471
  it "should backup directories to the local filesystem by copying the whole directory" do
@@ -574,7 +585,7 @@ describe Puppet::Type.type(:file) do
574
585
  end
575
586
  end
576
587
 
577
- it "should be able to recursively make links to other files", :unless => Puppet.features.microsoft_windows? do
588
+ it "should be able to recursively make links to other files", :if => described_class.defaultprovider.feature?(:manages_symlinks) do
578
589
  source = tmpfile("file_link_integration_source")
579
590
 
580
591
  build_path(source)
@@ -590,13 +601,13 @@ describe Puppet::Type.type(:file) do
590
601
  @dirs.each do |path|
591
602
  link_path = path.sub(source, dest)
592
603
 
593
- File.lstat(link_path).should be_directory
604
+ Puppet::FileSystem::File.new(link_path).lstat.should be_directory
594
605
  end
595
606
 
596
607
  @files.each do |path|
597
608
  link_path = path.sub(source, dest)
598
609
 
599
- File.lstat(link_path).ftype.should == "link"
610
+ Puppet::FileSystem::File.new(link_path).lstat.ftype.should == "link"
600
611
  end
601
612
  end
602
613
 
@@ -616,13 +627,13 @@ describe Puppet::Type.type(:file) do
616
627
  @dirs.each do |path|
617
628
  newpath = path.sub(source, dest)
618
629
 
619
- File.lstat(newpath).should be_directory
630
+ Puppet::FileSystem::File.new(newpath).lstat.should be_directory
620
631
  end
621
632
 
622
633
  @files.each do |path|
623
634
  newpath = path.sub(source, dest)
624
635
 
625
- File.lstat(newpath).ftype.should == "file"
636
+ Puppet::FileSystem::File.new(newpath).lstat.ftype.should == "file"
626
637
  end
627
638
  end
628
639
 
@@ -685,8 +696,8 @@ describe Puppet::Type.type(:file) do
685
696
  catalog.apply
686
697
 
687
698
  File.should be_directory(path)
688
- File.should_not be_exist(File.join(path, 'one'))
689
- File.should be_exist(File.join(path, 'three', 'four'))
699
+ Puppet::FileSystem::File.exist?(File.join(path, 'one')).should be_false
700
+ Puppet::FileSystem::File.exist?(File.join(path, 'three', 'four')).should be_true
690
701
  end
691
702
 
692
703
  it "should recursively copy an empty directory" do
@@ -707,7 +718,7 @@ describe Puppet::Type.type(:file) do
707
718
  catalog.apply
708
719
 
709
720
  File.should be_directory(path)
710
- File.should_not be_exist(File.join(path, 'a'))
721
+ Puppet::FileSystem::File.exist?(File.join(path, 'a')).should be_false
711
722
  end
712
723
 
713
724
  it "should only recurse one level" do
@@ -731,9 +742,9 @@ describe Puppet::Type.type(:file) do
731
742
 
732
743
  catalog.apply
733
744
 
734
- File.should be_exist(File.join(path, 'a'))
735
- File.should_not be_exist(File.join(path, 'a', 'b'))
736
- File.should_not be_exist(File.join(path, 'z'))
745
+ Puppet::FileSystem::File.exist?(File.join(path, 'a')).should be_true
746
+ Puppet::FileSystem::File.exist?(File.join(path, 'a', 'b')).should be_false
747
+ Puppet::FileSystem::File.exist?(File.join(path, 'z')).should be_false
737
748
  end
738
749
  end
739
750
 
@@ -830,10 +841,10 @@ describe Puppet::Type.type(:file) do
830
841
  catalog.add_resource obj
831
842
  catalog.apply
832
843
 
833
- File.should be_exist(File.join(path, 'a'))
834
- File.should_not be_exist(File.join(path, 'a', 'b'))
835
- File.should be_exist(File.join(path, 'z'))
836
- File.should_not be_exist(File.join(path, 'z', 'y'))
844
+ Puppet::FileSystem::File.exist?(File.join(path, 'a')).should be_true
845
+ Puppet::FileSystem::File.exist?(File.join(path, 'a', 'b')).should be_false
846
+ Puppet::FileSystem::File.exist?(File.join(path, 'z')).should be_true
847
+ Puppet::FileSystem::File.exist?(File.join(path, 'z', 'y')).should be_false
837
848
  end
838
849
  end
839
850
  end
@@ -897,7 +908,7 @@ describe Puppet::Type.type(:file) do
897
908
 
898
909
  expected_mode = Puppet.features.microsoft_windows? ? 0644 : 0755
899
910
  File.read(dest).should == "foo"
900
- (File.stat(dest).mode & 007777).should == expected_mode
911
+ (Puppet::FileSystem::File.new(dest).stat.mode & 007777).should == expected_mode
901
912
  end
902
913
 
903
914
  it "should be able to copy individual files even if recurse has been specified" do
@@ -949,7 +960,7 @@ describe Puppet::Type.type(:file) do
949
960
  catalog.add_resource file
950
961
  catalog.apply
951
962
 
952
- File.should_not be_exist(dest)
963
+ Puppet::FileSystem::File.exist?(dest).should be_false
953
964
  end
954
965
 
955
966
  describe "when sourcing" do
@@ -991,6 +1002,38 @@ describe Puppet::Type.type(:file) do
991
1002
  end
992
1003
 
993
1004
  describe "on Windows systems", :if => Puppet.features.microsoft_windows? do
1005
+ def expects_sid_granted_full_access_explicitly(path, sid)
1006
+ inherited_ace = Windows::Security::INHERITED_ACE
1007
+
1008
+ aces = get_aces_for_path_by_sid(path, sid)
1009
+ aces.should_not be_empty
1010
+
1011
+ aces.each do |ace|
1012
+ ace.mask.should == Windows::File::FILE_ALL_ACCESS
1013
+ (ace.flags & inherited_ace).should_not == inherited_ace
1014
+ end
1015
+ end
1016
+
1017
+ def expects_system_granted_full_access_explicitly(path)
1018
+ expects_sid_granted_full_access_explicitly(path, @sids[:system])
1019
+ end
1020
+
1021
+ def expects_at_least_one_inherited_ace_grants_full_access(path, sid)
1022
+ inherited_ace = Windows::Security::INHERITED_ACE
1023
+
1024
+ aces = get_aces_for_path_by_sid(path, sid)
1025
+ aces.should_not be_empty
1026
+
1027
+ aces.any? do |ace|
1028
+ ace.mask == Windows::File::FILE_ALL_ACCESS &&
1029
+ (ace.flags & inherited_ace) == inherited_ace
1030
+ end.should be_true
1031
+ end
1032
+
1033
+ def expects_at_least_one_inherited_system_ace_grants_full_access(path)
1034
+ expects_at_least_one_inherited_ace_grants_full_access(path, @sids[:system])
1035
+ end
1036
+
994
1037
  it "should provide valid default values when ACLs are not supported" do
995
1038
  Puppet::Util::Windows::Security.stubs(:supports_acl?).with(source).returns false
996
1039
 
@@ -1008,6 +1051,205 @@ describe Puppet::Type.type(:file) do
1008
1051
  get_group(path).should =~ /^S\-1\-0\-0.*$/
1009
1052
  get_mode(path).should == 0644
1010
1053
  end
1054
+
1055
+ describe "when processing SYSTEM ACEs" do
1056
+ before do
1057
+ @sids = {
1058
+ :current_user => Puppet::Util::Windows::Security.name_to_sid(Sys::Admin.get_login),
1059
+ :system => Win32::Security::SID::LocalSystem,
1060
+ :admin => Puppet::Util::Windows::Security.name_to_sid("Administrator"),
1061
+ :guest => Puppet::Util::Windows::Security.name_to_sid("Guest"),
1062
+ :users => Win32::Security::SID::BuiltinUsers,
1063
+ :power_users => Win32::Security::SID::PowerUsers,
1064
+ :none => Win32::Security::SID::Nobody
1065
+ }
1066
+ end
1067
+
1068
+ describe "on files" do
1069
+ before :each do
1070
+ @file = described_class.new(
1071
+ :path => path,
1072
+ :ensure => :file,
1073
+ :source => source,
1074
+ :backup => false
1075
+ )
1076
+ catalog.add_resource @file
1077
+ end
1078
+
1079
+ describe "when source permissions are ignored" do
1080
+ before :each do
1081
+ @file[:source_permissions] = :ignore
1082
+ end
1083
+
1084
+ it "preserves the inherited SYSTEM ACE" do
1085
+ catalog.apply
1086
+
1087
+ expects_at_least_one_inherited_system_ace_grants_full_access(path)
1088
+ end
1089
+ end
1090
+
1091
+ describe "when permissions are insync?" do
1092
+ it "preserves the explicit SYSTEM ACE" do
1093
+ FileUtils.touch(path)
1094
+
1095
+ sd = Puppet::Util::Windows::Security.get_security_descriptor(path)
1096
+ sd.protect = true
1097
+ sd.owner = @sids[:none]
1098
+ sd.group = @sids[:none]
1099
+ Puppet::Util::Windows::Security.set_security_descriptor(source, sd)
1100
+ Puppet::Util::Windows::Security.set_security_descriptor(path, sd)
1101
+
1102
+ catalog.apply
1103
+
1104
+ expects_system_granted_full_access_explicitly(path)
1105
+ end
1106
+ end
1107
+
1108
+ describe "when permissions are not insync?" do
1109
+ before :each do
1110
+ @file[:owner] = 'None'
1111
+ @file[:group] = 'None'
1112
+ end
1113
+
1114
+ it "replaces inherited SYSTEM ACEs with an uninherited one for an existing file" do
1115
+ FileUtils.touch(path)
1116
+
1117
+ expects_at_least_one_inherited_system_ace_grants_full_access(path)
1118
+
1119
+ catalog.apply
1120
+
1121
+ expects_system_granted_full_access_explicitly(path)
1122
+ end
1123
+
1124
+ it "replaces inherited SYSTEM ACEs for a new file with an uninherited one" do
1125
+ catalog.apply
1126
+
1127
+ expects_system_granted_full_access_explicitly(path)
1128
+ end
1129
+ end
1130
+
1131
+ describe "created with SYSTEM as the group" do
1132
+ before :each do
1133
+ @file[:owner] = @sids[:users]
1134
+ @file[:group] = @sids[:system]
1135
+ @file[:mode] = 0644
1136
+
1137
+ catalog.apply
1138
+ end
1139
+
1140
+ it "should allow the user to explicitly set the mode to 4" do
1141
+ system_aces = get_aces_for_path_by_sid(path, @sids[:system])
1142
+ system_aces.should_not be_empty
1143
+
1144
+ system_aces.each do |ace|
1145
+ ace.mask.should == Windows::File::FILE_GENERIC_READ
1146
+ end
1147
+ end
1148
+
1149
+ it "prepends SYSTEM ace when changing group from system to power users" do
1150
+ @file[:group] = @sids[:power_users]
1151
+ catalog.apply
1152
+
1153
+ system_aces = get_aces_for_path_by_sid(path, @sids[:system])
1154
+ system_aces.size.should == 1
1155
+ end
1156
+ end
1157
+ end
1158
+
1159
+ describe "on directories" do
1160
+ before :each do
1161
+ @directory = described_class.new(
1162
+ :path => dir,
1163
+ :ensure => :directory
1164
+ )
1165
+ catalog.add_resource @directory
1166
+ end
1167
+
1168
+ describe "when source permissions are ignored" do
1169
+ before :each do
1170
+ @directory[:source_permissions] = :ignore
1171
+ end
1172
+
1173
+ it "preserves the inherited SYSTEM ACE" do
1174
+ catalog.apply
1175
+
1176
+ expects_at_least_one_inherited_system_ace_grants_full_access(dir)
1177
+ end
1178
+ end
1179
+
1180
+ describe "when permissions are insync?" do
1181
+ it "preserves the explicit SYSTEM ACE" do
1182
+ Dir.mkdir(dir)
1183
+
1184
+ source_dir = tmpdir('source_dir')
1185
+ @directory[:source] = source_dir
1186
+
1187
+ sd = Puppet::Util::Windows::Security.get_security_descriptor(source_dir)
1188
+ sd.protect = true
1189
+ sd.owner = @sids[:none]
1190
+ sd.group = @sids[:none]
1191
+ Puppet::Util::Windows::Security.set_security_descriptor(source_dir, sd)
1192
+ Puppet::Util::Windows::Security.set_security_descriptor(dir, sd)
1193
+
1194
+ catalog.apply
1195
+
1196
+ expects_system_granted_full_access_explicitly(dir)
1197
+ end
1198
+ end
1199
+
1200
+ describe "when permissions are not insync?" do
1201
+ before :each do
1202
+ @directory[:owner] = 'None'
1203
+ @directory[:group] = 'None'
1204
+ @directory[:mode] = 0444
1205
+ end
1206
+
1207
+ it "replaces inherited SYSTEM ACEs with an uninherited one for an existing directory" do
1208
+ FileUtils.mkdir(dir)
1209
+
1210
+ expects_at_least_one_inherited_system_ace_grants_full_access(dir)
1211
+
1212
+ catalog.apply
1213
+
1214
+ expects_system_granted_full_access_explicitly(dir)
1215
+ end
1216
+
1217
+ it "replaces inherited SYSTEM ACEs with an uninherited one for an existing directory" do
1218
+ catalog.apply
1219
+
1220
+ expects_system_granted_full_access_explicitly(dir)
1221
+ end
1222
+
1223
+ describe "created with SYSTEM as the group" do
1224
+ before :each do
1225
+ @directory[:owner] = @sids[:users]
1226
+ @directory[:group] = @sids[:system]
1227
+ @directory[:mode] = 0644
1228
+
1229
+ catalog.apply
1230
+ end
1231
+
1232
+ it "should allow the user to explicitly set the mode to 4" do
1233
+ system_aces = get_aces_for_path_by_sid(dir, @sids[:system])
1234
+ system_aces.should_not be_empty
1235
+
1236
+ system_aces.each do |ace|
1237
+ # unlike files, Puppet sets execute bit on directories that are readable
1238
+ ace.mask.should == Windows::File::FILE_GENERIC_READ | Windows::File::FILE_GENERIC_EXECUTE
1239
+ end
1240
+ end
1241
+
1242
+ it "prepends SYSTEM ace when changing group from system to power users" do
1243
+ @directory[:group] = @sids[:power_users]
1244
+ catalog.apply
1245
+
1246
+ system_aces = get_aces_for_path_by_sid(dir, @sids[:system])
1247
+ system_aces.size.should == 1
1248
+ end
1249
+ end
1250
+ end
1251
+ end
1252
+ end
1011
1253
  end
1012
1254
  end
1013
1255
 
@@ -1056,7 +1298,7 @@ describe Puppet::Type.type(:file) do
1056
1298
  end
1057
1299
 
1058
1300
  it "should purge files that are neither remote nor otherwise managed" do
1059
- FileTest.should_not be_exist(@purgee)
1301
+ Puppet::FileSystem::File.exist?(@purgee).should be_false
1060
1302
  end
1061
1303
  end
1062
1304