puppet 5.4.0 → 5.5.0
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.
- data/Gemfile +3 -3
- data/MAINTAINERS +0 -19
- data/README.md +5 -5
- data/Rakefile +26 -0
- data/conf/auth.conf +5 -0
- data/ext/project_data.yaml +1 -0
- data/ext/regexp_nodes/regexp_nodes.rb +3 -4
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/application/cert.rb +3 -1
- data/lib/puppet/application/device.rb +100 -13
- data/lib/puppet/application/facts.rb +5 -0
- data/lib/puppet/application/lookup.rb +12 -2
- data/lib/puppet/configurer.rb +37 -17
- data/lib/puppet/confine.rb +4 -1
- data/lib/puppet/datatypes.rb +1 -1
- data/lib/puppet/environments.rb +1 -1
- data/lib/puppet/error.rb +6 -3
- data/lib/puppet/external/dot.rb +0 -7
- data/lib/puppet/external/nagios/parser.rb +1 -1
- data/lib/puppet/face/config.rb +92 -10
- data/lib/puppet/face/epp.rb +31 -6
- data/lib/puppet/face/facts.rb +49 -0
- data/lib/puppet/face/help.rb +33 -35
- data/lib/puppet/face/help/action.erb +1 -1
- data/lib/puppet/face/help/face.erb +1 -1
- data/lib/puppet/face/man.rb +55 -12
- data/lib/puppet/face/parser.rb +30 -3
- data/lib/puppet/file_bucket/file.rb +0 -2
- data/lib/puppet/file_serving/base.rb +10 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +3 -3
- data/lib/puppet/functions.rb +1 -3
- data/lib/puppet/functions/alert.rb +1 -1
- data/lib/puppet/functions/all.rb +6 -6
- data/lib/puppet/functions/annotate.rb +10 -10
- data/lib/puppet/functions/any.rb +6 -6
- data/lib/puppet/functions/assert_type.rb +4 -4
- data/lib/puppet/functions/binary_file.rb +14 -2
- data/lib/puppet/functions/break.rb +31 -2
- data/lib/puppet/functions/call.rb +4 -4
- data/lib/puppet/functions/contain.rb +19 -3
- data/lib/puppet/functions/convert_to.rb +6 -5
- data/lib/puppet/functions/crit.rb +1 -1
- data/lib/puppet/functions/debug.rb +1 -1
- data/lib/puppet/functions/defined.rb +11 -9
- data/lib/puppet/functions/dig.rb +26 -2
- data/lib/puppet/functions/each.rb +8 -8
- data/lib/puppet/functions/emerg.rb +1 -1
- data/lib/puppet/functions/empty.rb +79 -0
- data/lib/puppet/functions/err.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +3 -1
- data/lib/puppet/functions/filter.rb +7 -7
- data/lib/puppet/functions/find_file.rb +15 -1
- data/lib/puppet/functions/flatten.rb +64 -0
- data/lib/puppet/functions/hiera.rb +6 -6
- data/lib/puppet/functions/hiera_array.rb +6 -6
- data/lib/puppet/functions/hiera_hash.rb +6 -6
- data/lib/puppet/functions/hiera_include.rb +8 -8
- data/lib/puppet/functions/include.rb +28 -2
- data/lib/puppet/functions/info.rb +1 -1
- data/lib/puppet/functions/inline_epp.rb +2 -2
- data/lib/puppet/functions/join.rb +56 -0
- data/lib/puppet/functions/json_data.rb +2 -2
- data/lib/puppet/functions/keys.rb +25 -0
- data/lib/puppet/functions/length.rb +44 -0
- data/lib/puppet/functions/lest.rb +39 -1
- data/lib/puppet/functions/lookup.rb +2 -1
- data/lib/puppet/functions/map.rb +10 -9
- data/lib/puppet/functions/match.rb +6 -6
- data/lib/puppet/functions/new.rb +995 -2
- data/lib/puppet/functions/next.rb +1 -1
- data/lib/puppet/functions/notice.rb +1 -1
- data/lib/puppet/functions/reduce.rb +6 -6
- data/lib/puppet/functions/regsubst.rb +9 -3
- data/lib/puppet/functions/require.rb +36 -2
- data/lib/puppet/functions/return.rb +1 -1
- data/lib/puppet/functions/reverse_each.rb +71 -2
- data/lib/puppet/functions/slice.rb +23 -9
- data/lib/puppet/functions/split.rb +12 -10
- data/lib/puppet/functions/step.rb +73 -1
- data/lib/puppet/functions/strftime.rb +176 -2
- data/lib/puppet/functions/then.rb +65 -2
- data/lib/puppet/functions/tree_each.rb +19 -19
- data/lib/puppet/functions/type.rb +42 -1
- data/lib/puppet/functions/unique.rb +13 -13
- data/lib/puppet/functions/unwrap.rb +8 -4
- data/lib/puppet/functions/values.rb +25 -0
- data/lib/puppet/functions/versioncmp.rb +1 -1
- data/lib/puppet/functions/warning.rb +1 -1
- data/lib/puppet/functions/with.rb +6 -4
- data/lib/puppet/functions/yaml_data.rb +3 -1
- data/lib/puppet/indirector/certificate_status/file.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +1 -3
- data/lib/puppet/indirector/facts/rest.rb +21 -0
- data/lib/puppet/indirector/facts/yaml.rb +0 -4
- data/lib/puppet/indirector/rest.rb +2 -2
- data/lib/puppet/module.rb +3 -3
- data/lib/puppet/module/task.rb +2 -3
- data/lib/puppet/module_tool/applications/application.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +2 -2
- data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
- data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +3 -3
- data/lib/puppet/network/authconfig.rb +1 -1
- data/lib/puppet/network/format_support.rb +1 -1
- data/lib/puppet/network/formats.rb +5 -7
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
- data/lib/puppet/network/http/api/master/v3/environment.rb +2 -2
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
- data/lib/puppet/network/http/error.rb +3 -3
- data/lib/puppet/network/resolver.rb +1 -2
- data/lib/puppet/parser/compiler.rb +12 -5
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
- data/lib/puppet/parser/functions/new.rb +31 -46
- data/lib/puppet/parser/parser_factory.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +11 -11
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
- data/lib/puppet/pops/functions/dispatch.rb +1 -1
- data/lib/puppet/pops/issue_reporter.rb +18 -1
- data/lib/puppet/pops/issues.rb +6 -3
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
- data/lib/puppet/pops/loader/task_instantiator.rb +5 -5
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
- data/lib/puppet/pops/loaders.rb +18 -7
- data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/lookup_adapter.rb +55 -6
- data/lib/puppet/pops/model/factory.rb +6 -3
- data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
- data/lib/puppet/pops/model/pn_transformer.rb +400 -0
- data/lib/puppet/pops/parser/egrammar.ra +1 -1
- data/lib/puppet/pops/parser/eparser.rb +1 -1
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/lexer_support.rb +3 -2
- data/lib/puppet/pops/parser/locator.rb +0 -2
- data/lib/puppet/pops/parser/pn_parser.rb +316 -0
- data/lib/puppet/pops/pcore.rb +17 -17
- data/lib/puppet/pops/pn.rb +236 -0
- data/lib/puppet/pops/serialization/json.rb +7 -7
- data/lib/puppet/pops/types/class_loader.rb +6 -3
- data/lib/puppet/pops/types/implementation_registry.rb +28 -35
- data/lib/puppet/pops/types/p_object_type.rb +3 -3
- data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +24 -1
- data/lib/puppet/pops/types/ruby_generator.rb +3 -4
- data/lib/puppet/pops/types/type_calculator.rb +1 -1
- data/lib/puppet/pops/types/type_factory.rb +0 -4
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/lib/puppet/pops/types/type_parser.rb +14 -7
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/pops/utils.rb +2 -2
- data/lib/puppet/pops/validation/checker4_0.rb +6 -2
- data/lib/puppet/provider/group/groupadd.rb +3 -1
- data/lib/puppet/provider/group/windows_adsi.rb +4 -7
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/package/pacman.rb +4 -4
- data/lib/puppet/provider/package/pip.rb +3 -3
- data/lib/puppet/provider/package/pkgdmg.rb +3 -3
- data/lib/puppet/provider/package/pkgutil.rb +2 -2
- data/lib/puppet/provider/package/portage.rb +9 -9
- data/lib/puppet/provider/package/zypper.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -2
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +6 -2
- data/lib/puppet/provider/user/windows_adsi.rb +1 -1
- data/lib/puppet/provider/yumrepo/inifile.rb +20 -9
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/configuration.rb +2 -0
- data/lib/puppet/reference/type.rb +11 -11
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +5 -5
- data/lib/puppet/resource/catalog.rb +6 -3
- data/lib/puppet/resource/status.rb +9 -2
- data/lib/puppet/resource/type.rb +1 -1
- data/lib/puppet/settings.rb +31 -19
- data/lib/puppet/settings/base_setting.rb +5 -0
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/ttl_setting.rb +5 -0
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/certificate_request.rb +0 -2
- data/lib/puppet/syntax_checkers/json.rb +1 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +2 -2
- data/lib/puppet/transaction/event.rb +1 -1
- data/lib/puppet/transaction/report.rb +18 -12
- data/lib/puppet/type.rb +9 -13
- data/lib/puppet/type/augeas.rb +2 -2
- data/lib/puppet/type/cron.rb +11 -6
- data/lib/puppet/type/exec.rb +1 -1
- data/lib/puppet/type/file.rb +4 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/k5login.rb +30 -54
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/schedule.rb +12 -12
- data/lib/puppet/type/scheduled_task.rb +2 -2
- data/lib/puppet/type/ssh_authorized_key.rb +5 -5
- data/lib/puppet/type/sshkey.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +26 -5
- data/lib/puppet/util.rb +0 -4
- data/lib/puppet/util/backups.rb +1 -1
- data/lib/puppet/util/inifile.rb +3 -4
- data/lib/puppet/util/json.rb +68 -0
- data/lib/puppet/util/json_lockfile.rb +3 -3
- data/lib/puppet/util/log.rb +2 -5
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/lib/puppet/util/plist.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -8
- data/lib/puppet/util/tagging.rb +1 -1
- data/lib/puppet/util/warnings.rb +0 -2
- data/lib/puppet/util/windows/adsi.rb +15 -18
- data/lib/puppet/util/windows/com.rb +2 -1
- data/lib/puppet/util/windows/file.rb +2 -2
- data/lib/puppet/util/windows/principal.rb +7 -6
- data/lib/puppet/util/windows/sid.rb +60 -7
- data/lib/puppet/util/windows/taskscheduler.rb +0 -9
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +53 -48
- data/locales/ja/puppet.po +1357 -912
- data/locales/puppet.pot +549 -466
- data/man/man5/puppet.conf.5 +103 -20
- data/man/man8/puppet-agent.8 +6 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.8 +1 -1
- data/man/man8/puppet-config.8 +35 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +33 -11
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +34 -12
- data/man/man8/puppet-facts.8 +50 -1
- data/man/man8/puppet-filebucket.8 +38 -11
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +10 -4
- data/man/man8/puppet-master.8 +1 -1
- data/man/man8/puppet-module.8 +15 -6
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +31 -8
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +67 -0
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +3 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
- data/spec/integration/application/apply_spec.rb +15 -15
- data/spec/integration/application/lookup_spec.rb +21 -0
- data/spec/integration/faces/config_spec.rb +16 -4
- data/spec/integration/network/http/api/indirected_routes_spec.rb +5 -5
- data/spec/integration/parser/catalog_spec.rb +1 -1
- data/spec/integration/parser/collection_spec.rb +2 -2
- data/spec/integration/parser/compiler_spec.rb +17 -18
- data/spec/integration/parser/pcore_resource_spec.rb +2 -2
- data/spec/integration/parser/scope_spec.rb +2 -2
- data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/key_spec.rb +1 -1
- data/spec/integration/transaction/report_spec.rb +3 -3
- data/spec/integration/transaction_spec.rb +0 -1
- data/spec/integration/type/file_spec.rb +10 -11
- data/spec/integration/type_spec.rb +1 -2
- data/spec/integration/util/windows/adsi_spec.rb +86 -1
- data/spec/integration/util/windows/principal_spec.rb +11 -2
- data/spec/integration/util/windows/security_spec.rb +2 -2
- data/spec/lib/matchers/json.rb +4 -4
- data/spec/lib/puppet_spec/language.rb +34 -35
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/shared_behaviours/file_server_terminus.rb +0 -2
- data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/application/cert_spec.rb +21 -9
- data/spec/unit/application/device_spec.rb +96 -2
- data/spec/unit/application/face_base_spec.rb +2 -2
- data/spec/unit/application/lookup_spec.rb +0 -1
- data/spec/unit/configurer_spec.rb +14 -0
- data/spec/unit/confine_spec.rb +16 -0
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -4
- data/spec/unit/datatypes_spec.rb +49 -0
- data/spec/unit/environments_spec.rb +7 -0
- data/spec/unit/face/config_spec.rb +116 -12
- data/spec/unit/face/epp_face_spec.rb +53 -2
- data/spec/unit/face/facts_spec.rb +53 -0
- data/spec/unit/face/help_spec.rb +62 -69
- data/spec/unit/face/man_spec.rb +26 -0
- data/spec/unit/face/module/list_spec.rb +0 -1
- data/spec/unit/face/parser_spec.rb +78 -0
- data/spec/unit/file_bucket/dipper_spec.rb +0 -4
- data/spec/unit/file_serving/content_spec.rb +0 -1
- data/spec/unit/file_serving/fileset_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +0 -1
- data/spec/unit/file_serving/terminus_selector_spec.rb +0 -2
- data/spec/unit/forge_spec.rb +1 -2
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/empty_spec.rb +77 -0
- data/spec/unit/functions/epp_spec.rb +1 -1
- data/spec/unit/functions/flatten_spec.rb +31 -0
- data/spec/unit/functions/include_spec.rb +2 -2
- data/spec/unit/functions/inline_epp_spec.rb +1 -1
- data/spec/unit/functions/join_spec.rb +33 -0
- data/spec/unit/functions/keys_spec.rb +31 -0
- data/spec/unit/functions/length_spec.rb +50 -0
- data/spec/unit/functions/lookup_fixture_spec.rb +1 -1
- data/spec/unit/functions/lookup_spec.rb +52 -0
- data/spec/unit/functions/shared.rb +1 -1
- data/spec/unit/functions/values_spec.rb +30 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +30 -32
- data/spec/unit/graph/title_hash_prioritizer_spec.rb +2 -1
- data/spec/unit/indirector/catalog/compiler_spec.rb +0 -15
- data/spec/unit/indirector/facts/rest_spec.rb +45 -0
- data/spec/unit/indirector/facts/yaml_spec.rb +6 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +2 -2
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +2 -2
- data/spec/unit/indirector/request_spec.rb +0 -2
- data/spec/unit/indirector/rest_spec.rb +2 -2
- data/spec/unit/indirector_spec.rb +0 -1
- data/spec/unit/info_service_spec.rb +1 -1
- data/spec/unit/interface/action_manager_spec.rb +1 -1
- data/spec/unit/interface/action_spec.rb +1 -1
- data/spec/unit/module_spec.rb +0 -5
- data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +4 -4
- data/spec/unit/network/formats_spec.rb +5 -13
- data/spec/unit/network/http/api/indirected_routes_spec.rb +6 -2
- data/spec/unit/network/http/connection_spec.rb +1 -1
- data/spec/unit/network/http/handler_spec.rb +3 -2
- data/spec/unit/node/environment_spec.rb +1 -1
- data/spec/unit/node_spec.rb +3 -3
- data/spec/unit/parser/compiler_spec.rb +9 -2
- data/spec/unit/parser/environment_compiler_spec.rb +8 -8
- data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
- data/spec/unit/parser/functions/fail_spec.rb +1 -1
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +24 -0
- data/spec/unit/parser/functions/realize_spec.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +0 -1
- data/spec/unit/parser/scope_spec.rb +3 -3
- data/spec/unit/parser/type_loader_spec.rb +1 -1
- data/spec/unit/pops/adaptable_spec.rb +0 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +0 -3
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -4
- data/spec/unit/pops/factory_rspec_helper.rb +1 -1
- data/spec/unit/pops/factory_spec.rb +5 -5
- data/spec/unit/pops/issues_spec.rb +23 -8
- data/spec/unit/pops/loaders/loaders_spec.rb +24 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/lookup/interpolation_spec.rb +5 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +56 -0
- data/spec/unit/pops/model/pn_transformer_spec.rb +53 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +14 -5
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +9 -9
- data/spec/unit/pops/parser/parse_calls_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +3 -3
- data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_resource_spec.rb +35 -35
- data/spec/unit/pops/parser/pn_parser_spec.rb +101 -0
- data/spec/unit/pops/pn_spec.rb +148 -0
- data/spec/unit/pops/types/iterable_spec.rb +1 -1
- data/spec/unit/pops/types/p_object_type_spec.rb +5 -5
- data/spec/unit/pops/types/p_timespan_type_spec.rb +11 -4
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +9 -2
- data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
- data/spec/unit/pops/types/ruby_generator_spec.rb +3 -8
- data/spec/unit/pops/types/string_converter_spec.rb +3 -3
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +3 -1
- data/spec/unit/property_spec.rb +2 -2
- data/spec/unit/provider/aixobject_spec.rb +1 -1
- data/spec/unit/provider/cron/crontab_spec.rb +3 -3
- data/spec/unit/provider/exec/posix_spec.rb +6 -6
- data/spec/unit/provider/group/groupadd_spec.rb +4 -4
- data/spec/unit/provider/group/windows_adsi_spec.rb +79 -22
- data/spec/unit/provider/ldap_spec.rb +0 -1
- data/spec/unit/provider/nameservice_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +3 -4
- data/spec/unit/provider/package/yum_spec.rb +6 -2
- data/spec/unit/provider/parsedfile_spec.rb +1 -1
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/init_spec.rb +2 -2
- data/spec/unit/provider/service/openrc_spec.rb +2 -2
- data/spec/unit/provider/service/redhat_spec.rb +2 -2
- data/spec/unit/provider/service/smf_spec.rb +2 -0
- data/spec/unit/provider/service/systemd_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_spec.rb +7 -7
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -4
- data/spec/unit/provider/sshkey/parsed_spec.rb +0 -2
- data/spec/unit/provider/user/useradd_spec.rb +15 -9
- data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
- data/spec/unit/provider/yumrepo/inifile_spec.rb +76 -0
- data/spec/unit/puppet_pal_2pec.rb +4 -5
- data/spec/unit/resource/catalog_spec.rb +8 -3
- data/spec/unit/resource/status_spec.rb +15 -4
- data/spec/unit/resource/type_spec.rb +2 -3
- data/spec/unit/settings_spec.rb +9 -4
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -9
- data/spec/unit/ssl/certificate_request_spec.rb +1 -2
- data/spec/unit/transaction/report_spec.rb +41 -0
- data/spec/unit/transaction_spec.rb +1 -1
- data/spec/unit/type/exec_spec.rb +7 -9
- data/spec/unit/type/file/selinux_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +4 -3
- data/spec/unit/type/k5login_spec.rb +79 -10
- data/spec/unit/type/mount_spec.rb +1 -1
- data/spec/unit/type/nagios_spec.rb +6 -6
- data/spec/unit/type/user_spec.rb +1 -1
- data/spec/unit/type/yumrepo_spec.rb +18 -0
- data/spec/unit/type/zfs_spec.rb +1 -1
- data/spec/unit/type_spec.rb +14 -15
- data/spec/unit/util/docs_spec.rb +1 -1
- data/spec/unit/util/execution_spec.rb +0 -1
- data/spec/unit/util/inifile_spec.rb +35 -4
- data/spec/unit/util/log/destinations_spec.rb +2 -2
- data/spec/unit/util/log_spec.rb +6 -5
- data/spec/unit/util/network_device/cisco/device_spec.rb +2 -2
- data/spec/unit/util/plist_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +2 -2
- data/spec/unit/util/tagging_spec.rb +1 -7
- data/spec/unit/util/windows/adsi_spec.rb +31 -27
- data/spec/unit/util/windows/sid_spec.rb +86 -15
- data/spec/unit/util_spec.rb +2 -2
- data/spec/watchr.rb +0 -1
- data/tasks/benchmark.rake +37 -0
- data/tasks/manpages.rake +1 -1
- metadata +71 -11
- checksums.yaml +0 -7
data/spec/unit/util/docs_spec.rb
CHANGED
@@ -69,7 +69,7 @@ EOT
|
|
69
69
|
it "has no side effects on original input string" do
|
70
70
|
input = "First line \n second line \n \n indented line \n \n last line\n\n"
|
71
71
|
clean_input = "First line \n second line \n \n indented line \n \n last line\n\n"
|
72
|
-
|
72
|
+
Puppet::Util::Docs.scrub(input)
|
73
73
|
expect(input).to eq clean_input
|
74
74
|
end
|
75
75
|
|
@@ -711,7 +711,6 @@ describe Puppet::Util::Execution do
|
|
711
711
|
it "should not raise an error if the file is open" do
|
712
712
|
stdout = Puppet::FileSystem::Uniquefile.new('test')
|
713
713
|
Puppet::FileSystem::Uniquefile.stubs(:new).returns(stdout)
|
714
|
-
file = File.new(stdout.path, 'r')
|
715
714
|
|
716
715
|
Puppet::Util::Execution.execute('test command')
|
717
716
|
end
|
@@ -159,8 +159,8 @@ describe Puppet::Util::IniConfig::PhysicalFile do
|
|
159
159
|
|
160
160
|
end
|
161
161
|
|
162
|
-
describe
|
163
|
-
it
|
162
|
+
describe 'parsing properties' do
|
163
|
+
it 'raises an error if the property is not within a section' do
|
164
164
|
text = "key=val\n"
|
165
165
|
|
166
166
|
expect {
|
@@ -169,13 +169,44 @@ describe Puppet::Util::IniConfig::PhysicalFile do
|
|
169
169
|
/Property with key "key" outside of a section/)
|
170
170
|
end
|
171
171
|
|
172
|
-
it
|
172
|
+
it 'adds the property to the current section' do
|
173
173
|
text = "[main]\nkey=val\n"
|
174
174
|
|
175
175
|
subject.parse(text)
|
176
176
|
expect(subject.contents).to have(1).items
|
177
177
|
sect = subject.contents[0]
|
178
|
-
expect(sect['key']).to eq
|
178
|
+
expect(sect['key']).to eq 'val'
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'with white space' do
|
182
|
+
let(:section) do
|
183
|
+
text = <<-INIFILE
|
184
|
+
[main]
|
185
|
+
leading_white_space=value1
|
186
|
+
white_space_after_key =value2
|
187
|
+
white_space_after_equals= value3
|
188
|
+
white_space_after_value=value4\t
|
189
|
+
INIFILE
|
190
|
+
subject.parse(text)
|
191
|
+
expect(subject.contents).to have(1).items
|
192
|
+
subject.contents[0]
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'allows and ignores white space before the key' do
|
196
|
+
expect(section['leading_white_space']).to eq('value1')
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'allows and ignores white space before the equals' do
|
200
|
+
expect(section['white_space_after_key']).to eq('value2')
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'allows and ignores white space after the equals' do
|
204
|
+
expect(section['white_space_after_equals']).to eq('value3')
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'allows and ignores white spaces after the value' do
|
208
|
+
expect(section['white_space_after_value']).to eq('value4')
|
209
|
+
end
|
179
210
|
end
|
180
211
|
end
|
181
212
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
|
-
require 'json'
|
3
|
+
require 'puppet/util/json'
|
4
4
|
|
5
5
|
require 'puppet/util/log'
|
6
6
|
|
@@ -143,7 +143,7 @@ describe Puppet::Util::Log.desttypes[:logstash_event] do
|
|
143
143
|
it "format returns a structure that can be converted to json" do
|
144
144
|
dest = described_class.new
|
145
145
|
hash = dest.format(@msg)
|
146
|
-
|
146
|
+
Puppet::Util::Json.load(hash.to_json)
|
147
147
|
end
|
148
148
|
|
149
149
|
it "handle should send the output to stdout" do
|
data/spec/unit/util/log_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
2
3
|
require 'spec_helper'
|
3
4
|
|
4
5
|
require 'puppet/util/log'
|
@@ -498,12 +499,12 @@ describe Puppet::Util::Log do
|
|
498
499
|
source.tags = ["tag", "tag2"]
|
499
500
|
|
500
501
|
log = Puppet::Util::Log.new(:level => "notice", :message => :foo)
|
501
|
-
log.expects(:tag).with("file")
|
502
|
-
log.expects(:tag).with("tag")
|
503
|
-
log.expects(:tag).with("tag2")
|
504
|
-
|
505
502
|
log.source = source
|
506
503
|
|
504
|
+
expect(log).to be_tagged('file')
|
505
|
+
expect(log).to be_tagged('tag')
|
506
|
+
expect(log).to be_tagged('tag2')
|
507
|
+
|
507
508
|
expect(log.source).to eq("/File[#{path}]")
|
508
509
|
end
|
509
510
|
|
@@ -532,7 +533,7 @@ describe Puppet::Util::Log do
|
|
532
533
|
it "should not try to copy over file, version, line, or tag information" do
|
533
534
|
source = mock
|
534
535
|
source.expects(:file).never
|
535
|
-
|
536
|
+
Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source)
|
536
537
|
end
|
537
538
|
end
|
538
539
|
end
|
@@ -51,12 +51,12 @@ if Puppet.features.telnet?
|
|
51
51
|
|
52
52
|
it "should find the debug mode from the options" do
|
53
53
|
Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(true).returns(@transport)
|
54
|
-
|
54
|
+
Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23", :debug => true)
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should set the debug mode to nil by default" do
|
58
58
|
Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(nil).returns(@transport)
|
59
|
-
|
59
|
+
Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23")
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -92,7 +92,7 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
92
92
|
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(invalid_xml_plist)
|
93
93
|
Puppet.expects(:debug).with(regexp_matches(/^Failed with CFFormatError/))
|
94
94
|
Puppet.expects(:debug).with("Plist #{plist_path} ill-formatted, converting with plutil")
|
95
|
-
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '
|
95
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '-', plist_path],
|
96
96
|
{:failonfail => true, :combine => true}).returns(valid_xml_plist)
|
97
97
|
expect(subject.read_plist_file(plist_path)).to eq(valid_xml_plist_hash)
|
98
98
|
end
|
@@ -101,7 +101,7 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
101
101
|
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(non_plist_data)
|
102
102
|
Puppet.expects(:debug).with(regexp_matches(/^Failed with (CFFormatError|NoMethodError)/))
|
103
103
|
Puppet.expects(:debug).with("Plist #{plist_path} ill-formatted, converting with plutil")
|
104
|
-
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '
|
104
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '-', plist_path],
|
105
105
|
{:failonfail => true, :combine => true}).raises(Puppet::ExecutionFailure, 'boom')
|
106
106
|
expect(subject.read_plist_file(plist_path)).to eq(nil)
|
107
107
|
end
|
@@ -110,7 +110,7 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
110
110
|
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(binary_data)
|
111
111
|
Puppet.expects(:debug).with(regexp_matches(/^Failed with (CFFormatError|ArgumentError)/))
|
112
112
|
Puppet.expects(:debug).with("Plist #{plist_path} ill-formatted, converting with plutil")
|
113
|
-
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '
|
113
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '-', plist_path],
|
114
114
|
{:failonfail => true, :combine => true}).raises(Puppet::ExecutionFailure, 'boom')
|
115
115
|
expect(subject.read_plist_file(plist_path)).to eq(nil)
|
116
116
|
end
|
@@ -109,7 +109,7 @@ describe Puppet::Util::SELinux do
|
|
109
109
|
|
110
110
|
it "should return nil if lgetfilecon fails" do
|
111
111
|
self.expects(:selinux_support?).returns true
|
112
|
-
Selinux.expects(:lgetfilecon).with("/foo").returns
|
112
|
+
Selinux.expects(:lgetfilecon).with("/foo").returns(-1)
|
113
113
|
expect(get_selinux_current_context("/foo")).to be_nil
|
114
114
|
end
|
115
115
|
end
|
@@ -153,7 +153,7 @@ describe Puppet::Util::SELinux do
|
|
153
153
|
fstat = stub 'File::Stat', :mode => 0
|
154
154
|
Puppet::FileSystem.expects(:lstat).with('/foo').returns(fstat)
|
155
155
|
self.expects(:find_fs).with("/foo").returns "ext3"
|
156
|
-
Selinux.expects(:matchpathcon).with("/foo", 0).returns
|
156
|
+
Selinux.expects(:matchpathcon).with("/foo", 0).returns(-1)
|
157
157
|
|
158
158
|
expect(get_selinux_default_context("/foo")).to be_nil
|
159
159
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
2
3
|
require 'spec_helper'
|
3
4
|
|
4
5
|
require 'puppet/util/tagging'
|
@@ -11,13 +12,6 @@ describe Puppet::Util::Tagging do
|
|
11
12
|
expect(tagger.tags).to include("one")
|
12
13
|
end
|
13
14
|
|
14
|
-
it "should return a duplicate of the tag list, rather than the original" do
|
15
|
-
tagger.tag("one")
|
16
|
-
tags = tagger.tags
|
17
|
-
tags << "two"
|
18
|
-
expect(tagger.tags).to_not include("two")
|
19
|
-
end
|
20
|
-
|
21
15
|
it "should add all provided tags to the tag list" do
|
22
16
|
tagger.tag("one", "two")
|
23
17
|
expect(tagger.tags).to include("one")
|
@@ -106,14 +106,14 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should be able to check the existence of a user" do
|
109
|
-
Puppet::Util::Windows::SID.expects(:
|
109
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with(username).returns nil
|
110
110
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://./#{username},user").returns connection
|
111
111
|
connection.expects(:Class).returns('User')
|
112
112
|
expect(Puppet::Util::Windows::ADSI::User.exists?(username)).to be_truthy
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should be able to check the existence of a domain user" do
|
116
|
-
Puppet::Util::Windows::SID.expects(:
|
116
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with("#{domain}\\#{username}").returns nil
|
117
117
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://#{domain}/#{username},user").returns connection
|
118
118
|
connection.expects(:Class).returns('User')
|
119
119
|
expect(Puppet::Util::Windows::ADSI::User.exists?(domain_username)).to be_truthy
|
@@ -213,7 +213,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
213
213
|
end
|
214
214
|
|
215
215
|
it "should generate the correct URI" do
|
216
|
-
Puppet::Util::Windows::SID.stubs(:
|
216
|
+
Puppet::Util::Windows::SID.stubs(:octet_string_to_principal).returns(sid)
|
217
217
|
expect(user.uri).to eq("WinNT://testcomputername/#{username},user")
|
218
218
|
end
|
219
219
|
|
@@ -276,8 +276,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
276
276
|
let(:someone_sid){ stub(:account => 'someone', :domain => 'testcomputername')}
|
277
277
|
|
278
278
|
describe "should be able to use SID objects" do
|
279
|
-
let(:system) { Puppet::Util::Windows::SID.
|
280
|
-
let(:invalid) { Puppet::Util::Windows::SID.
|
279
|
+
let(:system) { Puppet::Util::Windows::SID.name_to_principal('SYSTEM') }
|
280
|
+
let(:invalid) { Puppet::Util::Windows::SID.name_to_principal('foobar') }
|
281
281
|
|
282
282
|
it "to add a member" do
|
283
283
|
adsi_group.expects(:Add).with("WinNT://S-1-5-18")
|
@@ -303,11 +303,14 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
303
303
|
it "should provide its groups as a list of names" do
|
304
304
|
names = ['user1', 'user2']
|
305
305
|
|
306
|
-
users = names.map { |name| stub('user', :Name => name) }
|
306
|
+
users = names.map { |name| stub('user', :Name => name, :objectSID => name, :ole_respond_to? => true) }
|
307
307
|
|
308
308
|
adsi_group.expects(:Members).returns(users)
|
309
309
|
|
310
|
-
|
310
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with('user1').returns(stub(:domain_account => 'HOSTNAME\user1'))
|
311
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with('user2').returns(stub(:domain_account => 'HOSTNAME\user2'))
|
312
|
+
|
313
|
+
expect(group.members.map(&:domain_account)).to match(['HOSTNAME\user1', 'HOSTNAME\user2'])
|
311
314
|
end
|
312
315
|
|
313
316
|
context "calling .set_members" do
|
@@ -320,16 +323,16 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
320
323
|
]
|
321
324
|
|
322
325
|
# use stubbed objectSid on member to return stubbed SID
|
323
|
-
Puppet::Util::Windows::SID.expects(:
|
324
|
-
Puppet::Util::Windows::SID.expects(:
|
326
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([0]).returns(sids[0])
|
327
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([1]).returns(sids[1])
|
325
328
|
|
326
|
-
Puppet::Util::Windows::SID.expects(:
|
327
|
-
Puppet::Util::Windows::SID.expects(:
|
329
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with('user2').returns(sids[1])
|
330
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with('DOMAIN2\user3').returns(sids[2])
|
328
331
|
|
329
332
|
Puppet::Util::Windows::ADSI.expects(:sid_uri).with(sids[0]).returns("WinNT://DOMAIN/user1,user")
|
330
333
|
Puppet::Util::Windows::ADSI.expects(:sid_uri).with(sids[2]).returns("WinNT://DOMAIN2/user3,user")
|
331
334
|
|
332
|
-
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i])}
|
335
|
+
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i], :ole_respond_to? => true)}
|
333
336
|
adsi_group.expects(:Members).returns members
|
334
337
|
|
335
338
|
adsi_group.expects(:Remove).with('WinNT://DOMAIN/user1,user')
|
@@ -347,15 +350,15 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
347
350
|
]
|
348
351
|
|
349
352
|
# use stubbed objectSid on member to return stubbed SID
|
350
|
-
Puppet::Util::Windows::SID.expects(:
|
351
|
-
Puppet::Util::Windows::SID.expects(:
|
353
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([0]).returns(sids[0])
|
354
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([1]).returns(sids[1])
|
352
355
|
|
353
|
-
Puppet::Util::Windows::SID.expects(:
|
354
|
-
Puppet::Util::Windows::SID.expects(:
|
356
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with('user2').returns(sids[1])
|
357
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with('DOMAIN2\user3').returns(sids[2])
|
355
358
|
|
356
359
|
Puppet::Util::Windows::ADSI.expects(:sid_uri).with(sids[2]).returns("WinNT://DOMAIN2/user3,user")
|
357
360
|
|
358
|
-
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i])}
|
361
|
+
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i], :ole_respond_to? => true)}
|
359
362
|
adsi_group.expects(:Members).returns members
|
360
363
|
|
361
364
|
adsi_group.expects(:Remove).with('WinNT://DOMAIN/user1,user').never
|
@@ -382,13 +385,13 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
382
385
|
]
|
383
386
|
|
384
387
|
# use stubbed objectSid on member to return stubbed SID
|
385
|
-
Puppet::Util::Windows::SID.expects(:
|
386
|
-
Puppet::Util::Windows::SID.expects(:
|
388
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([0]).returns(sids[0])
|
389
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([1]).returns(sids[1])
|
387
390
|
|
388
391
|
Puppet::Util::Windows::ADSI.expects(:sid_uri).with(sids[0]).returns("WinNT://DOMAIN/user1,user")
|
389
392
|
Puppet::Util::Windows::ADSI.expects(:sid_uri).with(sids[1]).returns("WinNT://testcomputername/user2,user")
|
390
393
|
|
391
|
-
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i])}
|
394
|
+
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i], :ole_respond_to? => true)}
|
392
395
|
adsi_group.expects(:Members).returns members
|
393
396
|
|
394
397
|
adsi_group.expects(:Remove).with('WinNT://DOMAIN/user1,user')
|
@@ -404,10 +407,10 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
404
407
|
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2 ),
|
405
408
|
]
|
406
409
|
# use stubbed objectSid on member to return stubbed SID
|
407
|
-
Puppet::Util::Windows::SID.expects(:
|
408
|
-
Puppet::Util::Windows::SID.expects(:
|
410
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([0]).returns(sids[0])
|
411
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([1]).returns(sids[1])
|
409
412
|
|
410
|
-
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i])}
|
413
|
+
members = names.each_with_index.map{|n,i| stub(:Name => n, :objectSID => [i], :ole_respond_to? => true)}
|
411
414
|
adsi_group.expects(:Members).returns members
|
412
415
|
|
413
416
|
adsi_group.expects(:Remove).never
|
@@ -428,7 +431,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
428
431
|
adsi_group.expects(:objectSID).returns([0])
|
429
432
|
Socket.expects(:gethostname).returns('TESTcomputerNAME')
|
430
433
|
computer_sid = stub(:account => groupname,:domain => 'testcomputername')
|
431
|
-
Puppet::Util::Windows::SID.expects(:
|
434
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([0]).returns(computer_sid)
|
432
435
|
expect(group.uri).to eq("WinNT://./#{groupname},group")
|
433
436
|
end
|
434
437
|
end
|
@@ -458,7 +461,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
458
461
|
end
|
459
462
|
|
460
463
|
it "should be able to confirm the existence of a group" do
|
461
|
-
Puppet::Util::Windows::SID.expects(:
|
464
|
+
Puppet::Util::Windows::SID.expects(:name_to_principal).with(groupname).returns nil
|
462
465
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://./#{groupname},group").returns connection
|
463
466
|
connection.expects(:Class).returns('Group')
|
464
467
|
|
@@ -500,13 +503,14 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
500
503
|
Puppet::Util::Windows::ADSI.expects(:execquery).with('select name from win32_group where localaccount = "TRUE"').returns(wmi_groups)
|
501
504
|
|
502
505
|
native_group = stub('IADsGroup')
|
503
|
-
|
506
|
+
Puppet::Util::Windows::SID.expects(:octet_string_to_principal).with([]).returns(stub(:domain_account => '.\Administrator'))
|
507
|
+
native_group.expects(:Members).returns([stub(:Name => 'Administrator', :objectSID => [], :ole_respond_to? => true)])
|
504
508
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://./#{name},group").returns(native_group)
|
505
509
|
|
506
510
|
groups = Puppet::Util::Windows::ADSI::Group.to_a
|
507
511
|
expect(groups.length).to eq(1)
|
508
512
|
expect(groups[0].name).to eq(name)
|
509
|
-
expect(groups[0].members).to eq(['Administrator'])
|
513
|
+
expect(groups[0].members.map(&:domain_account)).to eq(['.\Administrator'])
|
510
514
|
end
|
511
515
|
end
|
512
516
|
|
@@ -13,10 +13,10 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
13
13
|
let(:null_sid) { 'S-1-0-0' }
|
14
14
|
let(:unknown_name) { 'chewbacca' }
|
15
15
|
|
16
|
-
context "#
|
16
|
+
context "#octet_string_to_principal" do
|
17
17
|
it "should properly convert an array of bytes for a well-known non-localized SID" do
|
18
18
|
bytes = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
19
|
-
converted = subject.
|
19
|
+
converted = subject.octet_string_to_principal(bytes)
|
20
20
|
|
21
21
|
expect(converted).to be_an_instance_of Puppet::Util::Windows::SID::Principal
|
22
22
|
expect(converted.sid_bytes).to eq(bytes)
|
@@ -28,13 +28,13 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
28
28
|
|
29
29
|
it "should raise an error for non-array input" do
|
30
30
|
expect {
|
31
|
-
subject.
|
31
|
+
subject.octet_string_to_principal(invalid_sid)
|
32
32
|
}.to raise_error(Puppet::Error, /Octet string must be an array of bytes/)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should raise an error for an empty byte array" do
|
36
36
|
expect {
|
37
|
-
subject.
|
37
|
+
subject.octet_string_to_principal([])
|
38
38
|
}.to raise_error(Puppet::Error, /Octet string must be an array of bytes/)
|
39
39
|
end
|
40
40
|
|
@@ -42,7 +42,7 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
42
42
|
expect {
|
43
43
|
# S-1-1-1 which is not a valid account
|
44
44
|
valid_octet_invalid_user =[1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
|
45
|
-
subject.
|
45
|
+
subject.octet_string_to_principal(valid_octet_invalid_user)
|
46
46
|
}.to raise_error do |error|
|
47
47
|
expect(error).to be_a(Puppet::Util::Windows::Error)
|
48
48
|
expect(error.code).to eq(1332) # ERROR_NONE_MAPPED
|
@@ -52,7 +52,7 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
52
52
|
it "should raise an error for a malformed byte array" do
|
53
53
|
expect {
|
54
54
|
invalid_octet = [2]
|
55
|
-
subject.
|
55
|
+
subject.octet_string_to_principal(invalid_octet)
|
56
56
|
}.to raise_error do |error|
|
57
57
|
expect(error).to be_a(Puppet::Util::Windows::Error)
|
58
58
|
expect(error.code).to eq(87) # ERROR_INVALID_PARAMETER
|
@@ -72,12 +72,12 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should return a SID for a passed user or group name" do
|
75
|
-
subject.expects(:
|
75
|
+
subject.expects(:name_to_principal).with('testers').returns stub(:sid => 'S-1-5-32-547')
|
76
76
|
expect(subject.name_to_sid('testers')).to eq('S-1-5-32-547')
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should return a SID for a passed fully-qualified user or group name" do
|
80
|
-
subject.expects(:
|
80
|
+
subject.expects(:name_to_principal).with('MACHINE\testers').returns stub(:sid => 'S-1-5-32-547')
|
81
81
|
expect(subject.name_to_sid('MACHINE\testers')).to eq('S-1-5-32-547')
|
82
82
|
end
|
83
83
|
|
@@ -128,37 +128,108 @@ describe "Puppet::Util::Windows::SID", :if => Puppet.features.microsoft_windows?
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
-
context "#
|
131
|
+
context "#name_to_principal" do
|
132
132
|
it "should return nil if the account does not exist" do
|
133
|
-
expect(subject.
|
133
|
+
expect(subject.name_to_principal(unknown_name)).to be_nil
|
134
134
|
end
|
135
135
|
|
136
136
|
it "should return a Puppet::Util::Windows::SID::Principal instance for any valid sid" do
|
137
|
-
expect(subject.
|
137
|
+
expect(subject.name_to_principal(sid)).to be_an_instance_of(Puppet::Util::Windows::SID::Principal)
|
138
138
|
end
|
139
139
|
|
140
140
|
it "should accept unqualified account name" do
|
141
141
|
# NOTE: lookup by name works in localized environments only for a few instances
|
142
142
|
# this works in French Windows, even though the account is really Syst\u00E8me
|
143
|
-
expect(subject.
|
143
|
+
expect(subject.name_to_principal('SYSTEM').sid).to eq(sid)
|
144
144
|
end
|
145
145
|
|
146
146
|
it "should be case-insensitive" do
|
147
147
|
# NOTE: lookup by name works in localized environments only for a few instances
|
148
148
|
# this works in French Windows, even though the account is really Syst\u00E8me
|
149
|
-
expect(subject.
|
149
|
+
expect(subject.name_to_principal('SYSTEM')).to eq(subject.name_to_principal('system'))
|
150
150
|
end
|
151
151
|
|
152
152
|
it "should be leading and trailing whitespace-insensitive" do
|
153
153
|
# NOTE: lookup by name works in localized environments only for a few instances
|
154
154
|
# this works in French Windows, even though the account is really Syst\u00E8me
|
155
|
-
expect(subject.
|
155
|
+
expect(subject.name_to_principal('SYSTEM')).to eq(subject.name_to_principal(' SYSTEM '))
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should accept domain qualified account names" do
|
159
159
|
# NOTE: lookup by name works in localized environments only for a few instances
|
160
160
|
# this works in French Windows, even though the account is really AUTORITE NT\\Syst\u00E8me
|
161
|
-
expect(subject.
|
161
|
+
expect(subject.name_to_principal('NT AUTHORITY\SYSTEM').sid).to eq(sid)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context "#ads_to_principal" do
|
166
|
+
it "should raise an error for non-WIN32OLE input" do
|
167
|
+
expect {
|
168
|
+
subject.ads_to_principal(stub('WIN32OLE', { :Name => 'foo' }))
|
169
|
+
}.to raise_error(Puppet::Error, /ads_object must be an IAdsUser or IAdsGroup instance/)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should raise an error for an empty byte array in the objectSID property" do
|
173
|
+
expect {
|
174
|
+
subject.ads_to_principal(stub('WIN32OLE', { :objectSID => [], :Name => '', :ole_respond_to? => true }))
|
175
|
+
}.to raise_error(Puppet::Error, /Octet string must be an array of bytes/)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should raise an error for a malformed byte array" do
|
179
|
+
expect {
|
180
|
+
invalid_octet = [2]
|
181
|
+
subject.ads_to_principal(stub('WIN32OLE', { :objectSID => invalid_octet, :Name => '', :ole_respond_to? => true }))
|
182
|
+
}.to raise_error do |error|
|
183
|
+
expect(error).to be_a(Puppet::Util::Windows::Error)
|
184
|
+
expect(error.code).to eq(87) # ERROR_INVALID_PARAMETER
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should raise an error when a valid byte array for SID is unresolvable and its Name does not match" do
|
189
|
+
expect {
|
190
|
+
# S-1-1-1 is a valid SID that will not resolve
|
191
|
+
valid_octet_invalid_user = [1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
|
192
|
+
subject.ads_to_principal(stub('WIN32OLE', { :objectSID => valid_octet_invalid_user, :Name => unknown_name, :ole_respond_to? => true }))
|
193
|
+
}.to raise_error do |error|
|
194
|
+
expect(error).to be_a(Puppet::Error)
|
195
|
+
expect(error.cause.code).to eq(1332) # ERROR_NONE_MAPPED
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should return a Principal object even when the SID is unresolvable, as long as the Name matches" do
|
200
|
+
# S-1-1-1 is a valid SID that will not resolve
|
201
|
+
valid_octet_invalid_user = [1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
|
202
|
+
unresolvable_user = stub('WIN32OLE', { :objectSID => valid_octet_invalid_user, :Name => 'S-1-1-1', :ole_respond_to? => true })
|
203
|
+
principal = subject.ads_to_principal(unresolvable_user)
|
204
|
+
|
205
|
+
expect(principal).to be_an_instance_of(Puppet::Util::Windows::SID::Principal)
|
206
|
+
expect(principal.account).to eq('S-1-1-1 (unresolvable)')
|
207
|
+
expect(principal.domain).to eq(nil)
|
208
|
+
expect(principal.domain_account).to eq('S-1-1-1 (unresolvable)')
|
209
|
+
expect(principal.sid).to eq('S-1-1-1')
|
210
|
+
expect(principal.sid_bytes).to eq(valid_octet_invalid_user)
|
211
|
+
expect(principal.account_type).to eq(:SidTypeUnknown)
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should return a Puppet::Util::Windows::SID::Principal instance for any valid sid" do
|
215
|
+
system_bytes = [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0]
|
216
|
+
adsuser = stub('WIN32OLE', { :objectSID => system_bytes, :Name => 'SYSTEM', :ole_respond_to? => true })
|
217
|
+
expect(subject.ads_to_principal(adsuser)).to be_an_instance_of(Puppet::Util::Windows::SID::Principal)
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should properly convert an array of bytes for a well-known non-localized SID, ignoring the Name from the WIN32OLE object" do
|
221
|
+
bytes = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
222
|
+
adsuser = stub('WIN32OLE', { :objectSID => bytes, :Name => unknown_name, :ole_respond_to? => true })
|
223
|
+
converted = subject.ads_to_principal(adsuser)
|
224
|
+
|
225
|
+
expect(converted).to be_an_instance_of Puppet::Util::Windows::SID::Principal
|
226
|
+
expect(converted.sid_bytes).to eq(bytes)
|
227
|
+
expect(converted.sid).to eq(null_sid)
|
228
|
+
|
229
|
+
# carefully select a SID here that is not localized on international Windows
|
230
|
+
expect(converted.account).to eq('NULL SID')
|
231
|
+
# garbage name supplied does not carry forward as SID is looked up again
|
232
|
+
expect(converted.account).to_not eq(adsuser.Name)
|
162
233
|
end
|
163
234
|
end
|
164
235
|
|