puppet 5.5.17-x64-mingw32 → 5.5.22-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +1 -1
- data/Gemfile +4 -5
- data/Gemfile.lock +59 -55
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +54 -8
- data/install.rb +6 -6
- data/lib/puppet.rb +5 -2
- data/lib/puppet/agent.rb +5 -13
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +3 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +13 -0
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/configurer.rb +106 -31
- data/lib/puppet/configurer/downloader.rb +33 -16
- data/lib/puppet/daemon.rb +1 -1
- data/lib/puppet/defaults.rb +86 -40
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/inline_epp.rb +5 -5
- 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/step.rb +1 -1
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +6 -5
- data/lib/puppet/indirector/catalog/compiler.rb +8 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +6 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module_tool/applications/builder.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/connection.rb +14 -12
- data/lib/puppet/network/http/pool.rb +7 -1
- data/lib/puppet/network/http/rack/rest.rb +2 -2
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +11 -3
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +3 -0
- data/lib/puppet/parser/functions.rb +14 -10
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -48
- 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_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/types/types.rb +3 -3
- 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/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/group/groupadd.rb +19 -19
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mount.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +8 -8
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +14 -3
- data/lib/puppet/provider/package/dnfmodule.rb +141 -0
- data/lib/puppet/provider/package/dpkg.rb +16 -18
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/openbsd.rb +14 -2
- data/lib/puppet/provider/package/pip.rb +37 -10
- 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 +4 -4
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/rpm.rb +6 -6
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +28 -20
- data/lib/puppet/provider/package/zypper.rb +1 -0
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
- data/lib/puppet/provider/selmodule/semodule.rb +43 -26
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +31 -13
- data/lib/puppet/provider/user/directoryservice.rb +31 -6
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +39 -20
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/settings.rb +3 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/certificate_authority.rb +6 -5
- data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/test/test_helper.rb +20 -12
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +8 -4
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/exec.rb +7 -3
- data/lib/puppet/type/file.rb +14 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/interface.rb +1 -1
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +97 -8
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/selboolean.rb +17 -3
- data/lib/puppet/type/service.rb +2 -8
- data/lib/puppet/type/user.rb +5 -9
- data/lib/puppet/util.rb +35 -12
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +8 -14
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/log.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +3 -12
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +12 -6
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +3 -1
- data/lib/puppet/util/windows/adsi.rb +60 -30
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +16 -15
- data/lib/puppet/util/windows/registry.rb +17 -15
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +2 -2
- data/locales/puppet.pot +362 -318
- data/man/man5/puppet.conf.5 +39 -9
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.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 +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 +16 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-master.8 +1 -1
- data/man/man8/puppet-module.8 +1 -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-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -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/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/configurer_spec.rb +66 -0
- data/spec/integration/data_binding_spec.rb +1 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/faces/plugin_spec.rb +29 -47
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/agent_spec.rb +34 -26
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer_spec.rb +430 -415
- data/spec/unit/daemon_spec.rb +0 -1
- 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_system/uniquefile_spec.rb +11 -0
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +43 -1
- data/spec/unit/network/http/pool_spec.rb +32 -0
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/group/groupadd_spec.rb +30 -1
- 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 +13 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
- data/spec/unit/provider/package/dpkg_spec.rb +35 -7
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pip_spec.rb +93 -22
- data/spec/unit/provider/package/pkg_spec.rb +13 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +36 -0
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/yum_spec.rb +90 -0
- data/spec/unit/provider/package/zypper_spec.rb +13 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/selmodule_spec.rb +118 -47
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +109 -36
- 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/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +81 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +3 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +2 -0
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/type/exec_spec.rb +6 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/selboolean_spec.rb +4 -6
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +19 -13
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +97 -0
- data/spec/unit/util/log/destinations_spec.rb +2 -26
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/pidlock_spec.rb +67 -40
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/tasks/manpages.rake +1 -0
- metadata +16 -7
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/locales/ja/puppet.po +0 -12114
- data/spec/integration/test/test_helper_spec.rb +0 -31
| @@ -26,6 +26,7 @@ decode:     root | |
| 26 26 | 
             
            # Other tests
         | 
| 27 27 | 
             
            anothertest: "|/path/to/rt-mailgate --queue 'another test' --action correspond --url http://my.com/"
         | 
