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
@@ -60,20 +60,20 @@ describe "transformation to Puppet AST for function calls" do
60
60
  astdump(parse("$a.foo")).should == "(call-method (. $a foo))"
61
61
  end
62
62
 
63
- it "$a.foo {|| }" do
63
+ it "$a.foo ||{ }" do
64
64
  astdump(parse("$a.foo || { }")).should == "(call-method (. $a foo) (lambda ()))"
65
65
  end
66
66
 
67
- it "$a.foo {|| []} # check transformation to block with empty array" do
68
- astdump(parse("$a.foo || { []}")).should == "(call-method (. $a foo) (lambda (block ([]))))"
67
+ it "$a.foo ||{[]} # check transformation to block with empty array" do
68
+ astdump(parse("$a.foo || {[]}")).should == "(call-method (. $a foo) (lambda (block ([]))))"
69
69
  end
70
70
 
71
71
  it "$a.foo {|$x| }" do
72
- astdump(parse("$a.foo {|$x| }")).should == "(call-method (. $a foo) (lambda (parameters x) ()))"
72
+ astdump(parse("$a.foo |$x| { }")).should == "(call-method (. $a foo) (lambda (parameters x) ()))"
73
73
  end
74
74
 
75
- it "$a.foo {|$x| $b = $x}" do
76
- astdump(parse("$a.foo {|$x| $b = $x}")).should ==
75
+ it "$a.foo |$x| { $b = $x}" do
76
+ astdump(parse("$a.foo |$x| { $b = $x}")).should ==
77
77
  "(call-method (. $a foo) (lambda (parameters x) (block (= $b $x))))"
78
78
  end
79
79
  end
@@ -154,12 +154,12 @@ describe "transformation to Puppet AST for containers" do
154
154
 
155
155
  it "node foo inherits 'bar' {}" do
156
156
  # AST can not differentiate between bare word and string
157
- astdump(parse("node foo inherits 'bar' {}")).should == "(node (matches 'foo') (parent 'bar') ())"
157
+ astdump(parse("node foo inherits 'bar' {}")).should == "(node (matches 'foo') (parent bar) ())"
158
158
  end
159
159
 
160
160
  it "node foo inherits default {}" do
161
161
  # AST can not differentiate between bare word and string
162
- astdump(parse("node foo inherits default {}")).should == "(node (matches 'foo') (parent :default) ())"
162
+ astdump(parse("node foo inherits default {}")).should == "(node (matches 'foo') (parent default) ())"
163
163
  end
164
164
 
165
165
  it "node /web.*/ {}" do
