puppet 4.5.3-universal-darwin → 4.6.1-universal-darwin

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 +89 -34
  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
@@ -480,7 +480,6 @@ EOS
480
480
  end
481
481
  end
482
482
 
483
-
484
483
  describe "in the environment catalog" do
485
484
  it "does not fail if there is no site expression" do
486
485
  expect {
@@ -490,6 +489,18 @@ EOS
490
489
  }.to_not raise_error()
491
490
  end
492
491
 
492
+ it "ignores usage of hiera_include() at topscope for classification" do
493
+ Puppet.expects(:debug).with(regexp_matches /Ignoring hiera_include/)
494
+
495
+ expect {
496
+ catalog = compile_to_env_catalog(<<-EOC).to_resource
497
+ hiera_include('classes')
498
+ site { }
499
+ EOC
500
+ }.to_not raise_error()
501
+
502
+ end
503
+
493
504
  it "includes components and capability resources" do
494
505
  catalog = compile_to_env_catalog(MANIFEST).to_resource
495
506
  apps = catalog.resources.select do |res|
@@ -1,9 +1,11 @@
1
1
  require 'puppet'
2
2
  require 'spec_helper'
3
3
  require 'puppet_spec/compiler'
4
+ require 'puppet_spec/files'
4
5
 
5
6
  describe 'function for dynamically creating resources' do
6
7
  include PuppetSpec::Compiler
8
+ include PuppetSpec::Files
7
9
 
8
10
  before :each do
9
11
  node = Puppet::Node.new("floppy", :environment => 'production')
@@ -31,6 +33,35 @@ describe 'function for dynamically creating resources' do
31
33
  expect { @scope.function_create_resources(['foo',{},'foo']) }.to raise_error(ArgumentError, 'create_resources(): third argument, if provided, must be a hash')
32
34
  end
33
35
 
36
+ context 'when being called from a manifest in a file' do
37
+ let(:dir) do
38
+ dir_containing('manifests', {
39
+ 'site.pp' => <<-EOF
40
+ # comment here to make the call be on a particular
41
+ # source line (3)
42
+ create_resources('notify', {
43
+ 'a' => { 'message'=>'message a'},
44
+ 'b' => { 'message'=>'message b'},
45
+ }
46
+ )
47
+ EOF
48
+ }
49
+ )
50
+ end
51
+
52
+ it 'file and line information where call originates is written to all resources created in one call' do
53
+ node = Puppet::Node.new('test')
54
+ file = File.join(dir, 'site.pp')
55
+ Puppet[:manifest] = file
56
+ catalog = Puppet::Parser::Compiler.compile(node).filter { |r| r.virtual? }
57
+
58
+ expect(catalog.resource(:notify, 'a').file).to eq(file)
59
+ expect(catalog.resource(:notify, 'a').line).to eq(3)
60
+ expect(catalog.resource(:notify, 'b').file).to eq(file)
61
+ expect(catalog.resource(:notify, 'b').line).to eq(3)
62
+ end
63
+
64
+ end
34
65
  describe 'when creating native types' do
35
66
  it 'empty hash should not cause resources to be added' do
36
67
  noop_catalog = compile_to_catalog("create_resources('file', {})")
@@ -43,6 +74,16 @@ describe 'function for dynamically creating resources' do
43
74
  expect(catalog.resource(:file, "/etc/foo")['ensure']).to eq('present')
44
75
  end
45
76
 
77
+ it 'should pick up and pass on file and line information' do
78
+ # mock location as the compile_to_catalog sets Puppet[:code} which does not
79
+ # have file/line support.
80
+ Puppet::Pops::PuppetStack.expects(:stacktrace).once.returns([['test.pp', 1234]])
81
+ catalog = compile_to_catalog("create_resources('file', {'/etc/foo'=>{'ensure'=>'present'}})")
82
+ r = catalog.resource(:file, "/etc/foo")
83
+ expect(r.file).to eq('test.pp')
84
+ expect(r.line).to eq(1234)
85
+ end
86
+
46
87
  it 'should be able to add virtual resources' do
47
88
  catalog = compile_to_catalog("create_resources('@file', {'/etc/foo'=>{'ensure'=>'present'}})\nrealize(File['/etc/foo'])")