| 28 28 | 
             
            test: "|/path/to/rt-mailgate --queue 'test' --action correspond --url http://my.com/"
         | 
| 29 | 
            +
            test_with_commas_inside_command: "|/path/to/rt-mailgate --queue 'test' --action correspond --url http://my.com/ --project proj1,proj2"
         | 
| 29 30 |  | 
| 30 31 | 
             
            # Included file
         | 
| 31 32 | 
             
            incfile: :include: /tmp/somefile
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            localmirror-appstream
         | 
| 2 | 
            +
            Name         Stream       Profiles                                  Summary                                                            
         | 
| 3 | 
            +
            389-ds       1.4 [e]                                                389 Directory Server (base)                                           
         | 
| 4 | 
            +
            gimp         2.8 [d][e]   common [d], devel [i]                     gimp module                                                        
         | 
| 5 | 
            +
            mariadb      10.3 [d][e]  client [i], server [d], galera            MariaDB Module                                                     
         | 
| 6 | 
            +
            nodejs       10 [d][e]    common [d], development, minimal [i], s2i Javascript runtime                                                 
         | 
| 7 | 
            +
            perl         5.26 [d][e]  common [d], minimal [i]                   Practical Extraction and Report Language                           
         | 
| 8 | 
            +
            postgresql   10 [d][e]    client, server [d] [i]                    PostgreSQL server and client module                                
         | 
| 9 | 
            +
            ruby         2.5 [d][e]   common [d]                                An interpreter of object-oriented scripting language                  
         | 
| 10 | 
            +
            rust-toolset rhel8 [d][e] common [d] [i]                            Rust                                                               
         | 
| 11 | 
            +
            subversion   1.10 [d][e]  common [d], server [i]                    Apache Subversion                                                  
         | 
| 12 | 
            +
            scala        2.10 [d]     common [d]                                A hybrid functional/object-oriented language for the JVM
         | 
| 13 | 
            +
            squid        4 [d]        common [d]                                Squid - Optimising Web Delivery
         | 
| 14 | 
            +
            subversion   1.10 [d]     common [d], server                        Apache Subversion
         | 
| 15 | 
            +
            swig         3.0 [d][x]   common [d], complete                      Connects C/C++/Objective C to some high-level programming languages
         | 
| 16 | 
            +
            varnish      6 [d]        common [d]                                Varnish HTTP cache
         | 
| 17 | 
            +
            virt         rhel [d][x]  common [d]                                Virtualization module
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            Loaded plugins: product-id, search-disabled-repos, subscription-manager
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            This system is not registered with an entitlement server. You can use subscription-manager to register on.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            curl.i686                               7.32.0-10.fc20           updates
         | 
| 6 | 
            +
            curl.x86_64                             7.32.0-10.fc20           updates
         | 
| 7 | 
            +
            gawk.i686                               4.1.0-3.fc20             updates
         | 
| 8 | 
            +
            dhclient.i686                           12:4.1.1-38.P1.fc20      updates
         | 
| 9 | 
            +
            java-1.8.0-openjdk.x86_64               1:1.8.0.131-2.b11.el7_3  updates
         | 
| @@ -5,3 +5,12 @@ autovt@.service                             disabled | |
| 5 5 | 
             
            avahi-daemon.service                        enabled
         | 
| 6 6 | 
             
            blk-availability.service                    disabled
         | 
| 7 7 | 
             
            brandbot.service                            static
         | 
| 8 | 
            +
            apparmor.service                            bad
         | 
| 9 | 
            +
            udev.service                                enabled-runtime
         | 
| 10 | 
            +
            ufw.service                                 linked
         | 
| 11 | 
            +
            umountfs.service                            linked-runtime
         | 
| 12 | 
            +
            umountnfs.service                           masked
         | 
| 13 | 
            +
            umountroot.service                          masked-runtime
         | 
| 14 | 
            +
            urandom.service                             indirect
         | 
| 15 | 
            +
            user@.service                               generated
         | 
| 16 | 
            +
            uuidd.service                               transient
         | 
| @@ -62,5 +62,71 @@ describe Puppet::Configurer do | |
| 62 62 | 
             
                  expect(summary["time"]).to be_key("notify")
         | 
| 63 63 | 
             
                  expect(summary["time"]["last_run"]).to be_between(t1, t2)
         | 
