puppet 6.16.0-x64-mingw32 → 6.20.0-x64-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 +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +6 -2
- data/Gemfile.lock +40 -36
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/lib/puppet/agent.rb +2 -2
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +23 -6
- data/lib/puppet/application/apply.rb +20 -21
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +70 -20
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +113 -46
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +13 -1
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +8 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +3 -7
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +6 -1
- data/lib/puppet/http/redirector.rb +9 -7
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/response.rb +19 -0
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +25 -5
- data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/connection_adapter.rb +6 -4
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +90 -13
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +7 -6
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +1 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +29 -15
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +38 -0
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +2 -1
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +3 -3
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -4
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/reports/http.rb +2 -0
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +63 -21
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +18 -13
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +12 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +15 -7
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +32 -12
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +53 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +10 -15
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +60 -33
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +501 -443
- data/man/man5/puppet.conf.5 +70 -24
- data/man/man8/puppet-agent.8 +8 -5
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- 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 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +263 -54
- data/spec/integration/application/apply_spec.rb +168 -149
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +70 -21
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +53 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +20 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +26 -9
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -17
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +3 -5
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +41 -10
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer_spec.rb +86 -37
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- data/spec/unit/context/trusted_information_spec.rb +10 -4
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/client_spec.rb +64 -9
- data/spec/unit/http/resolver_spec.rb +24 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +51 -3
- data/spec/unit/http/service/file_server_spec.rb +2 -3
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +1 -2
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +42 -32
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +76 -3
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -6
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -14
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +23 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +14 -13
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -1
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -102
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +210 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +52 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util_spec.rb +16 -9
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- metadata +52 -53
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/face/module_spec.rb +0 -3
- data/spec/unit/man_spec.rb +0 -31
@@ -146,16 +146,6 @@ describe Puppet::Util::Windows::Registry do
|
|
146
146
|
utf_8_bytes = ENDASH_UTF_8 + TM_UTF_8
|
147
147
|
utf_8_str = utf_8_bytes.pack('c*').force_encoding(Encoding::UTF_8)
|
148
148
|
|
149
|
-
# this problematic Ruby codepath triggers a conversion of UTF-16LE to
|
150
|
-
# a local codepage which can totally break when that codepage has no
|
151
|
-
# conversion from the given UTF-16LE characters to local codepage
|
152
|
-
# a prime example is that IBM437 has no conversion from a Unicode en-dash
|
153
|
-
expect(Win32::Registry).not_to receive(:export_string)
|
154
|
-
|
155
|
-
# also, expect that we're using our variants of keys / values, not Rubys
|
156
|
-
expect(Win32::Registry).not_to receive(:each_key)
|
157
|
-
expect(Win32::Registry).not_to receive(:each_value)
|
158
|
-
|
159
149
|
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS | regsam) do |reg|
|
160
150
|
reg.write("#{guid}", Win32::Registry::REG_SZ, utf_16_str)
|
161
151
|
|
@@ -259,23 +249,23 @@ describe Puppet::Util::Windows::Registry do
|
|
259
249
|
{
|
260
250
|
name: 'REG_SZ',
|
261
251
|
type: Win32::Registry::REG_SZ,
|
262
|
-
value: "reg sz\u0000 string",
|
263
|
-
expected_value: "reg sz
|
252
|
+
value: "reg sz\u0000\u0000 string",
|
253
|
+
expected_value: "reg sz"
|
264
254
|
},
|
265
255
|
{
|
266
256
|
name: 'REG_SZ_2',
|
267
257
|
type: Win32::Registry::REG_SZ,
|
268
|
-
value: "reg sz\x00 string",
|
269
|
-
expected_value: "reg sz
|
258
|
+
value: "reg sz 2\x00\x00 string",
|
259
|
+
expected_value: "reg sz 2"
|
270
260
|
},
|
271
261
|
{
|
272
262
|
name: 'REG_EXPAND_SZ',
|
273
263
|
type: Win32::Registry::REG_EXPAND_SZ,
|
274
|
-
value: "\0reg expand string",
|
275
|
-
expected_value: "
|
264
|
+
value: "\0\0\0reg expand string",
|
265
|
+
expected_value: ""
|
276
266
|
}
|
277
267
|
].each do |pair|
|
278
|
-
it '
|
268
|
+
it 'reads up to the first wide null' do
|
279
269
|
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
280
270
|
reg.write(value_name, pair[:type], pair[:value])
|
281
271
|
end
|
@@ -125,19 +125,16 @@ describe "Puppet::Util::Windows::User", :if => Puppet::Util::Platform.windows? d
|
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'should raise error given that logon returns false' do
|
128
|
-
|
129
128
|
allow(Puppet::Util::Windows::User).to receive(:logon_user_by_logon_type).with(
|
130
|
-
user, passwd, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, anything).and_return (0)
|
129
|
+
user, '.', passwd, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, anything).and_return (0)
|
131
130
|
allow(Puppet::Util::Windows::User).to receive(:logon_user_by_logon_type).with(
|
132
|
-
user, passwd, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, anything).and_return(0)
|
131
|
+
user, '.', passwd, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, anything).and_return(0)
|
133
132
|
|
134
133
|
expect {Puppet::Util::Windows::User.logon_user(user, passwd) {}}
|
135
134
|
.to raise_error(Puppet::Util::Windows::Error, /Failed to logon user/)
|
136
|
-
|
137
135
|
end
|
138
136
|
end
|
139
137
|
|
140
|
-
|
141
138
|
describe "password_is?" do
|
142
139
|
it "should return false given an incorrect username and password" do
|
143
140
|
expect(Puppet::Util::Windows::User.password_is?(username, bad_password)).to be_falsey
|
@@ -180,5 +177,50 @@ describe "Puppet::Util::Windows::User", :if => Puppet::Util::Platform.windows? d
|
|
180
177
|
expect { Puppet::Util::Windows::User.check_token_membership }.not_to raise_error
|
181
178
|
end
|
182
179
|
end
|
180
|
+
|
181
|
+
describe "default_system_account?" do
|
182
|
+
it "should succesfully identify 'SYSTEM' user as a default system account" do
|
183
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('SYSTEM').and_return(Puppet::Util::Windows::SID::LocalSystem)
|
184
|
+
expect(Puppet::Util::Windows::User.default_system_account?('SYSTEM')).to eq(true)
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should succesfully identify 'NETWORK SERVICE' user as a default system account" do
|
188
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('NETWORK SERVICE').and_return(Puppet::Util::Windows::SID::NtNetwork)
|
189
|
+
expect(Puppet::Util::Windows::User.default_system_account?('NETWORK SERVICE')).to eq(true)
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should succesfully identify 'LOCAL SERVICE' user as a default system account" do
|
193
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('LOCAL SERVICE').and_return(Puppet::Util::Windows::SID::NtLocal)
|
194
|
+
expect(Puppet::Util::Windows::User.default_system_account?('LOCAL SERVICE')).to eq(true)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should not identify user with unknown sid as a default system account" do
|
198
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('UnknownUser').and_return(Puppet::Util::Windows::SID::Null)
|
199
|
+
expect(Puppet::Util::Windows::User.default_system_account?('UnknownUser')).to eq(false)
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
describe "localsystem?" do
|
204
|
+
before do
|
205
|
+
allow(Puppet::Util::Windows::ADSI).to receive(:computer_name).and_return("myPC")
|
206
|
+
end
|
207
|
+
|
208
|
+
['LocalSystem', '.\LocalSystem', 'myPC\LocalSystem', 'lOcALsysTem'].each do |input|
|
209
|
+
it "should succesfully identify #{input} as the 'LocalSystem' account" do
|
210
|
+
expect(Puppet::Util::Windows::User.localsystem?(input)).to eq(true)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should not identify any other user as the 'LocalSystem' account" do
|
215
|
+
expect(Puppet::Util::Windows::User.localsystem?('OtherUser')).to eq(false)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "get_rights" do
|
220
|
+
it "should be empty when given user does not exist" do
|
221
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('NonExistingUser').and_return(nil)
|
222
|
+
expect(Puppet::Util::Windows::User.get_rights('NonExistingUser')).to eq("")
|
223
|
+
end
|
224
|
+
end
|
183
225
|
end
|
184
226
|
end
|
@@ -1,32 +1,9 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Puppet::Util do
|
4
5
|
include PuppetSpec::Files
|
5
6
|
|
6
|
-
describe "#execute", unless: Puppet::Util::Platform.jruby? do
|
7
|
-
it "should properly allow stdout and stderr to share a file" do
|
8
|
-
command = "ruby -e '(1..10).each {|i| (i%2==0) ? $stdout.puts(i) : $stderr.puts(i)}'"
|
9
|
-
|
10
|
-
expect(Puppet::Util::Execution.execute(command, :combine => true).split).to match_array([*'1'..'10'])
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should return output and set $CHILD_STATUS" do
|
14
|
-
command = "ruby -e 'puts \"foo\"; exit 42'"
|
15
|
-
|
16
|
-
output = Puppet::Util::Execution.execute(command, {:failonfail => false})
|
17
|
-
|
18
|
-
expect(output).to eq("foo\n")
|
19
|
-
expect($CHILD_STATUS.exitstatus).to eq(42)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should raise an error if non-zero exit status is returned" do
|
23
|
-
command = "ruby -e 'exit 43'"
|
24
|
-
|
25
|
-
expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
|
26
|
-
expect($CHILD_STATUS.exitstatus).to eq(43)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
7
|
describe "#replace_file on Windows", :if => Puppet::Util::Platform.windows? do
|
31
8
|
it "replace_file should preserve original ACEs from existing replaced file on Windows" do
|
32
9
|
|
@@ -110,18 +87,15 @@ describe Puppet::Util do
|
|
110
87
|
describe "#which on Windows", :if => Puppet::Util::Platform.windows? do
|
111
88
|
let (:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
112
89
|
let (:filename) { 'foo.exe' }
|
113
|
-
let (:filepath) { File.expand_path('C:\\' + rune_utf8 + '\\' + filename) }
|
114
90
|
|
115
|
-
|
116
|
-
|
117
|
-
|
91
|
+
it "should be able to use UTF8 characters in the path" do
|
92
|
+
utf8 = tmpdir(rune_utf8)
|
93
|
+
Puppet::FileSystem.mkpath(utf8)
|
118
94
|
|
119
|
-
|
120
|
-
|
121
|
-
end
|
95
|
+
filepath = File.join(utf8, filename)
|
96
|
+
Puppet::FileSystem.touch(filepath)
|
122
97
|
|
123
|
-
|
124
|
-
path = "C:\\" + rune_utf8 + "#{File::PATH_SEPARATOR}c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows"
|
98
|
+
path = [utf8, "c:\\windows\\system32", "c:\\windows"].join(File::PATH_SEPARATOR)
|
125
99
|
Puppet::Util.withenv( { "PATH" => path } , :windows) do
|
126
100
|
expect(Puppet::Util.which(filename)).to eq(filepath)
|
127
101
|
end
|
@@ -41,86 +41,6 @@ RSpec::Matchers.define :exit_with do |expected|
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
RSpec::Matchers.define :have_printed do |expected|
|
46
|
-
|
47
|
-
case expected
|
48
|
-
when String, Regexp, Proc
|
49
|
-
expected = expected
|
50
|
-
else
|
51
|
-
expected = expected.to_s
|
52
|
-
end
|
53
|
-
|
54
|
-
chain :and_exit_with do |code|
|
55
|
-
@expected_exit_code = code
|
56
|
-
end
|
57
|
-
|
58
|
-
define_method :matches_exit_code? do |actual|
|
59
|
-
@expected_exit_code.nil? || @expected_exit_code == actual
|
60
|
-
end
|
61
|
-
|
62
|
-
define_method :matches_output? do |actual|
|
63
|
-
return false unless actual
|
64
|
-
case expected
|
65
|
-
when String
|
66
|
-
actual.include?(expected)
|
67
|
-
when Regexp
|
68
|
-
expected.match(actual)
|
69
|
-
when Proc
|
70
|
-
expected.call(actual)
|
71
|
-
else
|
72
|
-
raise ArgumentError, "No idea how to match a #{actual.class.name}"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
match do |block|
|
77
|
-
$stderr = $stdout = StringIO.new
|
78
|
-
$stdout.set_encoding('UTF-8') if $stdout.respond_to?(:set_encoding)
|
79
|
-
|
80
|
-
begin
|
81
|
-
block.call
|
82
|
-
rescue SystemExit => e
|
83
|
-
raise unless @expected_exit_code
|
84
|
-
@actual_exit_code = e.status
|
85
|
-
ensure
|
86
|
-
$stdout.rewind
|
87
|
-
@actual = $stdout.read
|
88
|
-
|
89
|
-
$stdout = STDOUT
|
90
|
-
$stderr = STDERR
|
91
|
-
end
|
92
|
-
|
93
|
-
matches_output?(@actual) && matches_exit_code?(@actual_exit_code)
|
94
|
-
end
|
95
|
-
|
96
|
-
supports_block_expectations
|
97
|
-
|
98
|
-
failure_message do |actual|
|
99
|
-
if actual.nil? then
|
100
|
-
"expected #{expected.inspect}, but nothing was printed"
|
101
|
-
else
|
102
|
-
if !@expected_exit_code.nil? && matches_output?(actual)
|
103
|
-
"expected exit with code #{@expected_exit_code} but " +
|
104
|
-
(@actual_exit_code.nil? ? " exit was not called" : "exited with #{@actual_exit_code} instead")
|
105
|
-
else
|
106
|
-
"expected #{expected.inspect} to be printed; got:\n#{actual}"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
failure_message_when_negated do |actual|
|
112
|
-
if @expected_exit_code && matches_exit_code?(@actual_exit_code)
|
113
|
-
"expected exit code to not be #{@actual_exit_code}"
|
114
|
-
else
|
115
|
-
"expected #{expected.inspect} to not be printed; got:\n#{actual}"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
description do
|
120
|
-
"expect #{expected.inspect} to be printed" + (@expected_exit_code.nil ? '' : " with exit code #{@expected_exit_code}")
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
44
|
RSpec::Matchers.define :equal_attributes_of do |expected|
|
125
45
|
match do |actual|
|
126
46
|
actual.instance_variables.all? do |attr|
|
@@ -47,9 +47,13 @@ class PuppetSpec::Puppetserver
|
|
47
47
|
class FilebucketServlet < WEBrick::HTTPServlet::AbstractServlet
|
48
48
|
def do_GET request, response
|
49
49
|
end
|
50
|
+
|
50
51
|
def do_PUT request, response
|
52
|
+
upload = File.join(@config.config[:TempDir], 'filebucket')
|
53
|
+
File.open(upload, 'wb') { |f| f.write(request.body) }
|
51
54
|
response['Content-Type'] = 'application/octet-stream'
|
52
55
|
end
|
56
|
+
|
53
57
|
def do_HEAD request, response
|
54
58
|
response.status = 404
|
55
59
|
end
|
@@ -116,4 +120,8 @@ class PuppetSpec::Puppetserver
|
|
116
120
|
end
|
117
121
|
@https.mount(path, handler)
|
118
122
|
end
|
123
|
+
|
124
|
+
def upload_directory
|
125
|
+
@https.config[:TempDir]
|
126
|
+
end
|
119
127
|
end
|
@@ -12,7 +12,12 @@ module PuppetSpec::Settings
|
|
12
12
|
:codedir => { :type => :directory, :default => "test", :desc => "codedir" },
|
13
13
|
:vardir => { :type => :directory, :default => "test", :desc => "vardir" },
|
14
14
|
:rundir => { :type => :directory, :default => "test", :desc => "rundir" },
|
15
|
-
}
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
TEST_APP_DEFAULT_VALUES = TEST_APP_DEFAULT_DEFINITIONS.inject({}) do |memo, (key, value)|
|
18
|
+
memo[key] = value[:default]
|
19
|
+
memo
|
20
|
+
end.freeze
|
16
21
|
|
17
22
|
def set_puppet_conf(confdir, settings)
|
18
23
|
write_file(File.join(confdir, "puppet.conf"), settings)
|
@@ -187,6 +187,8 @@ shared_context 'types_setup' do
|
|
187
187
|
result << Puppet::Pops::Types::PURIType
|
188
188
|
result << Puppet::Pops::Types::PTupleType.new([tf.rich_data])
|
189
189
|
result << Puppet::Pops::Types::PObjectType
|
190
|
+
result << Puppet::Pops::Types::PTypeType
|
191
|
+
result << Puppet::Pops::Types::PTypeSetType
|
190
192
|
result
|
191
193
|
end
|
192
194
|
def rich_data_compatible_types
|
data/spec/spec_helper.rb
CHANGED
@@ -84,10 +84,7 @@ RSpec.configure do |config|
|
|
84
84
|
config.filter_run_when_matching :focus
|
85
85
|
|
86
86
|
config.mock_with :rspec do |mocks|
|
87
|
-
|
88
|
-
# need to go through and fix those tests first before it can be enabled
|
89
|
-
# for real.
|
90
|
-
mocks.verify_partial_doubles = false
|
87
|
+
mocks.verify_partial_doubles = true
|
91
88
|
end
|
92
89
|
|
93
90
|
tmpdir = Puppet::FileSystem.expand_path(Dir.mktmpdir("rspecrun"))
|
data/spec/unit/agent_spec.rb
CHANGED
@@ -3,9 +3,13 @@ require 'puppet/agent'
|
|
3
3
|
require 'puppet/configurer'
|
4
4
|
|
5
5
|
class AgentTestClient
|
6
|
-
def
|
6
|
+
def initialize(transaction_uuid = nil, job_id = nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(client_args)
|
7
10
|
# no-op
|
8
11
|
end
|
12
|
+
|
9
13
|
def stop
|
10
14
|
# no-op
|
11
15
|
end
|
@@ -51,11 +55,10 @@ describe Puppet::Agent do
|
|
51
55
|
|
52
56
|
it "should create an instance of its client class and run it when asked to run" do
|
53
57
|
client = double('client')
|
54
|
-
|
55
|
-
|
56
|
-
expect(client).to receive(:run)
|
58
|
+
allow(AgentTestClient).to receive(:new).with(nil, nil).and_return(client)
|
57
59
|
|
58
60
|
allow(@agent).to receive(:disabled?).and_return(false)
|
61
|
+
expect(client).to receive(:run)
|
59
62
|
@agent.run
|
60
63
|
end
|
61
64
|
|
@@ -92,7 +95,6 @@ describe Puppet::Agent do
|
|
92
95
|
|
93
96
|
describe "when being run" do
|
94
97
|
before do
|
95
|
-
allow(AgentTestClient).to receive(:lockfile_path).and_return("/my/lock")
|
96
98
|
allow(@agent).to receive(:disabled?).and_return(false)
|
97
99
|
end
|
98
100
|
|
@@ -188,7 +190,7 @@ describe Puppet::Agent do
|
|
188
190
|
allow(lockfile).to receive(:lock).and_return(false)
|
189
191
|
end
|
190
192
|
|
191
|
-
it "should notify that a run is already in
|
193
|
+
it "should notify that a run is already in progress" do
|
192
194
|
client = AgentTestClient.new
|
193
195
|
expect(AgentTestClient).to receive(:new).and_return(client)
|
194
196
|
expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
|
@@ -202,7 +202,6 @@ describe Puppet::Application::Agent do
|
|
202
202
|
allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class=)
|
203
203
|
allow(Puppet::Resource::Catalog.indirection).to receive(:cache_class=)
|
204
204
|
allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
|
205
|
-
allow(Puppet).to receive(:settraps)
|
206
205
|
end
|
207
206
|
|
208
207
|
it "should not run with extra arguments" do
|
@@ -571,10 +570,9 @@ describe Puppet::Application::Agent do
|
|
571
570
|
allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(nil)
|
572
571
|
|
573
572
|
expect {
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
}.to output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
|
573
|
+
@puppetd.fingerprint
|
574
|
+
}.to exit_with(1)
|
575
|
+
.and output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
|
578
576
|
end
|
579
577
|
|
580
578
|
it "should log an error if an exception occurs" do
|
@@ -1,12 +1,232 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'puppet/application/config'
|
3
4
|
|
4
5
|
describe Puppet::Application::Config do
|
5
|
-
|
6
|
-
|
6
|
+
include PuppetSpec::Files
|
7
|
+
|
8
|
+
# different UTF-8 widths
|
9
|
+
# 1-byte A
|
10
|
+
# 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
|
11
|
+
# 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
|
12
|
+
# 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
|
13
|
+
MIXED_UTF8 = "A\u06FF\u16A0\u{2070E}" # Aۿᚠ𠜎
|
14
|
+
|
15
|
+
let(:app) { Puppet::Application[:config] }
|
16
|
+
|
17
|
+
before :each do
|
18
|
+
Puppet[:config] = tmpfile('config')
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize_app(args)
|
22
|
+
app.command_line.args = args
|
23
|
+
# ensure global defaults are initialized prior to app defaults
|
24
|
+
Puppet.initialize_settings(args)
|
25
|
+
end
|
26
|
+
|
27
|
+
def read_utf8(path)
|
28
|
+
File.read(path, :encoding => 'UTF-8')
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_utf8(path, content)
|
32
|
+
File.write(path, content, 0, :encoding => 'UTF-8')
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when printing" do
|
36
|
+
it "prints a value" do
|
37
|
+
initialize_app(%w[print certname])
|
38
|
+
|
39
|
+
expect {
|
40
|
+
app.run
|
41
|
+
}.to exit_with(0)
|
42
|
+
.and output(a_string_matching(Puppet[:certname])).to_stdout
|
43
|
+
end
|
44
|
+
|
45
|
+
it "prints a value from a section" do
|
46
|
+
File.write(Puppet[:config], <<~END)
|
47
|
+
[main]
|
48
|
+
external_nodes=none
|
49
|
+
[server]
|
50
|
+
external_nodes=exec
|
51
|
+
END
|
52
|
+
|
53
|
+
initialize_app(%w[print external_nodes --section server])
|
54
|
+
|
55
|
+
expect {
|
56
|
+
app.run
|
57
|
+
}.to exit_with(0)
|
58
|
+
.and output(a_string_matching('exec')).to_stdout
|
59
|
+
end
|
60
|
+
|
61
|
+
it "doesn't require the environment to exist" do
|
62
|
+
initialize_app(%w[print certname --environment doesntexist])
|
63
|
+
|
64
|
+
expect {
|
65
|
+
app.run
|
66
|
+
}.to exit_with(0)
|
67
|
+
.and output(a_string_matching(Puppet[:certname])).to_stdout
|
68
|
+
end
|
7
69
|
end
|
8
70
|
|
9
|
-
|
10
|
-
|
71
|
+
context "when setting" do
|
72
|
+
it "sets a value in its config file" do
|
73
|
+
initialize_app(%w[set certname www.example.com])
|
74
|
+
|
75
|
+
expect {
|
76
|
+
app.run
|
77
|
+
}.to exit_with(0)
|
78
|
+
|
79
|
+
expect(File.read(Puppet[:config])).to eq("[main]\ncertname = www.example.com\n")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "sets a value in the server section" do
|
83
|
+
initialize_app(%w[set external_nodes exec --section server])
|
84
|
+
|
85
|
+
expect {
|
86
|
+
app.run
|
87
|
+
}.to exit_with(0)
|
88
|
+
|
89
|
+
expect(File.read(Puppet[:config])).to eq("[server]\nexternal_nodes = exec\n")
|
90
|
+
end
|
91
|
+
|
92
|
+
{
|
93
|
+
%w[certname WWW.EXAMPLE.COM] => /Certificate names must be lower case/,
|
94
|
+
%w[log_level all] => /Invalid loglevel all/,
|
95
|
+
%w[disable_warnings true] => /Cannot disable unrecognized warning types 'true'/,
|
96
|
+
%w[strict on] => /Invalid value 'on' for parameter strict/,
|
97
|
+
%w[digest_algorithm rot13] => /Invalid value 'rot13' for parameter digest_algorithm/,
|
98
|
+
%w[http_proxy_password a#b] => /Passwords set in the http_proxy_password setting must be valid as part of a URL/,
|
99
|
+
}.each_pair do |args, message|
|
100
|
+
it "rejects #{args.join(' ')}" do
|
101
|
+
initialize_app(['set', *args])
|
102
|
+
|
103
|
+
expect {
|
104
|
+
app.run
|
105
|
+
}.to exit_with(1)
|
106
|
+
.and output(message).to_stderr
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'sets unknown settings' do
|
111
|
+
initialize_app(['set', 'notarealsetting', 'true'])
|
112
|
+
|
113
|
+
expect {
|
114
|
+
app.run
|
115
|
+
}.to exit_with(0)
|
116
|
+
|
117
|
+
expect(File.read(Puppet[:config])).to eq("[main]\nnotarealsetting = true\n")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when deleting" do
|
122
|
+
it "deletes a value" do
|
123
|
+
initialize_app(%w[delete external_nodes])
|
124
|
+
|
125
|
+
File.write(Puppet[:config], <<~END)
|
126
|
+
[main]
|
127
|
+
external_nodes=none
|
128
|
+
END
|
129
|
+
|
130
|
+
expect {
|
131
|
+
app.run
|
132
|
+
}.to exit_with(0)
|
133
|
+
.and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
|
134
|
+
|
135
|
+
expect(File.read(Puppet[:config])).to eq("[main]\n")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "warns when deleting a value that isn't set" do
|
139
|
+
initialize_app(%w[delete external_nodes])
|
140
|
+
|
141
|
+
File.write(Puppet[:config], "")
|
142
|
+
|
143
|
+
expect {
|
144
|
+
app.run
|
145
|
+
}.to exit_with(0)
|
146
|
+
.and output(a_string_matching("Warning: No setting found in configuration file for section 'main' setting name 'external_nodes'")).to_stderr
|
147
|
+
|
148
|
+
expect(File.read(Puppet[:config])).to eq("")
|
149
|
+
end
|
150
|
+
|
151
|
+
it "deletes a value from main" do
|
152
|
+
initialize_app(%w[delete external_nodes])
|
153
|
+
|
154
|
+
File.write(Puppet[:config], <<~END)
|
155
|
+
[main]
|
156
|
+
external_nodes=none
|
157
|
+
END
|
158
|
+
|
159
|
+
expect {
|
160
|
+
app.run
|
161
|
+
}.to exit_with(0)
|
162
|
+
.and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
|
163
|
+
|
164
|
+
expect(File.read(Puppet[:config])).to eq("[main]\n")
|
165
|
+
end
|
166
|
+
|
167
|
+
it "deletes a value from main a section" do
|
168
|
+
initialize_app(%w[delete external_nodes --section server])
|
169
|
+
|
170
|
+
File.write(Puppet[:config], <<~END)
|
171
|
+
[main]
|
172
|
+
external_nodes=none
|
173
|
+
[server]
|
174
|
+
external_nodes=exec
|
175
|
+
END
|
176
|
+
|
177
|
+
expect {
|
178
|
+
app.run
|
179
|
+
}.to exit_with(0)
|
180
|
+
.and output(/Deleted setting from 'server': 'external_nodes'/).to_stdout
|
181
|
+
|
182
|
+
expect(File.read(Puppet[:config])).to eq("[main]\nexternal_nodes=none\n[server]\n")
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when managing UTF-8 values" do
|
187
|
+
it "reads a UTF-8 value" do
|
188
|
+
write_utf8(Puppet[:config], <<~EOF)
|
189
|
+
[main]
|
190
|
+
tags=#{MIXED_UTF8}
|
191
|
+
EOF
|
192
|
+
|
193
|
+
initialize_app(%w[print tags])
|
194
|
+
|
195
|
+
expect {
|
196
|
+
app.run
|
197
|
+
}.to exit_with(0)
|
198
|
+
.and output("#{MIXED_UTF8}\n").to_stdout
|
199
|
+
end
|
200
|
+
|
201
|
+
it "sets a UTF-8 value" do
|
202
|
+
initialize_app(['set', 'tags', MIXED_UTF8])
|
203
|
+
|
204
|
+
expect {
|
205
|
+
app.run
|
206
|
+
}.to exit_with(0)
|
207
|
+
|
208
|
+
expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
|
209
|
+
[main]
|
210
|
+
tags = #{MIXED_UTF8}
|
211
|
+
EOF
|
212
|
+
end
|
213
|
+
|
214
|
+
it "deletes a UTF-8 value" do
|
215
|
+
initialize_app(%w[delete tags])
|
216
|
+
|
217
|
+
write_utf8(Puppet[:config], <<~EOF)
|
218
|
+
[main]
|
219
|
+
tags=#{MIXED_UTF8}
|
220
|
+
EOF
|
221
|
+
|
222
|
+
expect {
|
223
|
+
app.run
|
224
|
+
}.to exit_with(0)
|
225
|
+
.and output(/Deleted setting from 'main': 'tags=#{MIXED_UTF8}'/).to_stdout
|
226
|
+
|
227
|
+
expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
|
228
|
+
[main]
|
229
|
+
EOF
|
230
|
+
end
|
11
231
|
end
|
12
232
|
end
|