@@ -0,0 +1,31 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+ require 'puppet_spec/pops'
5
+
6
+ # relative to this spec file (./) does not work as this file is loaded by rspec
7
+ require File.join(File.dirname(__FILE__), '../parser/parser_rspec_helper')
8
+
9
+ describe "validating 3x" do
10
+ include ParserRspecHelper
11
+ include PuppetSpec::Pops
12
+
13
+ let(:acceptor) { Puppet::Pops::Validation::Acceptor.new() }
14
+ let(:validator) { Puppet::Pops::Validation::ValidatorFactory_3_1.new().validator(acceptor) }
15
+
16
+ def validate(model)
17
+ validator.validate(model)
18
+ acceptor
19
+ end
20
+
21
+ it 'should raise error for illegal names' do
22
+ expect(validate(fqn('Aaa'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_NAME)
23
+ expect(validate(fqn('AAA'))).to have_issue(Puppet::Pops::Issues::ILLEGAL_NAME)
24
+ end
25
+
26
+ it 'should raise error for illegal variable names' do
27
+ expect(validate(fqn('Aaa').var())).to have_issue(Puppet::Pops::Issues::ILLEGAL_NAME)
28
+ expect(validate(fqn('AAA').var())).to have_issue(Puppet::Pops::Issues::ILLEGAL_NAME)
29
+ end
30
+
31
+ end
@@ -276,6 +276,61 @@ describe provider_class do
276
276
  @provider.need_to_run?.should == true
277
277
  end
278
278
 
279
+ describe "performing numeric comparisons (#22617)" do
280
+ it "should return true when a get string compare is true" do
281
+ @resource[:onlyif] = "get bpath > a"
282
+ @augeas.stubs("get").returns("b")
283
+ @provider.need_to_run?.should == true
284
+ end
285
+
286
+ it "should return false when a get string compare is false" do
287
+ @resource[:onlyif] = "get a19path > a2"
288
+ @augeas.stubs("get").returns("a19")
289
+ @provider.need_to_run?.should == false
290
+ end
291
+
292
+ it "should return true when a get int gt compare is true" do
293
+ @resource[:onlyif] = "get path19 > 2"
294
+ @augeas.stubs("get").returns("19")
295
+ @provider.need_to_run?.should == true
296
+ end
297
+
298
+ it "should return true when a get int ge compare is true" do
299
+ @resource[:onlyif] = "get path19 >= 2"
300
+ @augeas.stubs("get").returns("19")
301
+ @provider.need_to_run?.should == true
302
+ end
303
+
304
+ it "should return true when a get int lt compare is true" do
305
+ @resource[:onlyif] = "get path2 < 19"
306
+ @augeas.stubs("get").returns("2")
307
+ @provider.need_to_run?.should == true
308
+ end
309
+
310
+ it "should return false when a get int le compare is false" do
311
+ @resource[:onlyif] = "get path39 <= 4"
312
+ @augeas.stubs("get").returns("39")
313
+ @provider.need_to_run?.should == false
314
+ end
315
+ end
316
+ describe "performing is_numeric checks (#22617)" do
317
+ it "should return false for nil" do
318
+ @provider.is_numeric?(nil).should == false
319
+ end
320
+ it "should return true for Fixnums" do
321
+ @provider.is_numeric?(9).should == true
322
+ end
323
+ it "should return true for numbers in Strings" do
324
+ @provider.is_numeric?('9').should == true
325
+ end
326
+ it "should return false for non-number Strings" do
327
+ @provider.is_numeric?('x9').should == false
328
+ end
329
+ it "should return false for other types" do
330
+ @provider.is_numeric?([true]).should == false
331
+ end
332
+ end
333
+
279
334
  it "should return false when a get filter does not match" do
280
335
  @resource[:onlyif] = "get path == another value"
281
336
  @augeas.stubs("get").returns("value")
@@ -619,7 +674,7 @@ describe provider_class do
619
674
  link = tmpfile('link')
620
675
  target = tmpfile('target')
621
676
  FileUtils.touch(target)
622
- FileUtils.symlink(target, link)
677
+ Puppet::FileSystem::File.new(target).symlink(link)
623
678
 
624
679
  resource = Puppet::Type.type(:augeas).new(
625
680
  :name => 'test',
@@ -634,7 +689,7 @@ describe provider_class do
634
689
  catalog.apply
635
690
 
636
691
  File.ftype(link).should == 'link'
637
- File.readlink(link).should == target
692
+ Puppet::FileSystem::File.new(link).readlink().should == target
638
693
  File.read(target).should =~ /PermitRootLogin no/
639
694
  end
640
695
  end
@@ -64,7 +64,7 @@ describe Puppet::Type.type(:exec).provider(:posix) do
64
64
  provider.resource[:path] = [File.dirname(command)]
65
65
  filename = File.basename(command)
66
66
 
67
- Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == filename) && (arguments.is_a? Hash) }
67
+ Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == filename) && (arguments.is_a? Hash) }.returns(Puppet::Util::Execution::ProcessOutput.new('', 0))
68
68
 
69
69
  provider.run(filename)
70
70
  end
@@ -95,7 +95,7 @@ describe Puppet::Type.type(:exec).provider(:posix) do
95
95
  provider.resource[:path] = ['/bogus/bin']
96
96
  command = make_exe
97
97
 
98
- Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == "#{command} bar --sillyarg=true --blah") && (arguments.is_a? Hash) }
98
+ Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == "#{command} bar --sillyarg=true --blah") && (arguments.is_a? Hash) }.returns(Puppet::Util::Execution::ProcessOutput.new('', 0))
99
99
  provider.run("#{command} bar --sillyarg=true --blah")
100
100
  end
101
101
 
@@ -110,11 +110,16 @@ describe Puppet::Type.type(:exec).provider(:posix) do
110
110
  provider.resource[:environment] = ['WHATEVER=/something/else', 'WHATEVER=/foo']
111
111
  command = make_exe
112
112
 
113
- Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == command) && (arguments.is_a? Hash) }
113
+ Puppet::Util::Execution.expects(:execute).with { |cmdline, arguments| (cmdline == command) && (arguments.is_a? Hash) }.returns(Puppet::Util::Execution::ProcessOutput.new('', 0))
114
114
  provider.run(command)
115
115
  @logs.map {|l| "#{l.level}: #{l.message}" }.should == ["warning: Overriding environment setting 'WHATEVER' with '/foo'"]
116
116
  end
117
117
 
118
+ it "should set umask before execution if umask parameter is in use" do
119
+ provider.resource[:umask] = '0027'
120
+ Puppet::Util.expects(:withumask).with(0027)
121
+ provider.run(provider.resource[:command])
122
+ end
118
123
 
