puppet 4.5.3-x86-mingw32 → 4.6.1-x86-mingw32

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 (422) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +10 -1
  3. data/ext/debian/control +2 -4
  4. data/ext/project_data.yaml +4 -4
  5. data/install.rb +6 -2
  6. data/lib/puppet.rb +3 -1
  7. data/lib/puppet/agent/locker.rb +1 -1
  8. data/lib/puppet/application.rb +6 -4
  9. data/lib/puppet/application/agent.rb +2 -1
  10. data/lib/puppet/application/cert.rb +35 -2
  11. data/lib/puppet/application/device.rb +1 -1
  12. data/lib/puppet/application/generate.rb +5 -0
  13. data/lib/puppet/application/lookup.rb +3 -3
  14. data/lib/puppet/application_support.rb +1 -1
  15. data/lib/puppet/compilable_resource_type.rb +15 -0
  16. data/lib/puppet/configurer.rb +67 -10
  17. data/lib/puppet/configurer/plugin_handler.rb +2 -4
  18. data/lib/puppet/data_providers/hiera_config.rb +1 -1
  19. data/lib/puppet/defaults.rb +34 -7
  20. data/lib/puppet/environments.rb +4 -2
  21. data/lib/puppet/error.rb +1 -1
  22. data/lib/puppet/external/dot.rb +1 -1
  23. data/lib/puppet/face/ca.rb +4 -1
  24. data/lib/puppet/face/certificate.rb +7 -1
  25. data/lib/puppet/face/epp.rb +5 -5
  26. data/lib/puppet/face/generate.rb +64 -0
  27. data/lib/puppet/face/help.rb +19 -13
  28. data/lib/puppet/face/man.rb +1 -1
  29. data/lib/puppet/feature/external_facts.rb +1 -1
  30. data/lib/puppet/file_system.rb +16 -0
  31. data/lib/puppet/file_system/file_impl.rb +5 -0
  32. data/lib/puppet/file_system/memory_impl.rb +4 -0
  33. data/lib/puppet/file_system/path_pattern.rb +1 -0
  34. data/lib/puppet/file_system/windows.rb +19 -0
  35. data/lib/puppet/functions.rb +3 -5
  36. data/lib/puppet/functions/assert_type.rb +1 -1
  37. data/lib/puppet/functions/defined.rb +7 -5
  38. data/lib/puppet/functions/dig.rb +2 -18
  39. data/lib/puppet/functions/hiera.rb +1 -1
  40. data/lib/puppet/functions/lest.rb +1 -37
  41. data/lib/puppet/functions/new.rb +2 -473
  42. data/lib/puppet/functions/reverse_each.rb +2 -59
  43. data/lib/puppet/functions/scanf.rb +4 -4
  44. data/lib/puppet/functions/step.rb +1 -63
  45. data/lib/puppet/functions/then.rb +1 -61
  46. data/lib/puppet/functions/type.rb +1 -40
  47. data/lib/puppet/functions/unwrap.rb +40 -0
  48. data/lib/puppet/generate/models/type/property.rb +70 -0
  49. data/lib/puppet/generate/models/type/type.rb +57 -0
  50. data/lib/puppet/generate/templates/type/pcore.erb +41 -0
  51. data/lib/puppet/generate/type.rb +239 -0
  52. data/lib/puppet/graph/simple_graph.rb +2 -6
  53. data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
  54. data/lib/puppet/indirector/facts/facter.rb +1 -1
  55. data/lib/puppet/indirector/key/ca.rb +2 -2
  56. data/lib/puppet/indirector/request.rb +25 -4
  57. data/lib/puppet/indirector/rest.rb +73 -3
  58. data/lib/puppet/info_service/class_information_service.rb +1 -2
  59. data/lib/puppet/interface/documentation.rb +1 -1
  60. data/lib/puppet/loaders.rb +2 -0
  61. data/lib/puppet/metatype/manager.rb +6 -6
  62. data/lib/puppet/module.rb +8 -1
  63. data/lib/puppet/module_tool.rb +2 -2
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  66. data/lib/puppet/module_tool/metadata.rb +1 -1
  67. data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
  68. data/lib/puppet/network/http/rack/rest.rb +15 -1
  69. data/lib/puppet/network/rights.rb +1 -11
  70. data/lib/puppet/node/environment.rb +7 -3
  71. data/lib/puppet/node/facts.rb +1 -1
  72. data/lib/puppet/parameter.rb +23 -3
  73. data/lib/puppet/parameter/boolean.rb +1 -1
  74. data/lib/puppet/parameter/value.rb +1 -1
  75. data/lib/puppet/parser.rb +0 -1
  76. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  77. data/lib/puppet/parser/ast/resource.rb +5 -0
  78. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  79. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  80. data/lib/puppet/parser/compiler.rb +14 -17
  81. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
  82. data/lib/puppet/parser/environment_compiler.rb +10 -0
  83. data/lib/puppet/parser/functions/create_resources.rb +39 -24
  84. data/lib/puppet/parser/functions/defined.rb +2 -26
  85. data/lib/puppet/parser/functions/dig.rb +29 -0
  86. data/lib/puppet/parser/functions/lest.rb +49 -0
  87. data/lib/puppet/parser/functions/new.rb +530 -0
  88. data/lib/puppet/parser/functions/require.rb +1 -1
  89. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  90. data/lib/puppet/parser/functions/scanf.rb +4 -4
  91. data/lib/puppet/parser/functions/step.rb +84 -0
  92. data/lib/puppet/parser/functions/then.rb +73 -0
  93. data/lib/puppet/parser/functions/type.rb +53 -0
  94. data/lib/puppet/parser/resource.rb +16 -7
  95. data/lib/puppet/parser/scope.rb +36 -28
  96. data/lib/puppet/parser/type_loader.rb +1 -1
  97. data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
  98. data/lib/puppet/pops.rb +13 -0
  99. data/lib/puppet/pops/adapters.rb +49 -49
  100. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  101. data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
  102. data/lib/puppet/pops/evaluator/closure.rb +39 -13
  103. data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
  105. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  106. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
  107. data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
  108. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
  109. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  110. data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
  111. data/lib/puppet/pops/functions/function.rb +5 -0
  112. data/lib/puppet/pops/issues.rb +1 -1
  113. data/lib/puppet/pops/label_provider.rb +2 -2
  114. data/lib/puppet/pops/loader/base_loader.rb +12 -15
  115. data/lib/puppet/pops/loader/loader.rb +15 -50
  116. data/lib/puppet/pops/loader/loader_paths.rb +28 -2
  117. data/lib/puppet/pops/loader/module_loaders.rb +16 -1
  118. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  119. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
  120. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  121. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
  123. data/lib/puppet/pops/loader/static_loader.rb +55 -0
  124. data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
  125. data/lib/puppet/pops/loader/typed_name.rb +50 -0
  126. data/lib/puppet/pops/loaders.rb +64 -19
  127. data/lib/puppet/pops/merge_strategy.rb +7 -7
  128. data/lib/puppet/pops/migration/migration_checker.rb +4 -0
  129. data/lib/puppet/pops/model/model_label_provider.rb +2 -0
  130. data/lib/puppet/pops/parser/egrammar.ra +8 -5
  131. data/lib/puppet/pops/parser/eparser.rb +1550 -1498
  132. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  133. data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
  134. data/lib/puppet/pops/parser/lexer2.rb +14 -1
  135. data/lib/puppet/pops/parser/locator.rb +30 -1
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -3
  137. data/lib/puppet/pops/parser/slurp_support.rb +3 -3
  138. data/lib/puppet/pops/patterns.rb +9 -1
  139. data/lib/puppet/pops/pcore.rb +67 -11
  140. data/lib/puppet/pops/puppet_stack.rb +43 -0
  141. data/lib/puppet/pops/resource/param.rb +51 -0
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
  143. data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
  144. data/lib/puppet/pops/serialization.rb +17 -0
  145. data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
  146. data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
  147. data/lib/puppet/pops/serialization/deserializer.rb +60 -0
  148. data/lib/puppet/pops/serialization/extension.rb +126 -0
  149. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  150. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  151. data/lib/puppet/pops/serialization/json.rb +247 -0
  152. data/lib/puppet/pops/serialization/object.rb +63 -0
  153. data/lib/puppet/pops/serialization/rgen.rb +151 -0
  154. data/lib/puppet/pops/serialization/serializer.rb +91 -0
  155. data/lib/puppet/pops/serialization/time_factory.rb +66 -0
  156. data/lib/puppet/pops/types/annotatable.rb +36 -0
  157. data/lib/puppet/pops/types/implementation_registry.rb +3 -8
  158. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  159. data/lib/puppet/pops/types/p_object_type.rb +110 -117
  160. data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
  161. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
  162. data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
  163. data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
  164. data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
  165. data/lib/puppet/pops/types/puppet_object.rb +0 -5
  166. data/lib/puppet/pops/types/ruby_generator.rb +9 -2
  167. data/lib/puppet/pops/types/type_calculator.rb +6 -1
  168. data/lib/puppet/pops/types/type_factory.rb +14 -12
  169. data/lib/puppet/pops/types/type_formatter.rb +78 -33
  170. data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
  171. data/lib/puppet/pops/types/type_parser.rb +27 -2
  172. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  173. data/lib/puppet/pops/types/types.rb +366 -13
  174. data/lib/puppet/pops/validation.rb +4 -4
  175. data/lib/puppet/pops/validation/checker4_0.rb +5 -2
  176. data/lib/puppet/pops/visitor.rb +2 -2
  177. data/lib/puppet/property.rb +64 -5
  178. data/lib/puppet/provider.rb +1 -1
  179. data/lib/puppet/provider/aixobject.rb +3 -3
  180. data/lib/puppet/provider/group/aix.rb +4 -4
  181. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  182. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  183. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
  184. data/lib/puppet/provider/mount/parsed.rb +1 -1
  185. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  186. data/lib/puppet/provider/package/appdmg.rb +3 -3
  187. data/lib/puppet/provider/package/apple.rb +1 -1
  188. data/lib/puppet/provider/package/dnf.rb +5 -0
  189. data/lib/puppet/provider/package/nim.rb +1 -1
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pip.rb +5 -3
  192. data/lib/puppet/provider/package/pip3.rb +1 -1
  193. data/lib/puppet/provider/package/pkg.rb +5 -5
  194. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  195. data/lib/puppet/provider/package/pkgin.rb +1 -1
  196. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  197. data/lib/puppet/provider/package/portage.rb +48 -8
  198. data/lib/puppet/provider/package/sun.rb +1 -1
  199. data/lib/puppet/provider/package/tdnf.rb +28 -0
  200. data/lib/puppet/provider/package/yum.rb +22 -4
  201. data/lib/puppet/provider/parsedfile.rb +2 -2
  202. data/lib/puppet/provider/service/base.rb +1 -1
  203. data/lib/puppet/provider/service/bsd.rb +1 -1
  204. data/lib/puppet/provider/service/daemontools.rb +2 -2
  205. data/lib/puppet/provider/service/debian.rb +3 -3
  206. data/lib/puppet/provider/service/init.rb +5 -3
  207. data/lib/puppet/provider/service/launchd.rb +16 -2
  208. data/lib/puppet/provider/service/runit.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +8 -1
  210. data/lib/puppet/provider/service/systemd.rb +39 -6
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +3 -2
  213. data/lib/puppet/provider/user/directoryservice.rb +4 -3
  214. data/lib/puppet/provider/user/hpux.rb +1 -1
  215. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  216. data/lib/puppet/provider/user/windows_adsi.rb +3 -0
  217. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  218. data/lib/puppet/reference/type.rb +1 -1
  219. data/lib/puppet/resource.rb +33 -7
  220. data/lib/puppet/resource/capability_finder.rb +74 -54
  221. data/lib/puppet/resource/status.rb +11 -2
  222. data/lib/puppet/settings.rb +17 -6
  223. data/lib/puppet/settings/environment_conf.rb +1 -1
  224. data/lib/puppet/settings/server_list_setting.rb +20 -0
  225. data/lib/puppet/ssl/certificate_authority.rb +32 -9
  226. data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
  227. data/lib/puppet/ssl/host.rb +3 -3
  228. data/lib/puppet/ssl/oids.rb +10 -0
  229. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  230. data/lib/puppet/test/test_helper.rb +2 -2
  231. data/lib/puppet/transaction.rb +12 -0
  232. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  233. data/lib/puppet/transaction/event.rb +29 -2
  234. data/lib/puppet/transaction/event_manager.rb +1 -1
  235. data/lib/puppet/transaction/persistence.rb +84 -0
  236. data/lib/puppet/transaction/report.rb +49 -2
  237. data/lib/puppet/transaction/resource_harness.rb +98 -18
  238. data/lib/puppet/type.rb +63 -21
  239. data/lib/puppet/type/augeas.rb +3 -3
  240. data/lib/puppet/type/cron.rb +1 -1
  241. data/lib/puppet/type/file.rb +39 -2
  242. data/lib/puppet/type/file/data_sync.rb +13 -5
  243. data/lib/puppet/type/host.rb +1 -1
  244. data/lib/puppet/type/mount.rb +2 -6
  245. data/lib/puppet/type/notify.rb +1 -1
  246. data/lib/puppet/type/package.rb +1 -1
  247. data/lib/puppet/type/resources.rb +1 -1
  248. data/lib/puppet/type/scheduled_task.rb +1 -1
  249. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  250. data/lib/puppet/type/tidy.rb +1 -1
  251. data/lib/puppet/type/yumrepo.rb +3 -3
  252. data/lib/puppet/type/zone.rb +1 -1
  253. data/lib/puppet/util.rb +2 -2
  254. data/lib/puppet/util/classgen.rb +1 -1
  255. data/lib/puppet/util/command_line.rb +6 -2
  256. data/lib/puppet/util/command_line/trollop.rb +1 -1
  257. data/lib/puppet/util/execution.rb +2 -2
  258. data/lib/puppet/util/http_proxy.rb +1 -1
  259. data/lib/puppet/util/inifile.rb +1 -1
  260. data/lib/puppet/util/instance_loader.rb +1 -1
  261. data/lib/puppet/util/logging.rb +1 -1
  262. data/lib/puppet/util/multi_match.rb +1 -1
  263. data/lib/puppet/util/plist.rb +15 -5
  264. data/lib/puppet/util/profiler.rb +1 -1
  265. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  266. data/lib/puppet/util/psych_support.rb +1 -1
  267. data/lib/puppet/util/rdoc.rb +2 -2
  268. data/lib/puppet/util/rubygems.rb +1 -1
  269. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  270. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  271. data/lib/puppet/util/windows/adsi.rb +30 -8
  272. data/lib/puppet/util/windows/api_types.rb +1 -1
  273. data/lib/puppet/util/windows/file.rb +59 -0
  274. data/lib/puppet/util/windows/process.rb +10 -0
  275. data/lib/puppet/util/windows/security.rb +1 -1
  276. data/lib/puppet/util/windows/user.rb +22 -4
  277. data/lib/puppet/util/yaml.rb +15 -3
  278. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  279. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  280. data/lib/puppet/version.rb +2 -2
  281. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  282. data/spec/integration/agent/logging_spec.rb +15 -14
  283. data/spec/integration/application/apply_spec.rb +1 -0
  284. data/spec/integration/directory_environments_spec.rb +16 -0
  285. data/spec/integration/environments/settings_spec.rb +32 -4
  286. data/spec/integration/faces/documentation_spec.rb +1 -1
  287. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  288. data/spec/integration/node/environment_spec.rb +21 -0
  289. data/spec/integration/parser/collection_spec.rb +10 -0
  290. data/spec/integration/parser/compiler_spec.rb +76 -840
  291. data/spec/integration/parser/functions/require_spec.rb +3 -3
  292. data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
  293. data/spec/integration/parser/pcore_resource_spec.rb +208 -0
  294. data/spec/integration/parser/resource_expressions_spec.rb +4 -2
  295. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  296. data/spec/integration/transaction/report_spec.rb +666 -0
  297. data/spec/integration/type/file_spec.rb +11 -12
  298. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  299. data/spec/integration/util/windows/principal_spec.rb +109 -60
  300. data/spec/integration/util/windows/process_spec.rb +4 -2
  301. data/spec/integration/util/windows/security_spec.rb +34 -8
  302. data/spec/integration/util/windows/user_spec.rb +26 -4
  303. data/spec/lib/puppet_spec/files.rb +2 -2
  304. data/spec/lib/puppet_spec/network.rb +12 -8
  305. data/spec/shared_examples/rhel_package_provider.rb +341 -0
  306. data/spec/spec_helper.rb +8 -2
  307. data/spec/unit/application/cert_spec.rb +20 -0
  308. data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
  309. data/spec/unit/configurer_spec.rb +46 -0
  310. data/spec/unit/defaults_spec.rb +14 -0
  311. data/spec/unit/face/generate_spec.rb +230 -0
  312. data/spec/unit/face/help_spec.rb +53 -0
  313. data/spec/unit/face/parser_spec.rb +6 -0
  314. data/spec/unit/face/plugin_spec.rb +0 -4
  315. data/spec/unit/file_system_spec.rb +85 -0
  316. data/spec/unit/functions/lookup_spec.rb +4 -4
  317. data/spec/unit/functions/match_spec.rb +2 -2
  318. data/spec/unit/functions/regsubst_spec.rb +1 -1
  319. data/spec/unit/functions/split_spec.rb +1 -1
  320. data/spec/unit/functions/unwrap_spec.rb +29 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +8 -8
  323. data/spec/unit/indirector/facts/facter_spec.rb +1 -9
  324. data/spec/unit/indirector/rest_spec.rb +95 -9
  325. data/spec/unit/module_spec.rb +43 -7
  326. data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
  327. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  328. data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
  329. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
  331. data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
  332. data/spec/unit/network/rights_spec.rb +1 -1
  333. data/spec/unit/parameter_spec.rb +11 -0
  334. data/spec/unit/parser/compiler_spec.rb +19 -33
  335. data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
  336. data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
  337. data/spec/unit/parser/functions/require_spec.rb +2 -2
  338. data/spec/unit/parser/resource_spec.rb +21 -11
  339. data/spec/unit/parser/scope_spec.rb +1 -5
  340. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
  341. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  342. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
  344. data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
  345. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  346. data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
  347. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
  348. data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
  349. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  350. data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
  351. data/spec/unit/pops/serialization/packer_spec.rb +153 -0
  352. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  353. data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
  354. data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
  355. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
  356. data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
  357. data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
  358. data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
  359. data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
  360. data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
  361. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
  362. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  363. data/spec/unit/pops/types/types_spec.rb +1 -1
  364. data/spec/unit/pops/validator/validator_spec.rb +18 -1
  365. data/spec/unit/property_spec.rb +48 -11
  366. data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
  367. data/spec/unit/provider/package/dnf_spec.rb +1 -99
  368. data/spec/unit/provider/package/pacman_spec.rb +4 -4
  369. data/spec/unit/provider/package/pip_spec.rb +14 -0
  370. data/spec/unit/provider/package/pkg_spec.rb +6 -0
  371. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
  372. data/spec/unit/provider/package/portage_spec.rb +64 -8
  373. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  374. data/spec/unit/provider/package/windows/package_spec.rb +4 -1
  375. data/spec/unit/provider/package/windows_spec.rb +8 -2
  376. data/spec/unit/provider/package/yum_spec.rb +6 -377
  377. data/spec/unit/provider/service/base_spec.rb +6 -0
  378. data/spec/unit/provider/service/debian_spec.rb +16 -7
  379. data/spec/unit/provider/service/gentoo_spec.rb +6 -0
  380. data/spec/unit/provider/service/init_spec.rb +7 -0
  381. data/spec/unit/provider/service/launchd_spec.rb +35 -4
  382. data/spec/unit/provider/service/openrc_spec.rb +6 -0
  383. data/spec/unit/provider/service/smf_spec.rb +31 -6
  384. data/spec/unit/provider/service/src_spec.rb +6 -0
  385. data/spec/unit/provider/service/systemd_spec.rb +70 -20
  386. data/spec/unit/provider/service/upstart_spec.rb +6 -0
  387. data/spec/unit/provider/user/aix_spec.rb +7 -0
  388. data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
  390. data/spec/unit/resource/capability_finder_spec.rb +51 -3
  391. data/spec/unit/resource/catalog_spec.rb +5 -0
  392. data/spec/unit/resource/type_spec.rb +2 -2
  393. data/spec/unit/resource_spec.rb +19 -0
  394. data/spec/unit/settings_spec.rb +13 -0
  395. data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
  396. data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
  397. data/spec/unit/ssl/host_spec.rb +1 -1
  398. data/spec/unit/ssl/oids_spec.rb +24 -21
  399. data/spec/unit/transaction/event_spec.rb +3 -1
  400. data/spec/unit/transaction/persistence_spec.rb +173 -0
  401. data/spec/unit/transaction/report_spec.rb +64 -1
  402. data/spec/unit/transaction/resource_harness_spec.rb +91 -0
  403. data/spec/unit/type/file/content_spec.rb +47 -15
  404. data/spec/unit/type/file_spec.rb +28 -0
  405. data/spec/unit/type/mount_spec.rb +5 -12
  406. data/spec/unit/type/yumrepo_spec.rb +1 -5
  407. data/spec/unit/type_spec.rb +32 -0
  408. data/spec/unit/util/command_line_spec.rb +11 -0
  409. data/spec/unit/util/execution_spec.rb +1 -1
  410. data/spec/unit/util/plist_spec.rb +16 -3
  411. data/spec/unit/util/storage_spec.rb +4 -1
  412. data/spec/unit/util/windows/adsi_spec.rb +23 -2
  413. data/spec/unit/util/windows/file_spec.rb +56 -1
  414. data/spec/unit/util/windows/sid_spec.rb +31 -7
  415. data/spec/unit/util/yaml_spec.rb +12 -0
  416. data/spec/unit/util_spec.rb +87 -20
  417. metadata +91 -48
  418. data/ext/puppetlisten/puppetlisten.rb +0 -77
  419. data/ext/puppetlisten/puppetrun.rb +0 -38
  420. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  421. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  422. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
