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
@@ -51,7 +51,7 @@ describe Puppet::Type.type(:package) do
51
51
  :clear => nil,
52
52
  :validate_source => nil
53
53
  )
54
- Puppet::Type.type(:package).defaultprovider.expects(:new).returns(@provider)
54
+ Puppet::Type.type(:package).defaultprovider.stubs(:new).returns(@provider)
55
55
  end
56
56
 
57
57
  it "should support :present as a value to :ensure" do
@@ -100,6 +100,12 @@ describe Puppet::Type.type(:package) do
100
100
  it "should accept any string as an argument to :source" do
101
101
  expect { Puppet::Type.type(:package).new(:name => "yay", :source => "stuff") }.to_not raise_error
102
102
  end
103
+
104
+ it "should not accept a non-string name" do
105
+ expect do
106
+ Puppet::Type.type(:package).new(:name => ["error"])
107
+ end.to raise_error(Puppet::ResourceError, /Name must be a String/)
108
+ end
103
109
  end
104
110
 
105
111
  module PackageEvaluationTesting
@@ -62,6 +62,12 @@ describe Puppet::Type.type(:schedule) do
62
62
  end
63
63
  end
64
64
 
65
+ it "should not produce default schedules when default_schedules is false" do
66
+ Puppet[:default_schedules] = false
67
+ schedules = Puppet::Type.type(:schedule).mkdefaultschedules
68
+ schedules.must have_exactly(0).items
69
+ end
70
+
65
71
  it "should produce a schedule named puppet with a period of hourly and a repeat of 2" do
66
72
  schedules = Puppet::Type.type(:schedule).mkdefaultschedules