48
89
  expect(catalog.resource(:file, "/etc/foo")['ensure']).to eq('present')
@@ -54,16 +95,16 @@ describe 'function for dynamically creating resources' do
54
95
  expect(catalog.resource(:file, "/etc/foo").exported).to eq(true)
55
96
  end
56
97
 
57
- it 'should accept multiple types' do
98
+ it 'should accept multiple resources' do
58
99
  catalog = compile_to_catalog("create_resources('notify', {'foo'=>{'message'=>'one'}, 'bar'=>{'message'=>'two'}})")
59
100
  expect(catalog.resource(:notify, "foo")['message']).to eq('one')
60
101
  expect(catalog.resource(:notify, "bar")['message']).to eq('two')
61
102
  end
62
103
 
63
- it 'should fail to add non-existing type' do
104
+ it 'should fail to add non-existing resource type' do
64
105
  expect do
65
106
  @scope.function_create_resources(['create-resource-foo', { 'foo' => {} }])
66
- end.to raise_error(/Invalid resource type create-resource-foo/)
107
+ end.to raise_error(/Unknown resource type: 'create-resource-foo'/)
67
108
  end
68
109
 
69
110
  it 'should be able to add edges' do
@@ -84,6 +125,15 @@ describe 'function for dynamically creating resources' do
84
125
  expect(rg.path_between(foo,nil)).to_not be
85
126
  end
86
127
 
128
+ it 'should filter out undefined edges in an array as they cause errors' do
129
+ rg = compile_to_relationship_graph("notify { test: }\n create_resources('notify', {'foo'=>{'require'=>[undef]}})")
130
+ test = rg.vertices.find { |v| v.title == 'test' }
131
+ foo = rg.vertices.find { |v| v.title == 'foo' }
132
+ expect(test).to be
133
+ expect(foo).to be
134
+ expect(rg.path_between(foo,nil)).to_not be
135
+ end
136
+
87
137
  it 'should account for default values' do
88
138
  catalog = compile_to_catalog("create_resources('file', {'/etc/foo'=>{'ensure'=>'present'}, '/etc/baz'=>{'group'=>'food'}}, {'group' => 'bar'})")
89
139
  expect(catalog.resource(:file, "/etc/foo")['group']).to eq('bar')
@@ -112,7 +162,29 @@ describe 'function for dynamically creating resources' do
112
162
 
113
163
  create_resources('foocreateresource', {'blah'=>{}})
114
164
  MANIFEST
115
- }.to raise_error(Puppet::Error, /Foocreateresource\[blah\]: expects a value for parameter 'one' on node test/)
165
+ }.to raise_error(Puppet::Error, /Foocreateresource\[blah\]: expects a value for parameter 'one'/)
166
+ end
167
+
168
+ it 'should accept undef as explicit value when parameter has no default value' do
169
+ catalog = compile_to_catalog(<<-MANIFEST)
170
+ define foocreateresource($one) {
171
+ notify { $name: message => "aaa${one}bbb" }
172
+ }
173
+
174
+ create_resources('foocreateresource', {'blah'=>{ one => undef}})
175
+ MANIFEST
176
+ expect(catalog.resource(:notify, "blah")['message']).to eq('aaabbb')
177
+ end
178
+
179
+ it 'should use default value expression if given value is undef' do
180
+ catalog = compile_to_catalog(<<-MANIFEST)
181
+ define foocreateresource($one = 'xx') {
182
+ notify { $name: message => "aaa${one}bbb" }
183
+ }
184
+
185
+ create_resources('foocreateresource', {'blah'=>{ one => undef}})
186
+ MANIFEST
187
+ expect(catalog.resource(:notify, "blah")['message']).to eq('aaaxxbbb')
116
188
  end
117
189
 
118
190
  it 'should be able to add multiple defines' do
@@ -18,7 +18,7 @@ describe "the require function" do
18
18
 
19
19
  @scope.stubs(:findresource)
20
20
  @klass = stub 'class', :name => "myclass"
21
- @scope.stubs(:find_hostclass).returns(@klass)
21
+ @scope.environment.known_resource_types.stubs(:find_hostclass).returns(@klass)
22
22
 