@@ -14,6 +14,12 @@ describe Puppet::Face[:parser, :current] do
14
14
  from_an_interactive_terminal
15
15
  end
16
16
 
17
+ after(:each) do
18
+ # Reset cache of loaders (many examples run in the *root* environment
19
+ # which exists in "eternity")
20
+ Puppet.lookup(:current_environment).loaders = nil
21
+ end
22
+
17
23
  it "validates the configured site manifest when no files are given" do
18
24
  manifest = file_containing('site.pp', "{ invalid =>")
19
25
 
@@ -12,10 +12,6 @@ describe Puppet::Face[:plugin, :current] do
12
12
  end
13
13
 
14
14
  context "download" do
15
- before :each do
16
- Puppet.features.stubs(:external_facts?).returns(true)
17
- end
18
-
19
15
  it "downloads plugins and external facts" do
20
16
  Puppet::Configurer::Downloader.any_instance.expects(:evaluate).twice.returns([])
21
17
 
@@ -649,5 +649,90 @@ describe "Puppet::FileSystem" do
649
649
  end.to raise_error(Errno::EEXIST)
650
650
  end
651
651
  end
652
+
653
+ describe 'expand_path' do
654
+ it 'should raise an error when given nil, like Ruby File.expand_path' do
655
+ expect { File.expand_path(nil) }.to raise_error(TypeError)
656
+
657
+ # match Ruby behavior
658
+ expect { Puppet::FileSystem.expand_path(nil) }.to raise_error(TypeError)
659
+ end
660
+
661
+ it 'with an expanded path passed to Dir.glob, the same expanded path will be returned' do
662
+ # this exists specifically for Puppet::Pops::Loader::ModuleLoaders::FileBased#add_to_index
663
+ # which should receive an expanded path value from it's parent Environment
664
+ # and will later compare values generated by Dir.glob
665
+ tmp_long_file = tmpfile('foo.bar', tmpdir('super-long-thing-that-Windows-shortens'))
666
+ Puppet::FileSystem.touch(tmp_long_file)
667
+ expanded_path = Puppet::FileSystem.expand_path(tmp_long_file)
668
+
669
+ expect(expanded_path).to eq(Dir.glob(expanded_path).first)
670
+ end
671
+
672
+ describe 'on non-Windows', :unless => Puppet::Util::Platform.windows? do
673
+ it 'should produce the same results as the Ruby File.expand_path' do
674
+ # on Windows this may be 8.3 style, but not so on other platforms
675
+ # only done since ::File.expects(:expand_path).with(path).at_least_once
676
+ # cannot be used since it will cause a stack overflow
677
+ path = tmpdir('foobar')
678
+
679
+ expect(Puppet::FileSystem.expand_path(path)).to eq(File.expand_path(path))
680
+ end
681
+ end
682
+
683
+ describe 'on Windows', :if => Puppet::Util::Platform.windows? do
684
+ let(:nonexist_file) { 'C:\\file~1.ext' }
685
+ let(:nonexist_path) { 'C:\\progra~1\\missing\\path\\file.ext' }
686
+
687
+ ['/', '\\'].each do |slash|
688
+ it "should return the absolute path including system drive letter when given #{slash}, like Ruby File.expand_path" do
689
+
690
+ # regardless of slash direction, return value is drive letter
691
+ expanded = Puppet::FileSystem.expand_path(slash)
692
+ expect(expanded).to eq(ENV['SystemDrive'] + File::SEPARATOR)
693
+ expect(expanded).to eq(File.expand_path(slash))
694
+ end
695
+ end
696
+
697
+ it 'should behave like Rubys File.expand_path for a file that doesnt exist' do
698
+ expect(Puppet::FileSystem.exist?(nonexist_file)).to be_falsey
699
+ # this will change c:\\file~1.ext to c:/file~1.ext (existing Ruby behavior), but not expand any ~
700
+ ruby_expanded = File.expand_path(nonexist_file)
701
+ expect(ruby_expanded).to match(/~/)
702
+ expect(Puppet::FileSystem.expand_path(nonexist_file)).to eq(ruby_expanded)
703
+ end
704
+
705
+ it 'should behave like Rubys File.expand_path for a file with a parent path that doesnt exist' do
706
+ expect(Puppet::FileSystem.exist?(nonexist_path)).to be_falsey
707
+ # this will change c:\\progra~1 to c:/progra~1 (existing Ruby behavior), but not expand any ~
708
+ ruby_expanded = File.expand_path(nonexist_path)
709
+ expect(ruby_expanded).to match(/~/)
710
+ expect(Puppet::FileSystem.expand_path(nonexist_path)).to eq(ruby_expanded)
711
+ end
712
+
713
+ it 'should expand a shortened path completely, unlike Ruby File.expand_path' do
714
+ tmp_long_dir = tmpdir('super-long-thing-that-Windows-shortens')
715
+ short_path = Puppet::Util::Windows::File.get_short_pathname(tmp_long_dir)
716
+
717
+ # a shortened path to the temp dir will have a least 2 ~
718
+ # for instance, C:\\Users\\Administrator\\AppData\\Local\\Temp\\rspecrun2016####-####-#######\\super-long-thing-that-Windows-shortens\
719
+ # or C:\\Windows\\Temp\\rspecrun2016####-####-#######\\super-long-thing-that-Windows-shortens\
720
+ # will shorten to Temp\\rspecr~#\\super-~1
721
+ expect(short_path).to match(/~.*~/)
722
+
723
+ # expand with Ruby, noting not all ~ have been expanded
724
+ # which is the primary reason that a Puppet helper exists
725
+ ruby_expanded = File.expand_path(short_path)
726
+ expect(ruby_expanded).to match(/~/)
727
+
728
+ # Puppet expansion uses the Windows API and has no ~ remaining
729
+ puppet_expanded = Puppet::FileSystem.expand_path(short_path)
730
+ expect(puppet_expanded).to_not match(/~/)
731
+
732
+ # and the directories are one and the same
733
+ expect(File.identical?(short_path, puppet_expanded)).to be_truthy
734
+ end
735
+ end
736
+ end
652
737
  end
