puppet 6.11.1 → 6.16.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +3 -8
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +1 -0
- data/Gemfile.lock +39 -36
- data/README.md +17 -24
- data/ext/build_defaults.yaml +1 -0
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +25 -20
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +12 -14
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +85 -83
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +158 -40
- data/lib/puppet/environments.rb +30 -20
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/face/facts.rb +8 -5
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +13 -9
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +31 -86
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +7 -0
- data/lib/puppet/http/client.rb +341 -54
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +34 -0
- data/lib/puppet/http/resolver.rb +57 -1
- data/lib/puppet/http/resolver/server_list.rb +98 -0
- data/lib/puppet/http/resolver/settings.rb +23 -2
- data/lib/puppet/http/resolver/srv.rb +36 -4
- data/lib/puppet/http/response.rb +68 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +179 -3
- data/lib/puppet/http/service/ca.rb +84 -21
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +66 -0
- data/lib/puppet/http/session.rb +106 -31
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +4 -4
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/base_pool.rb +19 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +182 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +24 -8
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +9 -29
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
- data/lib/puppet/parser/compiler.rb +42 -32
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +30 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +78 -4
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +5 -5
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +108 -24
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +23 -5
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -8
- data/lib/puppet/reports/http.rb +13 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +32 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_provider.rb +20 -0
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +7 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +7 -2
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/file/source.rb +49 -58
- data/lib/puppet/type/group.rb +5 -4
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/user.rb +6 -30
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +50 -20
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +640 -521
- data/man/man5/puppet.conf.5 +88 -9
- data/man/man8/puppet-agent.8 +6 -6
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/forge/bacula.json +76 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
- data/spec/integration/application/agent_spec.rb +394 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/http/client_spec.rb +154 -0
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +51 -0
- data/spec/integration/network/http_pool_spec.rb +76 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +20 -9
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +400 -406
- data/spec/unit/context/trusted_information_spec.rb +17 -0
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +38 -4
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +395 -27
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +81 -12
- data/spec/unit/http/response_spec.rb +69 -0
- data/spec/unit/http/service/ca_spec.rb +100 -7
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +118 -0
- data/spec/unit/http/service_spec.rb +117 -4
- data/spec/unit/http/session_spec.rb +237 -19
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/network/http/connection_spec.rb +549 -176
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkg_spec.rb +15 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +9 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +92 -12
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +21 -8
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +4 -0
- data/spec/unit/transaction_spec.rb +45 -1
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +86 -35
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +6 -35
- metadata +92 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -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
|
|
@@ -478,21 +478,26 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
478
478
|
}.each do |source, coerced_val|
|
479
479
|
it "should warn about numeric coercion in '#{source}' when strict = warning" do
|
480
480
|
Puppet[:strict] = :warning
|
481
|
+
expect(Puppet::Pops::Evaluator::Runtime3Support::EvaluationError).not_to receive(:new)
|
481
482
|
collect_notices(source)
|
482
483
|
expect(warnings).to include(/The string '#{coerced_val}' was automatically coerced to the numerical value #{coerced_val}/)
|
483
484
|
end
|
484
485
|
|
485
486
|
it "should not warn about numeric coercion in '#{source}' if strict = off" do
|
486
487
|
Puppet[:strict] = :off
|
488
|
+
expect(Puppet::Pops::Evaluator::Runtime3Support::EvaluationError).not_to receive(:new)
|
487
489
|
collect_notices(source)
|
488
490
|
expect(warnings).to_not include(/The string '#{coerced_val}' was automatically coerced to the numerical value #{coerced_val}/)
|
489
491
|
end
|
490
492
|
|
491
493
|
it "should error when finding numeric coercion in '#{source}' if strict = error" do
|
492
494
|
Puppet[:strict] = :error
|
493
|
-
expect {
|
494
|
-
|
495
|
-
|
495
|
+
expect {
|
496
|
+
parser.evaluate_string(scope, source, __FILE__)
|
497
|
+
}.to raise_error {|error|
|
498
|
+
expect(error.message).to match(/The string '#{coerced_val}' was automatically coerced to the numerical value #{coerced_val}/)
|
499
|
+
expect(error.backtrace.first).to match(/runtime3_support\.rb.+optionally_fail/)
|
500
|
+
}
|
496
501
|
end
|
497
502
|
end
|
498
503
|
|
@@ -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 = [
|
@@ -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
|
@@ -33,13 +33,18 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
33
33
|
let(:user1) { double(:account => 'user1', :domain => '.', :sid => 'user1sid') }
|
34
34
|
let(:user2) { double(:account => 'user2', :domain => '.', :sid => 'user2sid') }
|
35
35
|
let(:user3) { double(:account => 'user3', :domain => '.', :sid => 'user3sid') }
|
36
|
+
let(:user_without_domain) { double(:account => 'user_without_domain', :domain => nil, :sid => 'user_without_domain_sid') }
|
37
|
+
|
36
38
|
let(:invalid_user) { SecureRandom.uuid }
|
39
|
+
let(:invalid_user_principal) { double(:account => "#{invalid_user}", :domain => nil, :sid => "#{invalid_user}") }
|
37
40
|
|
38
41
|
before :each do
|
39
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user1').and_return(user1)
|
40
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2').and_return(user2)
|
41
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3').and_return(user3)
|
42
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user1', any_args).and_return(user1)
|
43
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2', any_args).and_return(user2)
|
44
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3', any_args).and_return(user3)
|
45
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user_without_domain', any_args).and_return(user_without_domain)
|
42
46
|
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(invalid_user).and_return(nil)
|
47
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(invalid_user, true).and_return(invalid_user_principal)
|
43
48
|
end
|
44
49
|
|
45
50
|
describe "#members_insync?" do
|
@@ -199,7 +204,15 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
199
204
|
]
|
200
205
|
expect(provider.members_insync?(current, ['user2','user1'])).to be_truthy
|
201
206
|
end
|
207
|
+
|
208
|
+
it "should return true even if a current user is unresolvable if should is included" do
|
209
|
+
current = [
|
210
|
+
"#{invalid_user}",
|
211
|
+
'user2',
|
212
|
+
]
|
213
|
+
expect(provider.members_insync?(current, ['user2'])).to be_truthy
|
202
214
|
end
|
215
|
+
end
|
203
216
|
end
|
204
217
|
|
205
218
|
describe "#members_to_s" do
|
@@ -222,8 +235,8 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
222
235
|
expect(provider.members_to_s(['user1', 'user2'])).to eq('.\user1,.\user2')
|
223
236
|
end
|
224
237
|
|
225
|
-
it "should return
|
226
|
-
expect(provider.members_to_s([
|
238
|
+
it "should return a user string without domain if domain is not set" do
|
239
|
+
expect(provider.members_to_s(['user_without_domain'])).to eq('user_without_domain')
|
227
240
|
end
|
228
241
|
|
229
242
|
it "should return the username when it cannot be resolved to a SID (for the sake of resource_harness error messages)" do
|
@@ -237,10 +250,14 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
237
250
|
let(:user2) { double(:account => 'user2', :domain => '.', :sid => 'user2sid') }
|
238
251
|
let(:user3) { double(:account => 'user3', :domain => '.', :sid => 'user3sid') }
|
239
252
|
|
253
|
+
let(:invalid_user) { SecureRandom.uuid }
|
254
|
+
let(:invalid_user_principal) { double(:account => "#{invalid_user}", :domain => nil, :sid => "#{invalid_user}") }
|
255
|
+
|
240
256
|
before :each do
|
241
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user1').and_return(user1)
|
242
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2').and_return(user2)
|
243
|
-
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3').and_return(user3)
|
257
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user1', any_args).and_return(user1)
|
258
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2', any_args).and_return(user2)
|
259
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3', any_args).and_return(user3)
|
260
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with(invalid_user, true).and_return(invalid_user_principal)
|
244
261
|
|
245
262
|
resource[:auth_membership] = true
|
246
263
|
end
|
@@ -261,6 +278,22 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
261
278
|
expect(provider.members).to match_array(expected_members)
|
262
279
|
end
|
263
280
|
|
281
|
+
it "should be able to handle unresolvable SID in list of members" do
|
282
|
+
allow(provider.group).to receive(:members).and_return([
|
283
|
+
'user1',
|
284
|
+
"#{invalid_user}",
|
285
|
+
'user3',
|
286
|
+
])
|
287
|
+
|
288
|
+
expected_member_sids = [user1.sid, invalid_user_principal.sid, user3.sid]
|
289
|
+
expected_members = ['user1', "#{invalid_user}", 'user3']
|
290
|
+
allow(provider).to receive(:members_to_s)
|
291
|
+
.with(expected_member_sids)
|
292
|
+
.and_return(expected_members.join(','))
|
293
|
+
|
294
|
+
expect(provider.members).to match_array(expected_members)
|
295
|
+
end
|
296
|
+
|
264
297
|
it "should be able to set group members" do
|
265
298
|
allow(provider.group).to receive(:members).and_return(['user1', 'user2'])
|
266
299
|
|
@@ -272,8 +305,8 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
272
305
|
|
273
306
|
allow(provider.group).to receive(:member_sids).and_return(member_sids[0..1])
|
274
307
|
|
275
|
-
expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2').and_return(member_sids[1])
|
276
|
-
expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3').and_return(member_sids[2])
|
308
|
+
expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user2', any_args).and_return(member_sids[1])
|
309
|
+
expect(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('user3', any_args).and_return(member_sids[2])
|
277
310
|
|
278
311
|
expect(provider.group).to receive(:remove_member_sids).with(member_sids[0])
|
279
312
|
expect(provider.group).to receive(:add_member_sids).with(member_sids[2])
|