| 64 64 | 
             
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
         | 
| 67 | 
            +
                  Puppet[:ignore_plugin_errors] = false
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  Puppet[:use_cached_catalog] = false
         | 
| 70 | 
            +
                  Puppet[:usecacheonfailure] = true
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  report = Puppet::Transaction::Report.new
         | 
| 73 | 
            +
                  expect_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate).and_raise(Puppet::Error, 'Failed to retrieve: some file')
         | 
| 74 | 
            +
                  expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(@catalog)
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  @configurer.run(pluginsync: true, report: report)
         | 
| 77 | 
            +
                  expect(report.cached_catalog_status).to eq('on_failure')
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                describe 'resubmitting facts' do
         | 
| 81 | 
            +
                  context 'when resubmit_facts is set to false' do
         | 
| 82 | 
            +
                    it 'should not send data' do
         | 
| 83 | 
            +
                      expect(@configurer).to receive(:resubmit_facts).never
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                      @configurer.run(catalog: @catalog)
         | 
| 86 | 
            +
                    end
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  context 'when resubmit_facts is set to true' do
         | 
| 90 | 
            +
                    let(:test_facts) { Puppet::Node::Facts.new('configurer.test') }
         | 
| 91 | 
            +
                    let(:fact_rest_terminus) { Puppet::Node::Facts.indirection.terminus(:rest) }
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    before(:each) do
         | 
| 94 | 
            +
                      Puppet[:resubmit_facts] = true
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                      allow(@configurer).to receive(:find_facts).and_return(test_facts)
         | 
| 97 | 
            +
                      allow(fact_rest_terminus).to receive(:save)
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                    it 'sends fact data using the rest terminus' do
         | 
| 101 | 
            +
                      expect(fact_rest_terminus).to receive(:save)
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                      @configurer.run(catalog: @catalog)
         | 
| 104 | 
            +
                    end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    it 'logs errors that occur during fact generation' do
         | 
| 107 | 
            +
                      allow(@configurer).to receive(:find_facts).and_raise('error generating facts')
         | 
| 108 | 
            +
                      expect(Puppet).to receive(:log_exception).with(instance_of(RuntimeError),
         | 
| 109 | 
            +
                                                                     /^Failed to submit facts/)
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      @configurer.run(catalog: @catalog)
         | 
| 112 | 
            +
                    end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                    it 'logs errors that occur during fact submission' do
         | 
| 115 | 
            +
                      allow(fact_rest_terminus).to receive(:save).and_raise('error sending facts')
         | 
| 116 | 
            +
                      expect(Puppet).to receive(:log_exception).with(instance_of(RuntimeError),
         | 
| 117 | 
            +
                                                                     /^Failed to submit facts/)
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                      @configurer.run(catalog: @catalog)
         | 
| 120 | 
            +
                    end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                    it 'records time spent resubmitting facts' do
         | 
| 123 | 
            +
                      report = Puppet::Transaction::Report.new
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                      @configurer.run(catalog: @catalog, report: report)
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                      expect(report.metrics['time'].values).to include(["resubmit_facts", anything, Numeric])
         | 
| 128 | 
            +
                    end
         | 
| 129 | 
            +
                  end
         | 
| 130 | 
            +
                end
         | 
| 65 131 | 
             
              end
         | 
| 66 132 | 
             
            end
         | 
| @@ -130,8 +130,7 @@ describe "Puppet defaults" do | |
| 130 130 | 
             
                  Puppet::Util.withenv( {"PATH" => path }, :windows) do
         | 
| 131 131 | 
             
                    Puppet.settings[:path] = "none" # this causes it to ignore the setting
         | 
| 132 132 |  | 
| 133 | 
            -
                     | 
| 134 | 
            -
                    expect(envhash['Path']).to eq(path)
         | 
| 133 | 
            +
                    expect(Puppet::Util.get_env('Path')).to eq(path)
         | 
| 135 134 | 
             
                  end
         | 
| 136 135 | 
             
                end
         | 
| 137 136 | 
             
              end
         | 
| @@ -1,59 +1,41 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 | 
            -
            require ' | 
| 3 | 
            -
            require 'puppet/file_serving/metadata'
         | 
| 4 | 
            -
            require 'puppet/file_serving/content'
         | 
| 5 | 
            -
            require 'puppet/indirector/memory'
         | 