653
738
  end
@@ -558,7 +558,7 @@ EOS
558
558
  it 'will explain deep merge results without options' do
559
559
  assemble_and_compile('${r}', "'abc::a'") do |scope|
560
560
  lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
561
- Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, 'deep', lookup_invocation)
561
+ Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.singleton.parse('Hash[String,String]'), nil, false, 'deep', lookup_invocation)
562
562
  expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
563
563
  Merge strategy deep
564
564
  Data Binding "hiera"
@@ -586,7 +586,7 @@ EOS
586
586
  assemble_and_compile('${r}', "'abc::a'") do |scope|
587
587
  Hiera.any_instance.expects(:lookup).with(any_parameters).returns({'k1' => 'global_g1'})
588
588
  lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
589
- Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
589
+ Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.singleton.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
590
590
  expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
591
591
  Merge strategy deep
592
592
  Options: {
@@ -645,7 +645,7 @@ EOS
645
645
  it 'will explain value access caused by dot notation in key' do
646
646
  assemble_and_compile('${r}', "'abc::a'") do |scope|
647
647
  lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
648
- Puppet::Pops::Lookup.lookup('abc::f.k1.s1', Puppet::Pops::Types::TypeParser.new.parse('String'), nil, false, nil, lookup_invocation)
648
+ Puppet::Pops::Lookup.lookup('abc::f.k1.s1', Puppet::Pops::Types::TypeParser.singleton.parse('String'), nil, false, nil, lookup_invocation)
649
649
  expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
650
650
  Merge strategy first
651
651
  Data Binding "hiera"
@@ -667,7 +667,7 @@ EOS
667
667
  it 'will provide a hash containing all explanation elements' do
668
668
  assemble_and_compile('${r}', "'abc::a'") do |scope|
669
669
  lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
670
- Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
670
+ Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.singleton.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
671
671
  expect(lookup_invocation.explainer.to_hash).to eq(
672
672
  {
673
673
  :branches => [
@@ -18,7 +18,7 @@ describe 'the match function' do
18
18
  Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'match')
19
19
  end
20
20
 
21
- let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
21
+ let(:type_parser) { Puppet::Pops::Types::TypeParser.singleton }
22
22
 
23
23
 
24
24
  it 'matches string and regular expression without captures' do
@@ -52,6 +52,6 @@ describe 'the match function' do
52
52
  end
53
53
 
54
54
  def type(s)
55
- Puppet::Pops::Types::TypeParser.new.parse(s)
55
+ Puppet::Pops::Types::TypeParser.singleton.parse(s)
56
56
  end
57
57
  end
@@ -18,7 +18,7 @@ describe 'the regsubst function' do
18
18
  Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'regsubst').call({}, *args)
19
19
  end
20
20
 
21
- let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
21
+ let(:type_parser) { Puppet::Pops::Types::TypeParser.singleton }
22
22
 
23
23
  context 'when using a string pattern' do
24
24
  it 'should raise an Error if there is less than 3 arguments' do
@@ -18,7 +18,7 @@ describe 'the split function' do
18
18
  Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'split').call({}, *args)
19
19
  end
20
20
 
21
- let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
21
+ let(:type_parser) { Puppet::Pops::Types::TypeParser.singleton }
22
22
 
23
23
  it 'should raise an Error if there is less than 2 arguments' do
24
24
  expect { split('a,b') }.to raise_error(/'split' expects 2 arguments, got 1/)
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet_spec/compiler'
4
+ require 'matchers/resource'
5
+
6
+ describe 'the unwrap function' do
7
+ include PuppetSpec::Compiler
8
+ include Matchers::Resource
9
+
10
+ it 'unwraps a sensitive value' do
11
+ code = <<-CODE
12
+ $sensitive = Sensitive.new("12345")
13
+ notice("unwrapped value is ${sensitive.unwrap}")
14
+ CODE
15
+ expect(eval_and_collect_notices(code)).to eq(['unwrapped value is 12345'])
16
+ end
17
+
18
+ it 'unwraps a sensitive value when given a code block' do
19
+ code = <<-CODE
20
+ $sensitive = Sensitive.new("12345")
21
+ $split = $sensitive.unwrap |$unwrapped| {
22
+ notice("unwrapped value is $unwrapped")
23
+ $unwrapped.split(/3/)
24
+ }
25
+ notice("split is $split")
26
+ CODE
27
+ expect(eval_and_collect_notices(code)).to eq(['unwrapped value is 12345', 'split is [12, 45]'])
28
+ end
29
+ end
@@ -18,7 +18,7 @@ describe "the versioncmp function" do
18
18
  Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'versioncmp').call({}, *args)
