puppet 6.12.0-x64-mingw32 → 6.17.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +39 -36
- data/README.md +18 -25
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- 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/configurer.rb +65 -69
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +154 -58
- data/lib/puppet/environments.rb +27 -20
- 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 +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +14 -10
- 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 +12 -16
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +5 -0
- data/lib/puppet/http/client.rb +293 -73
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +151 -7
- data/lib/puppet/http/service/ca.rb +76 -14
- 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 +49 -23
- data/lib/puppet/http/session.rb +103 -7
- data/lib/puppet/indirector.rb +1 -1
- 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 +27 -8
- 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/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/base_pool.rb +7 -2
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -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 +11 -1
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +4 -29
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
- data/lib/puppet/parser/compiler.rb +43 -33
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/validation/checker4_0.rb +11 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- 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/aptitude.rb +1 -1
- 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 +2 -2
- 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 +109 -25
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +22 -12
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +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_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +15 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +18 -6
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +51 -60
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +55 -8
- data/lib/puppet/type/user.rb +3 -28
- data/lib/puppet/util.rb +39 -15
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- 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/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +2 -2
- 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 +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +23 -8
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +707 -574
- data/man/man5/puppet.conf.5 +74 -14
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +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/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 +483 -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/defaults_spec.rb +1 -2
- data/spec/integration/http/client_spec.rb +47 -37
- 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 +2 -15
- data/spec/integration/network/http_pool_spec.rb +93 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +40 -5
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- 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/configurer/fact_handler_spec.rb +4 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +17 -18
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +25 -2
- 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_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +327 -35
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -2
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -11
- 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 +27 -9
- data/spec/unit/http/service_spec.rb +98 -5
- data/spec/unit/http/session_spec.rb +190 -7
- 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 +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +559 -175
- 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/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- 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 +5 -0
- 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/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/service/windows_spec.rb +22 -14
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +43 -24
- 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/resource_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/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 +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +185 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +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 +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +73 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -88,7 +88,8 @@ describe Puppet::Node::Facts, "when indirecting" do
|
|
88
88
|
@facts.sanitize
|
89
89
|
fact_value = @facts.values['test']
|
90
90
|
expect(fact_value).to eq(an_alien.to_s)
|
91
|
-
|
91
|
+
# JRuby 9.2.8 reports US-ASCII which is a subset of UTF-8
|
92
|
+
expect(fact_value.encoding).to eq(Encoding::UTF_8).or eq(Encoding::US_ASCII)
|
92
93
|
end
|
93
94
|
|
94
95
|
end
|
data/spec/unit/node_spec.rb
CHANGED
@@ -417,7 +417,9 @@ end
|
|
417
417
|
|
418
418
|
describe Puppet::Node, "when generating the list of names to search through" do
|
419
419
|
before do
|
420
|
-
|
420
|
+
Puppet[:strict_hostname_checking] = false
|
421
|
+
@node = Puppet::Node.new("foo.domain.com",
|
422
|
+
:parameters => {"hostname" => "yay", "domain" => "domain.com"})
|
421
423
|
end
|
422
424
|
|
423
425
|
it "returns an array of names" do
|
@@ -448,7 +450,6 @@ describe Puppet::Node, "when generating the list of names to search through" do
|
|
448
450
|
|
449
451
|
describe "and :node_name is set to 'cert'" do
|
450
452
|
before do
|
451
|
-
Puppet[:strict_hostname_checking] = false
|
452
453
|
Puppet[:node_name] = "cert"
|
453
454
|
end
|
454
455
|
|
@@ -457,8 +458,11 @@ describe Puppet::Node, "when generating the list of names to search through" do
|
|
457
458
|
end
|
458
459
|
|
459
460
|
describe "and strict hostname checking is enabled" do
|
460
|
-
|
461
|
+
before do
|
461
462
|
Puppet[:strict_hostname_checking] = true
|
463
|
+
end
|
464
|
+
|
465
|
+
it "only uses the passed-in key" do
|
462
466
|
expect(@node.names).to eq(["foo.domain.com"])
|
463
467
|
end
|
464
468
|
end
|
@@ -466,7 +470,6 @@ describe Puppet::Node, "when generating the list of names to search through" do
|
|
466
470
|
|
467
471
|
describe "and :node_name is set to 'facter'" do
|
468
472
|
before do
|
469
|
-
Puppet[:strict_hostname_checking] = false
|
470
473
|
Puppet[:node_name] = "facter"
|
471
474
|
end
|
472
475
|
|
@@ -366,6 +366,13 @@ EOS
|
|
366
366
|
}.to raise_error(/'Cap\[cap\]' is exported by both 'Prod\[one\]' and 'Prod\[two\]'/)
|
367
367
|
end
|
368
368
|
|
369
|
+
it "issues deprecation warnings" do
|
370
|
+
expect {compile_collect_log(MANIFEST_WO_NODE)}.not_to raise_error
|
371
|
+
expect(warnings).to include(/Capability Mapping is deprecated/) # there are two of these
|
372
|
+
expect(warnings).to include(/Application is deprecated/)
|
373
|
+
expect(warnings).to include(/Site Definition is deprecated/)
|
374
|
+
end
|
375
|
+
|
369
376
|
context "for producing node" do
|
370
377
|
let(:compiled_node) { Puppet::Node.new('first', :environment => env) }
|
371
378
|
let(:compiled_catalog) { compile_to_catalog(MANIFEST, compiled_node)}
|
@@ -105,7 +105,7 @@ describe Puppet::Parser::Scope do
|
|
105
105
|
|
106
106
|
it "should fail if something that isn't a compiler is supplied" do
|
107
107
|
expect {
|
108
|
-
Puppet::Parser::Scope.new(
|
108
|
+
Puppet::Parser::Scope.new(nil)
|
109
109
|
}.to raise_error(Puppet::DevError, /you must pass a compiler instance/)
|
110
110
|
end
|
111
111
|
|
@@ -1578,7 +1578,10 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
1578
1578
|
let(:applicator) { double('apply_executor') }
|
1579
1579
|
|
1580
1580
|
it 'invokes an apply_executor' do
|
1581
|
-
expect(applicator).to receive(:apply).with(
|
1581
|
+
expect(applicator).to receive(:apply).with(
|
1582
|
+
['arg1', 'arg2'],
|
1583
|
+
instance_of(Puppet::Pops::Model::BlockExpression),
|
1584
|
+
scope).and_return(:result)
|
1582
1585
|
src = "apply('arg1', 'arg2') { }"
|
1583
1586
|
Puppet.override(apply_executor: applicator) do
|
1584
1587
|
expect(parser.evaluate_string(scope, src)).to eq(:result)
|
@@ -1595,6 +1598,17 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
1595
1598
|
expect(parser.evaluate_string(scope, src)).to eq(:result)
|
1596
1599
|
end
|
1597
1600
|
end
|
1601
|
+
|
1602
|
+
it 'returns a BlockExpression with an empty apply block' do
|
1603
|
+
expect(applicator).to receive(:apply).with(
|
1604
|
+
[['arg1']],
|
1605
|
+
instance_of(Puppet::Pops::Model::BlockExpression),
|
1606
|
+
scope).and_return(:result)
|
1607
|
+
src = "apply(['arg1']) { }"
|
1608
|
+
Puppet.override(apply_executor: applicator) do
|
1609
|
+
expect(parser.evaluate_string(scope, src)).to eq(:result)
|
1610
|
+
end
|
1611
|
+
end
|
1598
1612
|
end
|
1599
1613
|
end
|
1600
1614
|
|
@@ -461,7 +461,7 @@ describe 'loaders' do
|
|
461
461
|
it "a function with syntax error has helpful error message" do
|
462
462
|
expect {
|
463
463
|
loader.load_typed(typed_name(:function, 'func_with_syntax_error'))
|
464
|
-
}.to raise_error(/syntax error, unexpected (keyword_)?end/)
|
464
|
+
}.to raise_error(/syntax error, unexpected (keyword_|`)?end/)
|
465
465
|
end
|
466
466
|
end
|
467
467
|
|
@@ -296,10 +296,15 @@ module Serialization
|
|
296
296
|
expect(val2).to be_a(Types::PObjectTypeExtension)
|
297
297
|
expect(val2).to eql(val)
|
298
298
|
end
|
299
|
+
|
300
|
+
it 'with POjbectTypeExtension type being converted' do
|
301
|
+
val = { 'ObjectExtension' => type.create(34) }
|
302
|
+
expect(to_converter.convert(val))
|
303
|
+
.to eq({"ObjectExtension"=>{"__ptype"=>"MyType", "x"=>34}})
|
304
|
+
end
|
299
305
|
end
|
300
306
|
end
|
301
307
|
|
302
|
-
|
303
308
|
it 'Array of rich data' do
|
304
309
|
# Sensitive omitted because it doesn't respond to ==
|
305
310
|
val = [
|
@@ -1334,8 +1334,6 @@ describe 'The type calculator' do
|
|
1334
1334
|
|
1335
1335
|
it 'should recognize mapped ruby types' do
|
1336
1336
|
{ Integer => PIntegerType::DEFAULT,
|
1337
|
-
Fixnum => PIntegerType::DEFAULT,
|
1338
|
-
Bignum => PIntegerType::DEFAULT,
|
1339
1337
|
Float => PFloatType::DEFAULT,
|
1340
1338
|
Numeric => PNumericType::DEFAULT,
|
1341
1339
|
NilClass => PUndefType::DEFAULT,
|
@@ -2147,14 +2145,6 @@ describe 'The type calculator' do
|
|
2147
2145
|
end
|
2148
2146
|
|
2149
2147
|
context 'when converting a ruby class' do
|
2150
|
-
it 'should yield \'PIntegerType\' for Fixnum' do
|
2151
|
-
expect(calculator.type(Fixnum).class).to eq(PIntegerType)
|
2152
|
-
end
|
2153
|
-
|
2154
|
-
it 'should yield \'PIntegerType\' for Bignum' do
|
2155
|
-
expect(calculator.type(Bignum).class).to eq(PIntegerType)
|
2156
|
-
end
|
2157
|
-
|
2158
2148
|
it 'should yield \'PIntegerType\' for Integer' do
|
2159
2149
|
expect(calculator.type(Integer).class).to eq(PIntegerType)
|
2160
2150
|
end
|
@@ -2275,7 +2265,7 @@ describe 'The type calculator' do
|
|
2275
2265
|
it 'should infer PTypeType as the type of ruby classes' do
|
2276
2266
|
class Foo
|
2277
2267
|
end
|
2278
|
-
[Object, Numeric, Integer,
|
2268
|
+
[Object, Numeric, Integer, Float, String, Regexp, Array, Hash, Foo].each do |c|
|
2279
2269
|
expect(calculator.infer(c).is_a?(PTypeType)).to eq(true)
|
2280
2270
|
end
|
2281
2271
|
end
|
@@ -486,10 +486,15 @@ describe "validating 4x" do
|
|
486
486
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::EXPRESSION_NOT_SUPPORTED_WHEN_SCRIPTING)
|
487
487
|
end
|
488
488
|
|
489
|
-
it '
|
489
|
+
it 'allows node expressions' do
|
490
490
|
acceptor = validate(parse('apply("foo.example.com") { node default {} }'))
|
491
|
+
expect(acceptor.error_count).to eql(0)
|
492
|
+
end
|
493
|
+
|
494
|
+
it 'produces an error for node expressions nested in a block' do
|
495
|
+
acceptor = validate(parse('apply("foo.example.com") { if true { node default {} } }'))
|
491
496
|
expect(acceptor.error_count).to eql(1)
|
492
|
-
expect(acceptor).to have_issue(Puppet::Pops::Issues::
|
497
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::NOT_TOP_LEVEL)
|
493
498
|
end
|
494
499
|
|
495
500
|
it 'produces an error for resource definitions' do
|
@@ -418,15 +418,29 @@ bin:2
|
|
418
418
|
end
|
419
419
|
|
420
420
|
describe '#ia_module_args' do
|
421
|
-
it 'returns no arguments if
|
421
|
+
it 'returns no arguments if ia_load_module parameter or forcelocal parameter are not specified' do
|
422
422
|
allow(provider.resource).to receive(:[]).with(:ia_load_module).and_return(nil)
|
423
|
+
allow(provider.resource).to receive(:[]).with(:forcelocal).and_return(nil)
|
423
424
|
expect(provider.ia_module_args).to eql([])
|
424
425
|
end
|
425
426
|
|
426
|
-
it 'returns the ia_load_module as a CLI argument' do
|
427
|
+
it 'returns the ia_load_module as a CLI argument when ia_load_module is specified' do
|
427
428
|
allow(provider.resource).to receive(:[]).with(:ia_load_module).and_return('module')
|
429
|
+
allow(provider.resource).to receive(:[]).with(:forcelocal).and_return(nil)
|
428
430
|
expect(provider.ia_module_args).to eql(['-R', 'module'])
|
429
431
|
end
|
432
|
+
|
433
|
+
it 'returns "files" as a CLI argument when forcelocal is specified' do
|
434
|
+
allow(provider.resource).to receive(:[]).with(:ia_load_module).and_return(nil)
|
435
|
+
allow(provider.resource).to receive(:[]).with(:forcelocal).and_return(true)
|
436
|
+
expect(provider.ia_module_args).to eql(['-R', 'files'])
|
437
|
+
end
|
438
|
+
|
439
|
+
it 'raises argument error when both ia_load_module and forcelocal parameters are set' do
|
440
|
+
allow(provider.resource).to receive(:[]).with(:ia_load_module).and_return('files')
|
441
|
+
allow(provider.resource).to receive(:[]).with(:forcelocal).and_return(true)
|
442
|
+
expect { provider.ia_module_args }.to raise_error(ArgumentError, "Cannot have both 'forcelocal' and 'ia_load_module' at the same time!")
|
443
|
+
end
|
430
444
|
end
|
431
445
|
|
432
446
|
describe '#lscmd' do
|
@@ -14,10 +14,11 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
14
14
|
|
15
15
|
let(:resource) { Puppet::Type.type(:group).new(:name => 'mygroup', :provider => provider) }
|
16
16
|
let(:provider) { described_class.new(:name => 'mygroup') }
|
17
|
+
let(:members) { ['user2', 'user1', 'user3'] }
|
17
18
|
|
18
19
|
describe "#create" do
|
19
20
|
before do
|
20
|
-
|
21
|
+
allow(provider).to receive(:exists?).and_return(false)
|
21
22
|
end
|
22
23
|
|
23
24
|
it "should add -o when allowdupe is enabled and the group is being created" do
|
@@ -42,77 +43,149 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
|
-
describe "on systems with
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
it "should use lgroupadd instead of groupadd" do
|
52
|
-
expect(provider).to receive(:execute).with(including('/usr/sbin/lgroupadd'), hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
53
|
-
provider.create
|
54
|
-
end
|
46
|
+
describe "on systems with libuser" do
|
47
|
+
describe "with forcelocal=true" do
|
48
|
+
before do
|
49
|
+
described_class.has_feature(:manages_local_users_and_groups)
|
50
|
+
resource[:forcelocal] = :true
|
51
|
+
end
|
55
52
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
it "should use lgroupadd instead of groupadd" do
|
54
|
+
expect(provider).to receive(:execute).with(including('/usr/sbin/lgroupadd'), hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
55
|
+
provider.create
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should NOT pass -o to lgroupadd" do
|
59
|
+
resource[:allowdupe] = :true
|
60
|
+
expect(provider).to receive(:execute).with(excluding('-o'), hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
61
|
+
provider.create
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should raise an exception for duplicate GID if allowdupe is not set and duplicate GIDs exist" do
|
65
|
+
resource[:gid] = 505
|
66
|
+
allow(provider).to receive(:findgroup).and_return(true)
|
67
|
+
expect { provider.create }.to raise_error(Puppet::Error, "GID 505 already exists, use allowdupe to force group creation")
|
68
|
+
end
|
60
69
|
end
|
61
70
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
describe "with a list of members" do
|
72
|
+
before do
|
73
|
+
members.each { |m| allow(Etc).to receive(:getpwnam).with(m).and_return(true) }
|
74
|
+
|
75
|
+
described_class.has_feature(:manages_members)
|
76
|
+
resource[:forcelocal] = false
|
77
|
+
resource[:members] = members
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should use lgroupmod to add the members" do
|
81
|
+
allow(provider).to receive(:execute).with(['/usr/sbin/groupadd', 'mygroup'], hash_including({:failonfail => true, :combine => true, :custom_environment => {}})).and_return(true)
|
82
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/lgroupmod', '-M', members.join(','), 'mygroup'], hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
83
|
+
provider.create
|
84
|
+
end
|
85
|
+
end
|
67
86
|
end
|
68
87
|
end
|
69
88
|
|
70
89
|
describe "#modify" do
|
71
90
|
before do
|
72
|
-
|
91
|
+
allow(provider).to receive(:exists?).and_return(true)
|
73
92
|
end
|
74
93
|
|
75
|
-
describe "on systems with
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
94
|
+
describe "on systems with libuser" do
|
95
|
+
describe "with forcelocal=false" do
|
96
|
+
before do
|
97
|
+
described_class.has_feature(:manages_local_users_and_groups)
|
98
|
+
resource[:forcelocal] = :false
|
99
|
+
end
|
80
100
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
101
|
+
it "should use groupmod" do
|
102
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/groupmod', '-g', 150, 'mygroup'], hash_including({:failonfail => true, :combine => true, :custom_environment => {}}))
|
103
|
+
provider.gid = 150
|
104
|
+
end
|
85
105
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
106
|
+
it "should pass -o to groupmod" do
|
107
|
+
resource[:allowdupe] = :true
|
108
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/groupmod', '-g', 150, '-o', 'mygroup'], hash_including({:failonfail => true, :combine => true, :custom_environment => {}}))
|
109
|
+
provider.gid = 150
|
110
|
+
end
|
90
111
|
end
|
91
|
-
end
|
92
112
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
113
|
+
describe "with forcelocal=true" do
|
114
|
+
before do
|
115
|
+
described_class.has_feature(:manages_local_users_and_groups)
|
116
|
+
resource[:forcelocal] = :true
|
117
|
+
end
|
98
118
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
119
|
+
it "should use lgroupmod instead of groupmod" do
|
120
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/lgroupmod', '-g', 150, 'mygroup'], hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
121
|
+
provider.gid = 150
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should NOT pass -o to lgroupmod" do
|
125
|
+
resource[:allowdupe] = :true
|
126
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/lgroupmod', '-g', 150, 'mygroup'], hash_including(:custom_environment => hash_including('LIBUSER_CONF')))
|
127
|
+
provider.gid = 150
|
128
|
+
end
|
103
129
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
130
|
+
it "should raise an exception for duplicate GID if allowdupe is not set and duplicate GIDs exist" do
|
131
|
+
resource[:gid] = 150
|
132
|
+
resource[:allowdupe] = :false
|
133
|
+
allow(provider).to receive(:findgroup).and_return(true)
|
134
|
+
expect { provider.gid = 150 }.to raise_error(Puppet::Error, "GID 150 already exists, use allowdupe to force group creation")
|
135
|
+
end
|
108
136
|
end
|
109
137
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
138
|
+
describe "with members=something" do
|
139
|
+
before do
|
140
|
+
described_class.has_feature(:manages_members)
|
141
|
+
allow(Etc).to receive(:getpwnam).and_return(true)
|
142
|
+
resource[:members] = members
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "with auth_membership on" do
|
146
|
+
before { resource[:auth_membership] = true }
|
147
|
+
|
148
|
+
it "should purge existing users before adding" do
|
149
|
+
allow(provider).to receive(:members).and_return(members)
|
150
|
+
expect(provider).to receive(:localmodify).with('-m', members.join(','), 'mygroup')
|
151
|
+
provider.modifycmd(:members, ['user1'])
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "with auth_membership off" do
|
156
|
+
before { resource[:auth_membership] = false }
|
157
|
+
|
158
|
+
it "should add to the existing users" do
|
159
|
+
new_members = ['user1', 'user2', 'user3', 'user4']
|
160
|
+
allow(provider).to receive(:members).and_return(members)
|
161
|
+
expect(provider).not_to receive(:localmodify).with('-m', members.join(','), 'mygroup')
|
162
|
+
expect(provider).to receive(:execute).with(['/usr/sbin/lgroupmod', '-M', new_members.join(','), 'mygroup'], kind_of(Hash))
|
163
|
+
provider.members = new_members
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should validate members" do
|
168
|
+
expect(Etc).to receive(:getpwnam).with('user3').and_return(true)
|
169
|
+
provider.modifycmd(:members, ['user3'])
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should validate members list " do
|
173
|
+
expect(Etc).to receive(:getpwnam).with('user3').and_return(true)
|
174
|
+
expect(Etc).to receive(:getpwnam).with('user4').and_return(true)
|
175
|
+
provider.modifycmd(:members, ['user3', 'user4'])
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should validate members list separated by commas" do
|
179
|
+
expect(Etc).to receive(:getpwnam).with('user3').and_return(true)
|
180
|
+
expect(Etc).to receive(:getpwnam).with('user4').and_return(true)
|
181
|
+
provider.modifycmd(:members, ['user3, user4'])
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should raise is validation fails" do
|
185
|
+
expect(Etc).to receive(:getpwnam).with('user3').and_throw(ArgumentError)
|
186
|
+
expect { provider.modifycmd(:members, ['user3']) }.to raise_error(ArgumentError)
|
187
|
+
end
|
188
|
+
end
|
116
189
|
end
|
117
190
|
end
|
118
191
|
|
@@ -124,6 +197,35 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
124
197
|
end
|
125
198
|
end
|
126
199
|
|
200
|
+
describe "#findgroup" do
|
201
|
+
before { allow(File).to receive(:read).with('/etc/group').and_return(content) }
|
202
|
+
|
203
|
+
let(:content) { "sample_group_name:sample_password:sample_gid:sample_user_list" }
|
204
|
+
let(:output) do
|
205
|
+
{
|
206
|
+
group_name: 'sample_group_name',
|
207
|
+
password: 'sample_password',
|
208
|
+
gid: 'sample_gid',
|
209
|
+
user_list: 'sample_user_list',
|
210
|
+
}
|
211
|
+
end
|
212
|
+
|
213
|
+
[:group_name, :password, :gid, :user_list].each do |key|
|
214
|
+
it "finds a group by #{key} when asked" do
|
215
|
+
expect(provider.send(:findgroup, key, "sample_#{key}")).to eq(output)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
it "returns false when specified key/value pair is not found" do
|
220
|
+
expect(provider.send(:findgroup, :group_name, 'invalid_group_name')).to eq(false)
|
221
|
+
end
|
222
|
+
|
223
|
+
it "reads the group file only once per resource" do
|
224
|
+
expect(File).to receive(:read).with('/etc/group').once
|
225
|
+
5.times { provider.send(:findgroup, :group_name, 'sample_group_name') }
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
127
229
|
describe "#delete" do
|
128
230
|
before do
|
129
231
|
allow(provider).to receive(:exists?).and_return(true)
|
@@ -131,7 +233,7 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
131
233
|
|
132
234
|
describe "on systems with the libuser and forcelocal=false" do
|
133
235
|
before do
|
134
|
-
described_class.has_feature(:
|
236
|
+
described_class.has_feature(:manages_local_users_and_groups)
|
135
237
|
resource[:forcelocal] = :false
|
136
238
|
end
|
137
239
|
|
@@ -143,7 +245,7 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
143
245
|
|
144
246
|
describe "on systems with the libuser and forcelocal=true" do
|
145
247
|
before do
|
146
|
-
described_class.has_feature(:
|
248
|
+
described_class.has_feature(:manages_local_users_and_groups)
|
147
249
|
resource[:forcelocal] = :true
|
148
250
|
end
|
149
251
|
|
@@ -153,4 +255,27 @@ describe Puppet::Type.type(:group).provider(:groupadd) do
|
|
153
255
|
end
|
154
256
|
end
|
155
257
|
end
|
258
|
+
|
259
|
+
describe "group type :members property helpers" do
|
260
|
+
describe "#members_to_s" do
|
261
|
+
it "should return an empty string on non-array input" do
|
262
|
+
[Object.new, {}, 1, :symbol, ''].each do |input|
|
263
|
+
expect(provider.members_to_s(input)).to be_empty
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should return an empty string on empty or nil users" do
|
268
|
+
expect(provider.members_to_s([])).to be_empty
|
269
|
+
expect(provider.members_to_s(nil)).to be_empty
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should return a user string for a single user" do
|
273
|
+
expect(provider.members_to_s(['user1'])).to eq('user1')
|
274
|
+
end
|
275
|
+
|
276
|
+
it "should return a user string for multiple users" do
|
277
|
+
expect(provider.members_to_s(['user1', 'user2'])).to eq('user1,user2')
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
156
281
|
end
|