23
23
  @resource = Puppet::Parser::Resource.new(:file, "/my/file", :scope => @scope, :source => "source")
24
24
  @scope.stubs(:resource).returns @resource
@@ -45,7 +45,7 @@ describe "the require function" do
45
45
  it "should lookup the absolute class path" do
46
46
  @scope.compiler.stubs(:evaluate_classes)
47
47
 
48
- @scope.expects(:find_hostclass).with("::myclass").returns(@klass)
48
+ @scope.environment.known_resource_types.expects(:find_hostclass).with("::myclass").returns(@klass)
49
49
  @klass.expects(:name).returns("myclass")
50
50
 
51
51
  @scope.function_require(["myclass"])
@@ -54,10 +54,6 @@ describe Puppet::Parser::Resource do
54
54
  expect(Puppet::Parser::Resource.new("file", "whatever", :scope => scope).environment).to eq("foo")
55
55
  end
56
56
 
57
- it "should use the resource type collection helper module" do
58
- expect(Puppet::Parser::Resource.ancestors).to be_include(Puppet::Resource::TypeCollectionHelper)
59
- end
60
-
61
57
  it "should use the scope's environment as its environment" do
62
58
  @scope.expects(:environment).returns("myenv").at_least_once
63
59
  expect(Puppet::Parser::Resource.new("file", "whatever", :scope => @scope).environment).to eq("myenv")
@@ -157,7 +153,7 @@ describe Puppet::Parser::Resource do
157
153
  end
158
154
 
159
155
  it "should add an edge to any specified stage for class resources" do
160
- @compiler.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
156
+ @compiler.environment.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
161
157
 
162
158
  other_stage = Puppet::Parser::Resource.new(:stage, "other", :scope => @scope, :catalog => @catalog)
163
159
  @compiler.add_resource(@scope, other_stage)
@@ -171,7 +167,7 @@ describe Puppet::Parser::Resource do
171
167
  end
172
168
 
173
169
  it "should fail if an unknown stage is specified" do
174
- @compiler.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
170
+ @compiler.environment.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
175
171
 
176
172
  resource = Puppet::Parser::Resource.new(:class, "foo", :scope => @scope, :catalog => @catalog)
177
173
  resource[:stage] = 'other'
@@ -183,7 +179,7 @@ describe Puppet::Parser::Resource do
183
179
  main = @compiler.catalog.resource(:stage, :main)
184
180
  foo_stage = Puppet::Parser::Resource.new(:stage, :foo_stage, :scope => @scope, :catalog => @catalog)
185
181
  @compiler.add_resource(@scope, foo_stage)
186
- @compiler.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
182
+ @compiler.environment.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
187
183
  resource = Puppet::Parser::Resource.new(:class, "foo", :scope => @scope, :catalog => @catalog)
188
184
  resource[:stage] = 'foo_stage'
189
185
  @compiler.add_resource(@scope, resource)
@@ -200,6 +196,16 @@ describe Puppet::Parser::Resource do
200
196
  expect(edges).to include(['Class[main]', 'Notify[hello]'])
201
197
  end
202
198
 
199
+ it 'should evaluate class in the same file without include' do
200
+ Puppet[:code] = <<-MANIFEST
201
+ class a($myvar = 'hello') {}
202
+ class { 'a': myvar => 'goodbye' }
203
+ notify { $a::myvar: }
204
+ MANIFEST
205
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new 'anyone')
206
+ expect(catalog.resource('Notify[goodbye]')).to be_a(Puppet::Resource)
207
+ end
208
+
203
209
  it "should allow edges to propagate multiple levels down the scope hierarchy" do
204
210
  Puppet[:code] = <<-MANIFEST
205
211
  stage { before: before => Stage[main] }
@@ -246,7 +252,7 @@ describe Puppet::Parser::Resource do
246
252
 
247
253
  it "should add edges from top-level class resources to the main stage if no stage is specified" do
248
254
  main = @compiler.catalog.resource(:stage, :main)