19
19
  end
20
20
 
21
- let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
21
+ let(:type_parser) { Puppet::Pops::Types::TypeParser.singleton }
22
22
 
23
23
  it 'should raise an Error if there is less than 2 arguments' do
24
24
  expect { versioncmp('a,b') }.to raise_error(/expects 2 arguments, got 1/)
@@ -14,11 +14,11 @@ module FunctionAPISpecModule
14
14
  end
15
15
 
16
16
  def add_function(name, function)
17
- set_entry(Puppet::Pops::Loader::Loader::TypedName.new(:function, name), function, __FILE__)
17
+ set_entry(Puppet::Pops::Loader::TypedName.new(:function, name), function, __FILE__)
18
18
  end
19
19
 
20
20
  def add_type(name, type)
21
- set_entry(Puppet::Pops::Loader::Loader::TypedName.new(:type, name), type, __FILE__)
21
+ set_entry(Puppet::Pops::Loader::TypedName.new(:type, name), type, __FILE__)
22
22
  end
23
23
 
24
24
  def set_entry(typed_name, value, origin = nil)
@@ -467,7 +467,7 @@ describe 'the 4x function api' do
467
467
  # evaluate a puppet call
468
468
  source = "testing::test(10) |$x| { $x+1 }"
469
469
  program = parser.parse_string(source, __FILE__)