119
124
  describe "posix locale settings", :unless => Puppet.features.microsoft_windows? do
120
125
  # a sentinel value that we can use to emulate what locale environment variables might be set to on an international
@@ -85,7 +85,7 @@ describe Puppet::Type.type(:file).provider(:posix), :if => Puppet.features.posix
85
85
  describe "#owner" do
86
86
  it "should return the uid of the file owner" do
87
87
  FileUtils.touch(path)
88
- owner = File.stat(path).uid
88
+ owner = Puppet::FileSystem::File.new(path).stat.uid
89
89
 
90
90
  provider.owner.should == owner
91
91
  end
@@ -178,7 +178,7 @@ describe Puppet::Type.type(:file).provider(:posix), :if => Puppet.features.posix
178
178
  describe "#group" do
179
179
  it "should return the gid of the file group" do
180
180
  FileUtils.touch(path)
181
- group = File.stat(path).gid
181
+ group = Puppet::FileSystem::File.new(path).stat.gid
182
182
 
183
183
  provider.group.should == group
184
184
  end
@@ -30,6 +30,58 @@ describe Puppet::Type.type(:group).provider(:windows_adsi) do
30
30
  end
31
31
  end
32
32
 
33
+ describe "group type :members property helpers", :if => Puppet.features.microsoft_windows? do
34
+
35
+ let(:user1) { stub(:account => 'user1', :domain => '.', :to_s => 'user1sid') }
36
+ let(:user2) { stub(:account => 'user2', :domain => '.', :to_s => 'user2sid') }
37
+
38
+ before :each do
39
+ Puppet::Util::Windows::Security.stubs(:name_to_sid_object).with('user1').returns(user1)
40
+ Puppet::Util::Windows::Security.stubs(:name_to_sid_object).with('user2').returns(user2)
41
+ end
42
+
43
+ describe "#members_insync?" do
44
+ it "should return false when current is nil" do
45
+ provider.members_insync?(nil, ['user2']).should be_false
46
+ end
47
+ it "should return false when should is nil" do
48
+ provider.members_insync?(['user1'], nil).should be_false
49
+ end
50
+ it "should return false for differing lists of members" do
51
+ provider.members_insync?(['user1'], ['user2']).should be_false
52
+ provider.members_insync?(['user1'], []).should be_false
53
+ provider.members_insync?([], ['user2']).should be_false
54
+ end
55
+ it "should return true for same lists of members" do
56
+ provider.members_insync?(['user1', 'user2'], ['user1', 'user2']).should be_true
57
+ end
58
+ it "should return true for same lists of unordered members" do
59
+ provider.members_insync?(['user1', 'user2'], ['user2', 'user1']).should be_true
60
+ end
61
+ it "should return true for same lists of members irrespective of duplicates" do
62
+ provider.members_insync?(['user1', 'user2', 'user2'], ['user2', 'user1', 'user1']).should be_true
63
+ end
64
+ end
65
+
66
+ describe "#members_to_s" do
67
+ it "should return an empty string on non-array input" do
68
+ [Object.new, {}, 1, :symbol, ''].each do |input|
69
+ provider.members_to_s(input).should be_empty
70
+ end
71
+ end
72
+ it "should return an empty string on empty or nil users" do
73
+ provider.members_to_s([]).should be_empty
74
+ provider.members_to_s(nil).should be_empty
75
+ end
76
+ it "should return a user string like DOMAIN\\USER" do
77
+ provider.members_to_s(['user1']).should == '.\user1'
78
+ end
79
+ it "should return a user string like DOMAIN\\USER,DOMAIN2\\USER2" do
80
+ provider.members_to_s(['user1', 'user2']).should == '.\user1,.\user2'
81
+ end
82
+ end
83
+ end
84
+
33
85
  describe "when managing members" do
34
86
  it "should be able to provide a list of members" do
35
87
  provider.group.stubs(:members).returns ['user1', 'user2', 'user3']
@@ -37,11 +89,22 @@ describe Puppet::Type.type(:group).provider(:windows_adsi) do
37
89
  provider.members.should =~ ['user1', 'user2', 'user3']
38
90
  end
39
91
 
40
- it "should be able to set group members" do
92
+ it "should be able to set group members", :if => Puppet.features.microsoft_windows? do
41
93
  provider.group.stubs(:members).returns ['user1', 'user2']
42
94
 