| 2 | 
            +
            require 'webmock/rspec'
         | 
| 6 3 |  | 
| 7 | 
            -
            module PuppetFaceIntegrationSpecs
         | 
| 8 4 | 
             
            describe "Puppet plugin face" do
         | 
| 9 | 
            -
               | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 12 | 
            -
              ]
         | 
| 5 | 
            +
              before :each do
         | 
| 6 | 
            +
                metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
         | 
| 7 | 
            +
                stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
         | 
| 13 8 |  | 
| 14 | 
            -
             | 
| 15 | 
            -
                 | 
| 16 | 
            -
                 | 
| 17 | 
            -
                Puppet::Node::Facts,
         | 
| 18 | 
            -
              ]
         | 
| 19 | 
            -
             | 
| 20 | 
            -
              INDIRECTORS.each do |indirector|
         | 
| 21 | 
            -
                class indirector::Memory < Puppet::Indirector::Memory
         | 
| 22 | 
            -
                  def find(request)
         | 
| 23 | 
            -
                    model.new('/dev/null', { 'type' => 'directory' })
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
                end
         | 
| 9 | 
            +
                # response retains owner/group/mode due to source_permissions => use
         | 
| 10 | 
            +
                facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
         | 
| 11 | 
            +
                stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
         | 
| 26 12 | 
             
              end
         | 
| 27 13 |  | 
| 28 | 
            -
               | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
                 | 
| 32 | 
            -
                 | 
| 33 | 
            -
                 | 
| 34 | 
            -
             | 
| 35 | 
            -
                  indirected.indirection.terminus_class = :memory
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
              end
         | 
| 14 | 
            +
              it "processes a download request resulting in no changes" do
         | 
| 15 | 
            +
                # /opt/puppetlabs/puppet/cache/facts.d will be created based on our umask.
         | 
| 16 | 
            +
                # If the mode on disk is not 0755, then the mode from the metadata response
         | 
| 17 | 
            +
                # (493 => 0755) will be applied, resulting in "plugins were downloaded"
         | 
| 18 | 
            +
                # message. Enforce a umask so the results are consistent.
         | 
| 19 | 
            +
                Puppet::FileSystem.mkpath(Puppet[:pluginfactdest])
         | 
| 20 | 
            +
                Puppet::FileSystem.chmod(0755, Puppet[:pluginfactdest])
         | 
| 38 21 |  | 
| 39 | 
            -
             | 
| 40 | 
            -
                 | 
| 41 | 
            -
             | 
| 42 | 
            -
                   | 
| 43 | 
            -
                 | 
| 22 | 
            +
                app = Puppet::Application[:plugin]
         | 
| 23 | 
            +
                app.command_line.args << 'download'
         | 
| 24 | 
            +
                expect {
         | 
| 25 | 
            +
                  app.run
         | 
| 26 | 
            +
                }.to exit_with(0)
         | 
| 27 | 
            +
                  .and output(/No plugins downloaded/).to_stdout
         | 
| 44 28 | 
             
              end
         | 
| 45 29 |  | 
| 46 | 
            -
               | 
| 47 | 
            -
                Puppet:: | 
| 48 | 
            -
             | 
| 30 | 
            +
              it "updates the facts.d mode", unless: Puppet::Util::Platform.windows? do
         | 
| 31 | 
            +
                Puppet::FileSystem.mkpath(Puppet[:pluginfactdest])
         | 
| 32 | 
            +
                Puppet::FileSystem.chmod(0775, Puppet[:pluginfactdest])
         | 
| 49 33 |  | 
| 50 | 
            -
             | 
| 51 | 
            -
                app  | 
| 52 | 
            -
                expect  | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
                end.to have_printed(/No plugins downloaded/)
         | 
| 34 | 
            +
                app = Puppet::Application[:plugin]
         | 
| 35 | 
            +
                app.command_line.args << 'download'
         | 
| 36 | 
            +
                expect {
         | 
| 37 | 
            +
                  app.run
         | 
| 38 | 
            +
                }.to exit_with(0)
         | 
| 39 | 
            +
                 .and output(/Downloaded these plugins: .*facts\.d/).to_stdout
         | 
| 57 40 | 
             
              end
         | 
| 58 41 | 
             
            end
         | 
| 59 | 
            -
            end
         | 