470
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
470
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
471
471
  expect(parser.evaluate(scope, program)).to eql(11)
472
472
  end
473
473
  end
@@ -491,7 +491,7 @@ describe 'the 4x function api' do
491
491
  CODE
492
492
  the_loader.add_function('testing::test', fc.new({}, the_loader))
493
493
  program = parser.parse_string('testing::test(10)', __FILE__)
494
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
494
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
495
495
  expect(parser.evaluate({}, program)).to eql(10)
496
496
  end
497
497
 
@@ -510,7 +510,7 @@ describe 'the 4x function api' do
510
510
  CODE
511
511
  the_loader.add_function('testing::test', fc.new({}, the_loader))
512
512
  program = parser.parse_string('testing::test(10)', __FILE__)
513
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
513
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
514
514
  expect { parser.evaluate({}, program) }.to raise_error(Puppet::Error, /parameter 'x' references an unresolved type 'MyAlias'/)
515
515
  end
516
516
 
@@ -532,7 +532,7 @@ describe 'the 4x function api' do
532
532
  CODE
533
533
  the_loader.add_function('testing::test', fc.new({}, the_loader))
534
534
  program = parser.parse_string('testing::test([10,20])', __FILE__)
535
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
535
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
536
536
  expect(parser.evaluate({}, program)).to eq([10,20])