67
73
  schedules.find { |s|
@@ -120,14 +120,14 @@ describe Puppet::Type.type(:service), "when validating attribute values" do
120
120
  end
121
121
 
122
122
  it "should split paths on '#{File::PATH_SEPARATOR}'" do
123
- FileTest.stubs(:exist?).returns(true)
123
+ Puppet::FileSystem::File.stubs(:exist?).returns(true)
124
124
  FileTest.stubs(:directory?).returns(true)
125
125
  svc = Puppet::Type.type(:service).new(:name => "yay", :path => "/one/two#{File::PATH_SEPARATOR}/three/four")
126
126
  svc[:path].should == %w{/one/two /three/four}
127
127
  end
128
128
 
129
129
  it "should accept arrays of paths joined by '#{File::PATH_SEPARATOR}'" do
130
- FileTest.stubs(:exist?).returns(true)
130
+ Puppet::FileSystem::File.stubs(:exist?).returns(true)
131
131
  FileTest.stubs(:directory?).returns(true)
132
132
  svc = Puppet::Type.type(:service).new(:name => "yay", :path => ["/one#{File::PATH_SEPARATOR}/two", "/three#{File::PATH_SEPARATOR}/four"])
133
133
  svc[:path].should == %w{/one /two /three /four}
@@ -137,7 +137,7 @@ end
137
137
  describe Puppet::Type.type(:service), "when setting default attribute values" do
138
138
  it "should default to the provider's default path if one is available" do
139
139
  FileTest.stubs(:directory?).returns(true)
140
- FileTest.stubs(:exist?).returns(true)
140
+ Puppet::FileSystem::File.stubs(:exist?).returns(true)
141
141
 
142
142
  Puppet::Type.type(:service).defaultprovider.stubs(:respond_to?).returns(true)
143
143
  Puppet::Type.type(:service).defaultprovider.stubs(:defpath).returns("testing")
@@ -10,17 +10,15 @@ describe tidy do
10
10
  before do
11
11
  @basepath = make_absolute("/what/ever")
12
12
  Puppet.settings.stubs(:use)
13
-
14
- # for an unknown reason some of these specs fails when run individually
15
- # with a failed expectation on File.lstat in the autoloader.
16
- File.stubs(:lstat)
17
13
  end
18
14
 
19
15
  it "should use :lstat when stating a file" do
20
- resource = tidy.new :path => "/foo/bar", :age => "1d"
16
+ path = '/foo/bar'
17
+ resource = tidy.new :path => path, :age => "1d"
21
18
  stat = mock 'stat'
22
- File.expects(:lstat).with("/foo/bar").returns stat
23
- resource.stat("/foo/bar").should == stat
19
+ stub_file = stub(path, :lstat => stat)
20
+ Puppet::FileSystem::File.expects(:new).with(path).returns stub_file
21
+ resource.stat(path).should == stat
24
22
  end
25
23
 
26
24
  [:age, :size, :path, :matches, :type, :recurse, :rmdirs].each do |param|
@@ -130,7 +128,8 @@ describe tidy do
130
128
  before do
131
129
  @tidy = Puppet::Type.type(:tidy).new :path => @basepath
132
130
  @stat = stub 'stat', :ftype => "directory"
133
- File.stubs(:lstat).with(@basepath).returns @stat
131
+ @stub_file = stub(@basepath, :lstat => @stat)
132
+ Puppet::FileSystem::File.stubs(:new).with(@basepath).returns @stub_file
134
133
  end
135
134
 
136
135
  describe "and generating files" do
@@ -160,7 +159,7 @@ describe tidy do
160
159
  end
161
160
 
162
161
  it "should do nothing if the targeted file does not exist" do
163
- File.expects(:lstat).with(@basepath).raises Errno::ENOENT
162
+ @stub_file.expects(:lstat).raises Errno::ENOENT
164
163
 
165
164
  @tidy.generate.should == []
166
165
  end
@@ -311,32 +310,33 @@ describe tidy do
311
310
  before do
312
311
  @tidy = Puppet::Type.type(:tidy).new :path => @basepath
313
312
  @stat = stub 'stat', :ftype => "file"
314
- File.stubs(:lstat).with(@basepath).returns @stat
313
+ @stub_file = stub(@basepath, :lstat => @stat)
314
+ Puppet::FileSystem::File.expects(:new).with(@basepath).returns @stub_file
315
315
  end
316
316
 
317
317
  it "should not try to recurse if the file does not exist" do
318
318
  @tidy[:recurse] = true
319
319
 
320
- File.stubs(:lstat).with(@basepath).returns nil
320
+ @stub_file.stubs(:lstat).returns nil
321
321
 
322
322
  @tidy.generate.should == []
323
323
  end
324
324
 
325
325
  it "should not be tidied if the file does not exist" do
326
- File.expects(:lstat).with(@basepath).raises Errno::ENOENT
326
+ @stub_file.expects(:lstat).raises Errno::ENOENT
327
327
 
328
328
  @tidy.should_not be_tidy(@basepath)
329
329
  end
330
330
 
331
331
  it "should not be tidied if the user has no access to the file" do
332
- File.expects(:lstat).with(@basepath).raises Errno::EACCES
332
+ @stub_file.expects(:lstat).raises Errno::EACCES
333
333
 
334
334
  @tidy.should_not be_tidy(@basepath)
335
335
  end
336
336
 
337
337
  it "should not be tidied if it is a directory and rmdirs is set to false" do
338
338
  stat = mock 'stat', :ftype => "directory"
339
- File.expects(:lstat).with(@basepath).returns stat
339
+ @stub_file.expects(:lstat).returns stat
340
340
 
341
341
  @tidy.should_not be_tidy(@basepath)
342
342
  end
@@ -339,6 +339,15 @@ describe Puppet::Type.type(:user) do
339
339
  end
340
340
  end
341
341
 
342
+ describe "when managing comment on Ruby 1.9", :if => String.respond_to?(:encode) do
343
+ it "should force value encoding to ASCII-8BIT" do
344
+ value = 'abcd'.encode(Encoding::UTF_8)
345
+ comment = described_class.new(:name => 'foo', :comment => value)
346
+ comment[:comment].should == 'abcd'
347
+ comment[:comment].encoding.should == Encoding::ASCII_8BIT
348
+ end
349
+ end
350
+
342
351
  describe "when manages_solaris_rbac is enabled" do
343
352
  it "should support a :role value for ensure" do
344
353
  expect { described_class.new(:name => 'foo', :ensure => :role) }.to_not raise_error
@@ -1,9 +1,10 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
-
3
+ require 'puppet_spec/compiler'
4
4
 
5
5
  describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
6
6
  include PuppetSpec::Files
7
+ include PuppetSpec::Compiler
7
8
 
8
9
  it "should be Comparable" do
9
10
  a = Puppet::Type.type(:notify).new(:name => "a")
@@ -63,6 +64,28 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
63
64
  end
64
65
  end
65
66
 
67
+ it "can retrieve all set parameters" do
68
+ resource = Puppet::Type.type(:mount).new(:name => "foo", :fstype => "bar", :pass => 1, :ensure => :present, :tag => 'foo')
69
+ params = resource.parameters_with_value
70
+ [:name, :provider, :ensure, :fstype, :pass, :dump, :target, :loglevel, :tag].each do |name|
71
+ params.should be_include(resource.parameter(name))
72
+ end
73
+ end
74
+
75
+ it "can not return any `nil` values when retrieving all set parameters" do
76
+ resource = Puppet::Type.type(:mount).new(:name => "foo", :fstype => "bar", :pass => 1, :ensure => :present, :tag => 'foo')
77
+ params = resource.parameters_with_value
78
+ params.should_not be_include(nil)
79
+ end
80
+
81
+ it "can return an iterator for all set parameters" do
82
+ resource = Puppet::Type.type(:notify).new(:name=>'foo',:message=>'bar',:tag=>'baz',:require=> "File['foo']")
83
+ params = [:name, :message, :withpath, :loglevel, :tag, :require]
84
+ resource.eachparameter { |param|
85
+ params.should be_include(param.to_s.to_sym)
86
+ }
87
+ end
88
+
66
89
  it "should have a method for setting default values for resources" do
67
90
  Puppet::Type.type(:mount).new(:name => "foo").must respond_to(:set_default)
68
91
  end
@@ -109,6 +132,36 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
109
132
  Puppet::Type.type(:mount).new(:name => "foo").version.should == 0
110
133
  end
111
134
 
135
+ it "reports the correct path even after path is used during setup of the type" do
136
+ Puppet::Type.newtype(:testing) do
137
+ newparam(:name) do
138
+ isnamevar
139
+ validate do |value|
140
+ path # forces the computation of the path
141
+ end
142
+ end
143
+ end
144
+
145
+ ral = compile_to_ral(<<-MANIFEST)
146
+ class something {
147
+ testing { something: }
148
+ }
149
+ include something
150
+ MANIFEST
151
+
152
+ ral.resource("Testing[something]").path.should == "/Stage[main]/Something/Testing[something]"
153
+ end
154
+
155
+ context "alias metaparam" do
156
+ it "creates a new name that can be used for resource references" do
157
+ ral = compile_to_ral(<<-MANIFEST)
158
+ notify { a: alias => c }
159
+ MANIFEST
160
+
161
+ expect(ral.resource("Notify[a]")).to eq(ral.resource("Notify[c]"))
162
+ end
163
+ end
164
+
112
165
  context "resource attributes" do
113
166
  let(:resource) {
114
167
  resource = Puppet::Type.type(:mount).new(:name => "foo")
@@ -123,7 +176,8 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
123
176
  end
124
177
 
125
178
  it "should have tags" do
126
- resource.tags.should == ["mount", "foo"]
179
+ expect(resource).to be_tagged("mount")
180
+ expect(resource).to be_tagged("foo")
127
181
  end
128
182
 
129
183
  it "should have a path" do
@@ -165,13 +219,19 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
165
219
  @resource.event.default_log_level.should == :warning
166
220
  end
167
221
 
168
- {:file => "/my/file", :line => 50, :tags => %{foo bar}}.each do |attr, value|
222
+ {:file => "/my/file", :line => 50}.each do |attr, value|
169
223
  it "should set the #{attr}" do
170
224
  @resource.stubs(attr).returns value
171
225
  @resource.event.send(attr).should == value
172
226
  end
173
227
  end
174
228
 
229
+ it "should set the tags" do
230
+ @resource.tag("abc", "def")
231
+ @resource.event.should be_tagged("abc")
232
+ @resource.event.should be_tagged("def")
233
+ end
234
+
175
235
  it "should allow specification of event attributes" do
176
236
  @resource.event(:status => "noop").status.should == "noop"
177
237
  end
@@ -470,6 +530,28 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
470
530
  end
471
531
  end
472
532
 
533
+ describe "when #finish is called on a type" do
534
+ let(:post_hook_type) do
535
+ Puppet::Type.newtype(:finish_test) do
536
+ newparam(:name) { isnamevar }
537
+
538
+ newparam(:post) do
539
+ def post_compile
540
+ raise "post_compile hook ran"
541
+ end
542
+ end
543
+ end
544
+ end
545
+
546
+ let(:post_hook_resource) do
547
+ post_hook_type.new(:name => 'foo',:post => 'fake_value')
548
+ end
549
+
550
+ it "should call #post_compile on parameters that implement it" do
551
+ expect { post_hook_resource.finish }.to raise_error(RuntimeError, "post_compile hook ran")
552
+ end
553
+ end
554
+
473
555
  it "should have a class method for converting a hash into a Puppet::Resource instance" do
474
556
  Puppet::Type.type(:mount).must respond_to(:hash2resource)
475
557
  end
@@ -588,7 +670,7 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
588
670
  resource.should be_a Puppet::Resource
589
671
  resource[:fstype].should == 15
590
672
  resource[:remounts].should == :true
591
- resource.tags.should =~ %w{foo bar baz mount}
673
+ resource.tags.should == Puppet::Util::TagSet.new(%w{foo bar baz mount})
592
674
  end
593
675
  end
594
676
 
@@ -52,13 +52,48 @@ describe Puppet::Util::ADSI do
52
52
  end
53
53
  end
54
54
 
55
+ describe ".sid_uri", :if => Puppet.features.microsoft_windows? do
56
+ it "should raise an error when the input is not a SID object" do
57
+ [Object.new, {}, 1, :symbol, '', nil].each do |input|
58
+ expect {
59
+ Puppet::Util::ADSI.sid_uri(input)
60
+ }.to raise_error(Puppet::Error, /Must use a valid SID object/)
61
+ end
62
+ end
63
+
64
+ it "should return a SID uri for a well-known SID (SYSTEM)" do
65
+ sid = Win32::Security::SID.new('SYSTEM')
66
+ Puppet::Util::ADSI.sid_uri(sid).should == 'WinNT://S-1-5-18'
67
+ end
68
+ end
69
+
55
70
  describe Puppet::Util::ADSI::User do
56
71
  let(:username) { 'testuser' }
72
+ let(:domain) { 'DOMAIN' }
73
+ let(:domain_username) { "#{domain}\\#{username}"}
57
74
 
58
75
  it "should generate the correct URI" do
59
76
  Puppet::Util::ADSI::User.uri(username).should == "WinNT://./#{username},user"
60
77
  end
61
78
 
79
+ it "should generate the correct URI for a user with a domain" do
80
+ Puppet::Util::ADSI::User.uri(username, domain).should == "WinNT://#{domain}/#{username},user"
81
+ end
82
+
83
+ it "should be able to parse a username without a domain" do
84
+ Puppet::Util::ADSI::User.parse_name(username).should == [username, '.']
85
+ end
86
+
87
+ it "should be able to parse a username with a domain" do
88
+ Puppet::Util::ADSI::User.parse_name(domain_username).should == [username, domain]
89
+ end
90
+
91
+ it "should raise an error with a username that contains a /" do
92
+ expect {
93
+ Puppet::Util::ADSI::User.parse_name("#{domain}/#{username}")
94
+ }.to raise_error(Puppet::Error, /Value must be in DOMAIN\\user style syntax/)
95
+ end
96
+
62
97
  it "should be able to create a user" do
63
98
  adsi_user = stub('adsi')
64
99
 
@@ -76,6 +111,11 @@ describe Puppet::Util::ADSI do
76
111
  Puppet::Util::ADSI::User.exists?(username).should be_true
77
112
  end
78
113
 
114
+ it "should be able to check the existence of a domain user" do
115
+ Puppet::Util::ADSI.expects(:connect).with("WinNT://#{domain}/#{username},user").returns connection
116
+ Puppet::Util::ADSI::User.exists?(domain_username).should be_true
117
+ end
118
+
79
119
  it "should be able to delete a user" do
80
120
  connection.expects(:Delete).with('user', username)
81
121
 
@@ -99,7 +139,8 @@ describe Puppet::Util::ADSI do
99
139
  end
100
140
 
101
141
  describe "an instance" do
102
- let(:adsi_user) { stub 'user' }
142
+ let(:adsi_user) { stub('user', :objectSID => []) }
143
+ let(:sid) { stub(:account => username, :domain => 'testcomputername') }
103
144
  let(:user) { Puppet::Util::ADSI::User.new(username, adsi_user) }
104
145
 
105
146
  it "should provide its groups as a list of names" do
@@ -133,14 +174,16 @@ describe Puppet::Util::ADSI do
133
174
  user.password = 'pwd'
134
175
  end
135
176
 
136
- it "should generate the correct URI" do
137
- user.uri.should == "WinNT://./#{username},user"
177
+ it "should generate the correct URI",:if => Puppet.features.microsoft_windows? do
178
+ Puppet::Util::Windows::Security.stubs(:octet_string_to_sid_object).returns(sid)
179
+ user.uri.should == "WinNT://testcomputername/#{username},user"
138
180
  end
139
181
 
140
- describe "when given a set of groups to which to add the user" do
182
+ describe "when given a set of groups to which to add the user", :if => Puppet.features.microsoft_windows? do
141
183
  let(:groups_to_set) { 'group1,group2' }
142
184
 
143
185
  before(:each) do
186
+ Puppet::Util::Windows::Security.stubs(:octet_string_to_sid_object).returns(sid)
144
187
  user.expects(:groups).returns ['group2', 'group3']
145
188
  end
146
189
 
@@ -152,6 +195,7 @@ describe Puppet::Util::ADSI do
152
195
  group3 = stub 'group1'
153
196
  group3.expects(:Remove).with("WinNT://testcomputername/#{username},user")
154
197
 
198
+ Puppet::Util::ADSI.expects(:sid_uri).with(sid).returns("WinNT://testcomputername/#{username},user").twice
155
199
  Puppet::Util::ADSI.expects(:connect).with('WinNT://./group1,group').returns group1
156
200
  Puppet::Util::ADSI.expects(:connect).with('WinNT://./group3,group').returns group3
157
201
 
@@ -164,6 +208,7 @@ describe Puppet::Util::ADSI do
164
208
  group1 = stub 'group1'
165
209
  group1.expects(:Add).with("WinNT://testcomputername/#{username},user")
166
210
 
211
+ Puppet::Util::ADSI.expects(:sid_uri).with(sid).returns("WinNT://testcomputername/#{username},user")
167
212
  Puppet::Util::ADSI.expects(:connect).with('WinNT://./group1,group').returns group1
168
213
 
169
214
  user.set_groups(groups_to_set, true)
@@ -179,19 +224,58 @@ describe Puppet::Util::ADSI do
179
224
  describe "an instance" do
180
225
  let(:adsi_group) { stub 'group' }
181
226
  let(:group) { Puppet::Util::ADSI::Group.new(groupname, adsi_group) }
227
+ let(:someone_sid){ stub(:account => 'someone', :domain => 'testcomputername')}
228
+
229
+ it "should be able to add a member (deprecated)", :if => Puppet.features.microsoft_windows? do
230
+ Puppet.expects(:deprecation_warning).with('Puppet::Util::ADSI::Group#add_members is deprecated; please use Puppet::Util::ADSI::Group#add_member_sids')
231
+
232
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('someone').returns(someone_sid)
233
+ Puppet::Util::ADSI.expects(:sid_uri).with(someone_sid).returns("WinNT://testcomputername/someone,user")
182
234
 
183
- it "should be able to add a member" do
184
235
  adsi_group.expects(:Add).with("WinNT://testcomputername/someone,user")
185
236
 
186
237
  group.add_member('someone')
187
238
  end
188
239
 
189
- it "should be able to remove a member" do
240
+ it "should raise when adding a member that can't resolve to a SID (deprecated)", :if => Puppet.features.microsoft_windows? do
241
+ expect {
242
+ group.add_member('foobar')
243
+ }.to raise_error(Puppet::Error, /Could not resolve username: foobar/)
244
+ end
245
+
246
+ it "should be able to remove a member (deprecated)", :if => Puppet.features.microsoft_windows? do
247
+ Puppet.expects(:deprecation_warning).with('Puppet::Util::ADSI::Group#remove_members is deprecated; please use Puppet::Util::ADSI::Group#remove_member_sids')
248
+
249
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('someone').returns(someone_sid)
250
+ Puppet::Util::ADSI.expects(:sid_uri).with(someone_sid).returns("WinNT://testcomputername/someone,user")
251
+
190
252
  adsi_group.expects(:Remove).with("WinNT://testcomputername/someone,user")
191
253
 
192
254
  group.remove_member('someone')
193
255
  end
194
256
 
257
+ it "should raise when removing a member that can't resolve to a SID (deprecated)", :if => Puppet.features.microsoft_windows? do
258
+ expect {
259
+ group.remove_member('foobar')
260
+ }.to raise_error(Puppet::Error, /Could not resolve username: foobar/)
261
+ end
262
+
263
+ describe "should be able to use SID objects", :if => Puppet.features.microsoft_windows? do
264
+ let(:system) { Puppet::Util::Windows::Security.name_to_sid_object('SYSTEM') }
265
+
266
+ it "to add a member" do
267
+ adsi_group.expects(:Add).with("WinNT://S-1-5-18")
268
+
269
+ group.add_member_sids(system)
270
+ end
271
+
272
+ it "to remove a member" do
273
+ adsi_group.expects(:Remove).with("WinNT://S-1-5-18")
274
+
275
+ group.remove_member_sids(system)
276
+ end
277
+ end
278
+
195
279
  it "should provide its groups as a list of names" do
196
280
  names = ['user1', 'user2']
197
281
 
@@ -202,14 +286,38 @@ describe Puppet::Util::ADSI do
202
286
  group.members.should =~ names
203
287
  end
204
288
 
205
- it "should be able to add a list of users to a group" do
206
- names = ['user1', 'user2']
207
- adsi_group.expects(:Members).returns names.map{|n| stub(:Name => n)}
289
+ it "should be able to add a list of users to a group", :if => Puppet.features.microsoft_windows? do
290
+ names = ['DOMAIN\user1', 'user2']
291
+ sids = [
292
+ stub(:account => 'user1', :domain => 'DOMAIN'),
293
+ stub(:account => 'user2', :domain => 'testcomputername'),
294
+ stub(:account => 'user3', :domain => 'DOMAIN2'),
295
+ ]
296
+
297
+ # use stubbed objectSid on member to return stubbed SID
298
+ Puppet::Util::Windows::Security.expects(:octet_string_to_sid_object).with([0]).returns(sids[0])
299
+ Puppet::Util::Windows::Security.expects(:octet_string_to_sid_object).with([1]).returns(sids[1])
208
300
 
209
- adsi_group.expects(:Remove).with('WinNT://testcomputername/user1,user')
210
- adsi_group.expects(:Add).with('WinNT://testcomputername/user3,user')
301
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('user2').returns(sids[1])
302
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('DOMAIN2\user3').returns(sids[2])
303
+
304
+ Puppet::Util::ADSI.expects(:sid_uri).with(sids[0]).returns("WinNT://DOMAIN/user1,user")
305
+ Puppet::Util::ADSI.expects(:sid_uri).with(sids[2]).returns("WinNT://DOMAIN2/user3,user")
306
+
307
+ members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i])}
308
+ adsi_group.expects(:Members).returns members
309
+
310
+ adsi_group.expects(:Remove).with('WinNT://DOMAIN/user1,user')
311
+ adsi_group.expects(:Add).with('WinNT://DOMAIN2/user3,user')
312
+
313
+ group.set_members(['user2', 'DOMAIN2\user3'])
314
+ end
211
315
 
212
- group.set_members(['user2', 'user3'])
316
+ it "should raise an error when a username does not resolve to a SID", :if => Puppet.features.microsoft_windows? do
317
+ expect {
318
+ adsi_group.expects(:Members).returns []
319
+ group.set_members(['foobar'])
320
+ }.to raise_error(Puppet::Error, /Could not resolve username: foobar/)
213
321
  end
214
322
 
215
323
  it "should generate the correct URI" do