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
@@ -722,11 +722,11 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
722
722
 
723
723
  FileUtils.mkdir_p(srcdir)
724
724
  FileUtils.mkdir_p(dstdir)
725
-
725
+
726
726
  srcfile = File.join(srcdir, "file.src")
727
727
  cpyfile = File.join(dstdir, "file.src")
728
728
  ignfile = File.join(srcdir, "file.ign")
729
-
729
+
730
730
  File.open(srcfile, "w") { |f| f.puts "don't ignore me" }
731
731
  File.open(ignfile, "w") { |f| f.puts "you better ignore me" }
732
732
 
@@ -735,7 +735,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
735
735
  :name => srcdir,
736
736
  :ensure => 'directory',
737
737
  :mode => '0755',)
738
-
738
+
739
739
  catalog.add_resource described_class.new(
740
740
  :name => dstdir,
741
741
  :ensure => 'directory',
@@ -743,7 +743,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
743
743
  :source => srcdir,
744
744
  :recurse => true,
745
745
  :ignore => '*.ign',)
746
-
746
+
747
747
  catalog.apply
748
748
  expect(Puppet::FileSystem.exist?(srcdir)).to be_truthy
749
749
  expect(Puppet::FileSystem.exist?(dstdir)).to be_truthy
@@ -1393,9 +1393,8 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1393
1393
  describe "when processing SYSTEM ACEs" do
1394
1394
  before do