537
537
  end
538
538
 
@@ -555,7 +555,7 @@ describe 'the 4x function api' do
555
555
  CODE
556
556
  the_loader.add_function('testing::test', fc.new({}, the_loader))
557
557
  program = parser.parse_string("testing::test({'x' => [10,20]})", __FILE__)
558
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
558
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
559
559
  expect(parser.evaluate({}, program)).to eq({'x' => [10,20]})
560
560
  end
561
561
 
@@ -577,7 +577,7 @@ describe 'the 4x function api' do
577
577
  CODE
578
578
  the_loader.add_function('testing::test', fc.new({}, the_loader))
579
579
  program = parser.parse_string("testing::test({'x' => {'y' => 'n'}})", __FILE__)
580
- Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
580
+ Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).returns(the_loader)
581
581
  expect(parser.evaluate({}, program)).to eq({'x' => {'y' => 'n'}})
582
582
  end
583
583
  end
@@ -60,14 +60,6 @@ describe Puppet::Node::Facts::Facter do
60
60
  @facter.find(@request)
61
61
  end
62
62
 
63
- it 'should not include external facts when feature is not present' do
64
- reset = sequence 'reset'
65
- Puppet.features.stubs(:external_facts?).returns false
66
- Facter.expects(:reset).in_sequence(reset)
67
- Puppet::Node::Facts::Facter.expects(:setup_search_paths).in_sequence(reset)
68
- @facter.find(@request)
69
- end
70
-
71
63
  it "should return a Facts instance" do