43
- provider.group.expects(:remove_members).with('user1')
44
- provider.group.expects(:add_members).with('user3')
95
+ member_sids = [
96
+ stub(:account => 'user1', :domain => 'testcomputername'),
97
+ stub(:account => 'user2', :domain => 'testcomputername'),
98
+ stub(:account => 'user3', :domain => 'testcomputername'),
99
+ ]
100
+
101
+ provider.group.stubs(:member_sids).returns(member_sids[0..1])
102
+
103
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('user2').returns(member_sids[1])
104
+ Puppet::Util::Windows::Security.expects(:name_to_sid_object).with('user3').returns(member_sids[2])
105
+
106
+ provider.group.expects(:remove_member_sids).with(member_sids[0])
107
+ provider.group.expects(:add_member_sids).with(member_sids[2])
45
108
 
46
109
  provider.members = ['user2', 'user3']
47
110
  end
@@ -97,4 +160,8 @@ describe Puppet::Type.type(:group).provider(:windows_adsi) do
97
160
  provider.expects(:fail).with { |msg| msg =~ /gid is read-only/ }
98
161
  provider.send(:gid=, 500)
99
162
  end
163
+
164
+ it "should prefer the domain component from the resolved SID", :if => Puppet.features.microsoft_windows? do
165
+ provider.members_to_s(['.\Administrators']).should == 'BUILTIN\Administrators'
166
+ end
100
167
  end
@@ -110,7 +110,7 @@ describe 'DirectoryService password behavior' do
110
110
 
111
111
  it 'should execute convert_binary_to_xml once when getting the password on >= 10.7' do
112
112
  subject.expects(:convert_binary_to_xml).returns({'SALTED-SHA512' => StringIO.new(pw_string)})
113
- File.expects(:exists?).with(plist_path).once.returns(true)
113
+ Puppet::FileSystem::File.expects(:exist?).with(plist_path).once.returns(true)
114
114
  Plist.expects(:parse_xml).returns(shadow_hash_data)
115
115
  # On Mac OS X 10.7 we first need to convert to xml when reading the password
116
116
  subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
@@ -126,7 +126,7 @@ describe 'DirectoryService password behavior' do
126
126
  it 'should convert xml-to-binary and binary-to-xml when setting the pw on >= 10.7' do
127
127
  subject.expects(:convert_binary_to_xml).returns({'SALTED-SHA512' => StringIO.new(pw_string)})
128
128
  subject.expects(:convert_xml_to_binary).returns(binary_plist)
129
- File.expects(:exists?).with(plist_path).once.returns(true)
129
+ Puppet::FileSystem::File.expects(:exist?).with(plist_path).once.returns(true)
130
130
  Plist.expects(:parse_xml).returns(shadow_hash_data)
131
131
  # On Mac OS X 10.7 we first need to convert to xml
132
132
  subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
@@ -138,7 +138,7 @@ describe 'DirectoryService password behavior' do
138
138
 
139
139
  it '[#13686] should handle an empty ShadowHashData field in the users plist' do
140
140
  subject.expects(:convert_xml_to_binary).returns(binary_plist)
141
- File.expects(:exists?).with(plist_path).once.returns(true)
141
+ Puppet::FileSystem::File.expects(:exist?).with(plist_path).once.returns(true)
142
142
  Plist.expects(:parse_xml).returns({'ShadowHashData' => nil})
143
143
  subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
144
144
  subject.expects(:plutil).with('-convert', 'binary1', plist_path)
@@ -63,7 +63,7 @@ Version table:
63
63
 
64
64
  it "should preseed with the provided responsefile when preseeding is called for" do
65
65
  @resource.expects(:[]).with(:responsefile).returns "/my/file"
66
- FileTest.expects(:exist?).with("/my/file").returns true
66
+ Puppet::FileSystem::File.expects(:exist?).with("/my/file").returns true
67
67
 
68
68
  @provider.expects(:info)
69
69
  @provider.expects(:preseed).with("/my/file")
@@ -24,9 +24,8 @@ describe Puppet::Type.type(:package).provider(:msi) do
24
24
  MsiPackage.stubs(:installer).returns(installer)
25
25
  end
26
26
 
27
- before :each do
28
- # make sure we never try to execute msiexec
29
- provider.expects(:execute).never
27
+ def expect_execute(command, status)
28
+ provider.expects(:execute).with(command, execute_options).returns(Puppet::Util::Execution::ProcessOutput.new('',status))
30
29
  end
31
30
 
32
31
  describe 'provider features' do
@@ -38,6 +37,7 @@ describe Puppet::Type.type(:package).provider(:msi) do
38
37
 
39
38
  describe 'on Windows', :as_platform => :windows do
40
39
  it 'should not be the default provider' do
40
+ # provider.expects(:execute).never
41
41
  Puppet::Type.type(:package).defaultprovider.should_not == subject.class