249
- @compiler.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
255
+ @compiler.environment.known_resource_types.add Puppet::Resource::Type.new(:hostclass, "foo", {})
250
256
  resource = Puppet::Parser::Resource.new(:class, "foo", :scope => @scope, :catalog => @catalog)
251
257
  @compiler.add_resource(@scope, resource)
252
258
 
@@ -258,9 +264,6 @@ describe Puppet::Parser::Resource do
258
264
 
259
265
  describe "when finishing" do
260
266
  before do
261
- @class = newclass "myclass"
262
- @nodedef = newnode("mynode")
263
-
264
267
  @resource = Puppet::Parser::Resource.new("file", "whatever", :scope => @scope, :source => @source)
265
268
  end
266
269
 
@@ -295,6 +298,13 @@ describe Puppet::Parser::Resource do
295
298
 
296
299
  expect(@resource[:owner]).to eq("other")
297
300
  end
301
+
302
+ it "converts parameters with Sensitive values to unwrapped values and metadata" do
303
+ @resource[:content] = Puppet::Pops::Types::PSensitiveType::Sensitive.new("hunter2")
304
+ @resource.finish
305
+ expect(@resource[:content]).to eq "hunter2"
306
+ expect(@resource.sensitive_parameters).to eq [:content]
307
+ end
298
308
  end
299
309
 
300
310
  describe "when being tagged" do
@@ -91,10 +91,6 @@ describe Puppet::Parser::Scope do
91
91
  }.to raise_error(Puppet::DevError, /you must pass a compiler instance/)
92
92
  end
93
93
 
94
- it "should use the resource type collection helper to find its known resource types" do
95
- expect(Puppet::Parser::Scope.ancestors).to include(Puppet::Resource::TypeCollectionHelper)
96
- end
97
-
98
94
  describe "when custom functions are called" do
99
95
  let(:env) { Puppet::Node::Environment.create(:testing, []) }
100
96
  let(:compiler) { Puppet::Parser::Compiler.new(Puppet::Node.new('foo', :environment => env)) }
@@ -230,7 +226,7 @@ describe Puppet::Parser::Scope do
230
226
 
231
227
  describe "and the variable is qualified" do
232
228
  before :each do
233
- @known_resource_types = @scope.known_resource_types
229
+ @known_resource_types = @scope.environment.known_resource_types
234
230
 
235
231
  node = Puppet::Node.new('localhost')
236
232
  @compiler = Puppet::Parser::Compiler.new(node)
@@ -792,7 +792,7 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
792
792
  Puppet.override({:global_scope => scope,
793
793
  :environments => Puppet::Environments::Static.new(@node.environment)
794
794
  }, "gets class parameter test") do
795
- scope.known_resource_types.import_ast(ast, '')
795
+ scope.environment.known_resource_types.import_ast(ast, '')
796
796
  expect(ast.code.safeevaluate(scope)).to eq('chocolate')
797
797
  end
798
798
  end