1395
1395
  @sids = {
1396
- :current_user => Puppet::Util::Windows::SID.name_to_sid(Puppet::Util::Windows::ADSI::User.current_user_name),
1396
+ :current_user => Puppet::Util::Windows::ADSI::User.current_user_sid.sid,
1397
1397
  :system => Puppet::Util::Windows::SID::LocalSystem,
1398
- :guest => Puppet::Util::Windows::SID.name_to_sid("Guest"),
1399
1398
  :users => Puppet::Util::Windows::SID::BuiltinUsers,
1400
1399
  :power_users => Puppet::Util::Windows::SID::PowerUsers,
1401
1400
  :none => Puppet::Util::Windows::SID::Nobody
@@ -1415,8 +1414,8 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1415
1414
 
1416
1415
  describe "when permissions are not insync?" do
1417
1416
  before :each do
1418
- @file[:owner] = 'None'
1419
- @file[:group] = 'None'
1417
+ @file[:owner] = @sids[:none]
1418
+ @file[:group] = @sids[:none]
1420
1419
  end
1421
1420
 
1422
1421
  it "preserves the inherited SYSTEM ACE for an existing file" do
@@ -1503,8 +1502,8 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1503
1502
 
1504
1503
  describe "when permissions are not insync?" do
1505
1504
  before :each do
1506
- @directory[:owner] = 'None'
1507
- @directory[:group] = 'None'
1505
+ @directory[:owner] = @sids[:none]
1506
+ @directory[:group] = @sids[:none]
1508
1507
  end
1509
1508
 
1510
1509
  it "preserves the inherited SYSTEM ACEs for an existing directory" do
@@ -1726,7 +1725,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1726
1725
  catalog.apply
1727
1726
  expect(Puppet::FileSystem).to be_directory(copy)
1728
1727
  end
1729
-
1728
+
1730
1729
  it "should copy the link itself if :links => manage" do
1731
1730
  catalog.add_resource described_class.new(
1732
1731
  :name => target,
@@ -1746,7 +1745,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1746
1745
  expect(Dir.entries(link)).to eq(Dir.entries(copy))
1747
1746
  end
1748
1747
  end
1749
-
1748
+
1750
1749
  context "and the recurse attribute is true" do
1751
1750
  it "should recursively copy the directory if :links => follow" do
1752
1751
  catalog.add_resource described_class.new(
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/util/windows'
4
+
5
+ describe Puppet::Util::Windows::ADSI::User,
6
+ :if => Puppet.features.microsoft_windows? do
7
+
8
+ describe ".initialize" do
9
+ it "cannot reference BUILTIN accounts like SYSTEM due to WinNT moniker limitations" do
10
+ system = Puppet::Util::Windows::ADSI::User.new('SYSTEM')
11
+ # trying to retrieve COM object should fail to load with a localized version of:
12
+ # ADSI connection error: failed to parse display name of moniker `WinNT://./SYSTEM,user'
13
+ # HRESULT error code:0x800708ad
14
+ # The user name could not be found.
15
+ # Matching on error code alone is sufficient
16
+ expect { system.native_user }.to raise_error(/0x800708ad/)
17
+ end
18
+ end
19
+
20
+ describe '.each' do
21
+ it 'should return a list of users with UTF-8 names' do
22
+ begin
23
+ original_codepage = Encoding.default_external
24
+ Encoding.default_external = Encoding::CP850 # Western Europe
25
+
26
+ Puppet::Util::Windows::ADSI::User.each do |user|
27
+ expect(user.name.encoding).to be(Encoding::UTF_8)
28
+ end
29
+ ensure
30
+ Encoding.default_external = original_codepage
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '.[]' do
36
+ it 'should return string attributes as UTF-8' do
37
+ administrator = Puppet::Util::Windows::ADSI::User.new('Administrator')
38
+ expect(administrator['Description'].encoding).to eq(Encoding::UTF_8)
39
+ end
40
+ end
41
+
42
+ describe '.groups' do
43
+ it 'should return a list of groups with UTF-8 names' do
44
+ begin
45
+ original_codepage = Encoding.default_external
46
+ Encoding.default_external = Encoding::CP850 # Western Europe
47
+
48
+
49
+ # lookup by English name Administrator is OK on localized Windows
50
+ administrator = Puppet::Util::Windows::ADSI::User.new('Administrator')
51
+ administrator.groups.each do |name|
52
+ expect(name.encoding).to be(Encoding::UTF_8)
53
+ end
54
+ ensure
55
+ Encoding.default_external = original_codepage
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe Puppet::Util::Windows::ADSI::Group,
62
+ :if => Puppet.features.microsoft_windows? do
63
+
64
+ let (:administrator_bytes) { [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0] }
65
+ let (:administrators_principal) { Puppet::Util::Windows::SID::Principal.lookup_account_sid(administrator_bytes) }
66
+
67
+ describe '.each' do
68
+ it 'should return a list of groups with UTF-8 names' do
69
+ begin
70
+ original_codepage = Encoding.default_external
71
+ Encoding.default_external = Encoding::CP850 # Western Europe
72
+
73
+
74
+ Puppet::Util::Windows::ADSI::Group.each do |group|
75
+ expect(group.name.encoding).to be(Encoding::UTF_8)
76
+ end
77
+ ensure
78
+ Encoding.default_external = original_codepage
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '.members' do
84
+ it 'should return a list of members with UTF-8 names' do
85
+ begin
86
+ original_codepage = Encoding.default_external
87
+ Encoding.default_external = Encoding::CP850 # Western Europe
88
+
89
+ # lookup by English name Administrators is not OK on localized Windows
90
+ admins = Puppet::Util::Windows::ADSI::Group.new(administrators_principal.account)
91
+ admins.members.each do |name|
92
+ expect(name.encoding).to be(Encoding::UTF_8)
93
+ end
94
+ ensure
95
+ Encoding.default_external = original_codepage
96
+ end
97
+ end
98
+ end
99
+ end
@@ -4,38 +4,45 @@ require 'puppet/util/windows'
4
4
 
5
5
  describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft_windows? do
6
6
 
7
+ let (:current_user_sid) { Puppet::Util::Windows::ADSI::User.current_user_sid }
7
8
  let (:system_bytes) { [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0] }
9
+ let (:null_sid_bytes) { bytes = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
8
10
  let (:administrator_bytes) { [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0] }
11
+ let (:computer_sid) { Puppet::Util::Windows::SID.name_to_sid_object(Socket.gethostname) }
12
+ # BUILTIN is localized on German Windows, but not French
13
+ # looking this up like this dilutes the values of the tests as we're comparing two mechanisms
14
+ # for returning the same values, rather than to a known good
15
+ let (:builtin_localized) { Puppet::Util::Windows::SID.sid_to_name('S-1-5-32') }
9
16
 
10
17
  describe ".lookup_account_name" do
11
18
  it "should create an instance from a well-known account name" do
12
- principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('SYSTEM')
13
- expect(principal.account).to eq('SYSTEM')
14
- expect(principal.sid_bytes).to eq(system_bytes)
15
- expect(principal.sid).to eq('S-1-5-18')
16
- expect(principal.domain).to eq('NT AUTHORITY')
17
- expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
18
-
19
- # Windows API LookupAccountSid behaves differently if current user is SYSTEM
20
- if Puppet::Util::Windows::ADSI::User.current_user_name != 'SYSTEM'
21
- account_type = :SidTypeWellKnownGroup
22
- else
23
- account_type = :SidTypeUser
24
- end
25
-
26
- expect(principal.account_type).to eq(account_type)
19
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('NULL SID')
20
+ expect(principal.account).to eq('NULL SID')
21
+ expect(principal.sid_bytes).to eq(null_sid_bytes)
22
+ expect(principal.sid).to eq('S-1-0-0')
23
+ expect(principal.domain).to eq('')
24
+ expect(principal.domain_account).to eq('NULL SID')
25
+ expect(principal.account_type).to eq(:SidTypeWellKnownGroup)
27
26
  end
28
27
 
29
28
  it "should create an instance from a well-known account prefixed with NT AUTHORITY" do
29
+ # a special case that can be used to lookup an account on a localized Windows
30
30
  principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('NT AUTHORITY\\SYSTEM')
31
- expect(principal.account).to eq('SYSTEM')
32
31
  expect(principal.sid_bytes).to eq(system_bytes)
33
32
  expect(principal.sid).to eq('S-1-5-18')
34
- expect(principal.domain).to eq('NT AUTHORITY')
35
- expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
33
+
34
+ # guard these 3 checks on a US Windows with 1033 - primary language id of 9
35
+ primary_language_id = 9
36
+ # even though lookup in English, returned values may be localized
37
+ # French Windows returns AUTORITE NT\\Syst\u00E8me, German Windows returns NT-AUTORIT\u00C4T\\SYSTEM
38
+ if (Puppet::Util::Windows::Process.get_system_default_ui_language & primary_language_id == primary_language_id)
39
+ expect(principal.account).to eq('SYSTEM')
40
+ expect(principal.domain).to eq('NT AUTHORITY')
41
+ expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
42
+ end
36
43
 
37
44
  # Windows API LookupAccountSid behaves differently if current user is SYSTEM
38
- if Puppet::Util::Windows::ADSI::User.current_user_name != 'SYSTEM'
45
+ if current_user_sid.sid_bytes != system_bytes
39
46
  account_type = :SidTypeWellKnownGroup
40
47
  else
41
48
  account_type = :SidTypeUser
@@ -45,9 +52,11 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
45
52
  end
46
53
 
47
54
  it "should create an instance from a local account prefixed with hostname" do
48
- current_user_name = Puppet::Util::Windows::ADSI::User.current_user_name
49
- running_as_system = (current_user_name == 'SYSTEM')
50
- username = running_as_system ? 'Administrator' : current_user_name
55
+ running_as_system = (current_user_sid.sid_bytes == system_bytes)
56
+ username = running_as_system ?
57
+ # need to return localized name of Administrator account
58
+ Puppet::Util::Windows::SID.sid_to_name(computer_sid.sid + '-500').split('\\').last :
59
+ current_user_sid.account
51
60
 
52
61
  user_exists = Puppet::Util::Windows::ADSI::User.exists?(".\\#{username}")
53
62
 
@@ -65,13 +74,18 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
65
74
  expect(principal.account_type).to eq(:SidTypeUser)
66
75
  end
67
76
 
68
- it "should create an instance from a well-known group alias" do
69
- principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('Administrators')
70
- expect(principal.account).to eq('Administrators')
77
+ it "should create an instance from a well-known BUILTIN alias" do
78
+ # by looking up the localized name of the account, the test value is diluted
79
+ # this localizes Administrators AND BUILTIN
80
+ qualified_name = Puppet::Util::Windows::SID.sid_to_name('S-1-5-32-544')
81
+ domain, name = qualified_name.split('\\')
82
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_name(name)
83
+
84
+ expect(principal.account).to eq(name)
71
85
  expect(principal.sid_bytes).to eq(administrator_bytes)
72
86
  expect(principal.sid).to eq('S-1-5-32-544')
73
- expect(principal.domain).to eq('BUILTIN')
74
- expect(principal.domain_account).to eq('BUILTIN\\Administrators')
87
+ expect(principal.domain).to eq(domain)
88
+ expect(principal.domain_account).to eq(qualified_name)
75
89
  expect(principal.account_type).to eq(:SidTypeAlias)
76
90
  end
77
91
 
@@ -79,55 +93,72 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
79
93
  principal = Puppet::Util::Windows::SID::Principal
80
94
  expect {
81
95
  principal.lookup_account_name('ConanTheBarbarian')
82
- }.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountNameW/)
96
+ }.to raise_error do |error|
97
+ expect(error).to be_a(Puppet::Util::Windows::Error)
98
+ expect(error.code).to eq(1332) # ERROR_NONE_MAPPED
99
+ end
83
100
  end
84
101
 
85
102
  it "should return a BUILTIN domain principal for empty account names" do
86
103
  principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('')
87
104
  expect(principal.account_type).to eq(:SidTypeDomain)
88
105
  expect(principal.sid).to eq('S-1-5-32')
89
- expect(principal.account).to eq('BUILTIN')
90
- expect(principal.domain).to eq('BUILTIN')
91
- expect(principal.domain_account).to eq('BUILTIN')
106
+ expect(principal.account).to eq(builtin_localized)
107
+ expect(principal.domain).to eq(builtin_localized)
108
+ expect(principal.domain_account).to eq(builtin_localized)
92
109
  end
93
110
 
94
111
  it "should return a BUILTIN domain principal for BUILTIN account names" do
95
- principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('BUILTIN')
112
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_name(builtin_localized)
96
113
  expect(principal.account_type).to eq(:SidTypeDomain)
97
114
  expect(principal.sid).to eq('S-1-5-32')
98
- expect(principal.account).to eq('BUILTIN')
99
- expect(principal.domain).to eq('BUILTIN')
100
- expect(principal.domain_account).to eq('BUILTIN')
115
+ expect(principal.account).to eq(builtin_localized)
116
+ expect(principal.domain).to eq(builtin_localized)
117
+ expect(principal.domain_account).to eq(builtin_localized)
101
118
  end
102
119
 
103
120
  end
104
121
 
105
122
  describe ".lookup_account_sid" do
106
- it "should create an instance from a well-known account SID" do
107
- principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(system_bytes)
108
- expect(principal.account).to eq('SYSTEM')
109
- expect(principal.sid_bytes).to eq(system_bytes)
110
- expect(principal.sid).to eq('S-1-5-18')
111
- expect(principal.domain).to eq('NT AUTHORITY')
112
- expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
113
-
114
- # Windows API LookupAccountSid behaves differently if current user is SYSTEM
115
- if Puppet::Util::Windows::ADSI::User.current_user_name != 'SYSTEM'
116
- account_type = :SidTypeWellKnownGroup
117
- else
118
- account_type = :SidTypeUser
119
- end
120
-
121
- expect(principal.account_type).to eq(account_type)
123
+ it "should create an instance from a user SID" do
124
+ # take the computer account bytes and append the equivalent of -501 for Guest
125
+ bytes = (computer_sid.sid_bytes + [245, 1, 0, 0])
126
+ # computer SID bytes start with [1, 4, ...] but need to be [1, 5, ...]
127
+ bytes[1] = 5
128
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(bytes)
129
+ # use the returned SID to lookup localized Guest account name in Windows
130
+ guest_name = Puppet::Util::Windows::SID.sid_to_name(principal.sid)
131
+
132
+ expect(principal.sid_bytes).to eq(bytes)
133
+ expect(principal.sid).to eq(computer_sid.sid + '-501')
134
+ expect(principal.account).to eq(guest_name.split('\\')[1])
135
+ expect(principal.domain).to eq(computer_sid.domain)
136
+ expect(principal.domain_account).to eq(guest_name)
137
+ expect(principal.account_type).to eq(:SidTypeUser)
122
138
  end
123
139
 
124
140
  it "should create an instance from a well-known group SID" do
141
+ principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(null_sid_bytes)
142
+ expect(principal.sid_bytes).to eq(null_sid_bytes)
143
+ expect(principal.sid).to eq('S-1-0-0')
144
+ expect(principal.account).to eq('NULL SID')
145
+ expect(principal.domain).to eq('')
146
+ expect(principal.domain_account).to eq('NULL SID')
147
+ expect(principal.account_type).to eq(:SidTypeWellKnownGroup)
148
+ end
149
+
150
+ it "should create an instance from a well-known BUILTIN Alias SID" do
125
151
  principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(administrator_bytes)
126
- expect(principal.account).to eq('Administrators')
152
+ # by looking up the localized name of the account, the test value is diluted
153
+ # this localizes Administrators AND BUILTIN
154
+ qualified_name = Puppet::Util::Windows::SID.sid_to_name('S-1-5-32-544')
155
+ domain, name = qualified_name.split('\\')
156
+
157
+ expect(principal.account).to eq(name)
127
158
  expect(principal.sid_bytes).to eq(administrator_bytes)
128
159
  expect(principal.sid).to eq('S-1-5-32-544')
129
- expect(principal.domain).to eq('BUILTIN')
130
- expect(principal.domain_account).to eq('BUILTIN\\Administrators')
160
+ expect(principal.domain).to eq(domain)
161
+ expect(principal.domain_account).to eq(qualified_name)
131
162
  expect(principal.account_type).to eq(:SidTypeAlias)
132
163
  end
133
164
 
@@ -159,7 +190,10 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
159
190
  principal = Puppet::Util::Windows::SID::Principal
160
191
  expect {
161
192
  principal.lookup_account_sid([0])
162
- }.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountSidW: The parameter is incorrect/)
193
+ }.to raise_error do |error|
194
+ expect(error).to be_a(Puppet::Util::Windows::Error)
195
+ expect(error.code).to eq(87) # ERROR_INVALID_PARAMETER
196
+ end
163
197
  end
