puppet 3.2.4 → 3.3.0.rc2

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 (562) hide show
  1. data/COMMITTERS.md +101 -42
  2. data/Gemfile +15 -4
  3. data/README.md +5 -1
  4. data/README_DEVELOPER.md +117 -54
  5. data/Rakefile +4 -0
  6. data/ext/build_defaults.yaml +3 -2
  7. data/ext/debian/puppet-common.manpages +33 -1
  8. data/ext/gentoo/init.d/puppet +1 -1
  9. data/ext/gentoo/init.d/puppetmaster +1 -1
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/install.rb +2 -1
  12. data/lib/hiera/backend/puppet_backend.rb +1 -1
  13. data/lib/puppet/application.rb +10 -9
  14. data/lib/puppet/application/agent.rb +87 -93
  15. data/lib/puppet/application/apply.rb +0 -2
  16. data/lib/puppet/application/device.rb +3 -3
  17. data/lib/puppet/application/kick.rb +2 -2
  18. data/lib/puppet/application/master.rb +41 -19
  19. data/lib/puppet/application/queue.rb +5 -3
  20. data/lib/puppet/bindings.rb +147 -0
  21. data/lib/puppet/configurer.rb +25 -15
  22. data/lib/puppet/configurer/fact_handler.rb +2 -9
  23. data/lib/puppet/daemon.rb +44 -33
  24. data/lib/puppet/defaults.rb +57 -26
  25. data/lib/puppet/error.rb +1 -1
  26. data/lib/puppet/external/dot.rb +2 -2
  27. data/lib/puppet/external/nagios/base.rb +1 -6
  28. data/lib/puppet/external/pson/common.rb +2 -2
  29. data/lib/puppet/external/pson/pure/generator.rb +2 -2
  30. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  31. data/lib/puppet/face/ca.rb +1 -1
  32. data/lib/puppet/face/config.rb +1 -1
  33. data/lib/puppet/face/help.rb +2 -2
  34. data/lib/puppet/face/module/list.rb +2 -2
  35. data/lib/puppet/feature/rails.rb +1 -1
  36. data/lib/puppet/file_bucket/dipper.rb +0 -1
  37. data/lib/puppet/file_serving/base.rb +1 -1
  38. data/lib/puppet/file_serving/configuration/parser.rb +20 -14
  39. data/lib/puppet/forge.rb +0 -32
  40. data/lib/puppet/forge/cache.rb +1 -1
  41. data/lib/puppet/forge/errors.rb +3 -3
  42. data/lib/puppet/forge/repository.rb +7 -42
  43. data/lib/puppet/graph.rb +11 -0
  44. data/lib/puppet/graph/key.rb +26 -0
  45. data/lib/puppet/graph/prioritizer.rb +29 -0
  46. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  47. data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
  48. data/lib/puppet/graph/relationship_graph.rb +246 -0
  49. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  50. data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
  51. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  52. data/lib/puppet/indirector.rb +2 -2
  53. data/lib/puppet/indirector/catalog/compiler.rb +10 -7
  54. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
  55. data/lib/puppet/indirector/certificate/rest.rb +1 -1
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +2 -2
  58. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
  59. data/lib/puppet/indirector/facts/network_device.rb +1 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
  61. data/lib/puppet/indirector/indirection.rb +2 -2
  62. data/lib/puppet/indirector/memory.rb +9 -0
  63. data/lib/puppet/indirector/node/ldap.rb +2 -4
  64. data/lib/puppet/indirector/report/processor.rb +1 -2
  65. data/lib/puppet/indirector/report/rest.rb +1 -1
  66. data/lib/puppet/indirector/request.rb +32 -10
  67. data/lib/puppet/indirector/resource/rest.rb +1 -1
  68. data/lib/puppet/indirector/resource_type/parser.rb +31 -12
  69. data/lib/puppet/interface.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +7 -11
  71. data/lib/puppet/interface/option.rb +1 -1
  72. data/lib/puppet/interface/option_builder.rb +1 -1
  73. data/lib/puppet/metatype/manager.rb +2 -2
  74. data/lib/puppet/module.rb +7 -1
  75. data/lib/puppet/module_tool.rb +1 -1
  76. data/lib/puppet/module_tool/applications/application.rb +10 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +6 -3
  78. data/lib/puppet/module_tool/dependency.rb +2 -0
  79. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/metadata.rb +25 -13
  81. data/lib/puppet/module_tool/modulefile.rb +7 -7
  82. data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
  83. data/lib/puppet/module_tool/skeleton.rb +1 -1
  84. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
  85. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
  86. data/lib/puppet/network/auth_config_parser.rb +3 -0
  87. data/lib/puppet/network/authconfig.rb +0 -1
  88. data/lib/puppet/network/authorization.rb +1 -1
  89. data/lib/puppet/network/authstore.rb +2 -2
  90. data/lib/puppet/network/format_handler.rb +25 -114
  91. data/lib/puppet/network/format_support.rb +106 -0
  92. data/lib/puppet/network/formats.rb +10 -4
  93. data/lib/puppet/network/http/compression.rb +1 -1
  94. data/lib/puppet/network/http/connection.rb +76 -32
  95. data/lib/puppet/network/http/handler.rb +122 -61
  96. data/lib/puppet/network/http/rack/rest.rb +1 -1
  97. data/lib/puppet/network/http/webrick/rest.rb +9 -3
  98. data/lib/puppet/network/http_pool.rb +2 -2
  99. data/lib/puppet/network/resolver.rb +1 -0
  100. data/lib/puppet/network/server.rb +5 -81
  101. data/lib/puppet/node/environment.rb +256 -13
  102. data/lib/puppet/node/facts.rb +28 -2
  103. data/lib/puppet/parameter.rb +27 -18
  104. data/lib/puppet/parameter/boolean.rb +20 -0
  105. data/lib/puppet/parameter/path.rb +1 -1
  106. data/lib/puppet/parameter/value.rb +1 -1
  107. data/lib/puppet/parameter/value_collection.rb +1 -1
  108. data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
  109. data/lib/puppet/parser/ast/casestatement.rb +0 -3
  110. data/lib/puppet/parser/ast/lambda.rb +25 -6
  111. data/lib/puppet/parser/ast/leaf.rb +10 -3
  112. data/lib/puppet/parser/ast/nop.rb +1 -1
  113. data/lib/puppet/parser/ast/resource_override.rb +0 -2
  114. data/lib/puppet/parser/compiler.rb +92 -34
  115. data/lib/puppet/parser/files.rb +0 -5
  116. data/lib/puppet/parser/functions/create_resources.rb +23 -46
  117. data/lib/puppet/parser/functions/each.rb +0 -2
  118. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  119. data/lib/puppet/parser/functions/foreach.rb +0 -2
  120. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  121. data/lib/puppet/parser/functions/lookup.rb +44 -0
  122. data/lib/puppet/parser/functions/slice.rb +1 -1
  123. data/lib/puppet/parser/grammar.ra +0 -1
  124. data/lib/puppet/parser/lexer.rb +0 -1
  125. data/lib/puppet/parser/parser.rb +0 -1
  126. data/lib/puppet/parser/parser_factory.rb +3 -2
  127. data/lib/puppet/parser/parser_support.rb +1 -1
  128. data/lib/puppet/parser/relationship.rb +1 -1
  129. data/lib/puppet/parser/scope.rb +49 -24
  130. data/lib/puppet/parser/type_loader.rb +13 -18
  131. data/lib/puppet/pops.rb +45 -0
  132. data/lib/puppet/pops/adaptable.rb +2 -2
  133. data/lib/puppet/pops/adapters.rb +4 -0
  134. data/lib/puppet/pops/binder/binder.rb +421 -0
  135. data/lib/puppet/pops/binder/binder_issues.rb +142 -0
  136. data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
  137. data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
  138. data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
  139. data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
  140. data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
  141. data/lib/puppet/pops/binder/bindings_model.rb +215 -0
  142. data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
  143. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  144. data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
  145. data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
  146. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  147. data/lib/puppet/pops/binder/config/issues.rb +106 -0
  148. data/lib/puppet/pops/binder/hiera2.rb +10 -0
  149. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
  150. data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
  151. data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
  152. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
  153. data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
  154. data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
  155. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
  156. data/lib/puppet/pops/binder/injector.rb +688 -0
  157. data/lib/puppet/pops/binder/injector_entry.rb +53 -0
  158. data/lib/puppet/pops/binder/key_factory.rb +61 -0
  159. data/lib/puppet/pops/binder/producers.rb +829 -0
  160. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
  161. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  162. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
  163. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  164. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
  165. data/lib/puppet/pops/binder/system_bindings.rb +72 -0
  166. data/lib/puppet/pops/issue_reporter.rb +75 -0
  167. data/lib/puppet/pops/issues.rb +9 -5
  168. data/lib/puppet/pops/model/ast_transformer.rb +4 -4
  169. data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
  170. data/lib/puppet/pops/model/factory.rb +25 -13
  171. data/lib/puppet/pops/model/model.rb +1 -1
  172. data/lib/puppet/pops/model/tree_dumper.rb +2 -2
  173. data/lib/puppet/pops/parser/egrammar.ra +0 -1
  174. data/lib/puppet/pops/parser/eparser.rb +1 -2
  175. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  176. data/lib/puppet/pops/parser/lexer.rb +8 -6
  177. data/lib/puppet/pops/types/class_loader.rb +118 -0
  178. data/lib/puppet/pops/types/type_calculator.rb +557 -0
  179. data/lib/puppet/pops/types/type_factory.rb +147 -0
  180. data/lib/puppet/pops/types/type_parser.rb +117 -0
  181. data/lib/puppet/pops/types/types.rb +132 -0
  182. data/lib/puppet/pops/validation.rb +146 -17
  183. data/lib/puppet/pops/validation/checker3_1.rb +1 -1
  184. data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
  185. data/lib/puppet/property.rb +3 -3
  186. data/lib/puppet/property/keyvalue.rb +1 -1
  187. data/lib/puppet/provider.rb +2 -2
  188. data/lib/puppet/provider/aixobject.rb +19 -21
  189. data/lib/puppet/provider/augeas/augeas.rb +3 -1
  190. data/lib/puppet/provider/command.rb +2 -2
  191. data/lib/puppet/provider/group/aix.rb +1 -1
  192. data/lib/puppet/provider/group/ldap.rb +1 -1
  193. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  194. data/lib/puppet/provider/mailalias/aliases.rb +3 -8
  195. data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
  196. data/lib/puppet/provider/mount.rb +8 -3
  197. data/lib/puppet/provider/nameservice.rb +1 -1
  198. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  199. data/lib/puppet/provider/package/appdmg.rb +1 -1
  200. data/lib/puppet/provider/package/apt.rb +0 -1
  201. data/lib/puppet/provider/package/dpkg.rb +86 -32
  202. data/lib/puppet/provider/package/fink.rb +0 -2
  203. data/lib/puppet/provider/package/freebsd.rb +0 -2
  204. data/lib/puppet/provider/package/openbsd.rb +57 -10
  205. data/lib/puppet/provider/package/opkg.rb +0 -1
  206. data/lib/puppet/provider/package/pacman.rb +0 -1
  207. data/lib/puppet/provider/package/pip.rb +1 -1
  208. data/lib/puppet/provider/package/pkgdmg.rb +17 -6
  209. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  210. data/lib/puppet/provider/package/portage.rb +9 -1
  211. data/lib/puppet/provider/package/ports.rb +2 -2
  212. data/lib/puppet/provider/package/rpm.rb +29 -12
  213. data/lib/puppet/provider/package/rug.rb +1 -1
  214. data/lib/puppet/provider/package/urpmi.rb +11 -15
  215. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  216. data/lib/puppet/provider/package/windows/package.rb +1 -26
  217. data/lib/puppet/provider/package/yum.rb +1 -1
  218. data/lib/puppet/provider/package/zypper.rb +22 -3
  219. data/lib/puppet/provider/parsedfile.rb +1 -12
  220. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
  221. data/lib/puppet/provider/service/base.rb +1 -1
  222. data/lib/puppet/provider/service/daemontools.rb +3 -3
  223. data/lib/puppet/provider/service/debian.rb +1 -1
  224. data/lib/puppet/provider/service/init.rb +14 -20
  225. data/lib/puppet/provider/service/openrc.rb +3 -1
  226. data/lib/puppet/provider/service/redhat.rb +5 -8
  227. data/lib/puppet/provider/service/runit.rb +3 -2
  228. data/lib/puppet/provider/service/systemd.rb +1 -1
  229. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  230. data/lib/puppet/provider/sshkey/parsed.rb +0 -2
  231. data/lib/puppet/provider/user/aix.rb +25 -12
  232. data/lib/puppet/provider/user/directoryservice.rb +4 -7
  233. data/lib/puppet/provider/user/ldap.rb +0 -1
  234. data/lib/puppet/provider/user/user_role_add.rb +2 -0
  235. data/lib/puppet/provider/user/useradd.rb +1 -1
  236. data/lib/puppet/provider/zone/solaris.rb +1 -2
  237. data/lib/puppet/reference/metaparameter.rb +1 -1
  238. data/lib/puppet/reference/type.rb +1 -1
  239. data/lib/puppet/reports/rrdgraph.rb +1 -1
  240. data/lib/puppet/reports/tagmail.rb +1 -1
  241. data/lib/puppet/resource.rb +16 -4
  242. data/lib/puppet/resource/catalog.rb +111 -173
  243. data/lib/puppet/resource/status.rb +42 -3
  244. data/lib/puppet/resource/type.rb +33 -46
  245. data/lib/puppet/resource/type_collection.rb +19 -15
  246. data/lib/puppet/run.rb +5 -1
  247. data/lib/puppet/scheduler/scheduler.rb +14 -15
  248. data/lib/puppet/settings.rb +78 -41
  249. data/lib/puppet/settings/boolean_setting.rb +0 -2
  250. data/lib/puppet/settings/config_file.rb +0 -2
  251. data/lib/puppet/settings/directory_setting.rb +0 -2
  252. data/lib/puppet/settings/duration_setting.rb +0 -2
  253. data/lib/puppet/settings/enum_setting.rb +16 -0
  254. data/lib/puppet/settings/file_setting.rb +0 -2
  255. data/lib/puppet/settings/path_setting.rb +0 -2
  256. data/lib/puppet/settings/string_setting.rb +0 -3
  257. data/lib/puppet/settings/terminus_setting.rb +0 -2
  258. data/lib/puppet/ssl/certificate_authority.rb +102 -9
  259. data/lib/puppet/test/test_helper.rb +1 -0
  260. data/lib/puppet/transaction.rb +130 -292
  261. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  262. data/lib/puppet/transaction/event.rb +16 -1
  263. data/lib/puppet/transaction/report.rb +34 -14
  264. data/lib/puppet/transaction/resource_harness.rb +16 -19
  265. data/lib/puppet/type.rb +59 -53
  266. data/lib/puppet/type/component.rb +0 -2
  267. data/lib/puppet/type/cron.rb +13 -2
  268. data/lib/puppet/type/exec.rb +5 -7
  269. data/lib/puppet/type/file.rb +9 -32
  270. data/lib/puppet/type/file/content.rb +4 -1
  271. data/lib/puppet/type/file/ctime.rb +3 -1
  272. data/lib/puppet/type/file/ensure.rb +1 -1
  273. data/lib/puppet/type/file/mode.rb +0 -1
  274. data/lib/puppet/type/file/mtime.rb +2 -1
  275. data/lib/puppet/type/group.rb +7 -9
  276. data/lib/puppet/type/host.rb +1 -2
  277. data/lib/puppet/type/mcx.rb +0 -1
  278. data/lib/puppet/type/mount.rb +38 -6
  279. data/lib/puppet/type/package.rb +2 -2
  280. data/lib/puppet/type/resources.rb +5 -4
  281. data/lib/puppet/type/schedule.rb +1 -4
  282. data/lib/puppet/type/selmodule.rb +1 -1
  283. data/lib/puppet/type/service.rb +1 -3
  284. data/lib/puppet/type/tidy.rb +3 -3
  285. data/lib/puppet/type/user.rb +9 -13
  286. data/lib/puppet/type/yumrepo.rb +11 -7
  287. data/lib/puppet/util.rb +14 -7
  288. data/lib/puppet/util/autoload.rb +0 -1
  289. data/lib/puppet/util/backups.rb +1 -3
  290. data/lib/puppet/util/classgen.rb +1 -1
  291. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
  292. data/lib/puppet/util/command_line/trollop.rb +1 -1
  293. data/lib/puppet/util/constant_inflector.rb +1 -2
  294. data/lib/puppet/util/errors.rb +1 -0
  295. data/lib/puppet/util/file_watcher.rb +28 -0
  296. data/lib/puppet/util/fileparsing.rb +1 -3
  297. data/lib/puppet/util/filetype.rb +0 -1
  298. data/lib/puppet/util/http_proxy.rb +38 -0
  299. data/lib/puppet/util/ldap/manager.rb +1 -2
  300. data/lib/puppet/util/log.rb +31 -10
  301. data/lib/puppet/util/log/destinations.rb +0 -50
  302. data/lib/puppet/util/metric.rb +8 -1
  303. data/lib/puppet/util/monkey_patches.rb +14 -148
  304. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  305. data/lib/puppet/util/network_device/config.rb +6 -9
  306. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  307. data/lib/puppet/util/pidlock.rb +3 -0
  308. data/lib/puppet/util/posix.rb +1 -1
  309. data/lib/puppet/util/profiler.rb +1 -1
  310. data/lib/puppet/util/rdoc.rb +1 -1
  311. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
  312. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
  313. data/lib/puppet/util/retryaction.rb +0 -1
  314. data/lib/puppet/util/symbolic_file_mode.rb +5 -1
  315. data/lib/puppet/util/tagging.rb +0 -2
  316. data/lib/puppet/util/warnings.rb +3 -0
  317. data/lib/puppet/util/watched_file.rb +37 -0
  318. data/lib/puppet/util/watcher.rb +17 -0
  319. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  320. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  321. data/lib/puppet/util/watcher/timer.rb +19 -0
  322. data/lib/puppet/util/windows/user.rb +1 -1
  323. data/lib/puppet/version.rb +1 -1
  324. data/lib/puppetx.rb +109 -0
  325. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  326. data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
  327. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  328. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
  329. data/lib/semver.rb +1 -1
  330. data/man/man8/puppet-kick.8 +1 -1
  331. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  332. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
  333. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
  334. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
  335. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
  336. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
  337. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
  338. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
  339. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
  340. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
  341. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
  342. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
  343. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
  344. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
  345. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
  346. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
  347. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
  348. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
  349. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
  350. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  351. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
  352. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
  353. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
  354. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
  355. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
  356. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
  357. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
  358. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
  359. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
  360. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
  361. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
  362. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
  363. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
  364. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  365. data/spec/integration/agent/logging_spec.rb +178 -0
  366. data/spec/integration/configurer_spec.rb +1 -1
  367. data/spec/integration/defaults_spec.rb +0 -6
  368. data/spec/integration/network/authconfig_spec.rb +19 -0
  369. data/spec/integration/network/server/webrick_spec.rb +10 -11
  370. data/spec/integration/parser/catalog_spec.rb +85 -0
  371. data/spec/integration/provider/cron/crontab_spec.rb +11 -0
  372. data/spec/integration/provider/mount_spec.rb +1 -0
  373. data/spec/integration/transaction_spec.rb +8 -8
  374. data/spec/integration/type/file_spec.rb +1 -1
  375. data/spec/integration/util/settings_spec.rb +58 -11
  376. data/spec/lib/matchers/include_in_order.rb +21 -0
  377. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  378. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  379. data/spec/lib/puppet_spec/compiler.rb +24 -0
  380. data/spec/lib/puppet_spec/pops.rb +16 -0
  381. data/spec/spec_helper.rb +0 -1
  382. data/spec/unit/application/agent_spec.rb +145 -145
  383. data/spec/unit/application/apply_spec.rb +1 -1
  384. data/spec/unit/application/doc_spec.rb +1 -1
  385. data/spec/unit/application/face_base_spec.rb +3 -3
  386. data/spec/unit/application/facts_spec.rb +1 -0
  387. data/spec/unit/application/master_spec.rb +0 -15
  388. data/spec/unit/application/queue_spec.rb +6 -12
  389. data/spec/unit/application/resource_spec.rb +1 -1
  390. data/spec/unit/configurer/fact_handler_spec.rb +19 -50
  391. data/spec/unit/configurer_spec.rb +23 -7
  392. data/spec/unit/daemon_spec.rb +97 -121
  393. data/spec/unit/defaults_spec.rb +44 -0
  394. data/spec/unit/face/node_spec.rb +2 -2
  395. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
  396. data/spec/unit/file_serving/configuration_spec.rb +2 -2
  397. data/spec/unit/file_serving/mount/file_spec.rb +4 -4
  398. data/spec/unit/forge/repository_spec.rb +9 -29
  399. data/spec/unit/graph/key_spec.rb +41 -0
  400. data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
  401. data/spec/unit/graph/relationship_graph_spec.rb +393 -0
  402. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  403. data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
  404. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  405. data/spec/unit/hiera_puppet_spec.rb +1 -1
  406. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
  407. data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
  408. data/spec/unit/indirector/face_spec.rb +1 -1
  409. data/spec/unit/indirector/facts/facter_spec.rb +11 -1
  410. data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
  411. data/spec/unit/indirector/hiera_spec.rb +1 -1
  412. data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
  413. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
  414. data/spec/unit/indirector/request_spec.rb +92 -39
  415. data/spec/unit/indirector/rest_spec.rb +1 -0
  416. data/spec/unit/indirector_spec.rb +2 -2
  417. data/spec/unit/interface/option_builder_spec.rb +1 -0
  418. data/spec/unit/interface/option_spec.rb +1 -0
  419. data/spec/unit/interface_spec.rb +2 -2
  420. data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
  421. data/spec/unit/module_tool/metadata_spec.rb +13 -0
  422. data/spec/unit/network/authstore_spec.rb +1 -1
  423. data/spec/unit/network/format_handler_spec.rb +33 -282
  424. data/spec/unit/network/format_support_spec.rb +199 -0
  425. data/spec/unit/network/formats_spec.rb +2 -2
  426. data/spec/unit/network/http/connection_spec.rb +88 -7
  427. data/spec/unit/network/http/handler_spec.rb +271 -249
  428. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  429. data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
  430. data/spec/unit/network/http_pool_spec.rb +40 -0
  431. data/spec/unit/network/server_spec.rb +18 -207
  432. data/spec/unit/node/facts_spec.rb +68 -17
  433. data/spec/unit/other/selinux_spec.rb +24 -20
  434. data/spec/unit/parameter/boolean_spec.rb +25 -0
  435. data/spec/unit/parameter/value_collection_spec.rb +7 -7
  436. data/spec/unit/parameter_spec.rb +10 -13
  437. data/spec/unit/parser/ast/function_spec.rb +4 -4
  438. data/spec/unit/parser/ast/leaf_spec.rb +45 -6
  439. data/spec/unit/parser/collector_spec.rb +3 -3
  440. data/spec/unit/parser/compiler_spec.rb +4 -3
  441. data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
  442. data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
  443. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  444. data/spec/unit/parser/functions/lookup_spec.rb +96 -0
  445. data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
  446. data/spec/unit/parser/functions/split_spec.rb +2 -2
  447. data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
  448. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
  449. data/spec/unit/parser/functions_spec.rb +7 -7
  450. data/spec/unit/parser/lexer_spec.rb +1 -1
  451. data/spec/unit/parser/methods/collect_spec.rb +43 -0
  452. data/spec/unit/parser/resource_spec.rb +9 -9
  453. data/spec/unit/parser/scope_spec.rb +45 -2
  454. data/spec/unit/parser/type_loader_spec.rb +159 -175
  455. data/spec/unit/pops/binder/binder_spec.rb +62 -0
  456. data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
  457. data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
  458. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  459. data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
  460. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
  461. data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
  462. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
  463. data/spec/unit/pops/binder/injector_spec.rb +789 -0
  464. data/spec/unit/pops/containment_spec.rb +1 -0
  465. data/spec/unit/pops/issues_spec.rb +1 -1
  466. data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
  467. data/spec/unit/pops/parser/lexer_spec.rb +1 -1
  468. data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
  469. data/spec/unit/pops/parser/parser_spec.rb +1 -1
  470. data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
  471. data/spec/unit/pops/types/type_factory_spec.rb +65 -0
  472. data/spec/unit/pops/types/type_parser_spec.rb +93 -0
  473. data/spec/unit/property/list_spec.rb +1 -1
  474. data/spec/unit/property/ordered_list_spec.rb +1 -1
  475. data/spec/unit/provider/aixobject_spec.rb +101 -0
  476. data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
  477. data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
  478. data/spec/unit/provider/mount/parsed_spec.rb +44 -56
  479. data/spec/unit/provider/mount_spec.rb +11 -2
  480. data/spec/unit/provider/naginator_spec.rb +8 -0
  481. data/spec/unit/provider/package/apt_spec.rb +5 -1
  482. data/spec/unit/provider/package/aptitude_spec.rb +9 -5
  483. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  484. data/spec/unit/provider/package/dpkg_spec.rb +274 -99
  485. data/spec/unit/provider/package/openbsd_spec.rb +84 -1
  486. data/spec/unit/provider/package/opkg_spec.rb +3 -3
  487. data/spec/unit/provider/package/pip_spec.rb +16 -0
  488. data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
  489. data/spec/unit/provider/package/rpm_spec.rb +112 -21
  490. data/spec/unit/provider/package/urpmi.rb +80 -0
  491. data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
  492. data/spec/unit/provider/package/yum_spec.rb +85 -0
  493. data/spec/unit/provider/package/zypper_spec.rb +25 -6
  494. data/spec/unit/provider/parsedfile_spec.rb +3 -2
  495. data/spec/unit/provider/service/init_spec.rb +10 -10
  496. data/spec/unit/provider/service/openrc_spec.rb +16 -0
  497. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  498. data/spec/unit/provider/service/redhat_spec.rb +7 -0
  499. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
  500. data/spec/unit/provider/user/aix_spec.rb +89 -0
  501. data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
  502. data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
  503. data/spec/unit/provider_spec.rb +2 -13
  504. data/spec/unit/reports/http_spec.rb +1 -1
  505. data/spec/unit/resource/catalog_spec.rb +23 -97
  506. data/spec/unit/resource/resource_type.json +34 -0
  507. data/spec/unit/resource/status_spec.rb +56 -0
  508. data/spec/unit/resource/type_collection_spec.rb +6 -6
  509. data/spec/unit/resource/type_spec.rb +25 -5
  510. data/spec/unit/resource_spec.rb +68 -24
  511. data/spec/unit/run_spec.rb +16 -0
  512. data/spec/unit/scheduler/scheduler_spec.rb +14 -27
  513. data/spec/unit/semver_spec.rb +5 -0
  514. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  515. data/spec/unit/settings_spec.rb +53 -44
  516. data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
  517. data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
  518. data/spec/unit/transaction/event_manager_spec.rb +2 -2
  519. data/spec/unit/transaction/event_spec.rb +57 -0
  520. data/spec/unit/transaction/report_spec.rb +66 -0
  521. data/spec/unit/transaction/resource_harness_spec.rb +27 -20
  522. data/spec/unit/transaction_spec.rb +182 -390
  523. data/spec/unit/type/augeas_spec.rb +3 -3
  524. data/spec/unit/type/component_spec.rb +0 -9
  525. data/spec/unit/type/computer_spec.rb +1 -1
  526. data/spec/unit/type/cron_spec.rb +2 -2
  527. data/spec/unit/type/exec_spec.rb +4 -2
  528. data/spec/unit/type/file/content_spec.rb +11 -0
  529. data/spec/unit/type/file/group_spec.rb +1 -1
  530. data/spec/unit/type/file_spec.rb +16 -8
  531. data/spec/unit/type/mount_spec.rb +445 -259
  532. data/spec/unit/type/package_spec.rb +4 -4
  533. data/spec/unit/type/resources_spec.rb +30 -1
  534. data/spec/unit/type/user_spec.rb +26 -3
  535. data/spec/unit/type/yumrepo_spec.rb +7 -27
  536. data/spec/unit/type/zone_spec.rb +4 -1
  537. data/spec/unit/type_spec.rb +66 -33
  538. data/spec/unit/util/backups_spec.rb +3 -3
  539. data/spec/unit/util/http_proxy_spec.rb +83 -0
  540. data/spec/unit/util/log_spec.rb +79 -8
  541. data/spec/unit/util/metric_spec.rb +12 -0
  542. data/spec/unit/util/monkey_patches_spec.rb +6 -0
  543. data/spec/unit/util/network_device/config_spec.rb +26 -64
  544. data/spec/unit/util/pidlock_spec.rb +4 -1
  545. data/spec/unit/util/tagging_spec.rb +5 -9
  546. data/spec/unit/util/warnings_spec.rb +1 -1
  547. data/spec/unit/util/watched_file_spec.rb +52 -0
  548. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  549. data/spec/unit/util/watcher_spec.rb +56 -0
  550. data/spec/unit/util_spec.rb +16 -0
  551. metadata +2767 -2576
  552. data/ext/debian/puppet.manpages +0 -32
  553. data/ext/osx/PackageInfo.plist +0 -36
  554. data/ext/osx/createpackage.sh +0 -187
  555. data/ext/redhat/rundir-perms.patch +0 -28
  556. data/lib/puppet/external/base64.rb +0 -19
  557. data/lib/puppet/util/graph.rb +0 -27
  558. data/lib/puppet/util/loadedfile.rb +0 -61
  559. data/lib/puppet/util/log_paths.rb +0 -22
  560. data/lib/puppet/util/subclass_loader.rb +0 -78
  561. data/spec/monkey_patches/publicize_methods.rb +0 -11
  562. data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+
