puppet 3.1.1 → 3.2.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 (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -42,7 +42,7 @@ describe Puppet::Type.type(:service).provider(:upstart) do
42
42
  end
43
43
 
44
44
  it "should not find excluded services" do
45
- processes = "wait-for-state stop/waiting"
45
+ processes = "wait-for-state stop/waiting\nportmap-wait start/running"
46
46
  provider_class.stubs(:execpipe).yields(processes)
47
47
  provider_class.instances.should be_empty
48
48
  end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ provider_class = Puppet::Type.type(:user).provider(:aix)
4
+
5
+ describe provider_class do
6
+
7
+ let(:lsuser_all_example) do
8
+ <<-OUTPUT
9
+ root id=0 pgrp=system groups=system,bin,sys,security,cron,audit,lp home=/root shell=/usr/bin/bash auditclasses=general login=true su=true rlogin=true daemon=true admin=true sugroups=ALL admgroups=lolt,allstaff tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=files SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= default_roles= fsize=2097151 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 time_last_login=1358465855 time_last_unsuccessful_login=1358378454 tty_last_login=ssh tty_last_unsuccessful_login=ssh host_last_login=rpm-builder.puppetlabs.lan host_last_unsuccessful_login=192.168.100.78 unsuccessful_login_count=0 roles=
10
+ guest id=100 pgrp=usr groups=usr home=/home/guest login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=files SYSTEM=compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= default_roles= fsize=2097151 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 roles=
11
+ OUTPUT
12
+ end
13
+
14
+ let(:lsgroup_all_example) do
15
+ <<-OUTPUT
16
+ root id=0 pgrp=system groups=system,bin,sys,security,cron,audit,lp home=/root shell=/usr/bin/bash
17
+ guest id=100 pgrp=usr groups=usr home=/home/guest
18
+ OUTPUT
19
+ end
20
+
21
+ before do
22
+ @resource = stub('resource')
23
+ @provider = provider_class.new(@resource)
24
+ end
25
+
26
+ it "should be able to return a group name based on a group ID" do
27
+ @provider.stubs(:lsgroupscmd)
28
+
29
+ @provider.stubs(:execute).returns(lsgroup_all_example)
30
+
31
+ @provider.groupname_by_id(100).should == 'guest'
32
+ end
33
+
34
+ it "should be able to list all users" do
35
+ provider_class.stubs(:command)
36
+
37
+ provider_class.stubs(:execute).returns(lsuser_all_example)
38
+
39
+ provider_class.list_all.should == ['root', 'guest']
40
+ end
41
+
42
+ end
@@ -1,4 +1,5 @@
1
1
  #! /usr/bin/env ruby -S rspec
2
+ # encoding: ASCII-8BIT
2
3
  require 'spec_helper'
3
4
  require 'facter/util/plist'
4
5
 
@@ -17,55 +17,61 @@ describe provider_class do
17
17
 
18
18
  it "should run pw with no additional flags when no properties are given" do
19
19
  provider.addcmd.must == [provider_class.command(:pw), "useradd", "testuser"]
20
- provider.expects(:execute).with([provider_class.command(:pw), "useradd", "testuser"])
20
+ provider.expects(:execute).with([provider_class.command(:pw), "useradd", "testuser"], kind_of(Hash))
21
21
  provider.create
22
22
  end
23
23
 
24
24
  it "should use -o when allowdupe is enabled" do
25
25
  resource[:allowdupe] = true
26
- provider.expects(:execute).with(includes("-o"))
26
+ provider.expects(:execute).with(includes("-o"), kind_of(Hash))
27
27
  provider.create
28
28
  end
29
29
 
30
30
  it "should use -c with the correct argument when the comment property is set" do
31
31
  resource[:comment] = "Testuser Name"
32
- provider.expects(:execute).with(all_of(includes("-c"), includes("Testuser Name")))
32
+ provider.expects(:execute).with(all_of(includes("-c"), includes("Testuser Name")), kind_of(Hash))
33
33
  provider.create
34
34
  end
35
35
 
36
36
  it "should use -e with the correct argument when the expiry property is set" do
37
37
  resource[:expiry] = "2010-02-19"
38
- provider.expects(:execute).with(all_of(includes("-e"), includes("19-02-2010")))
38
+ provider.expects(:execute).with(all_of(includes("-e"), includes("19-02-2010")), kind_of(Hash))
39
+ provider.create
40
+ end
41
+
42
+ it "should use -e 00-00-0000 if the expiry property has to be removed" do
43
+ resource[:expiry] = :absent
44
+ provider.expects(:execute).with(all_of(includes("-e"), includes("00-00-0000")), kind_of(Hash))
39
45
  provider.create
40
46
  end
41
47
 
42
48
  it "should use -g with the correct argument when the gid property is set" do
43
49
  resource[:gid] = 12345
44
- provider.expects(:execute).with(all_of(includes("-g"), includes(12345)))
50
+ provider.expects(:execute).with(all_of(includes("-g"), includes(12345)), kind_of(Hash))
45
51
  provider.create
46
52
  end
47
53
 
48
54
  it "should use -G with the correct argument when the groups property is set" do
49
55
  resource[:groups] = "group1"
50
- provider.expects(:execute).with(all_of(includes("-G"), includes("group1")))
56
+ provider.expects(:execute).with(all_of(includes("-G"), includes("group1")), kind_of(Hash))
51
57
  provider.create
52
58
  end
53
59
 
54
60
  it "should use -G with all the given groups when the groups property is set to an array" do
55
61
  resource[:groups] = ["group1", "group2"]
56
- provider.expects(:execute).with(all_of(includes("-G"), includes("group1,group2")))
62
+ provider.expects(:execute).with(all_of(includes("-G"), includes("group1,group2")), kind_of(Hash))
57
63
  provider.create
58
64
  end
59
65
 
60
66
  it "should use -d with the correct argument when the home property is set" do
61
67
  resource[:home] = "/home/testuser"
62
- provider.expects(:execute).with(all_of(includes("-d"), includes("/home/testuser")))
68
+ provider.expects(:execute).with(all_of(includes("-d"), includes("/home/testuser")), kind_of(Hash))
63
69
  provider.create
64
70
  end
65
71
 
66
72
  it "should use -m when the managehome property is enabled" do
67
73
  resource[:managehome] = true
68
- provider.expects(:execute).with(includes("-m"))
74
+ provider.expects(:execute).with(includes("-m"), kind_of(Hash))
69
75
  provider.create
70
76
  end
71
77
 
@@ -78,13 +84,13 @@ describe provider_class do
78
84
 
79
85
  it "should use -s with the correct argument when the shell property is set" do
80
86
  resource[:shell] = "/bin/sh"
81
- provider.expects(:execute).with(all_of(includes("-s"), includes("/bin/sh")))
87
+ provider.expects(:execute).with(all_of(includes("-s"), includes("/bin/sh")), kind_of(Hash))
82
88
  provider.create
83
89
  end
84
90
 
85
91
  it "should use -u with the correct argument when the uid property is set" do
86
92
  resource[:uid] = 12345
87
- provider.expects(:execute).with(all_of(includes("-u"), includes(12345)))
93
+ provider.expects(:execute).with(all_of(includes("-u"), includes(12345)), kind_of(Hash))
88
94
  provider.create
89
95
  end
90
96
 
@@ -93,7 +99,7 @@ describe provider_class do
93
99
  resource[:password] = "*"
94
100
  provider.addcmd.should_not include("-p")
95
101
  provider.expects(:password=)
96
- provider.expects(:execute).with(Not(includes("-p")))
102
+ provider.expects(:execute).with(Not(includes("-p")), kind_of(Hash))
97
103
  provider.create
98
104
  end
99
105
  end
@@ -150,6 +156,12 @@ describe provider_class do
150
156
  provider.expiry = "2011-02-19"
151
157
  end
152
158
 
159
+ it "should use -e with the correct argument when the expiry property is removed" do
160
+ resource[:expiry] = :absent
161
+ provider.expects(:execute).with(all_of(includes("-e"), includes("00-00-0000")))
162
+ provider.expiry = :absent
163
+ end
164
+
153
165
  it "should use -g with the correct argument when the gid property is changed" do
154
166
  resource[:gid] = 12345
155
167
  provider.expects(:execute).with(all_of(includes("-g"), includes(54321)))
@@ -116,7 +116,7 @@ describe Puppet::Type.type(:user).provider(:user_role_add), :unless => Puppet.fe
116
116
 
117
117
  describe "with :allow_duplicates" do
118
118
  before do
119
- resource.expects(:allowdupe?).returns true
119
+ resource.stubs(:allowdupe?).returns true
120
120
  provider.stubs(:is_role?).returns(false)
121
121
  provider.stubs(:execute)
122
122
  resource.stubs(:system?).returns false
@@ -6,6 +6,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
6
6
  before :each do
7
7
  described_class.stubs(:command).with(:password).returns '/usr/bin/chage'
8
8
  described_class.stubs(:command).with(:add).returns '/usr/sbin/useradd'
9
+ described_class.stubs(:command).with(:localadd).returns '/usr/sbin/luseradd'
9
10
  described_class.stubs(:command).with(:modify).returns '/usr/sbin/usermod'
10
11
  described_class.stubs(:command).with(:delete).returns '/usr/sbin/userdel'
11
12
  end
@@ -21,11 +22,38 @@ describe Puppet::Type.type(:user).provider(:useradd) do
21
22
 
22
23
  let(:provider) { described_class.new(:name => 'myuser') }
23
24
 
25
+
26
+ let(:shadow_entry) {
27
+ return unless Puppet.features.libshadow?
28
+ Struct::PasswdEntry.new(
29
+ 'myuser', # login name
30
+ '$6$FvW8Ib8h$qQMI/CR9m.QzIicZKutLpBgCBBdrch1IX0rTnxuI32K1pD9.RXZrmeKQlaC.RzODNuoUtPPIyQDufunvLOQWF0', # encrypted password
31
+ 15573, # date of last password change
32
+ 10, # minimum password age
33
+ 20, # maximum password age
34
+ 7, # password warning period
35
+ -1, # password inactivity period
36
+ 15706, # account expiration date
37
+ -1 # reserved field
38
+ )
39
+ }
40
+
24
41
  describe "#create" do
25
42
 
43
+ before do
44
+ provider.stubs(:exists?).returns(false)
45
+ end
46
+
47
+ it "should add -g when no gid is specified and group already exists" do
48
+ Puppet::Util.stubs(:gid).returns(true)
49
+ resource[:ensure] = :present
50
+ provider.expects(:execute).with(includes('-g'), kind_of(Hash))
51
+ provider.create
52
+ end
53
+
26
54
  it "should add -o when allowdupe is enabled and the user is being created" do
27
55
  resource[:allowdupe] = true
28
- provider.expects(:execute).with(includes('-o'))
56
+ provider.expects(:execute).with(includes('-o'), kind_of(Hash))
29
57
  provider.create
30
58
  end
31
59
 
@@ -33,7 +61,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
33
61
  it "should add -r when system is enabled" do
34
62
  resource[:system] = :true
35
63
  provider.should be_system_users
36
- provider.expects(:execute).with(includes('-r'))
64
+ provider.expects(:execute).with(includes('-r'), kind_of(Hash))
37
65
  provider.create
38
66
  end
39
67
  end
@@ -42,7 +70,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
42
70
  it "should not add -r when system is enabled" do
43
71
  resource[:system] = :true
44
72
  provider.should_not be_system_users
45
- provider.expects(:execute).with(['/usr/sbin/useradd', 'myuser'])
73
+ provider.expects(:execute).with(['/usr/sbin/useradd', 'myuser'], kind_of(Hash))
46
74
  provider.create
47
75
  end
48
76
  end
@@ -51,10 +79,54 @@ describe Puppet::Type.type(:user).provider(:useradd) do
51
79
  described_class.has_feature :manages_password_age
52
80
  resource[:password_min_age] = 5
53
81
  resource[:password_max_age] = 10
54
- provider.expects(:execute).with(includes('/usr/sbin/useradd'))
82
+ provider.expects(:execute).with(includes('/usr/sbin/useradd'), kind_of(Hash))
55
83
  provider.expects(:execute).with(['/usr/bin/chage', '-m', 5, '-M', 10, 'myuser'])
56
84
  provider.create
57
85
  end
86
+
87
+ describe "on systems with the libuser and forcelocal=true" do
88
+ before do
89
+ described_class.has_feature :libuser
90
+ resource[:forcelocal] = true
91
+ end
92
+ it "should use luseradd instead of useradd" do
93
+ provider.expects(:execute).with(includes('/usr/sbin/luseradd'), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
94
+ provider.create
95
+ end
96
+
97
+ it "should NOT use -o when allowdupe=true" do
98
+ resource[:allowdupe] = :true
99
+ provider.expects(:execute).with(Not(includes('-o')), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
100
+ provider.create
101
+ end
102
+
103
+ it "should raise an exception for duplicate UIDs" do
104
+ resource[:uid] = 505
105
+ provider.stubs(:finduser).returns(true)
106
+ lambda { provider.create }.should raise_error(Puppet::Error, "UID 505 already exists, use allowdupe to force user creation")
107
+ end
108
+
109
+ it "should not use -G for luseradd and should call usermod with -G after luseradd when groups property is set" do
110
+ resource[:groups] = ['group1', 'group2']
111
+ provider.expects(:execute).with(Not(includes("-G")), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
112
+ provider.expects(:execute).with(includes('/usr/sbin/usermod'))
113
+ provider.create
114
+ end
115
+
116
+ it "should not use -m when managehome set" do
117
+ resource[:managehome] = :true
118
+ provider.expects(:execute).with(Not(includes('-m')), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
119
+ provider.create
120
+ end
121
+
122
+ it "should not use -e with luseradd, should call usermod with -e after luseradd when expiry is set" do
123
+ resource[:expiry] = '2038-01-24'
124
+ provider.expects(:execute).with(all_of(includes('/usr/sbin/luseradd'), Not(includes('-e'))), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
125
+ provider.expects(:execute).with(all_of(includes('/usr/sbin/usermod'), includes('-e')))
126
+ provider.create
127
+ end
128
+ end
129
+
58
130
  end
59
131
 
60
132
  describe "#uid=" do
@@ -65,11 +137,29 @@ describe Puppet::Type.type(:user).provider(:useradd) do
65
137
  end
66
138
  end
67
139
 
68
- describe "#check_allow_dup" do
69
- it "should check allow dup" do
70
- resource.expects(:allowdupe?)
71
- provider.check_allow_dup
140
+ describe "#expiry=" do
141
+ it "should pass expiry to usermod as MM/DD/YY when on Solaris" do
142
+ Facter.expects(:value).with(:operatingsystem).returns 'Solaris'
143
+ resource[:expiry] = '2012-10-31'
144
+ provider.expects(:execute).with(['/usr/sbin/usermod', '-e', '10/31/2012', 'myuser'])
145
+ provider.expiry = '2012-10-31'
146
+ end
147
+
148
+ it "should pass expiry to usermod as YYYY-MM-DD when not on Solaris" do
149
+ Facter.expects(:value).with(:operatingsystem).returns 'not_solaris'
150
+ resource[:expiry] = '2012-10-31'
151
+ provider.expects(:execute).with(['/usr/sbin/usermod', '-e', '2012-10-31', 'myuser'])
152
+ provider.expiry = '2012-10-31'
153
+ end
154
+
155
+ it "should use -e with an empty string when the expiry property is removed" do
156
+ resource[:expiry] = :absent
157
+ provider.expects(:execute).with(['/usr/sbin/usermod', '-e', '', 'myuser'])
158
+ provider.expiry = :absent
72
159
  end
160
+ end
161
+
162
+ describe "#check_allow_dup" do
73
163
 
74
164
  it "should return an array with a flag if dup is allowed" do
75
165
  resource[:allowdupe] = :true
@@ -111,10 +201,16 @@ describe Puppet::Type.type(:user).provider(:useradd) do
111
201
  describe "#check_manage_home" do
112
202
  it "should return an array with -m flag if home is managed" do
113
203
  resource[:managehome] = :true
114
- provider.expects(:execute).with(includes('-m'))
204
+ provider.expects(:execute).with(includes('-m'), kind_of(Hash))
115
205
  provider.create
116
206
  end
117
207
 
208
+ it "should return an array with -m flag if home is managed and the home directory is modified" do
209
+ resource[:managehome] = :true
210
+ provider.expects(:execute).with(includes('-m'))
211
+ provider.home = '/tmp/myuser'
212
+ end
213
+
118
214
  it "should return an array with -r flag if home is managed" do
119
215
  resource[:managehome] = :true
120
216
  resource[:ensure] = :absent
@@ -126,14 +222,14 @@ describe Puppet::Type.type(:user).provider(:useradd) do
126
222
  it "should use -M flag if home is not managed and on Redhat" do
127
223
  Facter.stubs(:value).with(:osfamily).returns("RedHat")
128
224
  resource[:managehome] = :false
129
- provider.expects(:execute).with(includes('-M'))
225
+ provider.expects(:execute).with(includes('-M'), kind_of(Hash))
130
226
  provider.create
131
227
  end
132
228
 
133
229
  it "should not use -M flag if home is not managed and not on Redhat" do
134
230
  Facter.stubs(:value).with(:osfamily).returns("not RedHat")
135
231
  resource[:managehome] = :false
136
- provider.expects(:execute).with(Not(includes('-M')))
232
+ provider.expects(:execute).with(Not(includes('-M')), kind_of(Hash))
137
233
  provider.create
138
234
  end
139
235
  end
@@ -143,6 +239,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
143
239
  resource[:allowdupe] = :true
144
240
  resource[:managehome] = :true
145
241
  resource[:system] = :true
242
+ resource[:groups] = [ 'somegroup' ]
146
243
  end
147
244
 
148
245
  it "should call command with :add" do
@@ -190,19 +287,86 @@ describe Puppet::Type.type(:user).provider(:useradd) do
190
287
  end
191
288
  end
192
289
 
193
- it "should return an array with full command" do
290
+ it "should return an array with the full command and expiry as MM/DD/YY when on Solaris" do
291
+ Facter.stubs(:value).with(:operatingsystem).returns 'Solaris'
194
292
  described_class.expects(:system_users?).returns true
195
- provider.stubs(:add_properties).returns(["-G", "somegroup"])
196
293
  resource[:expiry] = "2012-08-18"
294
+ provider.addcmd.must == ['/usr/sbin/useradd', '-e', '08/18/2012', '-G', 'somegroup', '-o', '-m', '-r', 'myuser']
295
+ end
197
296
 
198
- provider.addcmd.must == ["/usr/sbin/useradd", "-G", "somegroup", "-o", "-m", '-e 2012-08-18', "-r", "myuser"]
297
+ it "should return an array with the full command and expiry as YYYY-MM-DD when not on Solaris" do
298
+ Facter.stubs(:value).with(:operatingsystem).returns 'not_solaris'
299
+ described_class.expects(:system_users?).returns true
300
+ resource[:expiry] = "2012-08-18"
301
+ provider.addcmd.must == ['/usr/sbin/useradd', '-e', '2012-08-18', '-G', 'somegroup', '-o', '-m', '-r', 'myuser']
199
302
  end
200
303
 
201
304
  it "should return an array without -e if expiry is undefined full command" do
202
305
  described_class.expects(:system_users?).returns true
203
- provider.stubs(:add_properties).returns(["-G", "somegroup"])
204
306
  provider.addcmd.must == ["/usr/sbin/useradd", "-G", "somegroup", "-o", "-m", "-r", "myuser"]
205
307
  end
308
+
309
+ it "should pass -e \"\" if the expiry has to be removed" do
310
+ described_class.expects(:system_users?).returns true
311
+ resource[:expiry] = :absent
312
+
313
+ provider.addcmd.must == ['/usr/sbin/useradd', '-e', '', '-G', 'somegroup', '-o', '-m', '-r', 'myuser']
314
+ end
315
+ end
316
+
317
+ {
318
+ :password_min_age => 10,
319
+ :password_max_age => 20,
320
+ :password => '$6$FvW8Ib8h$qQMI/CR9m.QzIicZKutLpBgCBBdrch1IX0rTnxuI32K1pD9.RXZrmeKQlaC.RzODNuoUtPPIyQDufunvLOQWF0'
321
+ }.each_pair do |property, expected_value|
322
+ describe "##{property}" do
323
+ before :each do
324
+ resource # just to link the resource to the provider
325
+ end
326
+
327
+ it "should return absent if libshadow feature is not present" do
328
+ Puppet.features.stubs(:libshadow?).returns false
329
+ # Shadow::Passwd.expects(:getspnam).never # if we really don't have libshadow we dont have Shadow::Passwd either
330
+ provider.send(property).should == :absent
331
+ end
332
+
333
+ it "should return absent if user cannot be found", :if => Puppet.features.libshadow? do
334
+ Shadow::Passwd.expects(:getspnam).with('myuser').returns nil
335
+ provider.send(property).should == :absent
336
+ end
337
+
338
+ it "should return the correct value if libshadow is present", :if => Puppet.features.libshadow? do
339
+ Shadow::Passwd.expects(:getspnam).with('myuser').returns shadow_entry
340
+ provider.send(property).should == expected_value
341
+ end
342
+ end
343
+ end
344
+
345
+ describe '#expiry' do
346
+ before :each do
347
+ resource # just to link the resource to the provider
348
+ end
349
+
350
+ it "should return absent if libshadow feature is not present" do
351
+ Puppet.features.stubs(:libshadow?).returns false
352
+ provider.expiry.should == :absent
353
+ end
354
+
355
+ it "should return absent if user cannot be found", :if => Puppet.features.libshadow? do
356
+ Shadow::Passwd.expects(:getspnam).with('myuser').returns nil
357
+ provider.expiry.should == :absent
358
+ end
359
+
360
+ it "should return absent if expiry is -1", :if => Puppet.features.libshadow? do
361
+ shadow_entry.sp_expire = -1
362
+ Shadow::Passwd.expects(:getspnam).with('myuser').returns shadow_entry
363
+ provider.expiry.should == :absent
364
+ end
365
+
366
+ it "should convert to YYYY-MM-DD", :if => Puppet.features.libshadow? do
367
+ Shadow::Passwd.expects(:getspnam).with('myuser').returns shadow_entry
368
+ provider.expiry.should == '2013-01-01'
369
+ end
206
370
  end
207
371
 
208
372
  describe "#passcmd" do