puppet 6.14.0-x64-mingw32 → 6.19.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 -7
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -34
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application/agent.rb +25 -9
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +5 -14
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +3 -3
- data/lib/puppet/configurer.rb +68 -24
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +1 -1
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +141 -41
- data/lib/puppet/environments.rb +55 -15
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +46 -16
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- 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 +17 -13
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reduce.rb +2 -4
- 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 +3 -0
- data/lib/puppet/http/client.rb +215 -60
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +43 -3
- data/lib/puppet/http/resolver/server_list.rb +66 -24
- data/lib/puppet/http/resolver/settings.rb +21 -1
- data/lib/puppet/http/resolver/srv.rb +28 -2
- data/lib/puppet/http/response.rb +82 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +70 -2
- data/lib/puppet/http/service/ca.rb +71 -9
- data/lib/puppet/http/service/compiler.rb +214 -12
- data/lib/puppet/http/service/file_server.rb +106 -5
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/service/report.rb +36 -3
- data/lib/puppet/http/session.rb +60 -8
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +2 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +2 -1
- data/lib/puppet/indirector/facts/yaml.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +2 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/rest.rb +7 -1
- data/lib/puppet/indirector/status/rest.rb +2 -1
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- 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/base_pool.rb +6 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +1 -0
- data/lib/puppet/network/http/pool.rb +2 -4
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +22 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +30 -31
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +43 -33
- 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 +18 -9
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- 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/evaluator_impl.rb +5 -5
- 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 +24 -15
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -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/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +98 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +61 -14
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +45 -9
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +11 -2
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +101 -20
- data/lib/puppet/provider/package/zypper.rb +62 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +16 -5
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/runtime.rb +25 -2
- data/lib/puppet/settings.rb +20 -6
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +79 -37
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +19 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +14 -10
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +35 -13
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +41 -3
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -29
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +13 -25
- 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/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +13 -7
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/adsi.rb +2 -2
- 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/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +5 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +627 -507
- data/man/man5/puppet.conf.5 +93 -20
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- 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 +4 -1
- data/man/man8/puppet-node.8 +4 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- 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/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/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -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/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/application/agent_spec.rb +479 -0
- data/spec/integration/application/apply_spec.rb +279 -150
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +239 -0
- 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 +123 -0
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +27 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +39 -40
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/network/http_pool_spec.rb +84 -19
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- 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 +8 -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 -7
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +127 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/device_spec.rb +2 -2
- 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 +22 -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 +9 -4
- 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 +87 -38
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +24 -1
- data/spec/unit/environments_spec.rb +107 -32
- data/spec/unit/face/config_spec.rb +59 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- 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_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +29 -0
- data/spec/unit/file_system_spec.rb +11 -2
- data/spec/unit/http/client_spec.rb +173 -59
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +44 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +27 -5
- data/spec/unit/http/service/compiler_spec.rb +186 -9
- data/spec/unit/http/service/file_server_spec.rb +37 -6
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +5 -4
- data/spec/unit/http/service_spec.rb +3 -4
- data/spec/unit/http/session_spec.rb +48 -12
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +14 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http/pool_spec.rb +3 -3
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +33 -0
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- 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/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +107 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +274 -1
- data/spec/unit/provider/package/zypper_spec.rb +98 -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 +46 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +2 -1
- data/spec/unit/provider/service/redhat_spec.rb +10 -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 +95 -18
- 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/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +30 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
- data/spec/unit/puppet_pal_2pec.rb +11 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
- data/spec/unit/puppet_spec.rb +33 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +44 -22
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +90 -14
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +7 -1
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +218 -8
- data/spec/unit/type/user_spec.rb +32 -3
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- 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/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +83 -47
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- 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/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +90 -51
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/faces/plugin_spec.rb +0 -63
- 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 -64
- 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/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
@@ -3,62 +3,81 @@ require 'spec_helper'
|
|
3
3
|
require 'puppet/file_serving/terminus_selector'
|
4
4
|
|
5
5
|
describe Puppet::FileServing::TerminusSelector do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class TestSelector
|
7
|
+
include Puppet::FileServing::TerminusSelector
|
8
|
+
end
|
9
9
|
|
10
|
-
|
10
|
+
def create_request(key)
|
11
|
+
Puppet::Indirector::Request.new(:indirection_name, :find, key, nil, {node: 'whatever'})
|
11
12
|
end
|
12
13
|
|
14
|
+
subject { TestSelector.new }
|
15
|
+
|
13
16
|
describe "when being used to select termini" do
|
14
17
|
it "should return :file if the request key is fully qualified" do
|
15
|
-
|
16
|
-
|
18
|
+
request = create_request(File.expand_path('/foo'))
|
19
|
+
|
20
|
+
expect(subject.select(request)).to eq(:file)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return :file_server if the request key is relative" do
|
24
|
+
request = create_request('modules/my_module/path/to_file')
|
25
|
+
|
26
|
+
expect(subject.select(request)).to eq(:file_server)
|
17
27
|
end
|
18
28
|
|
19
29
|
it "should return :file if the URI protocol is set to 'file'" do
|
20
|
-
|
21
|
-
|
30
|
+
request = create_request(Puppet::Util.path_to_uri(File.expand_path("/foo")).to_s)
|
31
|
+
|
32
|
+
expect(subject.select(request)).to eq(:file)
|
22
33
|
end
|
23
34
|
|
24
35
|
it "should return :http if the URI protocol is set to 'http'" do
|
25
|
-
|
26
|
-
|
36
|
+
request = create_request("http://www.example.com")
|
37
|
+
|
38
|
+
expect(subject.select(request)).to eq(:http)
|
27
39
|
end
|
28
40
|
|
29
41
|
it "should return :http if the URI protocol is set to 'https'" do
|
30
|
-
|
31
|
-
|
42
|
+
request = create_request("https://www.example.com")
|
43
|
+
|
44
|
+
expect(subject.select(request)).to eq(:http)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return :http if the path starts with a double slash" do
|
48
|
+
request = create_request("https://www.example.com//index.html")
|
49
|
+
|
50
|
+
expect(subject.select(request)).to eq(:http)
|
32
51
|
end
|
33
52
|
|
34
53
|
it "should fail when a protocol other than :puppet, :http(s) or :file is used" do
|
35
|
-
|
36
|
-
|
54
|
+
request = create_request("ftp://ftp.example.com")
|
55
|
+
|
56
|
+
expect {
|
57
|
+
subject.select(request)
|
58
|
+
}.to raise_error(ArgumentError, /URI protocol 'ftp' is not currently supported for file serving/)
|
37
59
|
end
|
38
60
|
|
39
61
|
describe "and the protocol is 'puppet'" do
|
40
|
-
before do
|
41
|
-
allow(@request).to receive(:protocol).and_return("puppet")
|
42
|
-
end
|
43
|
-
|
44
62
|
it "should choose :rest when a server is specified" do
|
45
|
-
|
46
|
-
|
47
|
-
expect(
|
63
|
+
request = create_request("puppet://puppetserver.example.com")
|
64
|
+
|
65
|
+
expect(subject.select(request)).to eq(:rest)
|
48
66
|
end
|
49
67
|
|
50
68
|
# This is so a given file location works when bootstrapping with no server.
|
51
69
|
it "should choose :rest when default_file_terminus is rest" do
|
52
|
-
allow(@request).to receive(:protocol).and_return("puppet")
|
53
70
|
Puppet[:server] = 'localhost'
|
54
|
-
|
71
|
+
request = create_request("puppet:///plugins")
|
72
|
+
|
73
|
+
expect(subject.select(request)).to eq(:rest)
|
55
74
|
end
|
56
75
|
|
57
76
|
it "should choose :file_server when default_file_terminus is file_server and no server is specified on the request" do
|
58
|
-
expect(@request).to receive(:protocol).and_return("puppet")
|
59
|
-
expect(@request).to receive(:server).and_return(nil)
|
60
77
|
Puppet[:default_file_terminus] = 'file_server'
|
61
|
-
|
78
|
+
request = create_request("puppet:///plugins")
|
79
|
+
|
80
|
+
expect(subject.select(request)).to eq(:file_server)
|
62
81
|
end
|
63
82
|
end
|
64
83
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Puppet::FileSystem::Uniquefile do
|
4
|
+
include PuppetSpec::Files
|
5
|
+
|
4
6
|
it "makes the name of the file available" do
|
5
7
|
Puppet::FileSystem::Uniquefile.open_tmp('foo') do |file|
|
6
8
|
expect(file.path).to match(/foo/)
|
@@ -73,6 +75,33 @@ describe Puppet::FileSystem::Uniquefile do
|
|
73
75
|
Puppet::FileSystem::Uniquefile.open_tmp('foo') { |tmp| }
|
74
76
|
end
|
75
77
|
|
78
|
+
it "reports when a parent directory does not exist" do
|
79
|
+
dir = tmpdir('uniquefile')
|
80
|
+
lock = File.join(dir, 'path', 'to', 'lock')
|
81
|
+
|
82
|
+
expect {
|
83
|
+
Puppet::FileSystem::Uniquefile.open_tmp(lock) { |tmp| }
|
84
|
+
}.to raise_error(Errno::ENOENT, %r{No such file or directory - A directory component in .* does not exist or is a dangling symbolic link})
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should use UTF8 characters in TMP,TEMP,TMPDIR environment variable", :if => Puppet::Util::Platform.windows? do
|
88
|
+
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"
|
89
|
+
temp_rune_utf8 = File.join(Dir.tmpdir, rune_utf8)
|
90
|
+
Puppet::FileSystem.mkpath(temp_rune_utf8)
|
91
|
+
|
92
|
+
# Set the temporary environment variables to the UTF8 temp path
|
93
|
+
Puppet::Util::Windows::Process.set_environment_variable('TMPDIR', temp_rune_utf8)
|
94
|
+
Puppet::Util::Windows::Process.set_environment_variable('TMP', temp_rune_utf8)
|
95
|
+
Puppet::Util::Windows::Process.set_environment_variable('TEMP', temp_rune_utf8)
|
96
|
+
|
97
|
+
# Create a unique file
|
98
|
+
filename = Puppet::FileSystem::Uniquefile.open_tmp('foo') do |file|
|
99
|
+
File.dirname(file.path)
|
100
|
+
end
|
101
|
+
|
102
|
+
expect(filename).to eq(temp_rune_utf8)
|
103
|
+
end
|
104
|
+
|
76
105
|
context "Ruby 1.9.3 Tempfile tests" do
|
77
106
|
# the remaining tests in this file are ported directly from the ruby 1.9.3 source,
|
78
107
|
# since most of this file was ported from there
|
@@ -872,8 +872,7 @@ describe "Puppet::FileSystem" do
|
|
872
872
|
|
873
873
|
# regardless of slash direction, return value is drive letter
|
874
874
|
expanded = Puppet::FileSystem.expand_path(slash)
|
875
|
-
expect(expanded).to
|
876
|
-
expect(expanded).to eq(File.expand_path(slash))
|
875
|
+
expect(expanded).to match(/^[a-z]:/i)
|
877
876
|
end
|
878
877
|
end
|
879
878
|
|
@@ -970,6 +969,16 @@ describe "Puppet::FileSystem" do
|
|
970
969
|
mode = Puppet::FileSystem.stat(dest).mode
|
971
970
|
expect(mode & 07777).to eq(0400)
|
972
971
|
end
|
972
|
+
|
973
|
+
it 'preserves file ownership' do
|
974
|
+
allow(Puppet::FileSystem).to receive(:lstat)
|
975
|
+
.with(Puppet::FileSystem.pathname(dest))
|
976
|
+
.and_return(double(uid: 1, gid: 2))
|
977
|
+
|
978
|
+
expect(FileUtils).to receive(:chown).with(1, 2, /#{dest}/)
|
979
|
+
|
980
|
+
Puppet::FileSystem.replace_file(dest, 0644) { |f| f.write(content) }
|
981
|
+
end
|
973
982
|
end
|
974
983
|
|
975
984
|
context 'on windows', if: Puppet::Util::Platform.windows? do
|
@@ -1,13 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
2
|
require 'puppet/http'
|
4
3
|
|
5
4
|
describe Puppet::HTTP::Client do
|
6
5
|
let(:uri) { URI.parse('https://www.example.com') }
|
7
|
-
let(:pool) { Puppet::Network::HTTP::Pool.new }
|
8
6
|
let(:puppet_context) { Puppet::SSL::SSLContext.new }
|
9
7
|
let(:system_context) { Puppet::SSL::SSLContext.new }
|
10
|
-
let(:client) { described_class.new(
|
8
|
+
let(:client) { described_class.new(ssl_context: puppet_context, system_ssl_context: system_context) }
|
11
9
|
let(:credentials) { ['user', 'pass'] }
|
12
10
|
|
13
11
|
it 'creates unique sessions' do
|
@@ -50,7 +48,7 @@ describe Puppet::HTTP::Client do
|
|
50
48
|
end
|
51
49
|
|
52
50
|
it 'connects using the default ssl context' do
|
53
|
-
expect(pool).to receive(:with_connection) do |_, verifier|
|
51
|
+
expect(client.pool).to receive(:with_connection) do |_, verifier|
|
54
52
|
expect(verifier.ssl_context).to equal(puppet_context)
|
55
53
|
end
|
56
54
|
|
@@ -60,24 +58,32 @@ describe Puppet::HTTP::Client do
|
|
60
58
|
it 'connects using a specified ssl context' do
|
61
59
|
other_context = Puppet::SSL::SSLContext.new
|
62
60
|
|
63
|
-
expect(pool).to receive(:with_connection) do |_, verifier|
|
61
|
+
expect(client.pool).to receive(:with_connection) do |_, verifier|
|
64
62
|
expect(verifier.ssl_context).to equal(other_context)
|
65
63
|
end
|
66
64
|
|
67
|
-
client.connect(uri, ssl_context: other_context)
|
65
|
+
client.connect(uri, options: {ssl_context: other_context})
|
68
66
|
end
|
69
67
|
|
70
68
|
it 'connects using the system store' do
|
71
|
-
expect(pool).to receive(:with_connection) do |_, verifier|
|
69
|
+
expect(client.pool).to receive(:with_connection) do |_, verifier|
|
72
70
|
expect(verifier.ssl_context).to equal(system_context)
|
73
71
|
end
|
74
72
|
|
75
|
-
client.connect(uri, include_system_store: true)
|
73
|
+
client.connect(uri, options: {include_system_store: true})
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'does not create a verifier for HTTP connections' do
|
77
|
+
expect(client.pool).to receive(:with_connection) do |_, verifier|
|
78
|
+
expect(verifier).to be_nil
|
79
|
+
end
|
80
|
+
|
81
|
+
client.connect(URI.parse('http://www.example.com'))
|
76
82
|
end
|
77
83
|
|
78
84
|
it 'raises an HTTPError if both are specified' do
|
79
85
|
expect {
|
80
|
-
client.connect(uri, ssl_context: puppet_context, include_system_store: true)
|
86
|
+
client.connect(uri, options: {ssl_context: puppet_context, include_system_store: true})
|
81
87
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
82
88
|
end
|
83
89
|
end
|
@@ -110,10 +116,8 @@ describe Puppet::HTTP::Client do
|
|
110
116
|
|
111
117
|
context "when closing" do
|
112
118
|
it "closes all connections in the pool" do
|
113
|
-
pool
|
114
|
-
expect(pool).to receive(:close)
|
119
|
+
expect(client.pool).to receive(:close)
|
115
120
|
|
116
|
-
client = described_class.new(pool: pool)
|
117
121
|
client.close
|
118
122
|
end
|
119
123
|
end
|
@@ -180,18 +184,18 @@ describe Puppet::HTTP::Client do
|
|
180
184
|
|
181
185
|
other_context = Puppet::SSL::SSLContext.new
|
182
186
|
|
183
|
-
client.get(uri, ssl_context: other_context)
|
187
|
+
client.get(uri, options: {ssl_context: other_context})
|
184
188
|
end
|
185
189
|
|
186
190
|
it 'uses the system store' do
|
187
191
|
stub_request(:get, uri).to_return(body: "abc")
|
188
192
|
|
189
|
-
client.get(uri, include_system_store: true)
|
193
|
+
client.get(uri, options: {include_system_store: true})
|
190
194
|
end
|
191
195
|
|
192
196
|
it 'raises an HTTPError if both are specified' do
|
193
197
|
expect {
|
194
|
-
client.get(uri, ssl_context: puppet_context, include_system_store: true)
|
198
|
+
client.get(uri, options: {ssl_context: puppet_context, include_system_store: true})
|
195
199
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
196
200
|
end
|
197
201
|
end
|
@@ -237,18 +241,18 @@ describe Puppet::HTTP::Client do
|
|
237
241
|
|
238
242
|
other_context = Puppet::SSL::SSLContext.new
|
239
243
|
|
240
|
-
client.head(uri, ssl_context: other_context)
|
244
|
+
client.head(uri, options: {ssl_context: other_context})
|
241
245
|
end
|
242
246
|
|
243
247
|
it 'uses the system store' do
|
244
248
|
stub_request(:head, uri)
|
245
249
|
|
246
|
-
client.head(uri, include_system_store: true)
|
250
|
+
client.head(uri, options: {include_system_store: true})
|
247
251
|
end
|
248
252
|
|
249
253
|
it 'raises an HTTPError if both are specified' do
|
250
254
|
expect {
|
251
|
-
client.head(uri, ssl_context: puppet_context, include_system_store: true)
|
255
|
+
client.head(uri, options: {ssl_context: puppet_context, include_system_store: true})
|
252
256
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
253
257
|
end
|
254
258
|
end
|
@@ -261,25 +265,25 @@ describe Puppet::HTTP::Client do
|
|
261
265
|
expect(request.headers).to_not include('X-Puppet-Profiling')
|
262
266
|
end
|
263
267
|
|
264
|
-
client.put(uri,
|
268
|
+
client.put(uri, "", headers: {'Content-Type' => 'text/plain'})
|
265
269
|
end
|
266
270
|
|
267
271
|
it "stringifies keys and encodes values in the query" do
|
268
272
|
stub_request(:put, "https://www.example.com").with(query: "foo=bar%3Dbaz")
|
269
273
|
|
270
|
-
client.put(uri, params: {:foo => "bar=baz"},
|
274
|
+
client.put(uri, "", params: {:foo => "bar=baz"}, headers: {'Content-Type' => 'text/plain'})
|
271
275
|
end
|
272
276
|
|
273
277
|
it "includes custom headers" do
|
274
278
|
stub_request(:put, "https://www.example.com").with(headers: { 'X-Foo' => 'Bar' })
|
275
279
|
|
276
|
-
client.put(uri, headers: {'X-Foo' => 'Bar'
|
280
|
+
client.put(uri, "", headers: {'X-Foo' => 'Bar', 'Content-Type' => 'text/plain'})
|
277
281
|
end
|
278
282
|
|
279
283
|
it "returns the response" do
|
280
284
|
stub_request(:put, uri)
|
281
285
|
|
282
|
-
response = client.put(uri,
|
286
|
+
response = client.put(uri, "", headers: {'Content-Type' => 'text/plain'})
|
283
287
|
expect(response).to be_an_instance_of(Puppet::HTTP::Response)
|
284
288
|
expect(response).to be_success
|
285
289
|
expect(response.code).to eq(200)
|
@@ -288,27 +292,39 @@ describe Puppet::HTTP::Client do
|
|
288
292
|
it "sets content-length and content-type for the body" do
|
289
293
|
stub_request(:put, uri).with(headers: {"Content-Length" => "5", "Content-Type" => "text/plain"})
|
290
294
|
|
291
|
-
client.put(uri,
|
295
|
+
client.put(uri, "hello", headers: {'Content-Type' => 'text/plain'})
|
292
296
|
end
|
293
297
|
|
298
|
+
it 'raises an ArgumentError if `body` is missing' do
|
299
|
+
expect {
|
300
|
+
client.put(uri, nil, headers: {'Content-Type' => 'text/plain'})
|
301
|
+
}.to raise_error(ArgumentError, /'put' requires a string 'body' argument/)
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'raises an ArgumentError if `content_type` is missing from the headers hash' do
|
305
|
+
expect {
|
306
|
+
client.put(uri, '')
|
307
|
+
}.to raise_error(ArgumentError, /'put' requires a 'content-type' header/)
|
308
|
+
end
|
309
|
+
|
294
310
|
context 'when connecting' do
|
295
311
|
it 'uses a specified ssl context' do
|
296
312
|
stub_request(:put, uri)
|
297
313
|
|
298
314
|
other_context = Puppet::SSL::SSLContext.new
|
299
315
|
|
300
|
-
client.put(uri,
|
316
|
+
client.put(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {ssl_context: other_context})
|
301
317
|
end
|
302
318
|
|
303
319
|
it 'uses the system store' do
|
304
320
|
stub_request(:put, uri)
|
305
321
|
|
306
|
-
client.put(uri,
|
322
|
+
client.put(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {include_system_store: true})
|
307
323
|
end
|
308
324
|
|
309
325
|
it 'raises an HTTPError if both are specified' do
|
310
326
|
expect {
|
311
|
-
client.put(uri,
|
327
|
+
client.put(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {ssl_context: puppet_context, include_system_store: true})
|
312
328
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
313
329
|
end
|
314
330
|
end
|
@@ -318,25 +334,25 @@ describe Puppet::HTTP::Client do
|
|
318
334
|
it "includes default HTTP headers" do
|
319
335
|
stub_request(:post, uri).with(headers: {'X-Puppet-Version' => /./, 'User-Agent' => /./})
|
320
336
|
|
321
|
-
client.post(uri,
|
337
|
+
client.post(uri, "", headers: {'Content-Type' => 'text/plain'})
|
322
338
|
end
|
323
339
|
|
324
340
|
it "stringifies keys and encodes values in the query" do
|
325
341
|
stub_request(:post, "https://www.example.com").with(query: "foo=bar%3Dbaz")
|
326
342
|
|
327
|
-
client.post(uri, params: {:foo => "bar=baz"},
|
343
|
+
client.post(uri, "", params: {:foo => "bar=baz"}, headers: {'Content-Type' => 'text/plain'})
|
328
344
|
end
|
329
345
|
|
330
346
|
it "includes custom headers" do
|
331
347
|
stub_request(:post, "https://www.example.com").with(headers: { 'X-Foo' => 'Bar' })
|
332
348
|
|
333
|
-
client.post(uri, headers: {'X-Foo' => 'Bar'
|
349
|
+
client.post(uri, "", headers: {'X-Foo' => 'Bar', 'Content-Type' => 'text/plain'})
|
334
350
|
end
|
335
351
|
|
336
352
|
it "returns the response" do
|
337
353
|
stub_request(:post, uri)
|
338
354
|
|
339
|
-
response = client.post(uri,
|
355
|
+
response = client.post(uri, "", headers: {'Content-Type' => 'text/plain'})
|
340
356
|
expect(response).to be_an_instance_of(Puppet::HTTP::Response)
|
341
357
|
expect(response).to be_success
|
342
358
|
expect(response.code).to eq(200)
|
@@ -345,14 +361,14 @@ describe Puppet::HTTP::Client do
|
|
345
361
|
it "sets content-length and content-type for the body" do
|
346
362
|
stub_request(:post, uri).with(headers: {"Content-Length" => "5", "Content-Type" => "text/plain"})
|
347
363
|
|
348
|
-
client.post(uri,
|
364
|
+
client.post(uri, "hello", headers: {'Content-Type' => 'text/plain'})
|
349
365
|
end
|
350
366
|
|
351
367
|
it "streams the response body when a block is given" do
|
352
368
|
stub_request(:post, uri).to_return(body: "abc")
|
353
369
|
|
354
370
|
io = StringIO.new
|
355
|
-
client.post(uri,
|
371
|
+
client.post(uri, "", headers: {'Content-Type' => 'text/plain'}) do |response|
|
356
372
|
response.read_body do |data|
|
357
373
|
io.write(data)
|
358
374
|
end
|
@@ -361,24 +377,36 @@ describe Puppet::HTTP::Client do
|
|
361
377
|
expect(io.string).to eq("abc")
|
362
378
|
end
|
363
379
|
|
380
|
+
it 'raises an ArgumentError if `body` is missing' do
|
381
|
+
expect {
|
382
|
+
client.post(uri, nil, headers: {'Content-Type' => 'text/plain'})
|
383
|
+
}.to raise_error(ArgumentError, /'post' requires a string 'body' argument/)
|
384
|
+
end
|
385
|
+
|
386
|
+
it 'raises an ArgumentError if `content_type` is missing from the headers hash' do
|
387
|
+
expect {
|
388
|
+
client.post(uri, "")
|
389
|
+
}.to raise_error(ArgumentError, /'post' requires a 'content-type' header/)
|
390
|
+
end
|
391
|
+
|
364
392
|
context 'when connecting' do
|
365
393
|
it 'uses a specified ssl context' do
|
366
394
|
stub_request(:post, uri)
|
367
395
|
|
368
396
|
other_context = Puppet::SSL::SSLContext.new
|
369
397
|
|
370
|
-
client.post(uri,
|
398
|
+
client.post(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {body: "", ssl_context: other_context})
|
371
399
|
end
|
372
400
|
|
373
401
|
it 'uses the system store' do
|
374
402
|
stub_request(:post, uri)
|
375
403
|
|
376
|
-
client.post(uri,
|
404
|
+
client.post(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {include_system_store: true})
|
377
405
|
end
|
378
406
|
|
379
407
|
it 'raises an HTTPError if both are specified' do
|
380
408
|
expect {
|
381
|
-
client.post(uri,
|
409
|
+
client.post(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {ssl_context: puppet_context, include_system_store: true})
|
382
410
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
383
411
|
end
|
384
412
|
end
|
@@ -424,18 +452,18 @@ describe Puppet::HTTP::Client do
|
|
424
452
|
|
425
453
|
other_context = Puppet::SSL::SSLContext.new
|
426
454
|
|
427
|
-
client.delete(uri, ssl_context: other_context)
|
455
|
+
client.delete(uri, options: {ssl_context: other_context})
|
428
456
|
end
|
429
457
|
|
430
458
|
it 'uses the system store' do
|
431
459
|
stub_request(:delete, uri)
|
432
460
|
|
433
|
-
client.delete(uri, include_system_store: true)
|
461
|
+
client.delete(uri, options: {include_system_store: true})
|
434
462
|
end
|
435
463
|
|
436
464
|
it 'raises an HTTPError if both are specified' do
|
437
465
|
expect {
|
438
|
-
client.delete(uri, ssl_context: puppet_context, include_system_store: true)
|
466
|
+
client.delete(uri, options: {ssl_context: puppet_context, include_system_store: true})
|
439
467
|
}.to raise_error(Puppet::HTTP::HTTPError, /The ssl_context and include_system_store parameters are mutually exclusive/)
|
440
468
|
end
|
441
469
|
end
|
@@ -445,38 +473,52 @@ describe Puppet::HTTP::Client do
|
|
445
473
|
it "submits credentials for GET requests" do
|
446
474
|
stub_request(:get, uri).with(basic_auth: credentials)
|
447
475
|
|
448
|
-
client.get(uri, user: 'user', password: 'pass')
|
476
|
+
client.get(uri, options: {basic_auth: {user: 'user', password: 'pass'}})
|
449
477
|
end
|
450
478
|
|
451
479
|
it "submits credentials for PUT requests" do
|
452
480
|
stub_request(:put, uri).with(basic_auth: credentials)
|
453
481
|
|
454
|
-
client.put(uri,
|
482
|
+
client.put(uri, "hello", headers: {'Content-Type' => 'text/plain'}, options: {basic_auth: {user: 'user', password: 'pass'}})
|
455
483
|
end
|
456
484
|
|
457
485
|
it "returns response containing access denied" do
|
458
486
|
stub_request(:get, uri).with(basic_auth: credentials).to_return(status: [403, "Ye Shall Not Pass"])
|
459
487
|
|
460
|
-
response = client.get(uri, user: 'user', password: 'pass')
|
488
|
+
response = client.get(uri, options: {basic_auth: {user: 'user', password: 'pass'}})
|
461
489
|
expect(response.code).to eq(403)
|
462
490
|
expect(response.reason).to eq("Ye Shall Not Pass")
|
463
491
|
expect(response).to_not be_success
|
464
492
|
end
|
465
493
|
|
466
|
-
it '
|
494
|
+
it 'includes basic auth if user is nil' do
|
467
495
|
stub_request(:get, uri).with do |req|
|
468
|
-
expect(req.headers).
|
496
|
+
expect(req.headers).to include('Authorization')
|
469
497
|
end
|
470
498
|
|
471
|
-
client.get(uri, user: nil, password: 'pass')
|
499
|
+
client.get(uri, options: {basic_auth: {user: nil, password: 'pass'}})
|
472
500
|
end
|
473
501
|
|
474
|
-
it '
|
502
|
+
it 'includes basic auth if password is nil' do
|
475
503
|
stub_request(:get, uri).with do |req|
|
476
|
-
expect(req.headers).
|
504
|
+
expect(req.headers).to include('Authorization')
|
477
505
|
end
|
478
506
|
|
479
|
-
client.get(uri, user: 'user', password: nil)
|
507
|
+
client.get(uri, options: {basic_auth: {user: 'user', password: nil}})
|
508
|
+
end
|
509
|
+
|
510
|
+
it 'observes userinfo in the URL' do
|
511
|
+
stub_request(:get, uri).with(basic_auth: credentials)
|
512
|
+
|
513
|
+
client.get(URI("https://user:pass@www.example.com"))
|
514
|
+
end
|
515
|
+
|
516
|
+
it 'prefers explicit basic_auth credentials' do
|
517
|
+
uri = URI("https://ignored_user:ignored_pass@www.example.com")
|
518
|
+
|
519
|
+
stub_request(:get, "https://www.example.com").with(basic_auth: credentials)
|
520
|
+
|
521
|
+
client.get(uri, options: {basic_auth: {user: 'user', password: 'pass'}})
|
480
522
|
end
|
481
523
|
end
|
482
524
|
|
@@ -502,14 +544,45 @@ describe Puppet::HTTP::Client do
|
|
502
544
|
stub_request(:put, start_url).to_return(redirect_to(url: bar_url))
|
503
545
|
stub_request(:put, bar_url).to_return(status: 200)
|
504
546
|
|
505
|
-
response = client.put(start_url,
|
547
|
+
response = client.put(start_url, "", headers: {'Content-Type' => 'text/plain'})
|
548
|
+
expect(response).to be_success
|
549
|
+
end
|
550
|
+
|
551
|
+
it "updates the Host header from the Location host and port" do
|
552
|
+
stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
|
553
|
+
.to_return(redirect_to(url: other_host))
|
554
|
+
stub_request(:get, other_host).with(headers: { 'Host' => 'other.example.com:8140' })
|
555
|
+
.to_return(status: 200)
|
556
|
+
|
557
|
+
response = client.get(start_url)
|
558
|
+
expect(response).to be_success
|
559
|
+
end
|
560
|
+
|
561
|
+
it "omits the default HTTPS port from the Host header" do
|
562
|
+
stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
|
563
|
+
.to_return(redirect_to(url: "https://other.example.com/qux"))
|
564
|
+
stub_request(:get, "https://other.example.com/qux").with(headers: { 'Host' => 'other.example.com' })
|
565
|
+
.to_return(status: 200)
|
566
|
+
|
567
|
+
response = client.get(start_url)
|
568
|
+
expect(response).to be_success
|
569
|
+
end
|
570
|
+
|
571
|
+
it "omits the default HTTP port from the Host header" do
|
572
|
+
stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
|
573
|
+
.to_return(redirect_to(url: "http://other.example.com/qux"))
|
574
|
+
stub_request(:get, "http://other.example.com/qux").with(headers: { 'Host' => 'other.example.com' })
|
575
|
+
.to_return(status: 200)
|
576
|
+
|
577
|
+
response = client.get(start_url)
|
506
578
|
expect(response).to be_success
|
507
579
|
end
|
508
580
|
|
509
|
-
it "
|
510
|
-
query = { '
|
511
|
-
|
512
|
-
stub_request(:get,
|
581
|
+
it "applies query parameters from the location header" do
|
582
|
+
query = { 'redirected' => false }
|
583
|
+
|
584
|
+
stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: "#{bar_url}?redirected=true"))
|
585
|
+
stub_request(:get, bar_url).with(query: {'redirected' => 'true'}).to_return(status: 200)
|
513
586
|
|
514
587
|
response = client.get(start_url, params: query)
|
515
588
|
expect(response).to be_success
|
@@ -528,7 +601,7 @@ describe Puppet::HTTP::Client do
|
|
528
601
|
stub_request(:get, start_url).with(basic_auth: credentials).to_return(redirect_to(url: bar_url))
|
529
602
|
stub_request(:get, bar_url).with(basic_auth: credentials).to_return(status: 200)
|
530
603
|
|
531
|
-
client.get(start_url, user: 'user', password: 'pass')
|
604
|
+
client.get(start_url, options: {basic_auth: {user: 'user', password: 'pass'}})
|
532
605
|
end
|
533
606
|
|
534
607
|
it "redirects given a relative location" do
|
@@ -540,22 +613,33 @@ describe Puppet::HTTP::Client do
|
|
540
613
|
expect(response).to be_success
|
541
614
|
end
|
542
615
|
|
543
|
-
it "
|
616
|
+
it "applies query parameters from the location header" do
|
544
617
|
relative_url = "/people.html"
|
545
|
-
query = { '
|
546
|
-
stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: relative_url))
|
547
|
-
stub_request(:get, "https://www.example.com:8140/people.html").with(query:
|
618
|
+
query = { 'redirected' => false }
|
619
|
+
stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: "#{relative_url}?redirected=true"))
|
620
|
+
stub_request(:get, "https://www.example.com:8140/people.html").with(query: {'redirected' => 'true'}).to_return(status: 200)
|
548
621
|
|
549
622
|
response = client.get(start_url, params: query)
|
550
623
|
expect(response).to be_success
|
551
624
|
end
|
552
625
|
|
626
|
+
it "removes dot segments from a relative location" do
|
627
|
+
# from https://tools.ietf.org/html/rfc3986#section-5.4.2
|
628
|
+
base_url = URI("http://a/b/c/d;p?q")
|
629
|
+
relative_url = "../../../../g"
|
630
|
+
stub_request(:get, base_url).to_return(redirect_to(url: relative_url))
|
631
|
+
stub_request(:get, "http://a/g").to_return(status: 200)
|
632
|
+
|
633
|
+
response = client.get(base_url)
|
634
|
+
expect(response).to be_success
|
635
|
+
end
|
636
|
+
|
553
637
|
it "preserves request body for each request" do
|
554
638
|
data = 'some data'
|
555
639
|
stub_request(:put, start_url).with(body: data).to_return(redirect_to(url: bar_url))
|
556
640
|
stub_request(:put, bar_url).with(body: data).to_return(status: 200)
|
557
641
|
|
558
|
-
response = client.put(start_url,
|
642
|
+
response = client.put(start_url, data, headers: {'Content-Type' => 'text/plain'})
|
559
643
|
expect(response).to be_success
|
560
644
|
end
|
561
645
|
|
@@ -698,7 +782,7 @@ describe Puppet::HTTP::Client do
|
|
698
782
|
allow(http2).to receive(:started?).and_return(true)
|
699
783
|
|
700
784
|
|
701
|
-
pool = Puppet::Network::HTTP::Pool.new()
|
785
|
+
pool = Puppet::Network::HTTP::Pool.new(15)
|
702
786
|
client = Puppet::HTTP::Client.new(pool: pool)
|
703
787
|
|
704
788
|
# The "with_connection" method is required to yield started connections
|
@@ -746,4 +830,34 @@ describe Puppet::HTTP::Client do
|
|
746
830
|
client.get(uri)
|
747
831
|
end
|
748
832
|
end
|
833
|
+
|
834
|
+
context "persistent connections" do
|
835
|
+
before :each do
|
836
|
+
stub_request(:get, uri)
|
837
|
+
end
|
838
|
+
|
839
|
+
it 'defaults keepalive to http_keepalive_timeout' do
|
840
|
+
expect(client.pool.keepalive_timeout).to eq(Puppet[:http_keepalive_timeout])
|
841
|
+
end
|
842
|
+
|
843
|
+
it 'reuses a cached connection' do
|
844
|
+
allow(Puppet).to receive(:debug)
|
845
|
+
expect(Puppet).to receive(:debug).with(/^Creating new connection/)
|
846
|
+
expect(Puppet).to receive(:debug).with(/^Using cached connection/)
|
847
|
+
|
848
|
+
client.get(uri)
|
849
|
+
client.get(uri)
|
850
|
+
end
|
851
|
+
|
852
|
+
it 'can be disabled' do
|
853
|
+
Puppet[:http_keepalive_timeout] = 0
|
854
|
+
|
855
|
+
allow(Puppet).to receive(:debug)
|
856
|
+
expect(Puppet).to receive(:debug).with(/^Creating new connection/).twice
|
857
|
+
expect(Puppet).to receive(:debug).with(/^Using cached connection/).never
|
858
|
+
|
859
|
+
client.get(uri)
|
860
|
+
client.get(uri)
|
861
|
+
end
|
862
|
+
end
|
749
863
|
end
|