| @@ -8,6 +8,10 @@ describe Puppet::Node::Facts::Facter do | |
| 8 8 | 
             
              include PuppetSpec::Files
         | 
| 9 9 | 
             
              include PuppetSpec::Compiler
         | 
| 10 10 |  | 
| 11 | 
            +
              before :each do
         | 
| 12 | 
            +
                Puppet::Node::Facts.indirection.terminus_class = :facter
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 11 15 | 
             
              it "preserves case in fact values" do
         | 
| 12 16 | 
             
                Facter.add(:downcase_test) do
         | 
| 13 17 | 
             
                  setcode do
         | 
| @@ -841,6 +841,17 @@ describe Puppet::Parser::Compiler do | |
| 841 841 | 
             
                      MANIFEST
         | 
| 842 842 | 
             
                    end.to raise_error(/Foo\[bar\]:\s+parameter 'a' expects a value for key 'd'\s+parameter 'a' unrecognized key 'c'/m)
         | 
| 843 843 | 
             
                  end
         | 
| 844 | 
            +
             | 
| 845 | 
            +
                  it 'handles Sensitive type in resource array' do
         | 
| 846 | 
            +
                    catalog = compile_to_catalog(<<-MANIFEST)
         | 
| 847 | 
            +
                      define foo(Sensitive[String] $password) {
         | 
| 848 | 
            +
                        notify{ "${title}": message => "${password}" }
         | 
| 849 | 
            +
                      }
         | 
| 850 | 
            +
                      foo { ['testA', 'testB']: password =>Sensitive('some password') }
         | 
| 851 | 
            +
                    MANIFEST
         | 
| 852 | 
            +
                    expect(catalog).to have_resource("Notify[testA]").with_parameter(:message, 'Sensitive [value redacted]')
         | 
| 853 | 
            +
                    expect(catalog).to have_resource("Notify[testB]").with_parameter(:message, 'Sensitive [value redacted]')
         | 
| 854 | 
            +
                  end
         | 
| 844 855 | 
             
                end
         | 
| 845 856 |  | 
| 846 857 | 
             
                context 'when using typed parameters in class' do
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'puppet_spec/compiler'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Puppet::Type.type(:notify) do
         | 
| 5 | 
            +
              include PuppetSpec::Compiler
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              it "logs the title at notice level" do
         | 
| 8 | 
            +
                apply_compiled_manifest(<<-MANIFEST)
         | 
| 9 | 
            +
                  notify { 'hi': }
         | 
| 10 | 
            +
                MANIFEST
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                expect(@logs).to include(an_object_having_attributes(level: :notice, message: 'hi'))
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it "logs the message property" do
         | 
| 16 | 
            +
                apply_compiled_manifest(<<-MANIFEST)
         | 
| 17 | 
            +
                  notify { 'title':
         | 
| 18 | 
            +
                    message => 'hello'
         | 
| 19 | 
            +
                  }
         | 
| 20 | 
            +
                MANIFEST
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                expect(@logs).to include(an_object_having_attributes(level: :notice, message: "defined 'message' as 'hello'"))
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it "redacts sensitive message properties" do
         | 
| 26 | 
            +
                apply_compiled_manifest(<<-MANIFEST)
         | 
| 27 | 
            +
                  $message = Sensitive('secret')
         | 
| 28 | 
            +
                  notify { 'notify1':
         | 
| 29 | 
            +
                    message => $message
         | 
| 30 | 
            +
                  }
         | 
| 31 | 
            +
                MANIFEST
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                expect(@logs).to include(an_object_having_attributes(level: :notice, message: 'changed [redacted] to [redacted]'))
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              it "redacts sensitive interpolated message properties" do
         | 
| 37 | 
            +
                apply_compiled_manifest(<<-MANIFEST)
         | 
| 38 | 
            +
                  $message = Sensitive('secret')
         | 
| 39 | 
            +
                  notify { 'notify2':
         | 
| 40 | 
            +
                    message => "${message}"
         | 
| 41 | 
            +
                  }
         | 
