puppet 6.17.0-x64-mingw32 → 6.21.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +2 -0
- data/Gemfile.lock +38 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- 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 +50 -8
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +88 -38
- 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/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_system/file_impl.rb +3 -3
- 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 +1 -1
- 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/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/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_metadata/http.rb +1 -0
- 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 +4 -4
- 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/master/v3/environments.rb +0 -1
- 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 +3 -2
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- 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 +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- 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/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 +19 -15
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +67 -1
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- 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 +1 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- 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 +55 -8
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -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/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- 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 +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +28 -8
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +10 -15
- data/lib/puppet/util/character_encoding.rb +9 -5
- 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/posix.rb +54 -5
- 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 +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +342 -312
- data/man/man5/puppet.conf.5 +53 -18
- data/man/man8/puppet-agent.8 +7 -4
- 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 +208 -55
- 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 +19 -1
- 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/node/environment_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- 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 +0 -10
- data/spec/integration/util/windows/user_spec.rb +7 -0
- 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_spec.rb +86 -37
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- 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/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_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 +0 -1
- data/spec/unit/http/resolver_spec.rb +24 -5
- 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/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 +4 -4
- 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/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 +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +85 -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 +28 -0
- 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/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- 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 +11 -10
- 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 +14 -8
- 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 +2 -0
- 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 +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- 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 +36 -3
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +2 -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/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_spec.rb +13 -6
- metadata +49 -50
- 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/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
| @@ -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
         |