puppet 4.3.2-x64-mingw32 → 4.4.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/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.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/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- 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 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- 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 +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -151,12 +151,14 @@ describe provider_class do
|
|
151
151
|
|
152
152
|
describe "get_latest_version" do
|
153
153
|
it "should rereturn nil when the current package is the latest" do
|
154
|
-
|
154
|
+
version_list = File.read(my_fixture('pkg.version'))
|
155
|
+
nmap_latest_version = provider_class.get_latest_version('security/nmap', version_list)
|
155
156
|
expect(nmap_latest_version).to be_nil
|
156
157
|
end
|
157
158
|
|
158
159
|
it "should match the package name exactly" do
|
159
|
-
|
160
|
+
version_list = File.read(my_fixture('pkg.version'))
|
161
|
+
bash_comp_latest_version = provider_class.get_latest_version('shells/bash-completion', version_list)
|
160
162
|
expect(bash_comp_latest_version).to eq('2.1_3')
|
161
163
|
end
|
162
164
|
end
|
@@ -505,6 +505,17 @@ describe provider_class do
|
|
505
505
|
expect(output).to include("yum-plugin-fastestmirror.noarch")
|
506
506
|
end
|
507
507
|
end
|
508
|
+
describe "with broken update notices" do
|
509
|
+
let(:check_update) { File.read(my_fixture('yum-check-update-broken-notices.txt')) }
|
510
|
+
let(:output) { described_class.parse_updates(check_update) }
|
511
|
+
|
512
|
+
it "ignores all entries including and after 'Update'" do
|
513
|
+
expect(output).not_to include("Update")
|
514
|
+
end
|
515
|
+
it "includes updates before 'Update'" do
|
516
|
+
expect(output).to include("yum-plugin-fastestmirror.noarch")
|
517
|
+
end
|
518
|
+
end
|
508
519
|
end
|
509
520
|
|
510
521
|
describe "parsing a line from yum check-update" do
|
@@ -214,4 +214,18 @@ describe provider_class do
|
|
214
214
|
@provider.install
|
215
215
|
end
|
216
216
|
end
|
217
|
+
|
218
|
+
describe 'when uninstalling' do
|
219
|
+
it 'should use remove to uninstall on zypper version 1.6 and above' do
|
220
|
+
@provider.stubs(:zypper_version).returns '1.6.308'
|
221
|
+
@provider.expects(:zypper).with(:remove, '--no-confirm', 'mypackage')
|
222
|
+
@provider.uninstall
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'should use remove --force-solution to uninstall on zypper versions between 1.0 and 1.6' do
|
226
|
+
@provider.stubs(:zypper_version).returns '1.0.2'
|
227
|
+
@provider.expects(:zypper).with(:remove, '--no-confirm', '--force-resolution', 'mypackage')
|
228
|
+
@provider.uninstall
|
229
|
+
end
|
230
|
+
end
|
217
231
|
end
|
@@ -4,6 +4,7 @@
|
|
4
4
|
require 'spec_helper'
|
5
5
|
|
6
6
|
describe Puppet::Type.type(:service).provider(:launchd) do
|
7
|
+
let (:plistlib) { Puppet::Util::Plist }
|
7
8
|
let (:joblabel) { "com.foo.food" }
|
8
9
|
let (:provider) { subject.class }
|
9
10
|
let(:resource) { Puppet::Type.type(:service).new(:name => joblabel, :provider => :launchd) }
|
@@ -43,21 +44,21 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
43
44
|
it "should return true if the job plist says disabled is true and the global overrides says disabled is false" do
|
44
45
|
provider.expects(:get_os_version).returns(kernel).at_least_once
|
45
46
|
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => true}])
|
46
|
-
|
47
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_6_9).returns({joblabel => {"Disabled" => false}})
|
47
48
|
FileTest.expects(:file?).with(launchd_overrides_6_9).returns(true)
|
48
49
|
expect(subject.enabled?).to eq(:true)
|
49
50
|
end
|
50
51
|
it "should return false if the job plist says disabled is false and the global overrides says disabled is true" do
|
51
52
|
provider.expects(:get_os_version).returns(kernel).at_least_once
|
52
53
|
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => false}])
|
53
|
-
|
54
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_6_9).returns({joblabel => {"Disabled" => true}})
|
54
55
|
FileTest.expects(:file?).with(launchd_overrides_6_9).returns(true)
|
55
56
|
expect(subject.enabled?).to eq(:false)
|
56
57
|
end
|
57
58
|
it "should return true if the job plist and the global overrides have no disabled keys" do
|
58
59
|
provider.expects(:get_os_version).returns(kernel).at_least_once
|
59
60
|
subject.expects(:plist_from_label).returns([joblabel, {}])
|
60
|
-
|
61
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_6_9).returns({})
|
61
62
|
FileTest.expects(:file?).with(launchd_overrides_6_9).returns(true)
|
62
63
|
expect(subject.enabled?).to eq(:true)
|
63
64
|
end
|
@@ -68,21 +69,21 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
68
69
|
it "should return true if the job plist says disabled is true and the global overrides says disabled is false" do
|
69
70
|
provider.expects(:get_os_version).returns(14).at_least_once
|
70
71
|
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => true}])
|
71
|
-
|
72
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_10_).returns({joblabel => false})
|
72
73
|
FileTest.expects(:file?).with(launchd_overrides_10_).returns(true)
|
73
74
|
expect(subject.enabled?).to eq(:true)
|
74
75
|
end
|
75
76
|
it "should return false if the job plist says disabled is false and the global overrides says disabled is true" do
|
76
77
|
provider.expects(:get_os_version).returns(14).at_least_once
|
77
78
|
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => false}])
|
78
|
-
|
79
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_10_).returns({joblabel => true})
|
79
80
|
FileTest.expects(:file?).with(launchd_overrides_10_).returns(true)
|
80
81
|
expect(subject.enabled?).to eq(:false)
|
81
82
|
end
|
82
83
|
it "should return true if the job plist and the global overrides have no disabled keys" do
|
83
84
|
provider.expects(:get_os_version).returns(14).at_least_once
|
84
85
|
subject.expects(:plist_from_label).returns([joblabel, {}])
|
85
|
-
|
86
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_10_).returns({})
|
86
87
|
FileTest.expects(:file?).with(launchd_overrides_10_).returns(true)
|
87
88
|
expect(subject.enabled?).to eq(:true)
|
88
89
|
end
|
@@ -203,8 +204,8 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
203
204
|
it "should write to the global launchd overrides file once" do
|
204
205
|
resource[:enable] = true
|
205
206
|
provider.expects(:get_os_version).returns(kernel).at_least_once
|
206
|
-
|
207
|
-
|
207
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_6_9).returns({})
|
208
|
+
plistlib.expects(:write_plist_file).with(has_entry(resource[:name], {'Disabled' => false}), launchd_overrides_6_9).once
|
208
209
|
subject.enable
|
209
210
|
end
|
210
211
|
end
|
@@ -213,8 +214,8 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
213
214
|
it "should write to the global launchd overrides file once" do
|
214
215
|
resource[:enable] = false
|
215
216
|
provider.expects(:get_os_version).returns(kernel).at_least_once
|
216
|
-
|
217
|
-
|
217
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_6_9).returns({})
|
218
|
+
plistlib.expects(:write_plist_file).with(has_entry(resource[:name], {'Disabled' => true}), launchd_overrides_6_9).once
|
218
219
|
subject.disable
|
219
220
|
end
|
220
221
|
end
|
@@ -224,8 +225,8 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
224
225
|
it "should write to the global launchd overrides file once" do
|
225
226
|
resource[:enable] = true
|
226
227
|
provider.expects(:get_os_version).returns(14).at_least_once
|
227
|
-
|
228
|
-
|
228
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_10_).returns({})
|
229
|
+
plistlib.expects(:write_plist_file).with(has_entry(resource[:name], false), launchd_overrides_10_).once
|
229
230
|
subject.enable
|
230
231
|
end
|
231
232
|
end
|
@@ -234,8 +235,8 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
234
235
|
it "should write to the global launchd overrides file once" do
|
235
236
|
resource[:enable] = false
|
236
237
|
provider.expects(:get_os_version).returns(14).at_least_once
|
237
|
-
|
238
|
-
|
238
|
+
plistlib.expects(:read_plist_file).with(launchd_overrides_10_).returns({})
|
239
|
+
plistlib.expects(:write_plist_file).with(has_entry(resource[:name], true), launchd_overrides_10_).once
|
239
240
|
subject.disable
|
240
241
|
end
|
241
242
|
end
|
@@ -259,29 +260,10 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
259
260
|
it "[17624] should warn that the plist in question is being skipped" do
|
260
261
|
provider.expects(:launchd_paths).returns(['/Library/LaunchAgents'])
|
261
262
|
provider.expects(:return_globbed_list_of_file_paths).with('/Library/LaunchAgents').returns([busted_plist_path])
|
262
|
-
|
263
|
+
plistlib.expects(:read_plist_file).with(busted_plist_path).returns(plist_without_label)
|
263
264
|
Puppet.expects(:warning).with("The #{busted_plist_path} plist does not contain a 'label' key; Puppet is skipping it")
|
264
265
|
provider.make_label_to_path_map
|
265
266
|
end
|
266
|
-
|
267
|
-
it "[15929] should skip plists that plutil cannot read" do
|
268
|
-
Plist.expects(:parse_xml).with(busted_plist_path).raises(ArgumentError, 'boom')
|
269
|
-
Puppet.expects(:debug).with("Error reading #{busted_plist_path}: boom. Retrying with plutil.")
|
270
|
-
provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout',
|
271
|
-
busted_plist_path).raises(Puppet::ExecutionFailure, 'boom')
|
272
|
-
Puppet.expects(:warning).with("Cannot read file #{busted_plist_path}; " +
|
273
|
-
"Puppet is skipping it. \n" +
|
274
|
-
"Details: boom")
|
275
|
-
provider.read_plist(busted_plist_path)
|
276
|
-
end
|
277
|
-
|
278
|
-
it "should read binary plists with plutil" do
|
279
|
-
Plist.expects(:parse_xml).with(binary_plist_path).raises(ArgumentError, 'boom')
|
280
|
-
Puppet.expects(:debug).with("Error reading #{binary_plist_path}: boom. Retrying with plutil.")
|
281
|
-
provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', binary_plist_path).returns('plist')
|
282
|
-
Plist.expects(:parse_xml).with('plist').returns('plist_map')
|
283
|
-
expect(provider.read_plist(binary_plist_path)).to eq('plist_map')
|
284
|
-
end
|
285
267
|
end
|
286
268
|
it "should return the cached value when available" do
|
287
269
|
provider.instance_variable_set(:@label_to_path_map, {'xx'=>'yy'})
|
@@ -295,7 +277,7 @@ describe Puppet::Type.type(:service).provider(:launchd) do
|
|
295
277
|
provider.instance_variable_set(:@label_to_path_map, nil)
|
296
278
|
provider.expects(:launchd_paths).returns([launchd_dir])
|
297
279
|
provider.expects(:return_globbed_list_of_file_paths).with(launchd_dir).returns([plist])
|
298
|
-
|
280
|
+
plistlib.expects(:read_plist_file).with(plist).returns({'Label'=>'foo.bar.service'})
|
299
281
|
end
|
300
282
|
it "should read the plists and return their contents" do
|
301
283
|
expect(provider.make_label_to_path_map).to eq({label=>plist})
|
@@ -112,6 +112,13 @@ describe Puppet::Type.type(:service).provider(:systemd) do
|
|
112
112
|
expect(described_class).to be_default
|
113
113
|
end
|
114
114
|
|
115
|
+
it "should be the default provider on ubuntu16.04" do
|
116
|
+
Facter.stubs(:value).with(:osfamily).returns(:debian)
|
117
|
+
Facter.stubs(:value).with(:operatingsystem).returns(:ubuntu)
|
118
|
+
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("16.04")
|
119
|
+
expect(described_class).to be_default
|
120
|
+
end
|
121
|
+
|
115
122
|
[:enabled?, :enable, :disable, :start, :stop, :status, :restart].each do |method|
|
116
123
|
it "should have a #{method} method" do
|
117
124
|
expect(provider).to respond_to(method)
|
@@ -41,30 +41,31 @@ describe "sshkey parsed provider" do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
context "with the sample file" do
|
44
|
-
|
45
|
-
|
44
|
+
['sample', 'sample_with_blank_lines'].each do |sample_file|
|
45
|
+
let :fixture do my_fixture(sample_file) end
|
46
|
+
before :each do subject.stubs(:default_target).returns(fixture) end
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
it "should parse to records on prefetch" do
|
49
|
+
expect(subject.target_records(fixture)).to be_empty
|
50
|
+
subject.prefetch
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
it "should reconstitute the file from records" do
|
57
|
-
subject.prefetch
|
58
|
-
records = subject.target_records(fixture)
|
52
|
+
records = subject.target_records(fixture)
|
53
|
+
expect(records).to be_an Array
|
54
|
+
expect(records).to be_all {|x| expect(x).to be_an Hash }
|
55
|
+
end
|
59
56
|
|
60
|
-
|
57
|
+
it "should reconstitute the file from records" do
|
58
|
+
subject.prefetch
|
59
|
+
records = subject.target_records(fixture)
|
60
|
+
text = subject.to_file(records).gsub(/^# HEADER.+\n/, '')
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
oldlines = File.readlines(fixture).map(&:chomp)
|
63
|
+
newlines = text.chomp.split("\n")
|
64
|
+
expect(oldlines.length).to eq(newlines.length)
|
65
65
|
|
66
|
-
|
67
|
-
|
66
|
+
oldlines.zip(newlines).each do |old, new|
|
67
|
+
expect(old.gsub(/\s+/, '')).to eq(new.gsub(/\s+/, ''))
|
68
|
+
end
|
68
69
|
end
|
69
70
|
end
|
70
71
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
#! /usr/bin/env ruby -S rspec
|
2
2
|
# encoding: ASCII-8BIT
|
3
3
|
require 'spec_helper'
|
4
|
-
|
4
|
+
|
5
|
+
module Puppet::Util::Plist
|
6
|
+
end
|
5
7
|
|
6
8
|
describe Puppet::Type.type(:user).provider(:directoryservice) do
|
7
9
|
let(:username) { 'nonexistent_user' }
|
@@ -14,7 +16,6 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
14
16
|
end
|
15
17
|
let(:provider) { resource.provider }
|
16
18
|
let(:users_plist_dir) { '/var/db/dslocal/nodes/Default/users' }
|
17
|
-
let(:stringio_object) { StringIO.new('new_stringio_object') }
|
18
19
|
|
19
20
|
# This is the output of doing `dscl -plist . read /Users/<username>` which
|
20
21
|
# will return a hash of keys whose values are all arrays.
|
@@ -82,9 +83,9 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
82
83
|
|
83
84
|
# The below is the result of converting sha512_embedded_bplist to XML and
|
84
85
|
# parsing it with Plist.parse_xml. It is a Ruby Hash whose value is a
|
85
|
-
#
|
86
|
+
# Base64 encoded salted-SHA512 password hash.
|
86
87
|
let(:sha512_embedded_bplist_hash) do
|
87
|
-
{ 'SALTED-SHA512' =>
|
88
|
+
{ 'SALTED-SHA512' => sha512_pw_string }
|
88
89
|
end
|
89
90
|
|
90
91
|
# The value below is the result of converting sha512_pw_string to Hex.
|
@@ -106,8 +107,8 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
106
107
|
let(:pbkdf2_embedded_bplist_hash) do
|
107
108
|
{
|
108
109
|
'SALTED-SHA512-PBKDF2' => {
|
109
|
-
'entropy' =>
|
110
|
-
'salt' =>
|
110
|
+
'entropy' => pbkdf2_pw_string,
|
111
|
+
'salt' => pbkdf2_salt_string,
|
111
112
|
'iterations' => pbkdf2_iterations_value
|
112
113
|
}
|
113
114
|
}
|
@@ -290,7 +291,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
290
291
|
end
|
291
292
|
end
|
292
293
|
|
293
|
-
describe 'self#get_all_users' do
|
294
|
+
describe 'self#get_all_users', :if => Puppet.features.cfpropertylist? do
|
294
295
|
let(:empty_plist) do
|
295
296
|
'<?xml version="1.0" encoding="UTF-8"?>
|
296
297
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
@@ -332,7 +333,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
332
333
|
provider.class.stubs(:get_all_users).returns(testuser_hash)
|
333
334
|
provider.class.stubs(:get_attribute_from_dscl).with('Users', username, 'ShadowHashData').returns(sha512_shadowhashdata_hash)
|
334
335
|
provider.class.stubs(:get_list_of_groups).returns(group_plist_hash_guid)
|
335
|
-
provider.class.stubs(:
|
336
|
+
provider.class.stubs(:convert_binary_to_hash).with(sha512_embedded_bplist).returns(sha512_embedded_bplist_hash)
|
336
337
|
provider.class.prefetch({})
|
337
338
|
end
|
338
339
|
|
@@ -488,13 +489,13 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
488
489
|
|
489
490
|
it 'should call the get_salted_sha512 method on 10.7 and return the correct hash' do
|
490
491
|
provider.class.expects(:get_attribute_from_dscl).with('Users', username, 'ShadowHashData').returns(sha512_shadowhashdata_hash)
|
491
|
-
provider.class.expects(:
|
492
|
+
provider.class.expects(:convert_binary_to_hash).with(sha512_embedded_bplist).returns(sha512_embedded_bplist_hash)
|
492
493
|
expect(provider.class.prefetch({}).first.password).to eq(sha512_password_hash)
|
493
494
|
end
|
494
495
|
|
495
496
|
it 'should call the get_salted_sha512_pbkdf2 method on 10.8 and return the correct hash' do
|
496
497
|
provider.class.expects(:get_attribute_from_dscl).with('Users', username,'ShadowHashData').returns(pbkdf2_shadowhashdata_hash)
|
497
|
-
provider.class.expects(:
|
498
|
+
provider.class.expects(:convert_binary_to_hash).with(pbkdf2_embedded_plist).returns(pbkdf2_embedded_bplist_hash)
|
498
499
|
expect(provider.class.prefetch({}).first.password).to eq(pbkdf2_password_hash)
|
499
500
|
end
|
500
501
|
|
@@ -566,7 +567,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
566
567
|
end
|
567
568
|
end
|
568
569
|
|
569
|
-
describe '#get_list_of_groups' do
|
570
|
+
describe '#get_list_of_groups', :if => Puppet.features.cfpropertylist? do
|
570
571
|
# The below value is the result of running `dscl -plist . readall /Groups`
|
571
572
|
# on an OS X system.
|
572
573
|
let(:groups_xml) do
|
@@ -633,7 +634,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
633
634
|
end
|
634
635
|
end
|
635
636
|
|
636
|
-
describe '#get_attribute_from_dscl' do
|
637
|
+
describe '#get_attribute_from_dscl', :if => Puppet.features.cfpropertylist? do
|
637
638
|
# The below value is the result of executing
|
638
639
|
# `dscl -plist . read /Users/<username/ GeneratedUID`
|
639
640
|
# on an OS X system.
|
@@ -662,30 +663,17 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
662
663
|
end
|
663
664
|
end
|
664
665
|
|
665
|
-
describe '#
|
666
|
-
# Because this method relies on a binary that only exists on OS X, a stub
|
667
|
-
# object is needed to expect the calls. This makes testing somewhat...uneventful
|
668
|
-
let(:stub_io_object) { stub('connection') }
|
669
|
-
|
666
|
+
describe '#convert_hash_to_binary' do
|
670
667
|
it 'should use plutil to successfully convert an xml plist to a binary plist' do
|
671
|
-
|
672
|
-
|
673
|
-
stub_io_object.expects(:write).with('xml_plist_data')
|
674
|
-
stub_io_object.expects(:close_write)
|
675
|
-
stub_io_object.expects(:read).returns('binary_plist_data')
|
676
|
-
expect(provider.class.convert_xml_to_binary('ruby_hash')).to eq('binary_plist_data')
|
668
|
+
Puppet::Util::Plist.expects(:dump_plist).with('ruby_hash', :binary).returns('binary_plist_data')
|
669
|
+
expect(provider.class.convert_hash_to_binary('ruby_hash')).to eq('binary_plist_data')
|
677
670
|
end
|
678
671
|
end
|
679
672
|
|
680
|
-
describe '#
|
681
|
-
let(:stub_io_object) { stub('connection') }
|
682
|
-
|
673
|
+
describe '#convert_binary_to_hash' do
|
683
674
|
it 'should accept a binary plist and return a ruby hash containing the plist data' do
|
684
|
-
|
685
|
-
|
686
|
-
stub_io_object.expects(:close_write)
|
687
|
-
stub_io_object.expects(:read).returns(user_plist_xml)
|
688
|
-
expect(provider.class.convert_binary_to_xml('binary_plist_data')).to eq(user_plist_hash)
|
675
|
+
Puppet::Util::Plist.expects(:parse_plist).with('binary_plist_data').returns(user_plist_hash)
|
676
|
+
expect(provider.class.convert_binary_to_hash('binary_plist_data')).to eq(user_plist_hash)
|
689
677
|
end
|
690
678
|
end
|
691
679
|
|
@@ -697,7 +685,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
697
685
|
end
|
698
686
|
|
699
687
|
describe '#get_salted_sha512' do
|
700
|
-
it "should accept a hash whose 'SALTED-SHA512' key contains a
|
688
|
+
it "should accept a hash whose 'SALTED-SHA512' key contains a base64 encoded salted-SHA512 password hash and return the hex value of that password hash" do
|
701
689
|
expect(provider.class.get_salted_sha512(sha512_embedded_bplist_hash)).to eq(sha512_password_hash)
|
702
690
|
end
|
703
691
|
end
|
@@ -764,15 +752,15 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
764
752
|
|
765
753
|
let(:sha512_shadowhashdata) do
|
766
754
|
{
|
767
|
-
'SALTED-SHA512' =>
|
755
|
+
'SALTED-SHA512' => 'blankvalue'
|
768
756
|
}
|
769
757
|
end
|
770
758
|
|
771
759
|
let(:pbkdf2_shadowhashdata) do
|
772
760
|
{
|
773
761
|
'SALTED-SHA512-PBKDF2' => {
|
774
|
-
'entropy' =>
|
775
|
-
'salt' =>
|
762
|
+
'entropy' => 'blank_entropy',
|
763
|
+
'salt' => 'blank_salt',
|
776
764
|
'iterations' => 100
|
777
765
|
}
|
778
766
|
}
|
@@ -797,7 +785,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
797
785
|
";Kerberosv5;;puppet@LKDC:S HA1.35580B1D6366D2890A35D430373FF653297F377D;LKDC:SHA1.35580B1D6366D2890A35D430373FF653297F377D"],
|
798
786
|
"_writers_realname" => ["puppet"],
|
799
787
|
"_writers_hint" => ["puppet"],
|
800
|
-
"ShadowHashData" => [
|
788
|
+
"ShadowHashData" => ['blank']
|
801
789
|
}
|
802
790
|
end
|
803
791
|
|
@@ -827,34 +815,33 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
827
815
|
end
|
828
816
|
|
829
817
|
describe '#set_salted_sha512' do
|
830
|
-
let(:users_plist) { {'ShadowHashData' => [
|
818
|
+
let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
|
831
819
|
let(:sha512_shadow_hash_data) do
|
832
820
|
{
|
833
|
-
'SALTED-SHA512' =>
|
821
|
+
'SALTED-SHA512' => sha512_pw_string
|
834
822
|
}
|
835
823
|
end
|
836
824
|
|
837
825
|
it 'should set the SALTED-SHA512 password hash for a user in 10.7 and call the set_shadow_hash_data method to write the plist to disk' do
|
838
|
-
provider.class.expects(:
|
826
|
+
provider.class.expects(:convert_hash_to_binary).with(sha512_embedded_bplist_hash).returns(sha512_embedded_bplist)
|
839
827
|
provider.expects(:set_shadow_hash_data).with(users_plist, sha512_embedded_bplist)
|
840
828
|
provider.set_salted_sha512(users_plist, sha512_embedded_bplist_hash, sha512_password_hash)
|
841
829
|
end
|
842
830
|
|
843
831
|
it 'should set the salted-SHA512 password, even if a blank shadow_hash_data hash is passed' do
|
844
|
-
provider.expects(:
|
845
|
-
provider.class.expects(:convert_xml_to_binary).with(sha512_shadow_hash_data).returns(sha512_embedded_bplist)
|
832
|
+
provider.class.expects(:convert_hash_to_binary).with(sha512_shadow_hash_data).returns(sha512_embedded_bplist)
|
846
833
|
provider.expects(:set_shadow_hash_data).with(users_plist, sha512_embedded_bplist)
|
847
834
|
provider.set_salted_sha512(users_plist, false, sha512_password_hash)
|
848
835
|
end
|
849
836
|
end
|
850
837
|
|
851
838
|
describe '#set_salted_pbkdf2' do
|
852
|
-
let(:users_plist) { {'ShadowHashData' => [
|
839
|
+
let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
|
853
840
|
let(:entropy_shadow_hash_data) do
|
854
841
|
{
|
855
842
|
'SALTED-SHA512-PBKDF2' =>
|
856
843
|
{
|
857
|
-
'entropy' =>
|
844
|
+
'entropy' => 'binary_string'
|
858
845
|
}
|
859
846
|
}
|
860
847
|
end
|
@@ -862,29 +849,28 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
862
849
|
# This will also catch the edge-case where a 10.6-style user exists on
|
863
850
|
# a 10.8 system and Puppet attempts to set a password
|
864
851
|
it 'should not fail if shadow_hash_data is not a Hash' do
|
865
|
-
provider.expects(:new_stringio_object).returns(stringio_object)
|
866
852
|
provider.expects(:base64_decode_string).with(pbkdf2_password_hash).returns('binary_string')
|
867
|
-
provider.class.expects(:
|
853
|
+
provider.class.expects(:convert_hash_to_binary).with(entropy_shadow_hash_data).returns('binary_plist')
|
868
854
|
provider.expects(:set_shadow_hash_data).with({'passwd' => '********'}, 'binary_plist')
|
869
855
|
provider.set_salted_pbkdf2({}, false, 'entropy', pbkdf2_password_hash)
|
870
856
|
end
|
871
857
|
|
872
858
|
it "should set the PBKDF2 password hash when the 'entropy' field is passed with a valid password hash" do
|
873
|
-
provider.class.expects(:
|
859
|
+
provider.class.expects(:convert_hash_to_binary).with(pbkdf2_embedded_bplist_hash).returns(pbkdf2_embedded_plist)
|
874
860
|
provider.expects(:set_shadow_hash_data).with(users_plist, pbkdf2_embedded_plist)
|
875
861
|
users_plist.expects(:[]=).with('passwd', '********')
|
876
862
|
provider.set_salted_pbkdf2(users_plist, pbkdf2_embedded_bplist_hash, 'entropy', pbkdf2_password_hash)
|
877
863
|
end
|
878
864
|
|
879
865
|
it "should set the PBKDF2 password hash when the 'salt' field is passed with a valid password hash" do
|
880
|
-
provider.class.expects(:
|
866
|
+
provider.class.expects(:convert_hash_to_binary).with(pbkdf2_embedded_bplist_hash).returns(pbkdf2_embedded_plist)
|
881
867
|
provider.expects(:set_shadow_hash_data).with(users_plist, pbkdf2_embedded_plist)
|
882
868
|
users_plist.expects(:[]=).with('passwd', '********')
|
883
869
|
provider.set_salted_pbkdf2(users_plist, pbkdf2_embedded_bplist_hash, 'salt', pbkdf2_salt_value)
|
884
870
|
end
|
885
871
|
|
886
872
|
it "should set the PBKDF2 password hash when the 'iterations' field is passed with a valid password hash" do
|
887
|
-
provider.class.expects(:
|
873
|
+
provider.class.expects(:convert_hash_to_binary).with(pbkdf2_embedded_bplist_hash).returns(pbkdf2_embedded_plist)
|
888
874
|
provider.expects(:set_shadow_hash_data).with(users_plist, pbkdf2_embedded_plist)
|
889
875
|
users_plist.expects(:[]=).with('passwd', '********')
|
890
876
|
provider.set_salted_pbkdf2(users_plist, pbkdf2_embedded_bplist_hash, 'iterations', pbkdf2_iterations_value)
|
@@ -893,8 +879,7 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
893
879
|
|
894
880
|
describe '#write_users_plist_to_disk' do
|
895
881
|
it 'should save the passed plist to disk and convert it to a binary plist' do
|
896
|
-
Plist
|
897
|
-
provider.expects(:plutil).with('-convert', 'binary1', "#{users_plist_dir}/nonexistent_user.plist")
|
882
|
+
Puppet::Util::Plist.expects(:write_plist_file).with(user_plist_xml, "#{users_plist_dir}/nonexistent_user.plist", :binary)
|
898
883
|
provider.write_users_plist_to_disk(user_plist_xml)
|
899
884
|
end
|
900
885
|
end
|
@@ -907,10 +892,6 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
907
892
|
end
|
908
893
|
|
909
894
|
describe '#get_users_plist' do
|
910
|
-
let(:test_plist) do
|
911
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>shell</key>\n\t<string>/bin/bash</string>\n\t<key>user</key>\n\t<string>puppet</string>\n</dict>\n</plist>\n"
|
912
|
-
end
|
913
|
-
|
914
895
|
let(:test_hash) do
|
915
896
|
{
|
916
897
|
'user' => 'puppet',
|
@@ -919,15 +900,15 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
919
900
|
end
|
920
901
|
|
921
902
|
it 'should convert a plist to a valid Ruby hash' do
|
922
|
-
|
923
|
-
expect(provider.get_users_plist(username)).to eq(test_hash)
|
903
|
+
Puppet::Util::Plist.expects(:read_plist_file).with("#{users_plist_dir}/#{username}.plist").returns(test_hash)
|
904
|
+
expect(provider.get_users_plist(username)).to eq(test_hash, )
|
924
905
|
end
|
925
906
|
end
|
926
907
|
|
927
908
|
describe '#get_shadow_hash_data' do
|
928
909
|
let(:shadow_hash) do
|
929
910
|
{
|
930
|
-
'ShadowHashData' => [
|
911
|
+
'ShadowHashData' => ['test']
|
931
912
|
}
|
932
913
|
end
|
933
914
|
|
@@ -941,10 +922,10 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
|
|
941
922
|
expect(provider.get_shadow_hash_data(no_shadow_hash)).to eq(false)
|
942
923
|
end
|
943
924
|
|
944
|
-
it 'should call
|
925
|
+
it 'should call convert_binary_to_hash() with the string ' +
|
945
926
|
'located in the first element of the array of the ShadowHashData key if the ' +
|
946
927
|
'passed users_plist contains a ShadowHashData key' do
|
947
|
-
provider.class.expects(:
|
928
|
+
provider.class.expects(:convert_binary_to_hash).with('test').returns('returnvalue')
|
948
929
|
expect(provider.get_shadow_hash_data(shadow_hash)).to eq('returnvalue')
|
949
930
|
end
|
950
931
|
end
|