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.
- checksums.yaml +7 -0
- data/Gemfile +10 -1
- data/ext/debian/control +2 -4
- data/ext/project_data.yaml +4 -4
- data/install.rb +6 -2
- data/lib/puppet.rb +3 -1
- data/lib/puppet/agent/locker.rb +1 -1
- data/lib/puppet/application.rb +6 -4
- data/lib/puppet/application/agent.rb +2 -1
- data/lib/puppet/application/cert.rb +35 -2
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/lookup.rb +3 -3
- data/lib/puppet/application_support.rb +1 -1
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/configurer.rb +67 -10
- data/lib/puppet/configurer/plugin_handler.rb +2 -4
- data/lib/puppet/data_providers/hiera_config.rb +1 -1
- data/lib/puppet/defaults.rb +34 -7
- data/lib/puppet/environments.rb +4 -2
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/ca.rb +4 -1
- data/lib/puppet/face/certificate.rb +7 -1
- data/lib/puppet/face/epp.rb +5 -5
- data/lib/puppet/face/generate.rb +64 -0
- data/lib/puppet/face/help.rb +19 -13
- data/lib/puppet/face/man.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +1 -1
- data/lib/puppet/file_system.rb +16 -0
- data/lib/puppet/file_system/file_impl.rb +5 -0
- data/lib/puppet/file_system/memory_impl.rb +4 -0
- data/lib/puppet/file_system/path_pattern.rb +1 -0
- data/lib/puppet/file_system/windows.rb +19 -0
- data/lib/puppet/functions.rb +3 -5
- data/lib/puppet/functions/assert_type.rb +1 -1
- data/lib/puppet/functions/defined.rb +7 -5
- data/lib/puppet/functions/dig.rb +2 -18
- data/lib/puppet/functions/hiera.rb +1 -1
- data/lib/puppet/functions/lest.rb +1 -37
- data/lib/puppet/functions/new.rb +2 -473
- data/lib/puppet/functions/reverse_each.rb +2 -59
- data/lib/puppet/functions/scanf.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -63
- data/lib/puppet/functions/then.rb +1 -61
- data/lib/puppet/functions/type.rb +1 -40
- data/lib/puppet/functions/unwrap.rb +40 -0
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +57 -0
- data/lib/puppet/generate/templates/type/pcore.erb +41 -0
- data/lib/puppet/generate/type.rb +239 -0
- data/lib/puppet/graph/simple_graph.rb +2 -6
- data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/key/ca.rb +2 -2
- data/lib/puppet/indirector/request.rb +25 -4
- data/lib/puppet/indirector/rest.rb +73 -3
- data/lib/puppet/info_service/class_information_service.rb +1 -2
- data/lib/puppet/interface/documentation.rb +1 -1
- data/lib/puppet/loaders.rb +2 -0
- data/lib/puppet/metatype/manager.rb +6 -6
- data/lib/puppet/module.rb +8 -1
- data/lib/puppet/module_tool.rb +2 -2
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
- data/lib/puppet/network/http/rack/rest.rb +15 -1
- data/lib/puppet/network/rights.rb +1 -11
- data/lib/puppet/node/environment.rb +7 -3
- data/lib/puppet/node/facts.rb +1 -1
- data/lib/puppet/parameter.rb +23 -3
- data/lib/puppet/parameter/boolean.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parser.rb +0 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
- data/lib/puppet/parser/ast/resource.rb +5 -0
- data/lib/puppet/parser/ast/resource_instance.rb +5 -1
- data/lib/puppet/parser/ast/resourceparam.rb +5 -0
- data/lib/puppet/parser/compiler.rb +14 -17
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
- data/lib/puppet/parser/environment_compiler.rb +10 -0
- data/lib/puppet/parser/functions/create_resources.rb +39 -24
- data/lib/puppet/parser/functions/defined.rb +2 -26
- data/lib/puppet/parser/functions/dig.rb +29 -0
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/new.rb +530 -0
- data/lib/puppet/parser/functions/require.rb +1 -1
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +4 -4
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/resource.rb +16 -7
- data/lib/puppet/parser/scope.rb +36 -28
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
- data/lib/puppet/pops.rb +13 -0
- data/lib/puppet/pops/adapters.rb +49 -49
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
- data/lib/puppet/pops/evaluator/closure.rb +39 -13
- data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
- data/lib/puppet/pops/functions/function.rb +5 -0
- data/lib/puppet/pops/issues.rb +1 -1
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/base_loader.rb +12 -15
- data/lib/puppet/pops/loader/loader.rb +15 -50
- data/lib/puppet/pops/loader/loader_paths.rb +28 -2
- data/lib/puppet/pops/loader/module_loaders.rb +16 -1
- data/lib/puppet/pops/loader/null_loader.rb +17 -1
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
- data/lib/puppet/pops/loader/static_loader.rb +55 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
- data/lib/puppet/pops/loader/typed_name.rb +50 -0
- data/lib/puppet/pops/loaders.rb +64 -19
- data/lib/puppet/pops/merge_strategy.rb +7 -7
- data/lib/puppet/pops/migration/migration_checker.rb +4 -0
- data/lib/puppet/pops/model/model_label_provider.rb +2 -0
- data/lib/puppet/pops/parser/egrammar.ra +8 -5
- data/lib/puppet/pops/parser/eparser.rb +1550 -1498
- data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
- data/lib/puppet/pops/parser/lexer2.rb +14 -1
- data/lib/puppet/pops/parser/locator.rb +30 -1
- data/lib/puppet/pops/parser/parser_support.rb +0 -3
- data/lib/puppet/pops/parser/slurp_support.rb +3 -3
- data/lib/puppet/pops/patterns.rb +9 -1
- data/lib/puppet/pops/pcore.rb +67 -11
- data/lib/puppet/pops/puppet_stack.rb +43 -0
- data/lib/puppet/pops/resource/param.rb +51 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
- data/lib/puppet/pops/serialization.rb +17 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
- data/lib/puppet/pops/serialization/deserializer.rb +60 -0
- data/lib/puppet/pops/serialization/extension.rb +126 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +247 -0
- data/lib/puppet/pops/serialization/object.rb +63 -0
- data/lib/puppet/pops/serialization/rgen.rb +151 -0
- data/lib/puppet/pops/serialization/serializer.rb +91 -0
- data/lib/puppet/pops/serialization/time_factory.rb +66 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/implementation_registry.rb +3 -8
- data/lib/puppet/pops/types/p_meta_type.rb +83 -0
- data/lib/puppet/pops/types/p_object_type.rb +110 -117
- data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
- data/lib/puppet/pops/types/puppet_object.rb +0 -5
- data/lib/puppet/pops/types/ruby_generator.rb +9 -2
- data/lib/puppet/pops/types/type_calculator.rb +6 -1
- data/lib/puppet/pops/types/type_factory.rb +14 -12
- data/lib/puppet/pops/types/type_formatter.rb +78 -33
- data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
- data/lib/puppet/pops/types/type_parser.rb +27 -2
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/types.rb +366 -13
- data/lib/puppet/pops/validation.rb +4 -4
- data/lib/puppet/pops/validation/checker4_0.rb +5 -2
- data/lib/puppet/pops/visitor.rb +2 -2
- data/lib/puppet/property.rb +64 -5
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/group/aix.rb +4 -4
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +3 -3
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +5 -0
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/pip.rb +5 -3
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +5 -5
- data/lib/puppet/provider/package/pkgdmg.rb +4 -4
- data/lib/puppet/provider/package/pkgin.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +48 -8
- data/lib/puppet/provider/package/sun.rb +1 -1
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/yum.rb +22 -4
- data/lib/puppet/provider/parsedfile.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +3 -3
- data/lib/puppet/provider/service/init.rb +5 -3
- data/lib/puppet/provider/service/launchd.rb +16 -2
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +8 -1
- data/lib/puppet/provider/service/systemd.rb +39 -6
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +3 -2
- data/lib/puppet/provider/user/directoryservice.rb +4 -3
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +3 -0
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/resource.rb +33 -7
- data/lib/puppet/resource/capability_finder.rb +74 -54
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/settings.rb +17 -6
- data/lib/puppet/settings/environment_conf.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +20 -0
- data/lib/puppet/ssl/certificate_authority.rb +32 -9
- data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +10 -0
- data/lib/puppet/ssl/validator/default_validator.rb +2 -2
- data/lib/puppet/test/test_helper.rb +2 -2
- data/lib/puppet/transaction.rb +12 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/event.rb +29 -2
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/transaction/persistence.rb +84 -0
- data/lib/puppet/transaction/report.rb +49 -2
- data/lib/puppet/transaction/resource_harness.rb +98 -18
- data/lib/puppet/type.rb +63 -21
- data/lib/puppet/type/augeas.rb +3 -3
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/file.rb +39 -2
- data/lib/puppet/type/file/data_sync.rb +13 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/mount.rb +2 -6
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +3 -3
- data/lib/puppet/type/zone.rb +1 -1
- data/lib/puppet/util.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line.rb +6 -2
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +1 -1
- data/lib/puppet/util/inifile.rb +1 -1
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/logging.rb +1 -1
- data/lib/puppet/util/multi_match.rb +1 -1
- data/lib/puppet/util/plist.rb +15 -5
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/profiler/around_profiler.rb +1 -1
- data/lib/puppet/util/psych_support.rb +1 -1
- data/lib/puppet/util/rdoc.rb +2 -2
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +30 -8
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/file.rb +59 -0
- data/lib/puppet/util/windows/process.rb +10 -0
- data/lib/puppet/util/windows/security.rb +1 -1
- data/lib/puppet/util/windows/user.rb +22 -4
- data/lib/puppet/util/yaml.rb +15 -3
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
- data/lib/puppet/vendor/rgen_patch.rb +1 -1
- data/lib/puppet/version.rb +2 -2
- data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
- data/spec/integration/agent/logging_spec.rb +15 -14
- data/spec/integration/application/apply_spec.rb +1 -0
- data/spec/integration/directory_environments_spec.rb +16 -0
- data/spec/integration/environments/settings_spec.rb +32 -4
- data/spec/integration/faces/documentation_spec.rb +1 -1
- data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
- data/spec/integration/node/environment_spec.rb +21 -0
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/parser/compiler_spec.rb +76 -840
- data/spec/integration/parser/functions/require_spec.rb +3 -3
- data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
- data/spec/integration/parser/pcore_resource_spec.rb +208 -0
- data/spec/integration/parser/resource_expressions_spec.rb +4 -2
- data/spec/integration/provider/yumrepo_spec.rb +4 -1
- data/spec/integration/transaction/report_spec.rb +666 -0
- data/spec/integration/type/file_spec.rb +11 -12
- data/spec/integration/util/windows/adsi_spec.rb +99 -0
- data/spec/integration/util/windows/principal_spec.rb +109 -60
- data/spec/integration/util/windows/process_spec.rb +4 -2
- data/spec/integration/util/windows/security_spec.rb +34 -8
- data/spec/integration/util/windows/user_spec.rb +26 -4
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +12 -8
- data/spec/shared_examples/rhel_package_provider.rb +341 -0
- data/spec/spec_helper.rb +8 -2
- data/spec/unit/application/cert_spec.rb +20 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
- data/spec/unit/configurer_spec.rb +46 -0
- data/spec/unit/defaults_spec.rb +14 -0
- data/spec/unit/face/generate_spec.rb +230 -0
- data/spec/unit/face/help_spec.rb +53 -0
- data/spec/unit/face/parser_spec.rb +6 -0
- data/spec/unit/face/plugin_spec.rb +0 -4
- data/spec/unit/file_system_spec.rb +85 -0
- data/spec/unit/functions/lookup_spec.rb +4 -4
- data/spec/unit/functions/match_spec.rb +2 -2
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +1 -1
- data/spec/unit/functions/unwrap_spec.rb +29 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +8 -8
- data/spec/unit/indirector/facts/facter_spec.rb +1 -9
- data/spec/unit/indirector/rest_spec.rb +95 -9
- data/spec/unit/module_spec.rb +43 -7
- data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
- data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
- data/spec/unit/network/rights_spec.rb +1 -1
- data/spec/unit/parameter_spec.rb +11 -0
- data/spec/unit/parser/compiler_spec.rb +19 -33
- data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
- data/spec/unit/parser/functions/require_spec.rb +2 -2
- data/spec/unit/parser/resource_spec.rb +21 -11
- data/spec/unit/parser/scope_spec.rb +1 -5
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
- data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
- data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
- data/spec/unit/pops/puppet_stack_spec.rb +79 -0
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
- data/spec/unit/pops/serialization/packer_spec.rb +153 -0
- data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
- data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
- data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
- data/spec/unit/pops/types/type_parser_spec.rb +1 -1
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +18 -1
- data/spec/unit/property_spec.rb +48 -11
- data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
- data/spec/unit/provider/package/dnf_spec.rb +1 -99
- data/spec/unit/provider/package/pacman_spec.rb +4 -4
- data/spec/unit/provider/package/pip_spec.rb +14 -0
- data/spec/unit/provider/package/pkg_spec.rb +6 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
- data/spec/unit/provider/package/portage_spec.rb +64 -8
- data/spec/unit/provider/package/tdnf_spec.rb +18 -0
- data/spec/unit/provider/package/windows/package_spec.rb +4 -1
- data/spec/unit/provider/package/windows_spec.rb +8 -2
- data/spec/unit/provider/package/yum_spec.rb +6 -377
- data/spec/unit/provider/service/base_spec.rb +6 -0
- data/spec/unit/provider/service/debian_spec.rb +16 -7
- data/spec/unit/provider/service/gentoo_spec.rb +6 -0
- data/spec/unit/provider/service/init_spec.rb +7 -0
- data/spec/unit/provider/service/launchd_spec.rb +35 -4
- data/spec/unit/provider/service/openrc_spec.rb +6 -0
- data/spec/unit/provider/service/smf_spec.rb +31 -6
- data/spec/unit/provider/service/src_spec.rb +6 -0
- data/spec/unit/provider/service/systemd_spec.rb +70 -20
- data/spec/unit/provider/service/upstart_spec.rb +6 -0
- data/spec/unit/provider/user/aix_spec.rb +7 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
- data/spec/unit/resource/capability_finder_spec.rb +51 -3
- data/spec/unit/resource/catalog_spec.rb +5 -0
- data/spec/unit/resource/type_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +19 -0
- data/spec/unit/settings_spec.rb +13 -0
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
- data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
- data/spec/unit/ssl/host_spec.rb +1 -1
- data/spec/unit/ssl/oids_spec.rb +24 -21
- data/spec/unit/transaction/event_spec.rb +3 -1
- data/spec/unit/transaction/persistence_spec.rb +173 -0
- data/spec/unit/transaction/report_spec.rb +64 -1
- data/spec/unit/transaction/resource_harness_spec.rb +91 -0
- data/spec/unit/type/file/content_spec.rb +47 -15
- data/spec/unit/type/file_spec.rb +28 -0
- data/spec/unit/type/mount_spec.rb +5 -12
- data/spec/unit/type/yumrepo_spec.rb +1 -5
- data/spec/unit/type_spec.rb +32 -0
- data/spec/unit/util/command_line_spec.rb +11 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/plist_spec.rb +16 -3
- data/spec/unit/util/storage_spec.rb +4 -1
- data/spec/unit/util/windows/adsi_spec.rb +23 -2
- data/spec/unit/util/windows/file_spec.rb +56 -1
- data/spec/unit/util/windows/sid_spec.rb +31 -7
- data/spec/unit/util/yaml_spec.rb +12 -0
- data/spec/unit/util_spec.rb +87 -20
- metadata +91 -48
- data/ext/puppetlisten/puppetlisten.rb +0 -77
- data/ext/puppetlisten/puppetrun.rb +0 -38
- data/lib/puppet/resource/type_collection_helper.rb +0 -7
- data/spec/unit/parser/functions/defined_spec.rb +0 -120
- data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
data/spec/unit/type/file_spec.rb
CHANGED
@@ -342,6 +342,18 @@ describe Puppet::Type.type(:file) do
|
|
342
342
|
expect(file[:path]).to eq(title)
|
343
343
|
end
|
344
344
|
|
345
|
+
it "should allow a single slash for a title and create the path" do
|
346
|
+
title = File.expand_path("/")
|
347
|
+
file = described_class.new(:title => title)
|
348
|
+
expect(file[:path]).to eq(title)
|
349
|
+
end
|
350
|
+
|
351
|
+
it "should allow multiple slashes for a title and create the path" do
|
352
|
+
title = File.expand_path("/") + "//"
|
353
|
+
file = described_class.new(:title => title)
|
354
|
+
expect(file[:path]).to eq(File.expand_path("/"))
|
355
|
+
end
|
356
|
+
|
345
357
|
it "should set a desired 'ensure' value if none is set and 'content' is set" do
|
346
358
|
file = described_class.new(:path => path, :content => "/foo/bar")
|
347
359
|
expect(file[:ensure]).to eq(:file)
|
@@ -351,6 +363,22 @@ describe Puppet::Type.type(:file) do
|
|
351
363
|
file = described_class.new(:path => path, :target => File.expand_path(__FILE__))
|
352
364
|
expect(file[:ensure]).to eq(:link)
|
353
365
|
end
|
366
|
+
|
367
|
+
describe "marking parameters as sensitive" do
|
368
|
+
it "marks sensitive, content, and ensure as sensitive when source is sensitive" do
|
369
|
+
resource = Puppet::Resource.new(:file, make_absolute("/tmp/foo"), :parameters => {:source => make_absolute('/tmp/bar')}, :sensitive_parameters => [:source])
|
370
|
+
file = described_class.new(resource)
|
371
|
+
expect(file.parameter(:source).sensitive).to eq true
|
372
|
+
expect(file.property(:content).sensitive).to eq true
|
373
|
+
expect(file.property(:ensure).sensitive).to eq true
|
374
|
+
end
|
375
|
+
|
376
|
+
it "marks ensure as sensitive when content is sensitive" do
|
377
|
+
resource = Puppet::Resource.new(:file, make_absolute("/tmp/foo"), :parameters => {:content => 'hello world!'}, :sensitive_parameters => [:content])
|
378
|
+
file = described_class.new(resource)
|
379
|
+
expect(file.property(:ensure).sensitive).to eq true
|
380
|
+
end
|
381
|
+
end
|
354
382
|
end
|
355
383
|
|
356
384
|
describe "#mark_children_for_purging" do
|
@@ -577,9 +577,10 @@ describe Puppet::Type.type(:mount), :unless => Puppet.features.microsoft_windows
|
|
577
577
|
let(:var_file) { create_file_resource('/var') }
|
578
578
|
let(:log_file) { create_file_resource('/var/log') }
|
579
579
|
let(:puppet_file) { create_file_resource('/var/log/puppet') }
|
580
|
+
let(:opt_file) { create_file_resource('/opt/var/puppet') }
|
580
581
|
|
581
582
|
before do
|
582
|
-
create_catalog(root_mount, var_mount, log_mount, var_file, log_file, puppet_file)
|
583
|
+
create_catalog(root_mount, var_mount, log_mount, var_file, log_file, puppet_file, opt_file)
|
583
584
|
end
|
584
585
|
|
585
586
|
it "adds no autorequires for the root mount" do
|
@@ -588,32 +589,24 @@ describe Puppet::Type.type(:mount), :unless => Puppet.features.microsoft_windows
|
|
588
589
|
|
589
590
|
it "adds the parent autorequire and the file autorequire for a mount with one parent" do
|
590
591
|
parent_relationship = var_mount.autorequire[0]
|
591
|
-
file_relationship = var_mount.autorequire[1]
|
592
592
|
|
593
|
-
expect(var_mount.autorequire).to have_exactly(
|
593
|
+
expect(var_mount.autorequire).to have_exactly(1).item
|
594
594
|
|
595
595
|
expect(parent_relationship.source).to eq root_mount
|
596
596
|
expect(parent_relationship.target).to eq var_mount
|
597
|
-
|
598
|
-
expect(file_relationship.source).to eq var_file
|
599
|
-
expect(file_relationship.target).to eq var_mount
|
600
597
|
end
|
601
598
|
|
602
599
|
it "adds both parent autorequires and the file autorequire for a mount with two parents" do
|
603
600
|
grandparent_relationship = log_mount.autorequire[0]
|
604
601
|
parent_relationship = log_mount.autorequire[1]
|
605
|
-
file_relationship = log_mount.autorequire[2]
|
606
602
|
|
607
|
-
expect(log_mount.autorequire).to have_exactly(
|
603
|
+
expect(log_mount.autorequire).to have_exactly(2).items
|
608
604
|
|
609
605
|
expect(grandparent_relationship.source).to eq root_mount
|
610
606
|
expect(grandparent_relationship.target).to eq log_mount
|
611
607
|
|
612
608
|
expect(parent_relationship.source).to eq var_mount
|
613
609
|
expect(parent_relationship.target).to eq log_mount
|
614
|
-
|
615
|
-
expect(file_relationship.source).to eq log_file
|
616
|
-
expect(file_relationship.target).to eq log_mount
|
617
610
|
end
|
618
611
|
|
619
612
|
it "adds the child autobefore for a mount with one file child" do
|
@@ -625,7 +618,7 @@ describe Puppet::Type.type(:mount), :unless => Puppet.features.microsoft_windows
|
|
625
618
|
expect(child_relationship.target).to eq puppet_file
|
626
619
|
end
|
627
620
|
|
628
|
-
it "adds both child autobefores for a mount with two file
|
621
|
+
it "adds both child autobefores for a mount with two file children" do
|
629
622
|
child_relationship = var_mount.autobefore[0]
|
630
623
|
grandchild_relationship = var_mount.autobefore[1]
|
631
624
|
|
@@ -42,13 +42,9 @@ shared_examples_for "a yumrepo parameter that expects a natural value" do |param
|
|
42
42
|
end
|
43
43
|
|
44
44
|
shared_examples_for "a yumrepo parameter that expects a boolean parameter" do |param|
|
45
|
-
valid_values = %w[
|
45
|
+
valid_values = %w[true false 0 1 no yes]
|
46
46
|
|
47
47
|
valid_values.each do |value|
|
48
|
-
it "accepts a valid value of #{value}" do
|
49
|
-
instance = described_class.new(:name => 'puppetlabs', param => value)
|
50
|
-
expect(instance[param]).to eq value
|
51
|
-
end
|
52
48
|
it "accepts #{value} downcased to #{value.downcase} and capitalizes it" do
|
53
49
|
instance = described_class.new(:name => 'puppetlabs', param => value.downcase)
|
54
50
|
expect(instance[param]).to eq value.downcase.capitalize
|
data/spec/unit/type_spec.rb
CHANGED
@@ -556,6 +556,38 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
|
|
556
556
|
expect(params[:fstype]).to eq("boo")
|
557
557
|
expect(params[:atboot]).to eq(:yes)
|
558
558
|
end
|
559
|
+
|
560
|
+
it "copies sensitive parameters to the appropriate properties" do
|
561
|
+
resource = Puppet::Resource.new(:mount, "/foo",
|
562
|
+
:parameters => {:atboot => :yes, :fstype => "boo"},
|
563
|
+
:sensitive_parameters => [:fstype])
|
564
|
+
type = Puppet::Type.type(:mount).new(resource)
|
565
|
+
expect(type.property(:fstype).sensitive).to eq true
|
566
|
+
end
|
567
|
+
|
568
|
+
it "logs a warning when a parameter is marked as sensitive" do
|
569
|
+
resource = Puppet::Resource.new(:mount, "/foo",
|
570
|
+
:parameters => {:atboot => :yes, :fstype => "boo", :remounts => true},
|
571
|
+
:sensitive_parameters => [:remounts])
|
572
|
+
Puppet::Type.type(:mount).any_instance.expects(:warning).with(regexp_matches(/Unable to mark 'remounts' as sensitive: remounts is a parameter and not a property/))
|
573
|
+
Puppet::Type.type(:mount).new(resource)
|
574
|
+
end
|
575
|
+
|
576
|
+
it "logs a warning when a property is not set but is marked as sensitive" do
|
577
|
+
resource = Puppet::Resource.new(:mount, "/foo",
|
578
|
+
:parameters => {:atboot => :yes, :fstype => "boo"},
|
579
|
+
:sensitive_parameters => [:device])
|
580
|
+
Puppet::Type.type(:mount).any_instance.expects(:warning).with("Unable to mark 'device' as sensitive: the property itself was not assigned a value.")
|
581
|
+
Puppet::Type.type(:mount).new(resource)
|
582
|
+
end
|
583
|
+
|
584
|
+
it "logs an error when a property is not defined on the type but is marked as sensitive" do
|
585
|
+
resource = Puppet::Resource.new(:mount, "/foo",
|
586
|
+
:parameters => {:atboot => :yes, :fstype => "boo"},
|
587
|
+
:sensitive_parameters => [:content])
|
588
|
+
Puppet::Type.type(:mount).any_instance.expects(:err).with("Unable to mark 'content' as sensitive: the property itself is not defined on mount.")
|
589
|
+
Puppet::Type.type(:mount).new(resource)
|
590
|
+
end
|
559
591
|
end
|
560
592
|
|
561
593
|
describe "and passed a Hash" do
|
@@ -66,6 +66,17 @@ describe Puppet::Util::CommandLine do
|
|
66
66
|
end.to have_printed(/^#{Regexp.escape(Puppet.version)}$/)
|
67
67
|
end
|
68
68
|
end
|
69
|
+
|
70
|
+
%w{--help -h}.each do|arg|
|
71
|
+
it "should print help" do
|
72
|
+
commandline = Puppet::Util::CommandLine.new("puppet", [arg])
|
73
|
+
commandline.expects(:exec).never
|
74
|
+
|
75
|
+
expect {
|
76
|
+
commandline.execute
|
77
|
+
}.to have_printed(/Usage: puppet <subcommand> \[options\] <action> \[options\]/).and_exit_with(0)
|
78
|
+
end
|
79
|
+
end
|
69
80
|
end
|
70
81
|
|
71
82
|
describe "when dealing with puppet commands" do
|
@@ -311,7 +311,7 @@ describe Puppet::Util::Execution do
|
|
311
311
|
|
312
312
|
Puppet::Util::Execution.stubs(:execute_windows).returns(proc_info_stub)
|
313
313
|
stub_process_wait(real_exit_status)
|
314
|
-
|
314
|
+
Puppet::Util::Execution.stubs(:exitstatus).returns(real_exit_status % 256) # The exitstatus is changed to be mod 256 so that ruby can fit it into 8 bits.
|
315
315
|
|
316
316
|
expect(Puppet::Util::Execution.execute('test command', :failonfail => false).exitstatus).to eq(real_exit_status)
|
317
317
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'puppet/util/plist'
|
2
|
+
require 'puppet/util/plist'
|
3
3
|
require 'puppet_spec/files'
|
4
4
|
|
5
|
-
module Puppet::Util::Plist; end
|
6
|
-
|
7
5
|
describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
8
6
|
include PuppetSpec::Files
|
9
7
|
|
@@ -54,6 +52,12 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
54
52
|
</dict>
|
55
53
|
</plist>'
|
56
54
|
end
|
55
|
+
let(:non_plist_data) do
|
56
|
+
"Take my love, take my land
|
57
|
+
Take me where I cannot stand
|
58
|
+
I don't care, I'm still free
|
59
|
+
You can't take the sky from me."
|
60
|
+
end
|
57
61
|
let(:valid_xml_plist_hash) { {"LastUsedPrinters"=>[{"Network"=>"10.85.132.1", "PrinterID"=>"baskerville_corp_puppetlabs_net"}, {"Network"=>"10.14.96.1", "PrinterID"=>"Statler"}]} }
|
58
62
|
let(:plist_path) { file_containing('sample.plist', valid_xml_plist) }
|
59
63
|
let(:binary_plist_magic_number) { 'bplist00' }
|
@@ -89,6 +93,15 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
89
93
|
{:failonfail => true, :combine => true}).returns(valid_xml_plist)
|
90
94
|
expect(subject.read_plist_file(plist_path)).to eq(valid_xml_plist_hash)
|
91
95
|
end
|
96
|
+
it "returns nil when direct parsing and plutil conversion both fail" do
|
97
|
+
subject.stubs(:read_file_with_offset).with(plist_path, 8).returns('notbinary')
|
98
|
+
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(non_plist_data)
|
99
|
+
Puppet.expects(:debug).with(regexp_matches(/^Failed with NoMethodError/))
|
100
|
+
Puppet.expects(:debug).with("Plist #{plist_path} ill-formatted, converting with plutil")
|
101
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '/dev/stdout', plist_path],
|
102
|
+
{:failonfail => true, :combine => true}).raises(Puppet::ExecutionFailure, 'boom')
|
103
|
+
expect(subject.read_plist_file(plist_path)).to eq(nil)
|
104
|
+
end
|
92
105
|
end
|
93
106
|
|
94
107
|
describe "#parse_plist" do
|
@@ -189,7 +189,10 @@ describe Puppet::Util::Storage do
|
|
189
189
|
Puppet::Util::Storage.cache(:yayness)
|
190
190
|
|
191
191
|
if Puppet.features.microsoft_windows?
|
192
|
-
expect { Puppet::Util::Storage.store }.to raise_error
|
192
|
+
expect { Puppet::Util::Storage.store }.to raise_error do |error|
|
193
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
194
|
+
expect(error.code).to eq(5) # ERROR_ACCESS_DENIED
|
195
|
+
end
|
193
196
|
else
|
194
197
|
expect { Puppet::Util::Storage.store }.to raise_error(Errno::EISDIR, /Is a directory/)
|
195
198
|
end
|
@@ -6,6 +6,10 @@ require 'puppet/util/windows'
|
|
6
6
|
|
7
7
|
describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows? do
|
8
8
|
let(:connection) { stub 'connection' }
|
9
|
+
let(:builtin_localized) { Puppet::Util::Windows::SID.sid_to_name('S-1-5-32') }
|
10
|
+
# SYSTEM is special as English can retrieve it via Windows API
|
11
|
+
# but will return localized names
|
12
|
+
let(:ntauthority_localized) { Puppet::Util::Windows::SID::Principal.lookup_account_name('SYSTEM').domain }
|
9
13
|
|
10
14
|
before(:each) do
|
11
15
|
Puppet::Util::Windows::ADSI.instance_variable_set(:@computer_name, 'testcomputername')
|
@@ -67,6 +71,14 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
67
71
|
expect(Puppet::Util::Windows::ADSI::User.uri(username, domain)).to eq("WinNT://#{domain}/#{username},user")
|
68
72
|
end
|
69
73
|
|
74
|
+
it "should generate the correct URI for a BUILTIN user" do
|
75
|
+
expect(Puppet::Util::Windows::ADSI::User.uri(username, builtin_localized)).to eq("WinNT://./#{username},user")
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should generate the correct URI for a NT AUTHORITY user" do
|
79
|
+
expect(Puppet::Util::Windows::ADSI::User.uri(username, ntauthority_localized)).to eq("WinNT://./#{username},user")
|
80
|
+
end
|
81
|
+
|
70
82
|
it "should be able to parse a username without a domain" do
|
71
83
|
expect(Puppet::Util::Windows::ADSI::User.parse_name(username)).to eq([username, '.'])
|
72
84
|
end
|
@@ -414,8 +426,9 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
414
426
|
|
415
427
|
it "should generate the correct URI" do
|
416
428
|
adsi_group.expects(:objectSID).returns([0])
|
417
|
-
Socket.expects(:gethostname).returns('
|
418
|
-
|
429
|
+
Socket.expects(:gethostname).returns('TESTcomputerNAME')
|
430
|
+
computer_sid = stub(:account => groupname,:domain => 'testcomputername')
|
431
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_sid_object).with([0]).returns(computer_sid)
|
419
432
|
expect(group.uri).to eq("WinNT://./#{groupname},group")
|
420
433
|
end
|
421
434
|
end
|
@@ -424,6 +437,14 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
424
437
|
expect(Puppet::Util::Windows::ADSI::Group.uri("people")).to eq("WinNT://./people,group")
|
425
438
|
end
|
426
439
|
|
440
|
+
it "should generate the correct URI for a BUILTIN group" do
|
441
|
+
expect(Puppet::Util::Windows::ADSI::Group.uri(groupname, builtin_localized)).to eq("WinNT://./#{groupname},group")
|
442
|
+
end
|
443
|
+
|
444
|
+
it "should generate the correct URI for a NT AUTHORITY group" do
|
445
|
+
expect(Puppet::Util::Windows::ADSI::Group.uri(groupname, ntauthority_localized)).to eq("WinNT://./#{groupname},group")
|
446
|
+
end
|
447
|
+
|
427
448
|
it "should be able to create a group" do
|
428
449
|
adsi_group = stub("adsi")
|
429
450
|
|
@@ -5,7 +5,8 @@ require 'puppet/util/windows'
|
|
5
5
|
describe Puppet::Util::Windows::File, :if => Puppet::Util::Platform.windows? do
|
6
6
|
include PuppetSpec::Files
|
7
7
|
|
8
|
-
let(:nonexist_file) { 'C:\
|
8
|
+
let(:nonexist_file) { 'C:\foo.bar' }
|
9
|
+
let(:nonexist_path) { 'C:\somefile\that\wont\ever\exist' }
|
9
10
|
let(:invalid_file_attributes) { 0xFFFFFFFF } #define INVALID_FILE_ATTRIBUTES (DWORD (-1))
|
10
11
|
|
11
12
|
describe "get_attributes" do
|
@@ -31,4 +32,58 @@ describe Puppet::Util::Windows::File, :if => Puppet::Util::Platform.windows? do
|
|
31
32
|
expect(described_class.get_attributes(nonexist_file, false)).to eq(invalid_file_attributes)
|
32
33
|
end
|
33
34
|
end
|
35
|
+
|
36
|
+
describe "get_long_pathname" do
|
37
|
+
it "should raise an ERROR_FILE_NOT_FOUND for a file that does not exist in a valid path" do
|
38
|
+
expect {
|
39
|
+
described_class.get_long_pathname(nonexist_file)
|
40
|
+
}.to raise_error do |error|
|
41
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
42
|
+
expect(error.code).to eq(Puppet::Util::Windows::File::ERROR_FILE_NOT_FOUND)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should raise an ERROR_PATH_NOT_FOUND for a path that does not exist" do
|
47
|
+
expect {
|
48
|
+
described_class.get_long_pathname(nonexist_path)
|
49
|
+
}.to raise_error do |error|
|
50
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
51
|
+
expect(error.code).to eq(Puppet::Util::Windows::File::ERROR_PATH_NOT_FOUND)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return the fully expanded path 'Program Files' given 'Progra~1'" do
|
56
|
+
# this test could be resolve some of these values at runtime rather than hard-coding
|
57
|
+
shortened = ENV['SystemDrive'] + '\\Progra~1'
|
58
|
+
expanded = ENV['SystemDrive'] + '\\Program Files'
|
59
|
+
expect(described_class.get_long_pathname(shortened)).to eq (expanded)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "get_short_pathname" do
|
64
|
+
it "should raise an ERROR_FILE_NOT_FOUND for a file that does not exist in a valid path" do
|
65
|
+
expect {
|
66
|
+
described_class.get_short_pathname(nonexist_file)
|
67
|
+
}.to raise_error do |error|
|
68
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
69
|
+
expect(error.code).to eq(Puppet::Util::Windows::File::ERROR_FILE_NOT_FOUND)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should raise an ERROR_PATH_NOT_FOUND for a path that does not exist" do
|
74
|
+
expect {
|
75
|
+
described_class.get_short_pathname(nonexist_path)
|
76
|
+
}.to raise_error do |error|
|
77
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
78
|
+
expect(error.code).to eq(Puppet::Util::Windows::File::ERROR_PATH_NOT_FOUND)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should return the shortened 'PROGRA~1' given fully expanded path 'Program Files'" do
|
83
|
+
# this test could be resolve some of these values at runtime rather than hard-coding
|
84
|
+
expanded = ENV['SystemDrive'] + '\\Program Files'
|
85
|
+
shortened = ENV['SystemDrive'] + '\\PROGRA~1'
|
86
|
+
expect(described_class.get_short_pathname(expanded)).to eq (shortened)
|
87
|
+
end
|
88
|
+
end
|
34
89
|
end
|
@@ -10,17 +10,20 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
10
10
|
let(:sid) { Puppet::Util::Windows::SID::LocalSystem }
|
11
11
|
let(:invalid_sid) { 'bogus' }
|
12
12
|
let(:unknown_sid) { 'S-0-0-0' }
|
13
|
+
let(:null_sid) { 'S-1-0-0' }
|
13
14
|
let(:unknown_name) { 'chewbacca' }
|
14
15
|
|
15
16
|
context "#octet_string_to_sid_object" do
|
16
|
-
it "should properly convert an array of bytes for a well-known SID" do
|
17
|
-
bytes = [1, 1, 0, 0, 0, 0, 0,
|
17
|
+
it "should properly convert an array of bytes for a well-known non-localized SID" do
|
18
|
+
bytes = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
18
19
|
converted = subject.octet_string_to_sid_object(bytes)
|
19
20
|
|
20
21
|
expect(converted).to be_an_instance_of Puppet::Util::Windows::SID::Principal
|
21
22
|
expect(converted.sid_bytes).to eq(bytes)
|
22
|
-
expect(converted.sid).to eq(
|
23
|
-
|
23
|
+
expect(converted.sid).to eq(null_sid)
|
24
|
+
|
25
|
+
# carefully select a SID here that is not localized on international Windows
|
26
|
+
expect(converted.account).to eq('NULL SID')
|
24
27
|
end
|
25
28
|
|
26
29
|
it "should raise an error for non-array input" do
|
@@ -40,14 +43,20 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
40
43
|
# S-1-1-1 which is not a valid account
|
41
44
|
valid_octet_invalid_user =[1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
|
42
45
|
subject.octet_string_to_sid_object(valid_octet_invalid_user)
|
43
|
-
}.to raise_error
|
46
|
+
}.to raise_error do |error|
|
47
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
48
|
+
expect(error.code).to eq(1332) # ERROR_NONE_MAPPED
|
49
|
+
end
|
44
50
|
end
|
45
51
|
|
46
52
|
it "should raise an error for a malformed byte array" do
|
47
53
|
expect {
|
48
54
|
invalid_octet = [2]
|
49
55
|
subject.octet_string_to_sid_object(invalid_octet)
|
50
|
-
}.to raise_error
|
56
|
+
}.to raise_error do |error|
|
57
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
58
|
+
expect(error.code).to eq(87) # ERROR_INVALID_PARAMETER
|
59
|
+
end
|
51
60
|
end
|
52
61
|
end
|
53
62
|
|
@@ -57,6 +66,8 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
57
66
|
end
|
58
67
|
|
59
68
|
it "should accept unqualified account name" do
|
69
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
70
|
+
# this works in French Windows, even though the account is really Syst\u00E8me
|
60
71
|
expect(subject.name_to_sid('SYSTEM')).to eq(sid)
|
61
72
|
end
|
62
73
|
|
@@ -79,6 +90,8 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
79
90
|
end
|
80
91
|
|
81
92
|
it "should accept domain qualified account names" do
|
93
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
94
|
+
# this works in French Windows, even though the account is really AUTORITE NT\\Syst\u00E8me
|
82
95
|
expect(subject.name_to_sid('NT AUTHORITY\SYSTEM')).to eq(sid)
|
83
96
|
end
|
84
97
|
|
@@ -125,18 +138,26 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
125
138
|
end
|
126
139
|
|
127
140
|
it "should accept unqualified account name" do
|
141
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
142
|
+
# this works in French Windows, even though the account is really Syst\u00E8me
|
128
143
|
expect(subject.name_to_sid_object('SYSTEM').sid).to eq(sid)
|
129
144
|
end
|
130
145
|
|
131
146
|
it "should be case-insensitive" do
|
147
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
148
|
+
# this works in French Windows, even though the account is really Syst\u00E8me
|
132
149
|
expect(subject.name_to_sid_object('SYSTEM')).to eq(subject.name_to_sid_object('system'))
|
133
150
|
end
|
134
151
|
|
135
152
|
it "should be leading and trailing whitespace-insensitive" do
|
153
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
154
|
+
# this works in French Windows, even though the account is really Syst\u00E8me
|
136
155
|
expect(subject.name_to_sid_object('SYSTEM')).to eq(subject.name_to_sid_object(' SYSTEM '))
|
137
156
|
end
|
138
157
|
|
139
158
|
it "should accept domain qualified account names" do
|
159
|
+
# NOTE: lookup by name works in localized environments only for a few instances
|
160
|
+
# this works in French Windows, even though the account is really AUTORITE NT\\Syst\u00E8me
|
140
161
|
expect(subject.name_to_sid_object('NT AUTHORITY\SYSTEM').sid).to eq(sid)
|
141
162
|
end
|
142
163
|
end
|
@@ -147,7 +168,10 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
147
168
|
end
|
148
169
|
|
149
170
|
it "should accept a sid" do
|
150
|
-
|
171
|
+
# choose a value that is not localized, for instance
|
172
|
+
# S-1-5-18 can be NT AUTHORITY\\SYSTEM or AUTORITE NT\\Syst\u00E8me
|
173
|
+
# but NULL SID appears universal
|
174
|
+
expect(subject.sid_to_name(null_sid)).to eq('NULL SID')
|
151
175
|
end
|
152
176
|
end
|
153
177
|
|