42
42
  end
43
43
  end
@@ -90,9 +90,7 @@ describe Puppet::Type.type(:package).provider(:msi) do
90
90
  end
91
91
 
92
92
  context '#install' do
93
- before :each do
94
- provider.stubs(:execute)
95
- end
93
+ let (:command) { "msiexec.exe /qn /norestart /i #{source}" }
96
94
 
97
95
  it 'should require the source parameter' do
98
96
  resource = Puppet::Type.type(:package).new(:name => name, :provider => :msi)
@@ -104,40 +102,27 @@ describe Puppet::Type.type(:package).provider(:msi) do
104
102
 
105
103
  it 'should install using the source and install_options' do
106
104
  resource[:install_options] = { 'INSTALLDIR' => 'C:\mysql-5.1' }
107
-
108
- provider.expects(:execute).with("msiexec.exe /qn /norestart /i #{source} INSTALLDIR=C:\\mysql-5.1", execute_options)
109
- provider.expects(:exit_status).returns(0)
110
-
111
- provider.install
112
- end
113
-
114
- it 'should warn if the package requests a reboot' do
115
- provider.stubs(:exit_status).returns(194)
116
-
117
- provider.expects(:warning).with('The package requested a reboot to finish the operation.')
105
+ expect_execute("#{command} INSTALLDIR=C:\\mysql-5.1", 0)
118
106
 
119
107
  provider.install
120
108
  end
121
109
 
122
110
  it 'should warn if reboot initiated' do
123
- provider.stubs(:exit_status).returns(1641)
124
-
111
+ expect_execute(command, 1641)
125
112
  provider.expects(:warning).with('The package installed successfully and the system is rebooting now.')
126
113
 
127
114
  provider.install
128
115
  end
129
116
 
130
117
  it 'should warn if reboot required' do
131
- provider.stubs(:exit_status).returns(3010)
132
-
118
+ expect_execute(command, 3010)
133
119
  provider.expects(:warning).with('The package installed successfully, but the system must be rebooted.')
134
120
 
135
121
  provider.install
136
122
  end
137
123
 
138
124
  it 'should fail otherwise', :if => Puppet.features.microsoft_windows? do
139
- provider.stubs(:execute)
140
- provider.stubs(:exit_status).returns(5)
125
+ expect_execute(command, 5)
141
126
 
142
127
  expect do
143
128
  provider.install
@@ -146,6 +131,9 @@ describe Puppet::Type.type(:package).provider(:msi) do
146
131
  end
147
132
 
148
133
  context '#uninstall' do
134
+
135
+ let (:command) { "msiexec.exe /qn /norestart /x #{productcode}" }
136
+
149
137
  before :each do
150
138
  resource[:ensure] = :absent
151
139
  provider.set(:productcode => productcode)
@@ -159,42 +147,27 @@ describe Puppet::Type.type(:package).provider(:msi) do
159
147
  end
160
148
 
161
149
  it 'should uninstall using the productcode' do
162
- provider.expects(:execute).with("msiexec.exe /qn /norestart /x #{productcode}", execute_options)
163
- provider.expects(:exit_status).returns(0)
164
-
165
- provider.uninstall
166
- end
167
-
168
- it 'should warn if the package requests a reboot' do
169
- provider.stubs(:execute)
170
- provider.stubs(:exit_status).returns(194)
171
-
172
- provider.expects(:warning).with('The package requested a reboot to finish the operation.')
150
+ expect_execute(command, 0)
173
151
 
174
152
  provider.uninstall
175
153
  end
176
154
 
177
155
  it 'should warn if reboot initiated' do
178
- provider.stubs(:execute)
179
- provider.stubs(:exit_status).returns(1641)
180
-
156
+ expect_execute(command, 1641)
181
157
  provider.expects(:warning).with('The package uninstalled successfully and the system is rebooting now.')
182
158
 
183
159
  provider.uninstall
184
160
  end
185
161
 
186
162
  it 'should warn if reboot required' do
187
- provider.stubs(:execute)
188
- provider.stubs(:exit_status).returns(3010)
189
-
163
+ expect_execute(command, 3010)
190
164
  provider.expects(:warning).with('The package uninstalled successfully, but the system must be rebooted.')
191
165
 
192
166
  provider.uninstall
193
167
  end
194
168
 
195
169
  it 'should fail otherwise', :if => Puppet.features.microsoft_windows? do
196
- provider.stubs(:execute)
197
- provider.stubs(:exit_status).returns(5)
170
+ expect_execute(command, 5)
198
171
 
199
172
  expect do
200
173
  provider.uninstall