@@ -114,6 +114,6 @@ Puppet::Functions.create_function('testmodule::foo') {
114
114
  end
115
115
 
116
116
  def typed_name(type, name)
117
- Puppet::Pops::Loader::Loader::TypedName.new(type, name)
117
+ Puppet::Pops::Loader::TypedName.new(type, name)
118
118
  end
119
119
  end
@@ -7,7 +7,7 @@ describe 'loader paths' do
7
7
  include PuppetSpec::Files
8
8
 
9
9
  let(:static_loader) { Puppet::Pops::Loader::StaticLoader.new() }
10
- let(:unused_loaders) { nil }
10
+ let(:unused_loaders) { Puppet::Pops::Loaders.new(Puppet::Node::Environment.create(:'*test*', [])) }
11
11
 
12
12
  it 'module loader has smart-paths that prunes unavailable paths' do
13
13
  module_dir = dir_containing('testmodule', {'lib' => {'puppet' => {'functions' =>
@@ -15,7 +15,7 @@ describe 'loader helper classes' do
15
15
  end
16
16
 
17
17
  it 'TypedName holds values and is frozen' do
18
- tn = Puppet::Pops::Loader::Loader::TypedName.new(:function, '::foo::bar')
18
+ tn = Puppet::Pops::Loader::TypedName.new(:function, '::foo::bar')
19
19
  expect(tn.frozen?).to be_truthy
20
20
  expect(tn.type).to eq(:function)
21
21
  expect(tn.name_parts).to eq(['foo', 'bar'])
@@ -33,6 +33,7 @@ describe 'loaders' do
33
33
  let(:mix_4x_and_3x_functions) { config_dir('mix_4x_and_3x_functions') }
34
34
  let(:module_with_metadata) { File.join(config_dir('single_module'), 'modules') }
35
35
  let(:dependent_modules_with_metadata) { config_dir('dependent_modules_with_metadata') }
36
+ let(:no_modules) { config_dir('no_modules') }
36
37
  let(:user_metadata_path) { File.join(dependent_modules_with_metadata, 'modules/user/metadata.json') }
37
38
 
38
39
  let(:empty_test_env) { environment_for() }
@@ -40,6 +41,42 @@ describe 'loaders' do
40
41
  # Loaders caches the puppet_system_loader, must reset between tests
41
42
  before(:each) { Puppet::Pops::Loaders.clear() }
42
43
 
44
+ context 'when loading pp resource types using auto loading' do
45
+ let(:pp_resources) { config_dir('pp_resources') }
46
+ let(:environments) { Puppet::Environments::Directories.new(my_fixture_dir, []) }
47
+ let(:env) { Puppet::Node::Environment.create(:'pp_resources', [File.join(pp_resources, 'modules')]) }
48
+ let(:scope) { Puppet::Parser::Compiler.new(Puppet::Node.new("test", :environment => env)).newscope(nil) }
49
+ let(:loader) { Puppet::Pops::Loaders.loaders.find_loader(nil) }
50
+ around(:each) do |example|
51
+ Puppet.override(:environments => environments, :current_environment => scope.environment, :global_scope => scope) do
52
+ Puppet.override(:loaders => Puppet::Pops::Loaders.new(env)) do
53
+ example.run
54
+ end
55
+ end
56
+ end
57
+
58
+ it 'finds a resource type that resides under <environment root>/.resource_types' do
59
+ rt = loader.load(:resource_type_pp, 'myresource')
60
+ expect(rt).to be_a(Puppet::Pops::Resource::ResourceTypeImpl)
61
+ end
62
+
63
+ it 'does not allow additional logic in the file' do
64
+ expect{loader.load(:resource_type_pp, 'addlogic')}.to raise_error(ArgumentError, /it has additional logic/)
65
+ end
66
+
67
+ it 'does not allow creation of classes other than Puppet::Resource::ResourceType3' do
68
+ expect{loader.load(:resource_type_pp, 'badcall')}.to raise_error(ArgumentError, /no call to Puppet::Resource::ResourceType3.new found/)
69
+ end
70
+
71
+ it 'does not allow creation of other types' do
72
+ expect{loader.load(:resource_type_pp, 'wrongname')}.to raise_error(ArgumentError, /produced resource type with the wrong name, expected 'wrongname', actual 'notwrongname'/)
73
+ end
74
+
75
+ it 'errors with message about empty file for files that contain no logic' do
76
+ expect{loader.load(:resource_type_pp, 'empty')}.to raise_error(ArgumentError, /it is empty/)
77
+ end
78
+ end
79
+
43
80
  it 'creates a puppet_system loader' do
44
81
  loaders = Puppet::Pops::Loaders.new(empty_test_env)
45
82
  expect(loaders.puppet_system_loader()).to be_a(Puppet::Pops::Loader::ModuleLoaders::FileBased)
@@ -51,7 +88,7 @@ describe 'loaders' do
51
88
  expect(loaders.public_environment_loader()).to be_a(Puppet::Pops::Loader::SimpleEnvironmentLoader)
52
89
  expect(loaders.public_environment_loader().to_s).to eql("(SimpleEnvironmentLoader 'environment:*test*')")
53
90
  expect(loaders.private_environment_loader()).to be_a(Puppet::Pops::Loader::DependencyLoader)
54
- expect(loaders.private_environment_loader().to_s).to eql("(DependencyLoader 'environment' [])")
91
+ expect(loaders.private_environment_loader().to_s).to eql("(DependencyLoader 'environment private' [])")
55
92
  end
56
93
 
57
94
  context 'when loading from a module' do
@@ -200,7 +237,7 @@ describe 'loaders' do
200
237
  expect(resource['message']).to eq(desc[:expects])
201
238
  end
202
239
 
203
- it 'can not call ruby function in a dependent module from outside a function if dependency is missing in existing metadata.json' do
240
+ it "can not call #{desc[:called]} from #{desc[:from]} if dependency is missing in existing metadata.json" do
204
241
  File.stubs(:read).with(user_metadata_path, {:encoding => 'utf-8'}).returns user_metadata.merge('dependencies' => []).to_pson
205
242
  Puppet[:code] = "$case_number = #{case_number}\ninclude ::user"
206
243
  expect { catalog = compiler.compile }.to raise_error(Puppet::Error, /Unknown function/)
@@ -274,6 +311,28 @@ describe 'loaders' do
274
311
  end
275
312
  end
276
313
 
314
+ context 'when loading from an environment without modules' do
315
+ let(:node) { Puppet::Node.new('test', :facts => Puppet::Node::Facts.new('facts', {}), :environment => 'no_modules') }
316
+
317
+ it 'can load the same function twice with two different compilations and produce different values' do
318
+ Puppet.settings.initialize_global_settings
319
+ environments = Puppet::Environments::Directories.new(my_fixture_dir, [])
320
+ Puppet.override(:environments => environments) do
321
+ compiler = Puppet::Parser::Compiler.new(node)
322
+ compiler.topscope['value_from_scope'] = 'first'
323
+ catalog = compiler.compile
324
+ expect(catalog.resource('Notify[first]')).to be_a(Puppet::Resource)
325
+
326
+ Puppet::Pops::Loader::RubyFunctionInstantiator.expects(:create).never
327
+ compiler = Puppet::Parser::Compiler.new(node)
328
+ compiler.topscope['value_from_scope'] = 'second'
329
+ catalog = compiler.compile
330
+ expect(catalog.resource('Notify[first]')).to be_nil
331
+ expect(catalog.resource('Notify[second]')).to be_a(Puppet::Resource)
332
+ end
333
+ end
334
+ end
335
+
277
336
  context 'when calling' do
278
337
  let(:env) { environment_for(mix_4x_and_3x_functions) }
279
338
  let(:scope) { Puppet::Parser::Compiler.new(Puppet::Node.new("test", :environment => env)).newscope(nil) }
@@ -314,13 +373,12 @@ describe 'loaders' do
314
373
  end
315
374
  end
316
375
 
317
-
318
376
  def environment_for(*module_paths)
319
377
  Puppet::Node::Environment.create(:'*test*', module_paths)
320
378
  end
321
379
 
322
380
  def typed_name(type, name)
323
- Puppet::Pops::Loader::Loader::TypedName.new(type, name)
381
+ Puppet::Pops::Loader::TypedName.new(type, name)
324
382
  end
325
383
 
326
384
  def config_dir(config_name)
@@ -58,7 +58,7 @@ describe 'FileBased module loader' do
58
58
  end
59
59
 
60
60
  it 'system loader has itself as private loader' do
61
- module_loader = Puppet::Pops::Loader::ModuleLoaders.system_loader_from(static_loader, loaders)
61
+ module_loader = loaders.puppet_system_loader
62
62
  expect(module_loader.private_loader).to be(module_loader)
63
63
  end
64
64
 
@@ -90,6 +90,6 @@ describe 'FileBased module loader' do
90
90
  end
91
91
 
92
92
  def typed_name(type, name)
93
- Puppet::Pops::Loader::Loader::TypedName.new(type, name)
93
+ Puppet::Pops::Loader::TypedName.new(type, name)
94
94
  end
95
95
  end
@@ -121,7 +121,7 @@ describe 'the static loader' do
121
121
  end
122
122
 
123
123
  def typed_name(type, name)
124
- Puppet::Pops::Loader::Loader::TypedName.new(type, name)
124
+ Puppet::Pops::Loader::TypedName.new(type, name)
125
125
  end
126
126
 
127
127
  def resource_type(name)