72
64
  expect(@facter.find(@request)).to be_instance_of(Puppet::Node::Facts)
73
65
  end
@@ -140,7 +132,7 @@ describe Puppet::Node::Facts::Facter do
140
132
  end
141
133
  end
142
134
 
143
- describe 'when setting up external search paths', :if => Puppet.features.external_facts? do
135
+ describe 'when setting up external search paths' do
144
136
  let(:pluginfactdest) { File.expand_path 'plugin/dest' }
145
137
  let(:modulepath) { File.expand_path 'module/foo' }
146
138
  let(:modulefactsd) { File.expand_path 'module/foo/facts.d' }
@@ -1,5 +1,6 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'json'
3
4
  require 'puppet/indirector'
4
5
  require 'puppet/indirector/errors'
5
6
  require 'puppet/indirector/rest'
@@ -12,15 +13,34 @@ shared_examples_for "a REST terminus method" do |terminus_method|
12
13
 
13
14
  HTTP_ERROR_CODES.each do |code|
14
15
  describe "when the response code is #{code}" do
15
- let(:response) { mock_response(code, 'error messaged!!!') }
16
+ let(:message) { 'error messaged!!!' }
17
+ let(:body) do
18
+ JSON.generate({
19
+ :issue_kind => 'server-error',
20
+ :message => message,
21
+ :stacktrace => ['worst/stack/trace/ever.rb:4']
22
+ })
23
+ end
24
+ let(:response) { mock_response(code, body, 'application/json') }
25
+
26
+ describe "when the response is plain text" do
27
+ let(:response) { mock_response(code, message) }
28
+
29
+ it "raises an http error with the body of the response when plain text" do
30
+
31
+ expect {
32
+ terminus.send(terminus_method, request)
33
+ }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
34
+ end
35
+ end
16
36
 
