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
@@ -25,7 +25,7 @@ describe 'Lexer2' do
25
25
  :RBRACK => ']',
26
26
  :LBRACE => '{',
27
27
  :RBRACE => '}',
28
- :LPAREN => '(',
28
+ :WSLPAREN => '(', # since it is first on a line it is special (LPAREN handled separately)
29
29
  :RPAREN => ')',
30
30
  :EQUALS => '=',
31
31
  :ISEQUAL => '==',
@@ -301,12 +301,32 @@ describe 'Lexer2' do
301
301
  expect(tokens_scanned_from("$a [1]")).to match_tokens2(:VARIABLE, :LISTSTART, :NUMBER, :RBRACK)
302
302
  expect(tokens_scanned_from("a[1]")).to match_tokens2(:NAME, :LBRACK, :NUMBER, :RBRACK)
303
303
  expect(tokens_scanned_from("a [1]")).to match_tokens2(:NAME, :LISTSTART, :NUMBER, :RBRACK)
304
- expect(tokens_scanned_from(" if \n\r\t\nif if ")).to match_tokens2(:IF, :IF, :IF)
304
+ end
305
+
306
+ it "differentiates between '(' first on line, and not first on line" do
307
+ expect(tokens_scanned_from("(")).to match_tokens2(:WSLPAREN)
308
+ expect(tokens_scanned_from("\n(")).to match_tokens2(:WSLPAREN)
309
+ expect(tokens_scanned_from("\n\r(")).to match_tokens2(:WSLPAREN)
310
+ expect(tokens_scanned_from("\n\t(")).to match_tokens2(:WSLPAREN)
311
+ expect(tokens_scanned_from("\n\r\t(")).to match_tokens2(:WSLPAREN)
312
+ expect(tokens_scanned_from("\n\u00a0(")).to match_tokens2(:WSLPAREN)
313
+
314
+ expect(tokens_scanned_from("x(")).to match_tokens2(:NAME, :LPAREN)
315
+ expect(tokens_scanned_from("\nx(")).to match_tokens2(:NAME, :LPAREN)
316
+ expect(tokens_scanned_from("\n\rx(")).to match_tokens2(:NAME, :LPAREN)
317
+ expect(tokens_scanned_from("\n\tx(")).to match_tokens2(:NAME, :LPAREN)
318
+ expect(tokens_scanned_from("\n\r\tx(")).to match_tokens2(:NAME, :LPAREN)
319
+ expect(tokens_scanned_from("\n\u00a0x(")).to match_tokens2(:NAME, :LPAREN)
320
+
321
+ expect(tokens_scanned_from("x (")).to match_tokens2(:NAME, :LPAREN)
322
+ expect(tokens_scanned_from("x\t(")).to match_tokens2(:NAME, :LPAREN)
323
+ expect(tokens_scanned_from("x\u00a0(")).to match_tokens2(:NAME, :LPAREN)
305
324
  end
306
325
 
307
326
  it "skips whitepsace" do
308
327
  expect(tokens_scanned_from(" if if if ")).to match_tokens2(:IF, :IF, :IF)
309
328
  expect(tokens_scanned_from(" if \n\r\t\nif if ")).to match_tokens2(:IF, :IF, :IF)
329
+ expect(tokens_scanned_from(" if \n\r\t\n\u00a0if\u00a0 if ")).to match_tokens2(:IF, :IF, :IF)
310
330
  end
311
331
 
312
332
  it "skips single line comments" do