4
+ describe 'The type factory' do
5
+ context 'when creating' do
6
+ it 'integer() returns PIntegerType' do
7
+ Puppet::Pops::Types::TypeFactory.integer().class().should == Puppet::Pops::Types::PIntegerType
8
+ end
9
+
10
+ it 'float() returns PFloatType' do
11
+ Puppet::Pops::Types::TypeFactory.float().class().should == Puppet::Pops::Types::PFloatType
12
+ end
13
+
14
+ it 'string() returns PStringType' do
15
+ Puppet::Pops::Types::TypeFactory.string().class().should == Puppet::Pops::Types::PStringType
16
+ end
17
+
18
+ it 'boolean() returns PBooleanType' do
19
+ Puppet::Pops::Types::TypeFactory.boolean().class().should == Puppet::Pops::Types::PBooleanType
20
+ end
21
+
22
+ it 'pattern() returns PPatternType' do
23
+ Puppet::Pops::Types::TypeFactory.pattern().class().should == Puppet::Pops::Types::PPatternType
24
+ end
25
+
26
+ it 'literal() returns PLiteralType' do
27
+ Puppet::Pops::Types::TypeFactory.literal().class().should == Puppet::Pops::Types::PLiteralType
28
+ end
29
+
30
+ it 'data() returns PDataType' do
31
+ Puppet::Pops::Types::TypeFactory.data().class().should == Puppet::Pops::Types::PDataType
32
+ end
33
+
34
+ it 'array_of(fixnum) returns PArrayType[PIntegerType]' do
35
+ at = Puppet::Pops::Types::TypeFactory.array_of(1)
36
+ at.class().should == Puppet::Pops::Types::PArrayType
37
+ at.element_type.class.should == Puppet::Pops::Types::PIntegerType
38
+ end
39
+
40
+ it 'array_of(PIntegerType) returns PArrayType[PIntegerType]' do
41
+ at = Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::PIntegerType.new())
42
+ at.class().should == Puppet::Pops::Types::PArrayType
43
+ at.element_type.class.should == Puppet::Pops::Types::PIntegerType
44
+ end
45
+
46
+ it 'array_of_data returns PArrayType[PDataType]' do
47
+ at = Puppet::Pops::Types::TypeFactory.array_of_data
48
+ at.class().should == Puppet::Pops::Types::PArrayType
49
+ at.element_type.class.should == Puppet::Pops::Types::PDataType
50
+ end
51
+
52
+ it 'hash_of_data returns PHashType[PLiteralType,PDataType]' do
53
+ ht = Puppet::Pops::Types::TypeFactory.hash_of_data
54
+ ht.class().should == Puppet::Pops::Types::PHashType
55
+ ht.key_type.class.should == Puppet::Pops::Types::PLiteralType
56
+ ht.element_type.class.should == Puppet::Pops::Types::PDataType
57
+ end
58
+
59
+ it 'ruby(1) returns PRubyType[\'Fixnum\']' do
60
+ ht = Puppet::Pops::Types::TypeFactory.ruby(1)
61
+ ht.class().should == Puppet::Pops::Types::PRubyType
62
+ ht.ruby_class.should == 'Fixnum'
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+
4
+ describe Puppet::Pops::Types::TypeParser do
5
+ extend RSpec::Matchers::DSL
6
+
7
+ let(:parser) { Puppet::Pops::Types::TypeParser.new }
8
+ let(:types) { Puppet::Pops::Types::TypeFactory }
9
+
10
+ it "rejects a puppet expression" do
11
+ expect { parser.parse("1 + 1") }.to raise_error(Puppet::ParseError, /The expression <1 \+ 1> is not a valid type specification/)
12
+ end
13
+
14
+ it "rejects a empty type specification" do
15
+ expect { parser.parse("") }.to raise_error(Puppet::ParseError, /The expression <> is not a valid type specification/)
16
+ end
17
+
18
+ it "rejects an invalid type simple type" do
19
+ expect { parser.parse("NotAType") }.to raise_type_error_for("NotAType")
20
+ end
21
+
22
+ it "rejects an unknown parameterized type" do
23
+ expect { parser.parse("NotAType[Integer]") }.to raise_type_error_for("NotAType")
24
+ end
25
+
26
+ it "does not support types that do not make sense in the puppet language" do
27
+ expect { parser.parse("Object") }.to raise_type_error_for("Object")
28
+ expect { parser.parse("Collection[Integer]") }.to raise_type_error_for("Collection")
29
+ end
30
+
31
+ it "parses a simple, unparameterized type into the type object" do
32
+ expect(the_type_parsed_from(types.integer)).to be_the_type(types.integer)
33
+ expect(the_type_parsed_from(types.float)).to be_the_type(types.float)
34
+ expect(the_type_parsed_from(types.string)).to be_the_type(types.string)
35
+ expect(the_type_parsed_from(types.boolean)).to be_the_type(types.boolean)
36
+ expect(the_type_parsed_from(types.pattern)).to be_the_type(types.pattern)
37
+ expect(the_type_parsed_from(types.data)).to be_the_type(types.data)
38
+ end
39
+
40
+ it "interprets an unparameterized Array as an Array of Data" do
41
+ expect(parser.parse("Array")).to be_the_type(types.array_of_data)
42
+ end
43
+
44
+ it "interprets an unparameterized Hash as a Hash of Literal to Data" do
45
+ expect(parser.parse("Hash")).to be_the_type(types.hash_of_data)
46
+ end
47
+
48
+ it "interprets a parameterized Hash[t] as a Hash of Literal to t" do
49
+ expect(parser.parse("Hash[Integer]")).to be_the_type(types.hash_of(types.integer))
50
+ end
51
+
52
+ it "parses a parameterized type into the type object" do
53
+ parameterized_array = types.array_of(types.integer)
54
+ parameterized_hash = types.hash_of(types.integer, types.boolean)
55
+
56
+ expect(the_type_parsed_from(parameterized_array)).to be_the_type(parameterized_array)
57
+ expect(the_type_parsed_from(parameterized_hash)).to be_the_type(parameterized_hash)
58
+ end
59
+
60
+ it "rejects an array spec with the wrong number of parameters" do
61
+ expect { parser.parse("Array[Integer, Integer]") }.to raise_the_parameter_error("Array", 1, 2)
62
+ expect { parser.parse("Hash[Integer, Integer, Integer]") }.to raise_the_parameter_error("Hash", "1 or 2", 3)
63
+ end
64
+
65
+ matcher :be_the_type do |type|
66
+ calc = Puppet::Pops::Types::TypeCalculator.new
67
+
68
+ match do |actual|
69
+ calc.assignable?(actual, type) && calc.assignable?(type, actual)
70
+ end
71
+
72
+ failure_message_for_should do |actual|
73
+ "expected #{calc.string(type)}, but was #{calc.string(actual)}"
74
+ end
75
+ end
76
+
77
+ def raise_the_parameter_error(type, required, given)
78
+ raise_error(Puppet::ParseError, /#{type} requires #{required}, #{given} provided/)
79
+ end
80
+
81
+ def raise_type_error_for(type_name)
82
+ raise_error(Puppet::ParseError, /Unknown type <#{type_name}>/)
83
+ end
84
+
85
+ def the_type_parsed_from(type)
86
+ parser.parse(the_type_spec_for(type))
87
+ end
88
+
89
+ def the_type_spec_for(type)
90
+ calc = Puppet::Pops::Types::TypeCalculator.new
91
+ calc.string(type)
92
+ end
93
+ end
@@ -44,7 +44,7 @@ describe list_class do
44
44
  @property.add_should_with_current(["foo"], ["bar"]).should == ["foo", "bar"]
45
45
  end
46
46
 
47
- it "should return should if current is not a array" do
47
+ it "should return should if current is not an array" do
48
48
  @property.add_should_with_current(["foo"], :absent).should == ["foo"]
49
49
  end
50
50
 
@@ -24,7 +24,7 @@ describe ordered_list_class do
24
24
  @property.add_should_with_current(["should"], ["current"]).should == ["should", "current"]
25
25
  end
26
26
 
27
- it "should return 'should' if current is not a array" do
27
+ it "should return 'should' if current is not an array" do
28
28
  @property.add_should_with_current(["should"], :absent).should == ["should"]
29
29
  end
30
30
 
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+ require 'puppet/provider/aixobject'
3
+
4
+ describe Puppet::Provider::AixObject do
5
+ let(:resource) do
6
+ Puppet::Type.type(:user).new(
7
+ :name => 'test_aix_user',
8
+ :ensure => :present
9
+ )
10
+ end
11
+
12
+ let(:provider) do
13
+ provider = Puppet::Provider::AixObject.new resource
14
+ end
15
+
16
+ describe "base provider methods" do
17
+ [ :lscmd,
18
+ :addcmd,
19
+ :modifycmd,
20
+ :deletecmd
21
+ ].each do |method|
22
+ it "should raise an error when unimplemented method #{method} called" do
23
+ lambda do
24
+ provider.send(method)
25
+ end.should raise_error(Puppet::Error, /not defined/)
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "attribute mapping methods" do
31
+ let(:mapping) do
32
+ [
33
+ { :aix_attr => :test_aix_property,
34
+ :puppet_prop => :test_puppet_property,
35
+ :to => :test_convert_to_aix_method,
36
+ :from => :test_convert_to_puppet_method
37
+ }
38
+ ]
39
+ end
40
+
41
+ before(:each) do
42
+ provider.class.attribute_mapping = mapping
43
+ end
44
+
45
+ describe ".attribute_mapping_to" do
46
+ before(:each) do
47
+ if provider.class.instance_variable_defined? :@attribute_mapping_to
48
+ provider.class.send(:remove_instance_variable, :@attribute_mapping_to)
49
+ end
50
+ end
51
+
52
+ it "should create a hash where the key is the puppet property and the value is a hash with the aix property and the conversion method" do
53
+ hash = provider.class.attribute_mapping_to
54
+ hash.should have_key :test_puppet_property
55
+ sub_hash = hash[:test_puppet_property]
56
+ sub_hash.should have_key :key
57
+ sub_hash.should have_key :method
58
+ sub_hash[:key].should == :test_aix_property
59
+ sub_hash[:method].should == :test_convert_to_aix_method
60
+ end
61
+
62
+ it "should cache results between calls" do
63
+ provider.class.expects(:attribute_mapping).returns(mapping).once
64
+ provider.class.attribute_mapping_to
65
+ provider.class.attribute_mapping_to
66
+ end
67
+ end
68
+
69
+ describe ".attribute_mapping_from" do
70
+ before(:each) do
71
+ if provider.class.instance_variable_defined? :@attribute_mapping_from
72
+ provider.class.send(:remove_instance_variable, :@attribute_mapping_from)
73
+ end
74
+ end
75
+
76
+ it "should create a hash where the key is the aix property and the value is a hash with the puppet property and the conversion method" do
77
+ hash = provider.class.attribute_mapping_from
78
+ hash.should have_key :test_aix_property
79
+ sub_hash = hash[:test_aix_property]
80
+ sub_hash.should have_key :key
81
+ sub_hash.should have_key :method
82
+ sub_hash[:key].should == :test_puppet_property
83
+ sub_hash[:method].should == :test_convert_to_puppet_method
84
+ end
85
+
86
+ it "should cache results between calls" do
87
+ provider.class.expects(:attribute_mapping).returns(mapping).once
88
+ provider.class.attribute_mapping_from
89
+ provider.class.attribute_mapping_from
90
+ end
91
+ end
92
+ end
93
+
94
+ describe "#getinfo" do
95
+ it "should only execute the system command once" do
96
+ provider.stubs(:lscmd).returns "ls"
97
+ provider.expects(:execute).returns("bob=frank").once
98
+ provider.getinfo(true)
99
+ end
100
+ end
101
+ end
@@ -650,28 +650,39 @@ describe provider_class do
650
650
  before do
651
651
  @augeas.expects(:match).with("/augeas//error").returns(["/augeas/files/foo/error"])
652
652
  @augeas.expects(:match).with("/augeas/files/foo/error/*").returns(["/augeas/files/foo/error/path", "/augeas/files/foo/error/message"])
653
+ @augeas.expects(:get).with("/augeas/files/foo/error").returns("some_failure")
653
654
  @augeas.expects(:get).with("/augeas/files/foo/error/path").returns("/foo")
654
655
  @augeas.expects(:get).with("/augeas/files/foo/error/message").returns("Failed to...")
655
656
  end
656
657
 
657
658
  it "and output to debug" do
658
- @provider.expects(:debug).times(4)
659
+ @provider.expects(:debug).times(5)
659
660
  @provider.print_load_errors
660
661
  end
661
662
 
662
663
  it "and output a warning and to debug" do
663
664
  @provider.expects(:warning).once()
664
- @provider.expects(:debug).times(3)
665
+ @provider.expects(:debug).times(4)
665
666
  @provider.print_load_errors(:warning => true)
666
667
  end
667
668
  end
668
669
 
670
+ it "should find load errors from lenses" do
671
+ @augeas.expects(:match).with("/augeas//error").returns(["/augeas/load/Xfm/error"])
672
+ @augeas.expects(:match).with("/augeas/load/Xfm/error/*").returns([])
673
+ @augeas.expects(:get).with("/augeas/load/Xfm/error").returns(["Could not find lens php.aug"])
674
+ @provider.expects(:warning).once()
675
+ @provider.expects(:debug).twice()
676
+ @provider.print_load_errors(:warning => true)
677
+ end
678
+
669
679
  it "should find save errors and output to debug" do
670
680
  @augeas.expects(:match).with("/augeas//error[. = 'put_failed']").returns(["/augeas/files/foo/error"])
671
681
  @augeas.expects(:match).with("/augeas/files/foo/error/*").returns(["/augeas/files/foo/error/path", "/augeas/files/foo/error/message"])
682
+ @augeas.expects(:get).with("/augeas/files/foo/error").returns("some_failure")
672
683
  @augeas.expects(:get).with("/augeas/files/foo/error/path").returns("/foo")
673
684
  @augeas.expects(:get).with("/augeas/files/foo/error/message").returns("Failed to...")
674
- @provider.expects(:debug).times(4)
685
+ @provider.expects(:debug).times(5)
675
686
  @provider.print_put_errors
676
687
  end
677
688
  end
@@ -43,101 +43,136 @@ describe provider_class do
43
43
  @provider.should respond_to(:exists?)
44
44
  end
45
45
 
46
- it "should have an content method." do
46
+ it "should have a content method." do
47
47
  @provider.should respond_to(:content)
48
48
  end
49
49
 
50
- it "should have an content= method." do
50
+ it "should have a content= method." do
51
51
  @provider.should respond_to(:content=)
52
52
  end
53
53
 
54
54
  describe "when managing the resource" do
55
55
  it "should execute external command dscl from :create" do
56
+ @provider.stubs(:has_mcx?).returns(false)
56
57
  @provider.class.expects(:dscl).returns('').once
57
58
  @provider.create
58
59
  end
60
+
61
+ it "deletes existing mcx prior to import from :create" do
62
+ @provider.stubs(:has_mcx?).returns(true)
63
+ @provider.class.expects(:dscl).with('localhost', '-mcxdelete', @ds_path, anything()).once
64
+ @provider.class.expects(:dscl).with('localhost', '-mcximport', @ds_path, anything()).once
65
+ @provider.create
66
+ end
67
+
59
68
  it "should execute external command dscl from :destroy" do
60
69
  @provider.class.expects(:dscl).with('localhost', '-mcxdelete', @ds_path).returns('').once
61
70
  @provider.destroy
62
71
  end
72
+
63
73
  it "should execute external command dscl from :exists?" do
64
74
  @provider.class.expects(:dscl).with('localhost', '-mcxexport', @ds_path).returns('').once
65
75
  @provider.exists?
66
76
  end
77
+
67
78
  it "should execute external command dscl from :content" do
68
79
  @provider.class.expects(:dscl).with('localhost', '-mcxexport', @ds_path).returns('')
69
80
  @provider.content
70
81
  end
82
+
71
83
  it "should execute external command dscl from :content=" do
72
- @provider.class.expects(:dscl).returns('')
84
+ @provider.stubs(:has_mcx?).returns(false)
85
+ @provider.class.expects(:dscl).returns('').once
86
+ @provider.content=''
87
+ end
88
+
89
+ it "deletes existing mcx prior to import from :content=" do
90
+ @provider.stubs(:has_mcx?).returns(true)
91
+ @provider.class.expects(:dscl).with('localhost', '-mcxdelete', @ds_path, anything()).once
92
+ @provider.class.expects(:dscl).with('localhost', '-mcximport', @ds_path, anything()).once
73
93
  @provider.content=''
74
94
  end
75
95
  end
76
96
 
77
97
  describe "when creating and parsing the name for ds_type" do
78
98
  before :each do
99
+ @provider.class.stubs(:dscl).returns('')
79
100
  @resource.stubs(:[]).with(:name).returns "/Foo/bar"
80
101
  end
102
+
81
103
  it "should not accept /Foo/bar" do
82
- lambda { @provider.create }.should raise_error(MCXContentProviderException)
104
+ expect { @provider.create }.to raise_error(MCXContentProviderException)
83
105
  end
106
+
84
107
  it "should accept /Foo/bar with ds_type => user" do
85
108
  @resource.stubs(:[]).with(:ds_type).returns "user"
86
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
109
+ expect { @provider.create }.to_not raise_error
87
110
  end
111
+
88
112
  it "should accept /Foo/bar with ds_type => group" do
89
113
  @resource.stubs(:[]).with(:ds_type).returns "group"
90
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
114
+ expect { @provider.create }.to_not raise_error
91
115
  end
116
+
92
117
  it "should accept /Foo/bar with ds_type => computer" do
93
118
  @resource.stubs(:[]).with(:ds_type).returns "computer"
94
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
119
+ expect { @provider.create }.to_not raise_error
95
120
  end
121
+
96
122
  it "should accept :name => /Foo/bar with ds_type => computerlist" do
97
123
  @resource.stubs(:[]).with(:ds_type).returns "computerlist"
98
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
124
+ expect { @provider.create }.to_not raise_error
99
125
  end
100
126
  end
101
127
 
102
128
  describe "when creating and :name => foobar" do
103
129
  before :each do
130
+ @provider.class.stubs(:dscl).returns('')
104
131
  @resource.stubs(:[]).with(:name).returns "foobar"
105
132
  end
133
+
106
134
  it "should not accept unspecified :ds_type and :ds_name" do
107
- lambda { @provider.create }.should raise_error(MCXContentProviderException)
135
+ expect { @provider.create }.to raise_error(MCXContentProviderException)
108
136
  end
137
+
109
138
  it "should not accept unspecified :ds_type" do
110
139
  @resource.stubs(:[]).with(:ds_type).returns "user"
111
- lambda { @provider.create }.should raise_error(MCXContentProviderException)
140
+ expect { @provider.create }.to raise_error(MCXContentProviderException)
112
141
  end
142
+
113
143
  it "should not accept unspecified :ds_name" do
114
144
  @resource.stubs(:[]).with(:ds_name).returns "foo"
115
- lambda { @provider.create }.should raise_error(MCXContentProviderException)
145
+ expect { @provider.create }.to raise_error(MCXContentProviderException)
116
146
  end
147
+
117
148
  it "should accept :ds_type => user, ds_name => foo" do
118
149
  @resource.stubs(:[]).with(:ds_type).returns "user"
119
150
  @resource.stubs(:[]).with(:ds_name).returns "foo"
120
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
151
+ expect { @provider.create }.to_not raise_error
121
152
  end
153
+
122
154
  it "should accept :ds_type => group, ds_name => foo" do
123
155
  @resource.stubs(:[]).with(:ds_type).returns "group"
124
156
  @resource.stubs(:[]).with(:ds_name).returns "foo"
125
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
157
+ expect { @provider.create }.to_not raise_error
126
158
  end
159
+
127
160
  it "should accept :ds_type => computer, ds_name => foo" do
128
161
  @resource.stubs(:[]).with(:ds_type).returns "computer"
129
162
  @resource.stubs(:[]).with(:ds_name).returns "foo"
130
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
163
+ expect { @provider.create }.to_not raise_error
131
164
  end
165
+
132
166
  it "should accept :ds_type => computerlist, ds_name => foo" do
133
167
  @resource.stubs(:[]).with(:ds_type).returns "computerlist"
134
168
  @resource.stubs(:[]).with(:ds_name).returns "foo"
135
- lambda { @provider.create }.should_not raise_error(MCXContentProviderException)
169
+ expect { @provider.create }.to_not raise_error
136
170
  end
171
+
137
172
  it "should not accept :ds_type => bogustype, ds_name => foo" do
138
173
  @resource.stubs(:[]).with(:ds_type).returns "bogustype"
139
174
  @resource.stubs(:[]).with(:ds_name).returns "foo"
140
- lambda { @provider.create }.should raise_error(MCXContentProviderException)
175
+ expect { @provider.create }.to raise_error(MCXContentProviderException)
141
176
  end
142
177
  end
143
178
 
@@ -145,6 +180,7 @@ describe provider_class do
145
180
  it "should define an instances class method." do
146
181
  @provider.class.should respond_to(:instances)
147
182
  end
183
+
148
184
  it "should call external command dscl -list /Local/Default/<ds_type> on each known ds_type" do
149
185
  @provider.class.expects(:dscl).with('localhost', '-list', "/Local/Default/Users").returns('')
150
186
  @provider.class.expects(:dscl).with('localhost', '-list', "/Local/Default/Groups").returns('')