| 42 | 
            +
                MANIFEST
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                expect(@logs).to include(an_object_having_attributes(level: :notice, message: "defined 'message' as 'Sensitive [value redacted]'"))
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -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 |  | 
| @@ -259,23 +259,23 @@ describe Puppet::Util::Windows::Registry do | |
| 259 259 | 
             
                    {
         | 
| 260 260 | 
             
                      name: 'REG_SZ',
         | 
| 261 261 | 
             
                      type: Win32::Registry::REG_SZ,
         | 
| 262 | 
            -
                      value: "reg sz\u0000 string",
         | 
| 263 | 
            -
                      expected_value: "reg sz | 
| 262 | 
            +
                      value: "reg sz\u0000\u0000 string",
         | 
| 263 | 
            +
                      expected_value: "reg sz"
         | 
| 264 264 | 
             
                    },
         | 
| 265 265 | 
             
                    {
         | 
| 266 266 | 
             
                      name: 'REG_SZ_2',
         | 
| 267 267 | 
             
                      type: Win32::Registry::REG_SZ,
         | 
| 268 | 
            -
                      value: "reg sz\x00 string",
         | 
| 269 | 
            -
                      expected_value: "reg sz | 
| 268 | 
            +
                      value: "reg sz 2\x00\x00 string",
         | 
| 269 | 
            +
                      expected_value: "reg sz 2"
         | 
| 270 270 | 
             
                    },
         | 
| 271 271 | 
             
                    {
         | 
| 272 272 | 
             
                      name: 'REG_EXPAND_SZ',
         | 
| 273 273 | 
             
                      type: Win32::Registry::REG_EXPAND_SZ,
         | 
| 274 | 
            -
                      value: "\0reg expand string",
         | 
| 275 | 
            -
                      expected_value: " | 
| 274 | 
            +
                      value: "\0\0\0reg expand string",
         | 
| 275 | 
            +
                      expected_value: ""
         | 
| 276 276 | 
             
                    }
         | 
| 277 277 | 
             
                  ].each do |pair|
         | 
| 278 | 
            -
                    it ' | 
| 278 | 
            +
                    it 'reads up to the first wide null' do
         | 
| 279 279 | 
             
                      hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
         | 
| 280 280 | 
             
                        reg.write(value_name, pair[:type], pair[:value])
         | 
| 281 281 | 
             
                      end
         | 
| @@ -187,6 +187,8 @@ shared_context 'types_setup' do | |
| 187 187 | 
             
                result << Puppet::Pops::Types::PURIType
         | 
| 188 188 | 
             
                result << Puppet::Pops::Types::PTupleType.new([tf.rich_data])
         | 
| 189 189 | 
             
                result << Puppet::Pops::Types::PObjectType
         | 
| 190 | 
            +
                result << Puppet::Pops::Types::PTypeType
         | 
| 191 | 
            +
                result << Puppet::Pops::Types::PTypeSetType
         | 
| 190 192 | 
             
                result
         | 
| 191 193 | 
             
              end
         | 
| 192 194 | 
             
              def rich_data_compatible_types
         | 
    
        data/spec/unit/agent_spec.rb
    CHANGED
    
    | @@ -185,31 +185,26 @@ describe Puppet::Agent do | |
| 185 185 |  | 
| 186 186 | 
             
                    # So we don't actually try to hit the filesystem.
         | 
| 187 187 | 
             
                    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 188 | 
             
                  end
         | 
| 193 189 |  | 
| 194 190 | 
             
                  it "should run the agent in a forked process" do
         | 
| 195 191 | 
             
                    client = AgentTestClient.new
         | 
| 196 192 | 
             
                    expect(AgentTestClient).to receive(:new).and_return(client)
         | 
| 197 193 |  | 
| 198 | 
            -
                    expect(client).to receive(:run)
         | 
| 194 | 
            +
                    expect(client).to receive(:run).and_return(0)
         | 
| 199 195 |  | 
| 200 196 | 
             
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 201 | 
            -
                    @agent.run
         | 
| 197 | 
            +
                    expect { @agent.run }.to exit_with(0)
         | 
| 202 198 | 
             
                  end
         | 
| 203 199 |  | 
| 204 200 | 
             
                  it "should exit child process if child exit" do
         | 
| 205 201 | 
             
                    client = AgentTestClient.new
         | 
| 206 202 | 
             
                    expect(AgentTestClient).to receive(:new).and_return(client)
         | 
| 207 203 |  | 
| 208 | 
            -
                    expect(client).to receive(:run).and_raise(SystemExit)
         | 
