puppet 6.11.1 → 6.16.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +3 -8
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +1 -0
- data/Gemfile.lock +39 -36
- data/README.md +17 -24
- data/ext/build_defaults.yaml +1 -0
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +25 -20
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +12 -14
- 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/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +85 -83
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +158 -40
- data/lib/puppet/environments.rb +30 -20
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/face/facts.rb +8 -5
- 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/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +13 -9
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +31 -86
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +7 -0
- data/lib/puppet/http/client.rb +341 -54
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +34 -0
- data/lib/puppet/http/resolver.rb +57 -1
- data/lib/puppet/http/resolver/server_list.rb +98 -0
- data/lib/puppet/http/resolver/settings.rb +23 -2
- data/lib/puppet/http/resolver/srv.rb +36 -4
- data/lib/puppet/http/response.rb +68 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +179 -3
- data/lib/puppet/http/service/ca.rb +84 -21
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +66 -0
- data/lib/puppet/http/session.rb +106 -31
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.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 +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +4 -4
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- 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/network/http/base_pool.rb +19 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +182 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +24 -8
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +9 -29
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
- data/lib/puppet/parser/compiler.rb +42 -32
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +30 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- 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 +78 -4
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- 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/pkg.rb +18 -5
- 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 +5 -5
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +108 -24
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +23 -5
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -8
- data/lib/puppet/reports/http.rb +13 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +32 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_provider.rb +20 -0
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +7 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +7 -2
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/file/source.rb +49 -58
- data/lib/puppet/type/group.rb +5 -4
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/user.rb +6 -30
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/logging.rb +30 -18
- 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 +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +50 -20
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +640 -521
- data/man/man5/puppet.conf.5 +88 -9
- data/man/man8/puppet-agent.8 +6 -6
- 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 +1 -1
- 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/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.json +76 -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 -102
- 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 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- 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 -102
- data/spec/integration/application/agent_spec.rb +394 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/http/client_spec.rb +154 -0
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +51 -0
- data/spec/integration/network/http_pool_spec.rb +76 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +20 -9
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +400 -406
- data/spec/unit/context/trusted_information_spec.rb +17 -0
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +38 -4
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +395 -27
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +81 -12
- data/spec/unit/http/response_spec.rb +69 -0
- data/spec/unit/http/service/ca_spec.rb +100 -7
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +118 -0
- data/spec/unit/http/service_spec.rb +117 -4
- data/spec/unit/http/session_spec.rb +237 -19
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- 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 +167 -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/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/network/http/connection_spec.rb +549 -176
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- 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 +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- 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 +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -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/pkg_spec.rb +15 -1
- 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 +9 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/init_spec.rb +1 -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 +92 -12
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +21 -8
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- 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/certificate_spec.rb +7 -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 +71 -0
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +4 -0
- data/spec/unit/transaction_spec.rb +45 -1
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +86 -35
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- 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 +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +6 -35
- metadata +92 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -82,6 +82,9 @@ describe Puppet::Util::Windows::ADSI::Group,
|
|
82
82
|
it 'should return a list of members resolvable with Puppet::Util::Windows::ADSI::Group.name_sid_hash' do
|
83
83
|
temp_groupname = "g#{SecureRandom.uuid}"
|
84
84
|
temp_username = "u#{SecureRandom.uuid}"[0..12]
|
85
|
+
# From https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements
|
86
|
+
specials = "~!@#$%^&*_-+=`|\(){}[]:;\"'<>,.?/"
|
87
|
+
temp_password = "p#{SecureRandom.uuid[0..7]}-#{SecureRandom.uuid.upcase[0..7]}-#{specials[rand(specials.length)]}"
|
85
88
|
|
86
89
|
# select a virtual account that requires an authority to be able to resolve to SID
|
87
90
|
# the Dhcp service is chosen for no particular reason aside from it's a service available on all Windows versions
|
@@ -110,6 +113,8 @@ describe Puppet::Util::Windows::ADSI::Group,
|
|
110
113
|
begin
|
111
114
|
# :SidTypeUser as user on localhost, can be resolved with or without authority prefix
|
112
115
|
user = Puppet::Util::Windows::ADSI::User.create(temp_username)
|
116
|
+
# appveyor sometimes requires a password
|
117
|
+
user.password = temp_password
|
113
118
|
user.commit()
|
114
119
|
users.push({ :sid => user.sid.sid, :name => Puppet::Util::Windows::ADSI.computer_name + '\\' + temp_username })
|
115
120
|
|
@@ -160,7 +165,7 @@ describe Puppet::Util::Windows::ADSI::Group,
|
|
160
165
|
|
161
166
|
# unresolvable SID
|
162
167
|
expect(admins.members[1].sid).to eq('S-1-5-21-3661721861-956923663-2119435483-1112')
|
163
|
-
expect(admins.members[1].account).to eq('S-1-5-21-3661721861-956923663-2119435483-1112
|
168
|
+
expect(admins.members[1].account).to eq('S-1-5-21-3661721861-956923663-2119435483-1112')
|
164
169
|
expect(admins.members[1].account_type).to eq(:SidTypeUnknown)
|
165
170
|
end
|
166
171
|
|
data/spec/lib/puppet/test_ca.rb
CHANGED
@@ -21,9 +21,9 @@ module Puppet
|
|
21
21
|
id
|
22
22
|
end
|
23
23
|
|
24
|
-
def initialize
|
24
|
+
def initialize(name = 'Test CA')
|
25
25
|
@digest = OpenSSL::Digest::SHA256.new
|
26
|
-
info = create_cacert(
|
26
|
+
info = create_cacert(name)
|
27
27
|
@key = info[:private_key]
|
28
28
|
@ca_cert = info[:cert]
|
29
29
|
@ca_crl = create_crl(@ca_cert, @key)
|
@@ -6,25 +6,36 @@ class PuppetSpec::HTTPSServer
|
|
6
6
|
|
7
7
|
attr_reader :ca_cert, :ca_crl, :server_cert, :server_key
|
8
8
|
|
9
|
-
def initialize
|
10
|
-
@ca_cert = cert_fixture('ca.pem')
|
11
|
-
@ca_crl = crl_fixture('crl.pem')
|
12
|
-
@server_key = key_fixture('127.0.0.1-key.pem')
|
13
|
-
@server_cert = cert_fixture('127.0.0.1.pem')
|
9
|
+
def initialize(ca_cert: nil, ca_crl: nil, server_key: nil, server_cert: nil)
|
10
|
+
@ca_cert = ca_cert || cert_fixture('ca.pem')
|
11
|
+
@ca_crl = ca_crl || crl_fixture('crl.pem')
|
12
|
+
@server_key = server_key || key_fixture('127.0.0.1-key.pem')
|
13
|
+
@server_cert = server_cert || cert_fixture('127.0.0.1.pem')
|
14
14
|
@config = WEBrick::Config::HTTP.dup
|
15
15
|
end
|
16
16
|
|
17
|
-
def handle_request(ctx, ssl)
|
17
|
+
def handle_request(ctx, ssl, response_proc)
|
18
18
|
req = WEBrick::HTTPRequest.new(@config)
|
19
19
|
req.parse(ssl)
|
20
20
|
|
21
|
+
# always drain request body
|
22
|
+
req.body
|
23
|
+
|
21
24
|
res = WEBrick::HTTPResponse.new(@config)
|
22
25
|
res.status = 200
|
23
26
|
res.body = 'OK'
|
27
|
+
# The server explicitly closes the connection after handling it,
|
28
|
+
# so explicitly tell the client we're not going to keep it open.
|
29
|
+
# Without this, ruby will add `Connection: Keep-Alive`, which
|
30
|
+
# confuses the client when it tries to reuse the half-closed
|
31
|
+
# connection.
|
32
|
+
res['Connection'] = 'close'
|
33
|
+
response_proc.call(req, res) if response_proc
|
34
|
+
|
24
35
|
res.send_response(ssl)
|
25
36
|
end
|
26
37
|
|
27
|
-
def start_server(ctx_proc: nil, &block)
|
38
|
+
def start_server(ctx_proc: nil, response_proc: nil, &block)
|
28
39
|
errors = []
|
29
40
|
|
30
41
|
IO.pipe {|stop_pipe_r, stop_pipe_w|
|
@@ -50,11 +61,11 @@ class PuppetSpec::HTTPSServer
|
|
50
61
|
|
51
62
|
loop do
|
52
63
|
readable, = IO.select([ssls, stop_pipe_r])
|
53
|
-
break if readable.include?
|
64
|
+
break if readable.include?(stop_pipe_r)
|
54
65
|
|
55
66
|
ssl = ssls.accept
|
56
67
|
begin
|
57
|
-
handle_request(ctx, ssl)
|
68
|
+
handle_request(ctx, ssl, response_proc)
|
58
69
|
ensure
|
59
70
|
ssl.close
|
60
71
|
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'webrick'
|
3
|
+
require "webrick/ssl"
|
4
|
+
|
5
|
+
class PuppetSpec::Puppetserver
|
6
|
+
include PuppetSpec::Fixtures
|
7
|
+
include PuppetSpec::Files
|
8
|
+
|
9
|
+
attr_reader :ca_cert, :ca_crl, :server_cert, :server_key
|
10
|
+
|
11
|
+
class NodeServlet < WEBrick::HTTPServlet::AbstractServlet
|
12
|
+
def do_GET request, response
|
13
|
+
node = Puppet::Node.new(Puppet[:certname])
|
14
|
+
response.body = node.render(:json)
|
15
|
+
response['Content-Type'] = 'application/json'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class CatalogServlet < WEBrick::HTTPServlet::AbstractServlet
|
20
|
+
def do_POST request, response
|
21
|
+
response['Content-Type'] = 'application/json'
|
22
|
+
catalog = Puppet::Resource::Catalog.new(Puppet[:certname], 'production')
|
23
|
+
response.body = catalog.render(:json)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class FileMetadatasServlet < WEBrick::HTTPServlet::AbstractServlet
|
28
|
+
def do_GET request, response
|
29
|
+
response['Content-Type'] = 'application/json'
|
30
|
+
response.body = "[{\"path\":\"/etc/puppetlabs/code/environments/production/modules\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-03-06 20:14:25 UTC\"},\"type\":\"directory\",\"destination\":null}]"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class ReportServlet < WEBrick::HTTPServlet::AbstractServlet
|
35
|
+
def do_PUT request, response
|
36
|
+
response['Content-Type'] = 'application/json'
|
37
|
+
response.body = "[]"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class StaticFileContentServlet < WEBrick::HTTPServlet::AbstractServlet
|
42
|
+
def do_GET request, response
|
43
|
+
response.status = 404
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class FilebucketServlet < WEBrick::HTTPServlet::AbstractServlet
|
48
|
+
def do_GET request, response
|
49
|
+
end
|
50
|
+
def do_PUT request, response
|
51
|
+
response['Content-Type'] = 'application/octet-stream'
|
52
|
+
end
|
53
|
+
def do_HEAD request, response
|
54
|
+
response.status = 404
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def initialize
|
59
|
+
@ca_cert = cert_fixture('ca.pem')
|
60
|
+
@ca_crl = crl_fixture('crl.pem')
|
61
|
+
@server_key = key_fixture('127.0.0.1-key.pem')
|
62
|
+
@server_cert = cert_fixture('127.0.0.1.pem')
|
63
|
+
@path = tmpfile('webrick')
|
64
|
+
|
65
|
+
@https = WEBrick::HTTPServer.new(
|
66
|
+
BindAddress: "127.0.0.1",
|
67
|
+
Port: 0, # webrick will choose the first available port, and set it in the config
|
68
|
+
SSLEnable: true,
|
69
|
+
SSLStartImmediately: true,
|
70
|
+
SSLCACertificateFile: File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'ca.pem'),
|
71
|
+
SSLCertificate: @server_cert,
|
72
|
+
SSLPrivateKey: @server_key,
|
73
|
+
Logger: WEBrick::Log.new(@path),
|
74
|
+
AccessLog: [
|
75
|
+
[@path, WEBrick::AccessLog::COMBINED_LOG_FORMAT],
|
76
|
+
]
|
77
|
+
)
|
78
|
+
|
79
|
+
trap('INT') do
|
80
|
+
@https.shutdown
|
81
|
+
end
|
82
|
+
|
83
|
+
# Enable this line for more detailed webrick logging
|
84
|
+
# @https.logger.level = 5 # DEBUG
|
85
|
+
end
|
86
|
+
|
87
|
+
def start_server(mounts: {}, &block)
|
88
|
+
register_mounts(mounts: mounts)
|
89
|
+
|
90
|
+
Thread.new do
|
91
|
+
@https.start
|
92
|
+
end
|
93
|
+
|
94
|
+
begin
|
95
|
+
yield @https.config[:Port]
|
96
|
+
ensure
|
97
|
+
@https.shutdown
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def register_mounts(mounts: {})
|
102
|
+
register_mount('/status/v1/simple/master', proc { |req, res| }, nil)
|
103
|
+
register_mount('/puppet/v3/node', mounts[:node], NodeServlet)
|
104
|
+
register_mount('/puppet/v3/catalog', mounts[:catalog], CatalogServlet)
|
105
|
+
register_mount('/puppet/v3/file_metadatas', mounts[:file_metadatas], FileMetadatasServlet)
|
106
|
+
register_mount('/puppet/v3/static_file_content', mounts[:static_file_content], StaticFileContentServlet)
|
107
|
+
register_mount('/puppet/v3/report', mounts[:report], ReportServlet)
|
108
|
+
register_mount('/puppet/v3/file_bucket_file', mounts[:filebucket], FilebucketServlet)
|
109
|
+
end
|
110
|
+
|
111
|
+
def register_mount(path, user_proc, default_servlet)
|
112
|
+
handler = if user_proc
|
113
|
+
WEBrick::HTTPServlet::ProcHandler.new(user_proc)
|
114
|
+
else
|
115
|
+
default_servlet
|
116
|
+
end
|
117
|
+
@https.mount(path, handler)
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.shared_context('https client') do
|
4
|
+
before :all do
|
5
|
+
WebMock.disable!
|
6
|
+
end
|
7
|
+
|
8
|
+
after :all do
|
9
|
+
WebMock.enable!
|
10
|
+
end
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
# make sure we don't take too long
|
14
|
+
Puppet[:http_connect_timeout] = '5s'
|
15
|
+
Puppet[:server] = '127.0.0.1'
|
16
|
+
Puppet[:certname] = '127.0.0.1'
|
17
|
+
|
18
|
+
Puppet[:localcacert] = File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'ca.pem')
|
19
|
+
Puppet[:hostcrl] = File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'crl.pem')
|
20
|
+
Puppet[:hostprivkey] = File.join(PuppetSpec::FIXTURE_DIR, 'ssl', '127.0.0.1-key.pem')
|
21
|
+
Puppet[:hostcert] = File.join(PuppetSpec::FIXTURE_DIR, 'ssl', '127.0.0.1.pem')
|
22
|
+
|
23
|
+
# set in memory facts since certname is changed above
|
24
|
+
facts = Puppet::Node::Facts.new(Puppet[:certname])
|
25
|
+
Puppet::Node::Facts.indirection.save(facts)
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:https_server) { PuppetSpec::HTTPSServer.new }
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -159,10 +159,14 @@ RSpec.configure do |config|
|
|
159
159
|
Puppet::Test::TestHelper.before_each_test()
|
160
160
|
end
|
161
161
|
|
162
|
+
# Facter 2 uses two versions of the GCE API, so match using regex
|
163
|
+
PUPPET_FACTER_2_GCE_URL = %r{^http://metadata/computeMetadata/v1(beta1)?}.freeze
|
164
|
+
PUPPET_FACTER_3_GCE_URL = "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=json".freeze
|
165
|
+
|
162
166
|
config.around :each do |example|
|
163
167
|
# Ignore requests from Facter GCE fact in Travis
|
164
|
-
stub_request(:get,
|
165
|
-
stub_request(:get,
|
168
|
+
stub_request(:get, PUPPET_FACTER_2_GCE_URL)
|
169
|
+
stub_request(:get, PUPPET_FACTER_3_GCE_URL)
|
166
170
|
|
167
171
|
# Enable VCR if the example is tagged with `:vcr` metadata.
|
168
172
|
if example.metadata[:vcr]
|
data/spec/unit/agent_spec.rb
CHANGED
@@ -179,37 +179,78 @@ describe Puppet::Agent do
|
|
179
179
|
expect(@agent.run).to eq(:result)
|
180
180
|
end
|
181
181
|
|
182
|
+
describe "and a puppet agent is already running" do
|
183
|
+
before(:each) do
|
184
|
+
allow_any_instance_of(Object).to receive(:sleep)
|
185
|
+
lockfile = double('lockfile')
|
186
|
+
expect(@agent).to receive(:lockfile).and_return(lockfile).at_least(:once)
|
187
|
+
# so the lock method raises Puppet::LockError
|
188
|
+
allow(lockfile).to receive(:lock).and_return(false)
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should notify that a run is already in progres" do
|
192
|
+
client = AgentTestClient.new
|
193
|
+
expect(AgentTestClient).to receive(:new).and_return(client)
|
194
|
+
expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
|
195
|
+
@agent.run
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should inform that a run is already in progres and try to run every X seconds if waitforlock is used" do
|
199
|
+
# so the locked file exists
|
200
|
+
allow(File).to receive(:file?).and_return(true)
|
201
|
+
# so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
|
202
|
+
# first 0 is to get the time, second 0 is to inform user, then 1000 so the time expires
|
203
|
+
allow(Time).to receive(:now).and_return(0, 0, 1000)
|
204
|
+
allow(Puppet).to receive(:info)
|
205
|
+
client = AgentTestClient.new
|
206
|
+
expect(AgentTestClient).to receive(:new).and_return(client)
|
207
|
+
|
208
|
+
Puppet[:waitforlock] = 1
|
209
|
+
Puppet[:maxwaitforlock] = 2
|
210
|
+
expect(Puppet).to receive(:info).with(/Another puppet instance is already running; --waitforlock flag used, waiting for running instance to finish./)
|
211
|
+
expect(Puppet).to receive(:info).with(/Will try again in #{Puppet[:waitforlock]} seconds./)
|
212
|
+
@agent.run
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should notify that the run is exiting if waitforlock is used and maxwaitforlock is exceeded" do
|
216
|
+
# so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
|
217
|
+
# first 0 is to get the time, then 1000 so that the time expires
|
218
|
+
allow(Time).to receive(:now).and_return(0, 1000)
|
219
|
+
client = AgentTestClient.new
|
220
|
+
expect(AgentTestClient).to receive(:new).and_return(client)
|
221
|
+
|
222
|
+
Puppet[:waitforlock] = 1
|
223
|
+
expect(Puppet).to receive(:notice).with(/Exiting now because the maxwaitforlock timeout has been exceeded./)
|
224
|
+
@agent.run
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
182
228
|
describe "when should_fork is true", :if => Puppet.features.posix? && RUBY_PLATFORM != 'java' do
|
183
229
|
before do
|
184
230
|
@agent = Puppet::Agent.new(AgentTestClient, true)
|
185
231
|
|
186
232
|
# So we don't actually try to hit the filesystem.
|
187
233
|
allow(@agent).to receive(:lock).and_yield
|
188
|
-
|
189
|
-
allow(Kernel).to receive(:fork)
|
190
|
-
allow(Process).to receive(:waitpid2).and_return([123, double('process::status', :exitstatus => 0)])
|
191
|
-
allow(@agent).to receive(:exit)
|
192
234
|
end
|
193
235
|
|
194
236
|
it "should run the agent in a forked process" do
|
195
237
|
client = AgentTestClient.new
|
196
238
|
expect(AgentTestClient).to receive(:new).and_return(client)
|
197
239
|
|
198
|
-
expect(client).to receive(:run)
|
240
|
+
expect(client).to receive(:run).and_return(0)
|
199
241
|
|
200
242
|
expect(Kernel).to receive(:fork).and_yield
|
201
|
-
@agent.run
|
243
|
+
expect { @agent.run }.to exit_with(0)
|
202
244
|
end
|
203
245
|
|
204
246
|
it "should exit child process if child exit" do
|
205
247
|
client = AgentTestClient.new
|
206
248
|
expect(AgentTestClient).to receive(:new).and_return(client)
|
207
249
|
|
208
|
-
expect(client).to receive(:run).and_raise(SystemExit)
|
250
|
+
expect(client).to receive(:run).and_raise(SystemExit.new(-1))
|
209
251
|
|
210
252
|
expect(Kernel).to receive(:fork).and_yield
|
211
|
-
expect
|
212
|
-
@agent.run
|
253
|
+
expect { @agent.run }.to exit_with(-1)
|
213
254
|
end
|
214
255
|
|
215
256
|
it 'should exit with 1 if an exception is raised' do
|
@@ -219,31 +260,44 @@ describe Puppet::Agent do
|
|
219
260
|
expect(client).to receive(:run).and_raise(StandardError)
|
220
261
|
|
221
262
|
expect(Kernel).to receive(:fork).and_yield
|
222
|
-
expect
|
223
|
-
@agent.run
|
263
|
+
expect { @agent.run }.to exit_with(1)
|
224
264
|
end
|
225
265
|
|
226
|
-
it
|
227
|
-
|
228
|
-
expect
|
266
|
+
it 'should exit with 254 if NoMemoryError exception is raised' do
|
267
|
+
client = AgentTestClient.new
|
268
|
+
expect(AgentTestClient).to receive(:new).and_return(client)
|
269
|
+
|
270
|
+
expect(client).to receive(:run).and_raise(NoMemoryError)
|
271
|
+
|
272
|
+
expect(Kernel).to receive(:fork).and_yield
|
273
|
+
expect { @agent.run }.to exit_with(254)
|
229
274
|
end
|
230
275
|
|
231
|
-
it "should
|
232
|
-
|
233
|
-
expect {
|
276
|
+
it "should return the block exit code as the child exit code" do
|
277
|
+
expect(Kernel).to receive(:fork).and_yield
|
278
|
+
expect {
|
279
|
+
@agent.run_in_fork {
|
280
|
+
777
|
281
|
+
}
|
282
|
+
}.to exit_with(777)
|
234
283
|
end
|
235
284
|
|
236
|
-
it "should return the
|
237
|
-
|
238
|
-
expect
|
285
|
+
it "should return `1` exit code if the block returns `nil`" do
|
286
|
+
expect(Kernel).to receive(:fork).and_yield
|
287
|
+
expect {
|
288
|
+
@agent.run_in_fork {
|
289
|
+
nil
|
290
|
+
}
|
291
|
+
}.to exit_with(1)
|
239
292
|
end
|
240
293
|
|
241
|
-
it "should return
|
294
|
+
it "should return `1` exit code if the block returns `false`" do
|
242
295
|
expect(Kernel).to receive(:fork).and_yield
|
243
|
-
expect
|
244
|
-
|
245
|
-
|
246
|
-
|
296
|
+
expect {
|
297
|
+
@agent.run_in_fork {
|
298
|
+
false
|
299
|
+
}
|
300
|
+
}.to exit_with(1)
|
247
301
|
end
|
248
302
|
end
|
249
303
|
|
@@ -283,7 +337,7 @@ describe Puppet::Agent do
|
|
283
337
|
expect(client).not_to receive(:handling)
|
284
338
|
expect(Puppet).to receive(:log_exception).with(be_an_instance_of(Puppet::Agent::RunTimeoutError), anything)
|
285
339
|
|
286
|
-
expect(@agent.run).to eq(
|
340
|
+
expect(@agent.run).to eq(nil)
|
287
341
|
end
|
288
342
|
end
|
289
343
|
end
|
@@ -12,16 +12,16 @@ describe Puppet::Application::Agent do
|
|
12
12
|
before :each do
|
13
13
|
@puppetd = Puppet::Application[:agent]
|
14
14
|
|
15
|
-
@
|
15
|
+
@agent = double('agent')
|
16
|
+
allow(Puppet::Agent).to receive(:new).and_return(@agent)
|
17
|
+
|
18
|
+
@daemon = Puppet::Daemon.new(@agent, nil)
|
16
19
|
allow(@daemon).to receive(:daemonize)
|
17
20
|
allow(@daemon).to receive(:start)
|
18
21
|
allow(@daemon).to receive(:stop)
|
19
22
|
allow(Puppet::Daemon).to receive(:new).and_return(@daemon)
|
20
23
|
Puppet[:daemonize] = false
|
21
24
|
|
22
|
-
@agent = double('agent')
|
23
|
-
allow(Puppet::Agent).to receive(:new).and_return(@agent)
|
24
|
-
|
25
25
|
@puppetd.preinit
|
26
26
|
allow(Puppet::Util::Log).to receive(:newdestination)
|
27
27
|
|
@@ -122,6 +122,10 @@ describe Puppet::Application::Agent do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
+
it "should log the agent start time" do
|
126
|
+
expect(@puppetd.options[:start_time]).to be_a(Time)
|
127
|
+
end
|
128
|
+
|
125
129
|
it "should set waitforcert to 0 with --onetime and if --waitforcert wasn't given" do
|
126
130
|
allow(@agent).to receive(:run).and_return(2)
|
127
131
|
Puppet[:onetime] = true
|
@@ -505,7 +509,7 @@ describe Puppet::Application::Agent do
|
|
505
509
|
|
506
510
|
it "should run the agent with the supplied job_id" do
|
507
511
|
@puppetd.options[:job_id] = 'special id'
|
508
|
-
expect(@agent).to receive(:run).with(:job_id => 'special id').and_return(:report)
|
512
|
+
expect(@agent).to receive(:run).with(hash_including(:job_id => 'special id')).and_return(:report)
|
509
513
|
|
510
514
|
expect { execute_agent }.to exit_with 0
|
511
515
|
end
|