164
198
 
165
199
  it "should raise an error when trying to lookup a valid SID that doesn't have a matching account" do
@@ -167,16 +201,19 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
167
201
  expect {
168
202
  # S-1-1-1 which is not a valid account
169
203
  principal.lookup_account_sid([1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0])
170
- }.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountSidW: No mapping between account names and security IDs was done/)
204
+ }.to raise_error do |error|
205
+ expect(error).to be_a(Puppet::Util::Windows::Error)
206
+ expect(error.code).to eq(1332) # ERROR_NONE_MAPPED
207
+ end
171
208
  end
172
209
 
173
210
  it "should return a domain principal for BUILTIN SID S-1-5-32" do
174
211
  principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid([1, 1, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0])
175
212
  expect(principal.account_type).to eq(:SidTypeDomain)
176
213
  expect(principal.sid).to eq('S-1-5-32')
177
- expect(principal.account).to eq('BUILTIN')
178
- expect(principal.domain).to eq('BUILTIN')
179
- expect(principal.domain_account).to eq('BUILTIN')
214
+ expect(principal.account).to eq(builtin_localized)
215
+ expect(principal.domain).to eq(builtin_localized)
216
+ expect(principal.domain_account).to eq(builtin_localized)
180
217
  end
181
218
  end
182
219
 