@@ -331,7 +351,11 @@ describe 'Lexer2' do
331
351
  { "=~" => [:MATCH, "=~ /./"],
332
352
  "!~" => [:NOMATCH, "!~ /./"],
333
353
  "," => [:COMMA, ", /./"],
334
- "(" => [:LPAREN, "( /./"],
354
+
355
+ "(" => [:WSLPAREN, "( /./"],
356
+ "x (" => [[:NAME, :LPAREN], "x ( /./"],
357
+ "x\\t (" => [[:NAME, :LPAREN], "x\t ( /./"],
358
+
335
359
  "[ (liststart)" => [:LISTSTART, "[ /./"],
336
360
  "[ (LBRACK)" => [[:NAME, :LBRACK], "a[ /./"],
337
361
  "[ (liststart after name)" => [[:NAME, :LISTSTART], "a [ /./"],
@@ -307,5 +307,13 @@ describe "egrammar parsing basic expressions" do
307
307
  expect(dump(parse("$a = \"yo${var.foo}yo\""))).to eq("(= $a (cat 'yo' (str (call-method (. $var foo))) 'yo'))")
308
308
  expect(dump(parse("$a = \"yo${var.foo.bar}yo\""))).to eq("(= $a (cat 'yo' (str (call-method (. (call-method (. $var foo)) bar))) 'yo'))")
309
309
  end
310
+
311
+ it "should interpolate interpolated expressions with a variable, \"yo${\"$var\"}yo\"" do
312
+ expect(dump(parse("$a = \"yo${\"$var\"}yo\""))).to eq("(= $a (cat 'yo' (str (cat '' (str $var) '')) 'yo'))")
313
+ end
314
+
315
+ it "should interpolate interpolated expressions with an expression, \"yo${\"${$var+2}\"}yo\"" do
316
+ expect(dump(parse("$a = \"yo${\"${$var+2}\"}yo\""))).to eq("(= $a (cat 'yo' (str (cat '' (str (+ $var 2)) '')) 'yo'))")
317
+ end
310
318
  end
311
319
  end
@@ -45,6 +45,11 @@ describe "egrammar parsing function calls" do
45
45
  it "notice type(42)" do
46
46
  expect(dump(parse("notice type(42)"))).to eq('(invoke notice (call type 42))')
47
47
  end
48
+
49
+ it "is required to place the '(' on the same line as the name of the function to recognize it as arguments in call" do
50
+ expect(dump(parse("notice foo\n(42)"))).to eq("(block\n (invoke notice foo)\n 42\n)")
51
+ end
52
+
48
53
  end
49
54
 
50
55
  context "in nested scopes" do
@@ -111,6 +116,10 @@ describe "egrammar parsing function calls" do
111
116
  it "notice 42.type(detailed)" do
112
117
  expect(dump(parse("notice 42.type(detailed)"))).to eq('(invoke notice (call-method (. 42 type) detailed))')
113
118
  end
119
+
120
+ it "is required to place the '(' on the same line as the name of the method to recognize it as arguments in call" do
121
+ expect(dump(parse("notice 42.type\n(detailed)"))).to eq("(block\n (invoke notice (call-method (. 42 type)))\n detailed\n)")
122
+ end
114
123
  end
115
124
 
116
125
  context "When parsing an illegal argument list" do
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet/pops'
4
+
5
+ describe 'Puppet::Pops::PuppetStack' do
6
+ class StackTraceTest
7
+ def get_stacktrace
8
+ Puppet::Pops::PuppetStack.stacktrace
9
+ end
10
+
11
+ def one_level
12
+ Puppet::Pops::PuppetStack.stack("one_level.pp", 1234, self, :get_stacktrace, [])
13
+ end
14
+
15
+ def one_level
16
+ Puppet::Pops::PuppetStack.stack("one_level.pp", 1234, self, :get_stacktrace, [])
17
+ end
18
+
19
+ def two_levels
20
+ Puppet::Pops::PuppetStack.stack("two_levels.pp", 1237, self, :level2, [])
21
+ end
22
+
23
+ def level2
24
+ Puppet::Pops::PuppetStack.stack("level2.pp", 1240, self, :get_stacktrace, [])
25
+ end
26
+
27
+ def gets_block(a, &block)
28
+ block.call(a)
29
+ end
30
+
31
+ def gets_args_and_block(a, b, &block)
32
+ block.call(a, b)
33
+ end
34
+
35
+ def with_nil_file
36
+ Puppet::Pops::PuppetStack.stack(nil, 1250, self, :get_stacktrace, [])
37
+ end
38
+
39
+ def with_empty_string_file
40
+ Puppet::Pops::PuppetStack.stack('', 1251, self, :get_stacktrace, [])
41
+ end
42
+ end
43
+
44
+ it 'returns an empty array from stacktrace when there is nothing on the stack' do
45
+ expect(Puppet::Pops::PuppetStack.stacktrace).to eql([])
46
+ end
47
+
48
+ it 'returns a one element array with file, line from stacktrace when there is one entry on the stack' do
49
+ expect(StackTraceTest.new.one_level).to eql([['one_level.pp', 1234]])
50
+ end
51
+
52
+ it 'returns an array from stacktrace with information about each level with oldest frame last' do
53
+ expect(StackTraceTest.new.two_levels).to eql([['two_levels.pp', 1237], ['level2.pp', 1240]])
54
+ end
55
+
56
+ it 'accepts file to be nil' do
57
+ expect(StackTraceTest.new.with_nil_file).to eql([['unknown', 1250]])
58
+ end
59
+
60
+ it 'accepts file to be empty_string' do
61
+ expect(StackTraceTest.new.with_empty_string_file).to eql([['unknown', 1251]])
62
+ end
63
+
64
+ it 'stacktrace is empty when call has returned' do
65
+ StackTraceTest.new.two_levels
66
+ expect(Puppet::Pops::PuppetStack.stacktrace).to eql([])
67
+ end
68
+
69
+ it 'allows passing a block to the stack call' do
70
+ expect(Puppet::Pops::PuppetStack.stack("test.pp", 1, StackTraceTest.new, :gets_block, ['got_it']) {|x| x }).to eql('got_it')
71
+ end
72
+
73
+ it 'allows passing multiple variables and a block' do
74
+ expect(
75
+ Puppet::Pops::PuppetStack.stack("test.pp", 1, StackTraceTest.new, :gets_args_and_block, ['got_it', 'again']) {|x, y| [x,y].join(' ')}
76
+ ).to eql('got_it again')
77
+ end
78
+
79
+ end
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+ require 'puppet_spec/compiler'
5
+
6
+ module Puppet::Pops
7
+ module Resource
8
+ describe "Puppet::Pops::Resource" do
9
+ include PuppetSpec::Compiler
10
+
11
+ let!(:pp_parser) { Parser::EvaluatingParser.new }
12
+ let(:loader) { Loader::BaseLoader.new(nil, 'type_parser_unit_test_loader') }
13
+ let(:factory) { TypeFactory }
14
+
15
+ context 'when creating resources' do
16
+ let!(:resource_type) { ResourceTypeImpl._ptype }
17
+
18
+ it 'can create an instance of a ResourceType' do
19
+ code = <<-CODE
20
+ $rt = Puppet::Resource::ResourceType3.new('notify', [], [Puppet::Resource::Param.new(String, 'message')])
21
+ assert_type(Puppet::Resource::ResourceType3, $rt)
22
+ notice('looks like we made it')
23
+ CODE
24
+ rt = nil
25
+ notices = eval_and_collect_notices(code) do |scope, _|
26
+ rt = scope['rt']
27
+ end
28
+ expect(notices).to eq(['looks like we made it'])
29
+ expect(rt).to be_a(ResourceTypeImpl)
30
+ expect(rt.valid_parameter?(:nonesuch)).to be_falsey
31
+ expect(rt.valid_parameter?(:message)).to be_truthy
32
+ expect(rt.valid_parameter?(:loglevel)).to be_truthy
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,153 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops/serialization'
3
+
4
+ module Puppet::Pops::Serialization
5
+ [JSON].each do |packer_module|
6
+ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
7
+ let(:io) { StringIO.new }
8
+ let(:reader_class) { packer_module::Reader }
9
+ let(:writer_class) { packer_module::Writer }
10
+
11
+ def write(*values)
12
+ io.reopen
13
+ serializer = writer_class.new(io)
14
+ values.each { |val| serializer.write(val) }
15
+ serializer.finish
16
+ io.rewind
17
+ end
18
+
19
+ def read(count = nil)
20
+ @deserializer = reader_class.new(io)
21
+ count.nil? ? @deserializer.read : Array.new(count) { @deserializer.read }
22
+ end
23
+
24
+ context 'can write and read a Scalar' do
25
+ it 'String' do
26
+ val = 'the value'
27
+ write(val)
28
+ val2 = read
29
+ expect(val2).to be_a(String)
30
+ expect(val2).to eql(val)
31
+ end
32
+
33
+ it 'positive Integer' do
34
+ val = 2**63-1
35
+ write(val)
36
+ val2 = read
37
+ expect(val2).to be_a(Integer)
38
+ expect(val2).to eql(val)
39
+ end
40
+
41
+ it 'negative Integer' do
42
+ val = -2**63
43
+ write(val)
44
+ val2 = read
45
+ expect(val2).to be_a(Integer)
46
+ expect(val2).to eql(val)
47
+ end
48
+
49
+ it 'Float' do
50
+ val = 32.45
51
+ write(val)
52
+ val2 = read
53
+ expect(val2).to be_a(Float)
54
+ expect(val2).to eql(val)
55
+ end
56
+
57
+ it 'true' do
58
+ val = true
59
+ write(val)
60
+ val2 = read
61
+ expect(val2).to be_a(TrueClass)
62
+ expect(val2).to eql(val)
63
+ end
64
+
65
+ it 'false' do
66
+ val = false
67
+ write(val)
68
+ val2 = read
69
+ expect(val2).to be_a(FalseClass)
70
+ expect(val2).to eql(val)
71
+ end
72
+
73
+ it 'nil' do
74
+ val = nil
75
+ write(val)
76
+ val2 = read
77
+ expect(val2).to be_a(NilClass)
78
+ expect(val2).to eql(val)
79
+ end
80
+
81
+ it 'Regexp' do
82
+ val = /match me/
83
+ write(val)
84
+ val2 = read
85
+ expect(val2).to be_a(Regexp)
86
+ expect(val2).to eql(val)
87
+ end
88
+
89
+ it 'Time created by TimeFactory' do
90
+ val = TimeFactory.now
91
+ write(val)
92
+ val2 = read
93
+ expect(val2).to be_a(Time)
94
+ expect(val2).to eql(val)
95
+ end
96
+
97
+ it 'Version' do
98
+ val = Semantic::Version.parse('1.2.3-alpha2')
99
+ write(val)
100
+ val2 = read
101
+ expect(val2).to be_a(Semantic::Version)
102
+ expect(val2).to eql(val)
103
+ end
104
+
105
+ it 'VersionRange' do
106
+ val = Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
107
+ write(val)
108
+ val2 = read
109
+ expect(val2).to be_a(Semantic::VersionRange)
110
+ expect(val2).to eql(val)
111
+ end
112
+
113
+ it 'will never fail write and read of Time created by TimeFactory' do
114
+ val = Time.now
115
+ val = TimeFactory.at(val.tv_sec, val.tv_nsec / 1000 + 0.123)
116
+ write(val)
117
+ val2 = read
118
+ expect(val).to eq(val2)
119
+ end
120
+
121
+ # Windows doesn't seem ot have fine enough granularity to provoke the problem
122
+ it 'will fail on Time not created by TimeFactory' do
123
+ val = Time.now
124
+ val = Time.at(val.tv_sec, val.tv_nsec / 1000 + 0.123)
125
+ write(val)
126
+ val2 = read
127
+ expect(val).not_to eq(val2)
128
+ end
129
+ end
130
+
131
+ context 'will fail on attempts to write' do
132
+ it 'Integer larger than 2**63-1' do
133
+ expect { write(2**63) }.to raise_error(SerializationError, 'Integer out of bounds')
134
+ end
135
+
136
+ it 'Integer smaller than -2**63' do
137
+ expect { write(-2**63-1) }.to raise_error(SerializationError, 'Integer out of bounds')
138
+ end
139
+
140
+ it 'objects unknown to Puppet serialization' do
141
+ expect { write("".class) }.to raise_error(SerializationError, 'Unable to serialize a Class')
142
+ end
143
+ end
144
+
145
+ it 'should be able to write and read primitives using tabulation' do
146
+ val = 'the value'
147
+ write(val, val)
148
+ expect(read(2)).to eql([val, val])
149
+ expect(@deserializer.primitive_count).to eql(1)
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+
4
+ module Puppet::Pops
5
+ module Serialization
6
+ describe 'RGen' do
7
+ let!(:env) { Puppet::Node::Environment.create(:testing, []) }
8
+ let!(:loaders) { Puppet::Pops::Loaders.new(env) }
9
+ let!(:loader) { loaders.find_loader(nil) }
10
+
11
+ around :each do |example|
12
+ Puppet.override(:loaders => loaders, :current_environment => env) do
13
+ example.run
14
+ end
15
+ end
16
+
17
+ def find_parent(type, parent_name)
18
+ p = type
19
+ while p.is_a?(Types::PObjectType) && p.name != parent_name
20
+ p = p.parent
21
+ end
22
+ expect(p).to be_a(Types::PObjectType), "did not find #{parent_name} in parent chain of #{type.name}"
23
+ p
24
+ end
25
+
26
+ context 'TypeGenerator' do
27
+
28
+ let!(:generator) { RGen::TypeGenerator.new }
29
+ let!(:type_set) { generator.generate_type_set('PuppetSpec::Bindings', Binder::Bindings, loader) }
30
+ let!(:bindings_classes) do
31
+ Binder::Bindings.constants.each_with_object([]) do |n, a|
32
+ cls = Binder::Bindings.const_get(n)
33
+ a << cls if cls.is_a?(Class) && cls.respond_to?(:ecore)
34
+ end
35
+ end
36
+
37
+ it 'generates TypeSet from a module that represents an ECore package' do
38
+ expect(type_set).to be_a(Types::PTypeSetType)
39
+ expect(type_set.types).not_to be_empty
40
+ expect(type_set.types.size).to eql(bindings_classes.size)
41
+ end
42
+
43
+ it 'all types are in the PuppetSpec::Bindings namespace' do
44
+ type_set.types.values.each {|type| expect(type.name).to start_with('PuppetSpec::Bindings::') }
45
+ end
46
+
47
+ it 'all types extend from PuppetSpec::Bindings::BindingsModelObject' do
48
+ type_set.types.values.each do |type|
49
+ expect(find_parent(type, 'PuppetSpec::Bindings::BindingsModelObject').name).to eq('PuppetSpec::Bindings::BindingsModelObject')
50
+ end
51
+ end
52
+ end
53
+
54
+ context 'AST model types' do
55
+ let!(:impl_repo) { Loaders.implementation_registry }
56
+ let!(:loader) { Loaders.find_loader(nil) }
57
+ let!(:type_set) { Types::TypeParser.singleton.parse('Puppet::AST', loader) }
58
+ let!(:ast_classes) do
59
+ Model.constants.each_with_object([]) do |n, a|
60
+ cls = Model.const_get(n)
61
+ a << cls if cls.is_a?(Class) && cls.respond_to?(:ecore)
62
+ end
63
+ end
64
+
65
+ it 'can be mapped from the ecore classes found in Puppet::Pops::Model' do
66
+ ast_classes.each { |ast_class| expect(impl_repo.type_for_module(ast_class)).to be_a(Types::PObjectType) }
67
+ end
68
+
69
+ it 'are contained in a TypeSet named Puppet::AST' do
70
+ expect(type_set).to be_a(Types::PTypeSetType)
71
+ expect(type_set.name).to eq('Puppet::AST')
72
+ expect(type_set.types.size).to eql(ast_classes.size + 1) # +1 because the Locator is added
73
+ end
74
+
75
+ it 'all reside in the Puppet::AST namespace' do
76
+ type_set.types.values.each {|type| expect(type.name).to start_with('Puppet::AST::') }
77
+ end
78
+
79
+ it 'all extend from Puppet::AST::PopsObject' do
80
+ type_set.types.values.each do |type|
81
+ next if type.name == 'Puppet::AST::Locator'
82
+ expect(find_parent(type, 'Puppet::AST::PopsObject').name).to eq('Puppet::AST::PopsObject')
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end