puppet 6.13.0-universal-darwin → 6.18.0-universal-darwin
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 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -32
- data/README.md +17 -24
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +58 -57
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +10 -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 +92 -12
- data/lib/puppet/environments.rb +4 -5
- 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/plugin.rb +2 -2
- data/lib/puppet/feature/base.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/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- 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 +263 -73
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +97 -12
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +249 -16
- data/lib/puppet/http/service/file_server.rb +141 -20
- data/lib/puppet/http/service/report.rb +47 -17
- data/lib/puppet/http/session.rb +96 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- 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 +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- 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/base_pool.rb +7 -2
- 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 +8 -5
- 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/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/evaluator_impl.rb +5 -5
- 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/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/groupadd.rb +9 -4
- 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/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/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/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +100 -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 +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +3 -1
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- 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 +81 -35
- 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 +21 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +3 -3
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +75 -64
- 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/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/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 +641 -511
- data/man/man5/puppet.conf.5 +75 -10
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- 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 +1 -1
- 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 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- 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/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/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
- data/spec/integration/application/agent_spec.rb +475 -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/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +47 -37
- 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 +93 -20
- 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 +6 -1
- 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/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -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/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +64 -46
- 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 +8 -0
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- 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 +10 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +321 -36
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -3
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -12
- data/spec/unit/http/service/compiler_spec.rb +332 -28
- data/spec/unit/http/service/file_server_spec.rb +100 -12
- data/spec/unit/http/service/report_spec.rb +19 -9
- data/spec/unit/http/service_spec.rb +94 -6
- data/spec/unit/http/session_spec.rb +159 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- 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/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http/pool_spec.rb +59 -13
- 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/group/groupadd_spec.rb +22 -8
- 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/gem_spec.rb +40 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- 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/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +243 -1
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/init_spec.rb +42 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +93 -18
- 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/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- 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 +99 -13
- 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 +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- 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 +3 -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 +102 -54
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- 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 +84 -52
- data/COMMITTERS.md +0 -244
- 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 -61
- 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
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
2
|
require 'puppet/http'
|
4
3
|
|
5
4
|
describe Puppet::HTTP::Service::FileServer do
|
@@ -27,14 +26,6 @@ describe Puppet::HTTP::Service::FileServer do
|
|
27
26
|
|
28
27
|
subject.get_file_content(path: '/:mount/:path', environment: environment) { |data| }
|
29
28
|
end
|
30
|
-
|
31
|
-
it 'includes the X-Puppet-Profiling header when Puppet[:profile] is true' do
|
32
|
-
stub_request(:get, uri).with(headers: {'X-Puppet-Version' => /./, 'User-Agent' => /./, 'X-Puppet-Profiling' => 'true'})
|
33
|
-
|
34
|
-
Puppet[:profile] = true
|
35
|
-
|
36
|
-
subject.get_file_content(path: '/:mount/:path', environment: environment) { |data| }
|
37
|
-
end
|
38
29
|
end
|
39
30
|
|
40
31
|
context 'when routing to the file service' do
|
@@ -54,6 +45,16 @@ describe Puppet::HTTP::Service::FileServer do
|
|
54
45
|
let(:filemetadata) { Puppet::FileServing::Metadata.new(path) }
|
55
46
|
let(:request_path) { "/:mount/#{path}"}
|
56
47
|
|
48
|
+
it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
|
49
|
+
stub_request(:get, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'}).
|
50
|
+
to_return(status: 200, body: filemetadata.render, headers: { 'Content-Type' => 'application/json' })
|
51
|
+
|
52
|
+
Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
|
53
|
+
Puppet[:profile] = true
|
54
|
+
|
55
|
+
subject.get_file_metadata(path: request_path, environment: environment)
|
56
|
+
end
|
57
|
+
|
57
58
|
it 'submits a request for file metadata to the server' do
|
58
59
|
stub_request(:get, url).with(
|
59
60
|
headers: {'Accept'=>'application/json, application/x-msgpack, text/pson',}
|
@@ -61,10 +62,19 @@ describe Puppet::HTTP::Service::FileServer do
|
|
61
62
|
status: 200, body: filemetadata.render, headers: { 'Content-Type' => 'application/json' }
|
62
63
|
)
|
63
64
|
|
64
|
-
metadata = subject.get_file_metadata(path: request_path, environment: environment)
|
65
|
+
_, metadata = subject.get_file_metadata(path: request_path, environment: environment)
|
65
66
|
expect(metadata.path).to eq(path)
|
66
67
|
end
|
67
68
|
|
69
|
+
it 'returns the request response' do
|
70
|
+
stub_request(:get, url).to_return(
|
71
|
+
status: 200, body: filemetadata.render, headers: { 'Content-Type' => 'application/json' }
|
72
|
+
)
|
73
|
+
|
74
|
+
resp, _ = subject.get_file_metadata(path: request_path, environment: environment)
|
75
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
76
|
+
end
|
77
|
+
|
68
78
|
it 'raises a protocol error if the Content-Type header is missing from the response' do
|
69
79
|
stub_request(:get, url).to_return(status: 200, body: '', headers: {})
|
70
80
|
|
@@ -117,6 +127,16 @@ describe Puppet::HTTP::Service::FileServer do
|
|
117
127
|
let(:formatter) { Puppet::Network::FormatHandler.format(:json) }
|
118
128
|
let(:request_path) { "/:mount/#{path}"}
|
119
129
|
|
130
|
+
it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
|
131
|
+
stub_request(:get, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'}).
|
132
|
+
to_return(status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' })
|
133
|
+
|
134
|
+
Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
|
135
|
+
Puppet[:profile] = true
|
136
|
+
|
137
|
+
subject.get_file_metadatas(path: request_path, environment: environment)
|
138
|
+
end
|
139
|
+
|
120
140
|
it 'submits a request for file metadata to the server' do
|
121
141
|
stub_request(:get, url).with(
|
122
142
|
headers: {'Accept'=>'application/json, application/x-msgpack, text/pson',}
|
@@ -124,10 +144,19 @@ describe Puppet::HTTP::Service::FileServer do
|
|
124
144
|
status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
|
125
145
|
)
|
126
146
|
|
127
|
-
metadatas = subject.get_file_metadatas(path: request_path, environment: environment)
|
147
|
+
_, metadatas = subject.get_file_metadatas(path: request_path, environment: environment)
|
128
148
|
expect(metadatas.first.path).to eq(path)
|
129
149
|
end
|
130
150
|
|
151
|
+
it 'returns the request response' do
|
152
|
+
stub_request(:get, url).to_return(
|
153
|
+
status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
|
154
|
+
)
|
155
|
+
|
156
|
+
resp, _ = subject.get_file_metadatas(path: request_path, environment: environment)
|
157
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
158
|
+
end
|
159
|
+
|
131
160
|
it 'automatically converts an array of parameters to the stringified query' do
|
132
161
|
url = "https://www.example.com/puppet/v3/file_metadatas/:mount/#{path}?checksum_type=md5&environment=testing&ignore=CVS&ignore=.git&ignore=.hg&links=manage&recurse=false&source_permissions=ignore"
|
133
162
|
stub_request(:get, url).with(
|
@@ -136,7 +165,7 @@ describe Puppet::HTTP::Service::FileServer do
|
|
136
165
|
status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
|
137
166
|
)
|
138
167
|
|
139
|
-
metadatas = subject.get_file_metadatas(path: request_path, environment: environment, ignore: ['CVS', '.git', '.hg'])
|
168
|
+
_, metadatas = subject.get_file_metadatas(path: request_path, environment: environment, ignore: ['CVS', '.git', '.hg'])
|
140
169
|
expect(metadatas.first.path).to eq(path)
|
141
170
|
end
|
142
171
|
|
@@ -188,6 +217,18 @@ describe Puppet::HTTP::Service::FileServer do
|
|
188
217
|
context 'getting file content' do
|
189
218
|
let(:uri) {"https://www.example.com:443/puppet/v3/file_content/:mount/:path?environment=testing"}
|
190
219
|
|
220
|
+
it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
|
221
|
+
stub_request(:get, uri).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'}).
|
222
|
+
to_return(status: 200, body: "and beyond")
|
223
|
+
|
224
|
+
Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
|
225
|
+
Puppet[:profile] = true
|
226
|
+
|
227
|
+
expect { |b|
|
228
|
+
subject.get_file_content(path: '/:mount/:path', environment: environment, &b)
|
229
|
+
}.to yield_with_args("and beyond")
|
230
|
+
end
|
231
|
+
|
191
232
|
it 'yields file content' do
|
192
233
|
stub_request(:get, uri).with do |request|
|
193
234
|
expect(request.headers).to include({'Accept' => 'application/octet-stream'})
|
@@ -198,6 +239,13 @@ describe Puppet::HTTP::Service::FileServer do
|
|
198
239
|
}.to yield_with_args("and beyond")
|
199
240
|
end
|
200
241
|
|
242
|
+
it 'returns the request response' do
|
243
|
+
stub_request(:get, uri)
|
244
|
+
|
245
|
+
resp = subject.get_file_content(path: '/:mount/:path', environment: environment) { |b| b }
|
246
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
247
|
+
end
|
248
|
+
|
201
249
|
it 'raises response error if unsuccessful' do
|
202
250
|
stub_request(:get, uri).to_return(status: [400, 'Bad Request'])
|
203
251
|
|
@@ -216,4 +264,44 @@ describe Puppet::HTTP::Service::FileServer do
|
|
216
264
|
}.to raise_error(ArgumentError, 'Path must start with a slash')
|
217
265
|
end
|
218
266
|
end
|
267
|
+
|
268
|
+
context 'getting static file content' do
|
269
|
+
let(:code_id) { "0fc72115-adc6-4b1a-aa50-8f31b3ece440" }
|
270
|
+
let(:uri) { "https://www.example.com:443/puppet/v3/static_file_content/:mount/:path?environment=testing&code_id=#{code_id}"}
|
271
|
+
|
272
|
+
it 'yields file content' do
|
273
|
+
stub_request(:get, uri).with do |request|
|
274
|
+
expect(request.headers).to include({'Accept' => 'application/octet-stream'})
|
275
|
+
end.to_return(status: 200, body: "and beyond")
|
276
|
+
|
277
|
+
expect { |b|
|
278
|
+
subject.get_static_file_content(path: '/:mount/:path', environment: environment, code_id: code_id, &b)
|
279
|
+
}.to yield_with_args("and beyond")
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'returns the request response' do
|
283
|
+
stub_request(:get, uri)
|
284
|
+
|
285
|
+
resp = subject.get_static_file_content(path: '/:mount/:path', environment: environment, code_id: code_id) { |b| b }
|
286
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
287
|
+
end
|
288
|
+
|
289
|
+
it 'raises response error if unsuccessful' do
|
290
|
+
stub_request(:get, uri).to_return(status: [400, 'Bad Request'])
|
291
|
+
|
292
|
+
expect {
|
293
|
+
subject.get_static_file_content(path: '/:mount/:path', environment: environment, code_id: code_id) { |data| }
|
294
|
+
}.to raise_error do |err|
|
295
|
+
expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError)
|
296
|
+
expect(err.message).to eq('Bad Request')
|
297
|
+
expect(err.response.code).to eq(400)
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'raises response error if path is relative' do
|
302
|
+
expect {
|
303
|
+
subject.get_static_file_content(path: 'relative_path', environment: environment, code_id: code_id) { |data| }
|
304
|
+
}.to raise_error(ArgumentError, 'Path must start with a slash')
|
305
|
+
end
|
306
|
+
end
|
219
307
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
2
|
require 'puppet/http'
|
4
3
|
|
5
4
|
describe Puppet::HTTP::Service::Report do
|
@@ -25,14 +24,6 @@ describe Puppet::HTTP::Service::Report do
|
|
25
24
|
|
26
25
|
subject.put_report('report', report, environment: environment)
|
27
26
|
end
|
28
|
-
|
29
|
-
it 'includes the X-Puppet-Profiling header when Puppet[:profile] is true' do
|
30
|
-
stub_request(:put, uri).with(headers: {'X-Puppet-Version' => /./, 'User-Agent' => /./, 'X-Puppet-Profiling' => 'true'})
|
31
|
-
|
32
|
-
Puppet[:profile] = true
|
33
|
-
|
34
|
-
subject.put_report('report', report, environment: environment)
|
35
|
-
end
|
36
27
|
end
|
37
28
|
|
38
29
|
context 'when routing to the report service' do
|
@@ -60,6 +51,15 @@ describe Puppet::HTTP::Service::Report do
|
|
60
51
|
context 'when submitting a report' do
|
61
52
|
let(:url) { "https://www.example.com/puppet/v3/report/infinity?environment=testing" }
|
62
53
|
|
54
|
+
it 'includes puppet headers set via the :http_extra_headers and :profile settings' do
|
55
|
+
stub_request(:put, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'})
|
56
|
+
|
57
|
+
Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
|
58
|
+
Puppet[:profile] = true
|
59
|
+
|
60
|
+
subject.put_report('infinity', report, environment: environment)
|
61
|
+
end
|
62
|
+
|
63
63
|
it 'submits a report to the "report" endpoint' do
|
64
64
|
stub_request(:put, url)
|
65
65
|
.with(
|
@@ -79,6 +79,16 @@ describe Puppet::HTTP::Service::Report do
|
|
79
79
|
subject.put_report('node name', report, environment: environment)
|
80
80
|
end
|
81
81
|
|
82
|
+
it 'returns the response whose body contains the list of report processors' do
|
83
|
+
body = "[\"store\":\"http\"]"
|
84
|
+
stub_request(:put, url)
|
85
|
+
.to_return(status: 200, body: body, headers: {'Content-Type' => 'application/json'})
|
86
|
+
|
87
|
+
resp = subject.put_report('infinity', report, environment: environment)
|
88
|
+
expect(resp.body).to eq(body)
|
89
|
+
expect(resp).to be_a(Puppet::HTTP::Response)
|
90
|
+
end
|
91
|
+
|
82
92
|
it 'raises response error if unsuccessful' do
|
83
93
|
stub_request(:put, url).to_return(status: [400, 'Bad Request'], headers: {'X-Puppet-Version' => '6.1.8' })
|
84
94
|
|
@@ -1,19 +1,78 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
2
|
require 'puppet/http'
|
3
|
+
require 'puppet/file_serving'
|
4
|
+
require 'puppet/file_serving/content'
|
5
|
+
require 'puppet/file_serving/metadata'
|
4
6
|
|
5
7
|
describe Puppet::HTTP::Service do
|
6
8
|
let(:ssl_context) { Puppet::SSL::SSLContext.new }
|
7
9
|
let(:client) { Puppet::HTTP::Client.new(ssl_context: ssl_context) }
|
10
|
+
let(:session) { Puppet::HTTP::Session.new(client, []) }
|
8
11
|
let(:url) { URI.parse('https://www.example.com') }
|
9
|
-
let(:service) { described_class.new(client, url) }
|
12
|
+
let(:service) { described_class.new(client, session, url) }
|
13
|
+
|
14
|
+
class TestService < Puppet::HTTP::Service
|
15
|
+
def get_test(ssl_context)
|
16
|
+
@client.get(
|
17
|
+
url,
|
18
|
+
headers: add_puppet_headers({'Default-Header' => 'default-value'}),
|
19
|
+
options: {ssl_context: ssl_context}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def mime_types(model)
|
24
|
+
get_mime_types(model)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when modifying headers for an http request' do
|
29
|
+
let(:service) { TestService.new(client, session, url) }
|
30
|
+
|
31
|
+
it 'adds custom user-specified headers' do
|
32
|
+
stub_request(:get, "https://www.example.com/").
|
33
|
+
with( headers: { 'Default-Header'=>'default-value', 'Header2'=>'newvalue' })
|
34
|
+
|
35
|
+
Puppet[:http_extra_headers] = 'header2:newvalue'
|
36
|
+
|
37
|
+
service.get_test(ssl_context)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'adds X-Puppet-Profiling header if set' do
|
41
|
+
stub_request(:get, "https://www.example.com/").
|
42
|
+
with( headers: { 'Default-Header'=>'default-value', 'X-Puppet-Profiling'=>'true' })
|
43
|
+
|
44
|
+
Puppet[:profile] = true
|
45
|
+
|
46
|
+
service.get_test(ssl_context)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'ignores a custom header does not have a value' do
|
50
|
+
stub_request(:get, "https://www.example.com/").with do |request|
|
51
|
+
expect(request.headers).to include({'Default-Header' => 'default-value'})
|
52
|
+
expect(request.headers).to_not include('header-with-no-value')
|
53
|
+
end
|
54
|
+
|
55
|
+
Puppet[:http_extra_headers] = 'header-with-no-value:'
|
56
|
+
|
57
|
+
service.get_test(ssl_context)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'ignores a custom header that already exists (case insensitive) in the header hash' do
|
61
|
+
stub_request(:get, "https://www.example.com/").
|
62
|
+
with( headers: { 'Default-Header'=>'default-value' })
|
63
|
+
|
64
|
+
Puppet[:http_extra_headers] = 'default-header:wrongvalue'
|
65
|
+
|
66
|
+
service.get_test(ssl_context)
|
67
|
+
end
|
68
|
+
end
|
10
69
|
|
11
70
|
it "returns a URI containing the base URL and path" do
|
12
71
|
expect(service.with_base_url('/puppet/v3')).to eq(URI.parse("https://www.example.com/puppet/v3"))
|
13
72
|
end
|
14
73
|
|
15
74
|
it "doesn't modify frozen the base URL" do
|
16
|
-
service = described_class.new(client, url.freeze)
|
75
|
+
service = described_class.new(client, session, url.freeze)
|
17
76
|
service.with_base_url('/puppet/v3')
|
18
77
|
end
|
19
78
|
|
@@ -22,21 +81,21 @@ describe Puppet::HTTP::Service do
|
|
22
81
|
end
|
23
82
|
|
24
83
|
it "connects to the base URL with a nil ssl context" do
|
25
|
-
expect(client).to receive(:connect).with(url, ssl_context: nil)
|
84
|
+
expect(client).to receive(:connect).with(url, options: {ssl_context: nil})
|
26
85
|
|
27
86
|
service.connect
|
28
87
|
end
|
29
88
|
|
30
89
|
it "accepts an optional ssl_context" do
|
31
90
|
other_ctx = Puppet::SSL::SSLContext.new
|
32
|
-
expect(client).to receive(:connect).with(url, ssl_context: other_ctx)
|
91
|
+
expect(client).to receive(:connect).with(url, options: {ssl_context: other_ctx})
|
33
92
|
|
34
93
|
service.connect(ssl_context: other_ctx)
|
35
94
|
end
|
36
95
|
|
37
96
|
it 'raises for unknown service names' do
|
38
97
|
expect {
|
39
|
-
described_class.create_service(client, :westbound)
|
98
|
+
described_class.create_service(client, session, :westbound)
|
40
99
|
}.to raise_error(ArgumentError, "Unknown service westbound")
|
41
100
|
end
|
42
101
|
|
@@ -53,4 +112,33 @@ describe Puppet::HTTP::Service do
|
|
53
112
|
it "returns false for unknown service names" do
|
54
113
|
expect(described_class.valid_name?(:westbound)).to eq(false)
|
55
114
|
end
|
115
|
+
|
116
|
+
it 'returns different mime types for different models' do
|
117
|
+
mimes = if Puppet.features.msgpack?
|
118
|
+
%w[application/json application/x-msgpack text/pson]
|
119
|
+
else
|
120
|
+
%w[application/json text/pson]
|
121
|
+
end
|
122
|
+
|
123
|
+
service = TestService.new(client, session, url)
|
124
|
+
[
|
125
|
+
Puppet::Node,
|
126
|
+
Puppet::Node::Facts,
|
127
|
+
Puppet::Transaction::Report,
|
128
|
+
Puppet::FileServing::Metadata,
|
129
|
+
Puppet::Status
|
130
|
+
].each do |model|
|
131
|
+
expect(service.mime_types(model)).to eq(mimes)
|
132
|
+
end
|
133
|
+
|
134
|
+
# These are special
|
135
|
+
expect(service.mime_types(Puppet::FileServing::Content)).to eq(%w[application/octet-stream])
|
136
|
+
|
137
|
+
catalog_mimes = if Puppet.features.msgpack?
|
138
|
+
%w[application/vnd.puppet.rich+json application/json application/vnd.puppet.rich+msgpack application/x-msgpack text/pson]
|
139
|
+
else
|
140
|
+
%w[application/vnd.puppet.rich+json application/json application/vnd.puppet.rich+msgpack text/pson]
|
141
|
+
end
|
142
|
+
expect(service.mime_types(Puppet::Resource::Catalog)).to eq(catalog_mimes)
|
143
|
+
end
|
56
144
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'webmock/rspec'
|
3
2
|
require 'puppet/http'
|
4
3
|
|
5
4
|
describe Puppet::HTTP::Session do
|
@@ -10,10 +9,14 @@ describe Puppet::HTTP::Session do
|
|
10
9
|
double('good', url: uri, connect: nil)
|
11
10
|
}
|
12
11
|
let(:bad_service) {
|
12
|
+
create_bad_service
|
13
|
+
}
|
14
|
+
|
15
|
+
def create_bad_service(failure_message = 'whoops')
|
13
16
|
service = double('bad', url: uri)
|
14
|
-
allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError,
|
17
|
+
allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError, failure_message)
|
15
18
|
service
|
16
|
-
|
19
|
+
end
|
17
20
|
|
18
21
|
class DummyResolver < Puppet::HTTP::Resolver
|
19
22
|
attr_reader :count
|
@@ -23,21 +26,19 @@ describe Puppet::HTTP::Session do
|
|
23
26
|
@count = 0
|
24
27
|
end
|
25
28
|
|
26
|
-
def resolve(session, name, ssl_context: nil)
|
29
|
+
def resolve(session, name, ssl_context: nil, error_handler: nil)
|
27
30
|
@count += 1
|
28
|
-
return @service if check_connection?(session, @service, ssl_context: ssl_context)
|
31
|
+
return @service if check_connection?(session, @service, ssl_context: ssl_context, error_handler: error_handler)
|
29
32
|
end
|
30
33
|
end
|
31
34
|
|
32
35
|
context 'when routing' do
|
33
36
|
it 'returns the first resolved service' do
|
34
|
-
Puppet[:log_level] = :debug
|
35
37
|
resolvers = [DummyResolver.new(bad_service), DummyResolver.new(good_service)]
|
36
38
|
session = described_class.new(client, resolvers)
|
37
39
|
resolved = session.route_to(:ca)
|
38
40
|
|
39
41
|
expect(resolved).to eq(good_service)
|
40
|
-
expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Connection to #{uri} failed, trying next route: whoops"))
|
41
42
|
end
|
42
43
|
|
43
44
|
it 'only resolves once per session' do
|
@@ -58,6 +59,29 @@ describe Puppet::HTTP::Session do
|
|
58
59
|
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
59
60
|
end
|
60
61
|
|
62
|
+
it 'logs all routing failures as errors when there are no more routes' do
|
63
|
+
resolvers = [DummyResolver.new(create_bad_service('whoops1')), DummyResolver.new(create_bad_service('whoops2'))]
|
64
|
+
session = described_class.new(client, resolvers)
|
65
|
+
|
66
|
+
expect {
|
67
|
+
session.route_to(:ca)
|
68
|
+
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
69
|
+
|
70
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: "whoops1"),
|
71
|
+
an_object_having_attributes(level: :err, message: "whoops2"))
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'logs routing failures as debug until routing succeeds' do
|
75
|
+
Puppet[:log_level] = 'debug'
|
76
|
+
|
77
|
+
resolvers = [DummyResolver.new(bad_service), DummyResolver.new(good_service)]
|
78
|
+
session = described_class.new(client, resolvers)
|
79
|
+
session.route_to(:ca)
|
80
|
+
|
81
|
+
expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Connection to #{uri} failed, trying next route: whoops"))
|
82
|
+
expect(@logs).to_not include(an_object_having_attributes(level: :err))
|
83
|
+
end
|
84
|
+
|
61
85
|
it 'accepts an ssl context to use when connecting' do
|
62
86
|
alt_context = Puppet::SSL::SSLContext.new
|
63
87
|
expect(good_service).to receive(:connect).with(ssl_context: alt_context)
|
@@ -155,7 +179,6 @@ describe Puppet::HTTP::Session do
|
|
155
179
|
}.to raise_error(Puppet::Error, "Could not select a functional puppet master from server_list: 'foo.example.com,bar.example.com'")
|
156
180
|
end
|
157
181
|
|
158
|
-
|
159
182
|
it "raises when there are no more routes" do
|
160
183
|
allow_any_instance_of(Net::HTTP).to receive(:start).and_raise(Errno::EHOSTUNREACH)
|
161
184
|
session = client.create_session
|
@@ -164,5 +187,133 @@ describe Puppet::HTTP::Session do
|
|
164
187
|
session.route_to(:ca)
|
165
188
|
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
166
189
|
end
|
190
|
+
|
191
|
+
Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
|
192
|
+
it "resolves #{name} using server_list" do
|
193
|
+
Puppet[:server_list] = 'apple.example.com'
|
194
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
195
|
+
|
196
|
+
session.route_to(name)
|
197
|
+
|
198
|
+
expect(req).to have_been_requested
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'does not use server_list to resolve the ca service when ca_server is explicitly set' do
|
203
|
+
Puppet[:ca_server] = 'banana.example.com'
|
204
|
+
|
205
|
+
expect(session.route_to(:ca).url.to_s).to eq("https://banana.example.com:8140/puppet-ca/v1")
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'does not use server_list to resolve the report service when the report_server is explicitly set' do
|
209
|
+
Puppet[:report_server] = 'cherry.example.com'
|
210
|
+
|
211
|
+
expect(session.route_to(:report).url.to_s).to eq("https://cherry.example.com:8140/puppet/v3")
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'resolves once for all services in a session' do
|
215
|
+
Puppet[:server_list] = 'apple.example.com'
|
216
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
217
|
+
|
218
|
+
Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
|
219
|
+
session.route_to(name)
|
220
|
+
end
|
221
|
+
|
222
|
+
expect(req).to have_been_requested
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'resolves server_list for each new session' do
|
226
|
+
Puppet[:server_list] = 'apple.example.com'
|
227
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
228
|
+
|
229
|
+
client.create_session.route_to(:puppet)
|
230
|
+
client.create_session.route_to(:puppet)
|
231
|
+
|
232
|
+
expect(req).to have_been_requested.twice
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
context 'when retrieving capabilities' do
|
237
|
+
let(:session) do
|
238
|
+
resolver = DummyResolver.new(good_service)
|
239
|
+
described_class.new(client, [resolver])
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'raises for unknown service names' do
|
243
|
+
expect {
|
244
|
+
session = described_class.new(client, [])
|
245
|
+
session.supports?(:westbound, 'a capability')
|
246
|
+
}.to raise_error(ArgumentError, "Unknown service westbound")
|
247
|
+
end
|
248
|
+
|
249
|
+
context 'locales' do
|
250
|
+
it 'does not support locales if the cached service has not been resolved' do
|
251
|
+
session = described_class.new(client, [])
|
252
|
+
|
253
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
254
|
+
end
|
255
|
+
|
256
|
+
it "supports locales if the cached service's version is 5.3.4 or greater" do
|
257
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.3.4'}, uri)
|
258
|
+
|
259
|
+
session.route_to(:puppet)
|
260
|
+
session.process_response(response)
|
261
|
+
|
262
|
+
expect(session).to be_supports(:puppet, 'locales')
|
263
|
+
end
|
264
|
+
|
265
|
+
it "does not support locales if the cached service's version is 5.3.3" do
|
266
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.3.3'}, uri)
|
267
|
+
|
268
|
+
session.route_to(:puppet)
|
269
|
+
session.process_response(response)
|
270
|
+
|
271
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
272
|
+
end
|
273
|
+
|
274
|
+
it "does not support locales if the cached service's version is missing" do
|
275
|
+
response = Puppet::HTTP::Response.new({}, uri)
|
276
|
+
|
277
|
+
session.route_to(:puppet)
|
278
|
+
session.process_response(response)
|
279
|
+
|
280
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
context 'json' do
|
285
|
+
it 'does not support json if the cached service has not been resolved' do
|
286
|
+
session = described_class.new(client, [])
|
287
|
+
|
288
|
+
expect(session).to_not be_supports(:puppet, 'json')
|
289
|
+
end
|
290
|
+
|
291
|
+
it "supports json if the cached service's version is 5 or greater" do
|
292
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.5.12'}, uri)
|
293
|
+
|
294
|
+
session.route_to(:puppet)
|
295
|
+
session.process_response(response)
|
296
|
+
|
297
|
+
expect(session).to be_supports(:puppet, 'json')
|
298
|
+
end
|
299
|
+
|
300
|
+
it "does not support json if the cached service's version is less than 5.0" do
|
301
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '4.10.1'}, uri)
|
302
|
+
|
303
|
+
session.route_to(:puppet)
|
304
|
+
session.process_response(response)
|
305
|
+
|
306
|
+
expect(session).to_not be_supports(:puppet, 'json')
|
307
|
+
end
|
308
|
+
|
309
|
+
it "supports json if the cached service's version is missing" do
|
310
|
+
response = Puppet::HTTP::Response.new({}, uri)
|
311
|
+
|
312
|
+
session.route_to(:puppet)
|
313
|
+
session.process_response(response)
|
314
|
+
|
315
|
+
expect(session).to be_supports(:puppet, 'json')
|
316
|
+
end
|
317
|
+
end
|
167
318
|
end
|
168
319
|
end
|