| 204 | 
            +
                    expect(client).to receive(:run).and_raise(SystemExit.new(-1))
         | 
| 209 205 |  | 
| 210 206 | 
             
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 211 | 
            -
                    expect | 
| 212 | 
            -
                    @agent.run
         | 
| 207 | 
            +
                    expect { @agent.run }.to exit_with(-1)
         | 
| 213 208 | 
             
                  end
         | 
| 214 209 |  | 
| 215 210 | 
             
                  it 'should exit with 1 if an exception is raised' do
         | 
| @@ -219,31 +214,44 @@ describe Puppet::Agent do | |
| 219 214 | 
             
                    expect(client).to receive(:run).and_raise(StandardError)
         | 
| 220 215 |  | 
| 221 216 | 
             
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 222 | 
            -
                    expect | 
| 223 | 
            -
                    @agent.run
         | 
| 217 | 
            +
                    expect { @agent.run }.to exit_with(1)
         | 
| 224 218 | 
             
                  end
         | 
| 225 219 |  | 
| 226 | 
            -
                  it  | 
| 227 | 
            -
                     | 
| 228 | 
            -
                    expect | 
| 220 | 
            +
                  it 'should exit with 254 if NoMemoryError exception is raised' do
         | 
| 221 | 
            +
                    client = AgentTestClient.new
         | 
| 222 | 
            +
                    expect(AgentTestClient).to receive(:new).and_return(client)
         | 
| 223 | 
            +
             | 
| 224 | 
            +
                    expect(client).to receive(:run).and_raise(NoMemoryError)
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 227 | 
            +
                    expect { @agent.run }.to exit_with(254)
         | 
| 229 228 | 
             
                  end
         | 
| 230 229 |  | 
| 231 | 
            -
                  it "should  | 
| 232 | 
            -
                     | 
| 233 | 
            -
                    expect { | 
| 230 | 
            +
                  it "should return the block exit code as the child exit code" do
         | 
| 231 | 
            +
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 232 | 
            +
                    expect {
         | 
| 233 | 
            +
                      @agent.run_in_fork {
         | 
| 234 | 
            +
                        777
         | 
| 235 | 
            +
                      }
         | 
| 236 | 
            +
                    }.to exit_with(777)
         | 
| 234 237 | 
             
                  end
         | 
| 235 238 |  | 
| 236 | 
            -
                  it "should return the  | 
| 237 | 
            -
                     | 
| 238 | 
            -
                    expect | 
| 239 | 
            +
                  it "should return `1` exit code if the block returns `nil`" do
         | 
| 240 | 
            +
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 241 | 
            +
                    expect {
         | 
| 242 | 
            +
                      @agent.run_in_fork {
         | 
| 243 | 
            +
                        nil
         | 
| 244 | 
            +
                      }
         | 
| 245 | 
            +
                    }.to exit_with(1)
         | 
| 239 246 | 
             
                  end
         | 
| 240 247 |  | 
| 241 | 
            -
                  it "should return  | 
| 248 | 
            +
                  it "should return `1` exit code if the block returns `false`" do
         | 
| 242 249 | 
             
                    expect(Kernel).to receive(:fork).and_yield
         | 
| 243 | 
            -
                    expect | 
| 244 | 
            -
             | 
| 245 | 
            -
             | 
| 246 | 
            -
             | 
| 250 | 
            +
                    expect {
         | 
| 251 | 
            +
                      @agent.run_in_fork {
         | 
| 252 | 
            +
                        false
         | 
| 253 | 
            +
                      }
         | 
| 254 | 
            +
                    }.to exit_with(1)
         | 
| 247 255 | 
             
                  end
         | 
| 248 256 | 
             
                end
         | 
| 249 257 |  | 
| @@ -283,7 +291,7 @@ describe Puppet::Agent do | |
| 283 291 | 
             
                    expect(client).not_to receive(:handling)
         | 
| 284 292 | 
             
                    expect(Puppet).to receive(:log_exception).with(be_an_instance_of(Puppet::Agent::RunTimeoutError), anything)
         | 
| 285 293 |  | 
| 286 | 
            -
                    expect(@agent.run).to eq( | 
| 294 | 
            +
                    expect(@agent.run).to eq(nil)
         | 
| 287 295 | 
             
                  end
         | 
| 288 296 | 
             
                end
         | 
| 289 297 | 
             
              end
         |