@@ -184,7 +221,7 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
184
221
  let(:builtin_sid) { [1, 1, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0] }
185
222
  let(:sid_principal) { Puppet::Util::Windows::SID::Principal.lookup_account_sid(builtin_sid) }
186
223
 
187
- ['.', 'builtin', ''].each do |name|
224
+ ['.', ''].each do |name|
188
225
  it "when comparing the one looked up via SID S-1-5-32 to one looked up via non-canonical name #{name} for the BUILTIN domain" do
189
226
  name_principal = Puppet::Util::Windows::SID::Principal.lookup_account_name(name)
190
227
 
@@ -197,5 +234,17 @@ describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft
197
234
  end
198
235
  end
199
236
  end
237
+
238
+ it "when comparing the one looked up via SID S-1-5-32 to one looked up via non-canonical localized name for the BUILTIN domain" do
239
+ name_principal = Puppet::Util::Windows::SID::Principal.lookup_account_name(builtin_localized)
240
+
241
+ # compares canonical sid
242
+ expect(sid_principal).to eq(name_principal)
243
+
244
+ # compare all properties that have public accessors
245
+ sid_principal.public_methods(false).reject { |m| m == :== }.each do |method|
246
+ expect(sid_principal.send(method)).to eq(name_principal.send(method))
247
+ end
248
+ end
200
249
  end
201
250
  end
@@ -27,8 +27,10 @@ describe "Puppet::Util::Windows::Process", :if => Puppet.features.microsoft_wind
27
27
  end
28
28
 
29
29
  it "should raise an error for an unknown privilege name" do
30
- fail_msg = /LookupPrivilegeValue\(, foo, .*\): A specified privilege does not exist/
31
- expect { Puppet::Util::Windows::Process.lookup_privilege_value('foo') }.to raise_error(Puppet::Util::Windows::Error, fail_msg)
30
+ expect { Puppet::Util::Windows::Process.lookup_privilege_value('foo') }.to raise_error do |error|
31
+ expect(error).to be_a(Puppet::Util::Windows::Error)
32
+ expect(error.code).to eq(1313) # ERROR_NO_SUCH_PRIVILEGE
33
+ end
32
34
  end
33
35
  end
34
36