17
- it "raises an http error with the body of the response" do
37
+ it "raises an http error with the body's message field when json" do
18
38
  expect {
19
39
  terminus.send(terminus_method, request)
20
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{response.body}")
40
+ }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
21
41
  end
22
42
 
23
- it "does not attempt to deserialize the response" do
43
+ it "does not attempt to deserialize the response into a model" do
24
44
  model.expects(:convert_from).never
25
45
 
26
46
  expect {
@@ -40,15 +60,14 @@ shared_examples_for "a REST terminus method" do |terminus_method|
40
60
 
41
61
  describe "and the body is compressed" do
42
62
  it "raises an http error with the decompressed body of the response" do
43
- uncompressed_body = "why"
44
- compressed_body = Zlib::Deflate.deflate(uncompressed_body)
63
+ compressed_body = Zlib::Deflate.deflate(body)
45
64
 
46
- response = mock_response(code, compressed_body, 'text/plain', 'deflate')
47
- connection.expects(http_method).returns(response)
65
+ compressed_response = mock_response(code, compressed_body, 'application/json', 'deflate')
66
+ connection.expects(http_method).returns(compressed_response)
48
67
 
49
68
  expect {
50
69
  terminus.send(terminus_method, request)
51
- }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{uncompressed_body}")
70
+ }.to raise_error(Net::HTTPError, "Error #{code} on SERVER: #{message}")
52
71
  end
53
72
  end
54
73
  end
@@ -186,6 +205,73 @@ describe Puppet::Indirector::REST do
186
205
  expect(terminus_class.port).to eq(543)
187
206
  end
188
207
 
208
+ it "should use a failover-selected server if set" do
209
+ terminus_class.expects(:server_setting).returns nil
210
+ Puppet.override(:server => "myserver") do
211
+ expect(terminus_class.server).to eq("myserver")
212
+ end
213
+ end
214
+
215
+ it "should use a failover-selected port if set" do
216
+ terminus_class.expects(:port_setting).returns nil
217
+ Puppet.override(:serverport => 321) do
218
+ expect(terminus_class.port).to eq(321)
219
+ end
220
+ end
221
+
222
+ it "should use server_list for server when available" do
223
+ terminus_class.expects(:server_setting).returns nil
224
+ Puppet[:server_list] = [["foo", "123"]]
225
+ expect(terminus_class.server).to eq("foo")
226
+ end
227
+
228
+ it "should prefer failover-selected server from server list" do
229
+ terminus_class.expects(:server_setting).returns nil
230
+ Puppet[:server_list] = [["foo", "123"],["bar", "321"]]
231
+ Puppet.override(:server => "bar") do
232
+ expect(terminus_class.server).to eq("bar")
233
+ end
234
+ end
235
+
236
+ it "should use server_list for port when available" do
237
+ terminus_class.expects(:port_setting).returns nil
238
+ Puppet[:server_list] = [["foo", "123"]]
239
+ expect(terminus_class.port).to eq(123)
240
+ end
241
+
242
+ it "should prefer failover-selected port from server list" do
243
+ terminus_class.expects(:port_setting).returns nil
244
+ Puppet[:server_list] = [["foo", "123"],["bar", "321"]]
245
+ Puppet.override(:serverport => "321") do
246
+ expect(terminus_class.port).to eq(321)
247
+ end
248
+ end
249
+
250
+ it "should use an explicitly specified more-speciic server when failover is active" do
251
+ terminus_class.expects(:server_setting).returns :ca_server
252
+ Puppet[:ca_server] = "myserver"
253
+ Puppet.override(:server => "anotherserver") do
254
+ expect(terminus_class.server).to eq("myserver")
255
+ end
256
+ end
257
+
258
+ it "should use an explicitly specified more-specific port when failover is active" do
259
+ terminus_class.expects(:port_setting).returns :ca_port
260
+ Puppet[:ca_port] = 321
261
+ Puppet.override(:serverport => 543) do
262
+ expect(terminus_class.port).to eq(321)
263
+ end
264
+ end
265
+
266
+ it "should use a default port when a more-specific server is set" do
267
+ terminus_class.expects(:server_setting).returns :ca_server
268
+ terminus_class.expects(:port_setting).returns :ca_port
269
+ Puppet[:ca_server] = "myserver"
270
+ Puppet.override(:server => "anotherserver", :port => 666) do
271
+ expect(terminus_class.port).to eq(8140)
272
+ end
273
+ end
274
+
189
275
  it 'should default to :puppet for the srv_service' do
190
276
  expect(Puppet::Indirector::REST.srv_service).to eq(:puppet)
191
277
  end