puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- 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/build_defaults.yaml +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/hiera/scope.rb +1 -1
- 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 +45 -47
- 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/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- 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/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/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- 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/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- 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/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- 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/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- 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 +6 -2
- 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/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- 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/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- 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/functions.rb +28 -16
- 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 +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- 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 +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -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 +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -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 +18 -13
- 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/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -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 +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- 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 +16 -8
- 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 +140 -387
- 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 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- 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/group/windows_adsi.rb +2 -2
- 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 +16 -9
- 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/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- 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/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- 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/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 +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- 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/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- 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/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- 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/type.rb +11 -11
- 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 +65 -28
- 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 +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- 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 +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- 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/puppet.rb +17 -0
- 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/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -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/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- 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/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- 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/collection_spec.rb +8 -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 +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- 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/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- 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/epp_face_spec.rb +2 -2
- 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 +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- 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 +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- 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/indirector/json_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 +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- 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 +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -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 -390
- 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 +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- 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 +88 -47
- 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/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- 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 +99 -50
- 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 +46 -38
- 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 +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- 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/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- 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
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet/pops'
|
|
3
|
+
|
|
4
|
+
module Puppet::Pops
|
|
5
|
+
module Types
|
|
6
|
+
describe 'Puppet Type System' do
|
|
7
|
+
let(:tf) { TypeFactory }
|
|
8
|
+
context 'Integer type' do
|
|
9
|
+
let!(:a) { tf.range(10, 20) }
|
|
10
|
+
let!(:b) { tf.range(18, 28) }
|
|
11
|
+
let!(:c) { tf.range( 2, 12) }
|
|
12
|
+
let!(:d) { tf.range(12, 18) }
|
|
13
|
+
let!(:e) { tf.range( 8, 22) }
|
|
14
|
+
let!(:f) { tf.range( 8, 9) }
|
|
15
|
+
let!(:g) { tf.range(21, 22) }
|
|
16
|
+
let!(:h) { tf.range(30, 31) }
|
|
17
|
+
let!(:i) { tf.float_range(1.0, 30.0) }
|
|
18
|
+
let!(:j) { tf.float_range(1.0, 9.0) }
|
|
19
|
+
|
|
20
|
+
context 'when testing if ranges intersect' do
|
|
21
|
+
it 'detects an intersection when self is before its argument' do
|
|
22
|
+
expect(a.intersect?(b)).to be_truthy
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'detects an intersection when self is after its argument' do
|
|
26
|
+
expect(a.intersect?(c)).to be_truthy
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'detects an intersection when self covers its argument' do
|
|
30
|
+
expect(a.intersect?(d)).to be_truthy
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'detects an intersection when self equals its argument' do
|
|
34
|
+
expect(a.intersect?(a)).to be_truthy
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'detects an intersection when self is covered by its argument' do
|
|
38
|
+
expect(a.intersect?(e)).to be_truthy
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'does not consider an adjacent range to be intersecting' do
|
|
42
|
+
[f, g].each {|x| expect(a.intersect?(x)).to be_falsey }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'does not consider an range that is apart to be intersecting' do
|
|
46
|
+
expect(a.intersect?(h)).to be_falsey
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'does not consider an overlapping float range to be intersecting' do
|
|
50
|
+
expect(a.intersect?(i)).to be_falsey
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'when testing if ranges are adjacent' do
|
|
55
|
+
it 'detects an adjacent type when self is after its argument' do
|
|
56
|
+
expect(a.adjacent?(f)).to be_truthy
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'detects an adjacent type when self is before its argument' do
|
|
60
|
+
expect(a.adjacent?(g)).to be_truthy
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'does not consider overlapping types to be adjacent' do
|
|
64
|
+
[a, b, c, d, e].each { |x| expect(a.adjacent?(x)).to be_falsey }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'does not consider an range that is apart to be adjacent' do
|
|
68
|
+
expect(a.adjacent?(h)).to be_falsey
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'does not consider an adjacent float range to be adjancent' do
|
|
72
|
+
expect(a.adjacent?(j)).to be_falsey
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context 'when merging ranges' do
|
|
77
|
+
it 'will merge intersecting ranges' do
|
|
78
|
+
expect(a.merge(b)).to eq(tf.range(10, 28))
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'will merge adjacent ranges' do
|
|
82
|
+
expect(a.merge(g)).to eq(tf.range(10, 22))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'will not merge ranges that are apart' do
|
|
86
|
+
expect(a.merge(h)).to be_nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'will not merge overlapping float ranges' do
|
|
90
|
+
expect(a.merge(i)).to be_nil
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'will not merge adjacent float ranges' do
|
|
94
|
+
expect(a.merge(j)).to be_nil
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context 'Float type' do
|
|
100
|
+
let!(:a) { tf.float_range(10.0, 20.0) }
|
|
101
|
+
let!(:b) { tf.float_range(18.0, 28.0) }
|
|
102
|
+
let!(:c) { tf.float_range( 2.0, 12.0) }
|
|
103
|
+
let!(:d) { tf.float_range(12.0, 18.0) }
|
|
104
|
+
let!(:e) { tf.float_range( 8.0, 22.0) }
|
|
105
|
+
let!(:f) { tf.float_range(30.0, 31.0) }
|
|
106
|
+
let!(:g) { tf.range(1, 30) }
|
|
107
|
+
|
|
108
|
+
context 'when testing if ranges intersect' do
|
|
109
|
+
it 'detects an intersection when self is before its argument' do
|
|
110
|
+
expect(a.intersect?(b)).to be_truthy
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'detects an intersection when self is after its argument' do
|
|
114
|
+
expect(a.intersect?(c)).to be_truthy
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it 'detects an intersection when self covers its argument' do
|
|
118
|
+
expect(a.intersect?(d)).to be_truthy
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'detects an intersection when self equals its argument' do
|
|
122
|
+
expect(a.intersect?(a)).to be_truthy
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'detects an intersection when self is covered by its argument' do
|
|
126
|
+
expect(a.intersect?(e)).to be_truthy
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'does not consider an range that is apart to be intersecting' do
|
|
130
|
+
expect(a.intersect?(f)).to be_falsey
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'does not consider an overlapping integer range to be intersecting' do
|
|
134
|
+
expect(a.intersect?(g)).to be_falsey
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context 'when merging ranges' do
|
|
139
|
+
it 'will merge intersecting ranges' do
|
|
140
|
+
expect(a.merge(b)).to eq(tf.float_range(10.0, 28.0))
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'will not merge ranges that are apart' do
|
|
144
|
+
expect(a.merge(f)).to be_nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it 'will not merge overlapping integer ranges' do
|
|
148
|
+
expect(a.merge(g)).to be_nil
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context 'Optional type' do
|
|
154
|
+
let!(:overlapping_ints) { tf.variant(tf.range(10, 20), tf.range(18, 28)) }
|
|
155
|
+
let!(:optoptopt) { tf.optional(tf.optional(tf.optional(overlapping_ints))) }
|
|
156
|
+
let!(:optnu) { tf.optional(tf.not_undef(overlapping_ints)) }
|
|
157
|
+
|
|
158
|
+
context 'when normalizing' do
|
|
159
|
+
it 'compacts optional in optional in optional to just optional' do
|
|
160
|
+
expect(optoptopt.normalize).to eq(tf.optional(tf.range(10, 28)))
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'compacts NotUndef in Optional to just Optional' do
|
|
165
|
+
expect(optnu.normalize).to eq(tf.optional(tf.range(10, 28)))
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context 'NotUndef type' do
|
|
170
|
+
let!(:nununu) { tf.not_undef(tf.not_undef(tf.not_undef(tf.any))) }
|
|
171
|
+
let!(:nuopt) { tf.not_undef(tf.optional(tf.any)) }
|
|
172
|
+
|
|
173
|
+
context 'when normalizing' do
|
|
174
|
+
it 'compacts NotUndef in NotUndef in NotUndef to just NotUndef' do
|
|
175
|
+
expect(nununu.normalize).to eq(tf.not_undef(tf.any))
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it 'compacts Optional in NotUndef to just NotUndef' do
|
|
179
|
+
expect(nuopt.normalize).to eq(tf.not_undef(tf.any))
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
context 'Variant type' do
|
|
185
|
+
let!(:overlapping_ints) { tf.variant(tf.range(10, 20), tf.range(18, 28)) }
|
|
186
|
+
let!(:adjacent_ints) { tf.variant(tf.range(10, 20), tf.range(8, 9)) }
|
|
187
|
+
let!(:mix_ints) { tf.variant(overlapping_ints, adjacent_ints) }
|
|
188
|
+
let!(:overlapping_floats) { tf.variant(tf.float_range(10.0, 20.0), tf.float_range(18.0, 28.0)) }
|
|
189
|
+
let!(:enums) { tf.variant(tf.enum('a', 'b'), tf.enum('b', 'c')) }
|
|
190
|
+
let!(:patterns) { tf.variant(tf.pattern('a', 'b'), tf.pattern('b', 'c')) }
|
|
191
|
+
let!(:with_undef) { tf.variant(tf.undef, tf.range(1,10)) }
|
|
192
|
+
let!(:all_optional) { tf.variant(tf.optional(tf.range(1,10)), tf.optional(tf.range(11,20))) }
|
|
193
|
+
let!(:groups) { tf.variant(mix_ints, overlapping_floats, enums, patterns, with_undef, all_optional) }
|
|
194
|
+
|
|
195
|
+
context 'when normalizing contained types that' do
|
|
196
|
+
it 'are overlapping ints, the result is a range' do
|
|
197
|
+
expect(overlapping_ints.normalize).to eq(tf.range(10, 28))
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it 'are adjacent ints, the result is a range' do
|
|
201
|
+
expect(adjacent_ints.normalize).to eq(tf.range(8, 20))
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it 'are mixed variants with adjacent and overlapping ints, the result is a range' do
|
|
205
|
+
expect(mix_ints.normalize).to eq(tf.range(8, 28))
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it 'are overlapping floats, the result is a float range' do
|
|
209
|
+
expect(overlapping_floats.normalize).to eq(tf.float_range(10.0, 28.0))
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it 'are enums, the result is an enum' do
|
|
213
|
+
expect(enums.normalize).to eq(tf.enum('a', 'b', 'c'))
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it 'are patterns, the result is a pattern' do
|
|
217
|
+
expect(patterns.normalize).to eq(tf.pattern('a', 'b', 'c'))
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it 'contains an Undef, the result is Optional' do
|
|
221
|
+
expect(with_undef.normalize).to eq(tf.optional(tf.range(1,10)))
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it 'are all Optional, the result is an Optional with normalized type' do
|
|
225
|
+
expect(all_optional.normalize).to eq(tf.optional(tf.range(1,20)))
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it 'can be normalized in groups, the result is a Variant containing the resulting normalizations' do
|
|
229
|
+
expect(groups.normalize).to eq(tf.variant(
|
|
230
|
+
tf.range(8, 28),
|
|
231
|
+
tf.float_range(10.0, 28.0),
|
|
232
|
+
tf.enum('a', 'b', 'c'),
|
|
233
|
+
tf.pattern('a', 'b', 'c'),
|
|
234
|
+
tf.optional(tf.range(1,20)))
|
|
235
|
+
)
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -107,11 +107,51 @@ describe "validating 4x" do
|
|
|
107
107
|
SOURCE
|
|
108
108
|
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::IDEM_NOT_ALLOWED_LAST)
|
|
109
109
|
end
|
|
110
|
+
|
|
111
|
+
it "detects a resource declared without title in #{type} when it is the only declaration present" do
|
|
112
|
+
source = <<-SOURCE
|
|
113
|
+
#{type} nope {
|
|
114
|
+
notify { message => 'Nope' }
|
|
115
|
+
}
|
|
116
|
+
SOURCE
|
|
117
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESOURCE_WITHOUT_TITLE)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "detects a resource declared without title in #{type} when it is in between other declarations" do
|
|
121
|
+
source = <<-SOURCE
|
|
122
|
+
#{type} nope {
|
|
123
|
+
notify { succ: message => 'Nope' }
|
|
124
|
+
notify { message => 'Nope' }
|
|
125
|
+
notify { pred: message => 'Nope' }
|
|
126
|
+
}
|
|
127
|
+
SOURCE
|
|
128
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESOURCE_WITHOUT_TITLE)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "detects a resource declared without title in #{type} when it is declarated first" do
|
|
132
|
+
source = <<-SOURCE
|
|
133
|
+
#{type} nope {
|
|
134
|
+
notify { message => 'Nope' }
|
|
135
|
+
notify { pred: message => 'Nope' }
|
|
136
|
+
}
|
|
137
|
+
SOURCE
|
|
138
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESOURCE_WITHOUT_TITLE)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "detects a resource declared without title in #{type} when it is declarated last" do
|
|
142
|
+
source = <<-SOURCE
|
|
143
|
+
#{type} nope {
|
|
144
|
+
notify { succ: message => 'Nope' }
|
|
145
|
+
notify { message => 'Nope' }
|
|
146
|
+
}
|
|
147
|
+
SOURCE
|
|
148
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESOURCE_WITHOUT_TITLE)
|
|
149
|
+
end
|
|
110
150
|
end
|
|
111
151
|
end
|
|
112
152
|
|
|
113
153
|
context 'for reserved words' do
|
|
114
|
-
['private', '
|
|
154
|
+
['private', 'attr'].each do |word|
|
|
115
155
|
it "produces an error for the word '#{word}'" do
|
|
116
156
|
source = "$a = #{word}"
|
|
117
157
|
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESERVED_WORD)
|
|
@@ -177,6 +217,67 @@ describe "validating 4x" do
|
|
|
177
217
|
end
|
|
178
218
|
end
|
|
179
219
|
|
|
220
|
+
context 'for keywords' do
|
|
221
|
+
it "should allow using the 'type' as the name of a function with no parameters" do
|
|
222
|
+
source = "type()"
|
|
223
|
+
expect(validate(parse(source))).not_to have_any_issues
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "should allow using the keyword 'type' as the name of a function with parameters" do
|
|
227
|
+
source = "type('a', 'b')"
|
|
228
|
+
expect(validate(parse(source))).not_to have_any_issues
|
|
229
|
+
end
|
|
230
|
+
it "should allow using the 'type' as the name of a function with no parameters and a block" do
|
|
231
|
+
source = "type() |$x| { $x }"
|
|
232
|
+
expect(validate(parse(source))).not_to have_any_issues
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "should allow using the keyword 'type' as the name of a function with parameters and a block" do
|
|
236
|
+
source = "type('a', 'b') |$x| { $x }"
|
|
237
|
+
expect(validate(parse(source))).not_to have_any_issues
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
context 'for parameter names' do
|
|
242
|
+
['class', 'define'].each do |word|
|
|
243
|
+
it "should require that #{word} parameter names are unique" do
|
|
244
|
+
expect(validate(parse("#{word} foo($a = 10, $a = 20) {}"))).to have_issue(Puppet::Pops::Issues::DUPLICATE_PARAMETER)
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "should require that template parameter names are unique" do
|
|
249
|
+
expect(validate(parse_epp("<%-| $a, $a |-%><%= $a == doh %>"))).to have_issue(Puppet::Pops::Issues::DUPLICATE_PARAMETER)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
context 'for parameter defaults' do
|
|
254
|
+
['class', 'define'].each do |word|
|
|
255
|
+
it "should not permit assignments in #{word} parameter default expressions" do
|
|
256
|
+
expect { parse("#{word} foo($a = $x = 10) {}") }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at '='/)
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
['class', 'define'].each do |word|
|
|
261
|
+
it "should not permit assignments in #{word} parameter default nested expressions" do
|
|
262
|
+
expect(validate(parse("#{word} foo($a = [$x = 10]) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it "should not permit assignments to subsequently declared parameters in #{word} parameter default nested expressions" do
|
|
266
|
+
expect(validate(parse("#{word} foo($a = ($b = 3), $b = 5) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should not permit assignments to previously declared parameters in #{word} parameter default nested expressions" do
|
|
270
|
+
expect(validate(parse("#{word} foo($a = 10, $b = ($a = 10)) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "should permit assignments in #{word} parameter default inside nested lambda expressions" do
|
|
274
|
+
expect(validate(parse(
|
|
275
|
+
"#{word} foo($a = [1,2,3], $b = 0, $c = $a.map |$x| { $b = $x; $b * $a.reduce |$x, $y| {$x + $y}}) {}"))).not_to(
|
|
276
|
+
have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT))
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
180
281
|
context 'for reserved parameter names' do
|
|
181
282
|
['name', 'title'].each do |word|
|
|
182
283
|
it "produces an error when $#{word} is used as a parameter in a class" do
|
|
@@ -220,25 +321,68 @@ describe "validating 4x" do
|
|
|
220
321
|
end
|
|
221
322
|
end
|
|
222
323
|
|
|
223
|
-
context 'top level constructs
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
source = "if true { #{word} x {} }"
|
|
227
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::NOT_TOP_LEVEL)
|
|
228
|
-
end
|
|
324
|
+
context 'top level constructs' do
|
|
325
|
+
def issue(at_top)
|
|
326
|
+
at_top ? Puppet::Pops::Issues::NOT_ABSOLUTE_TOP_LEVEL : Puppet::Pops::Issues::NOT_TOP_LEVEL
|
|
229
327
|
end
|
|
230
328
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
329
|
+
# Top level. Defines the expressions that are tested inside of other things
|
|
330
|
+
{
|
|
331
|
+
'a class' => ['class x{}', false],
|
|
332
|
+
'a define' => ['define x{}', false],
|
|
333
|
+
'a node' => ['node x{}', false],
|
|
334
|
+
'a function' => ['function x() {}', true],
|
|
335
|
+
'a type alias' => ['type A = Data', true],
|
|
336
|
+
'a type alias for a complex type' => ['type C = Hash[String[1],Integer]', true],
|
|
337
|
+
'a type definition' => ['type A {}', true]
|
|
338
|
+
}.each_pair do |word, (decl, at_top)|
|
|
339
|
+
# Nesting level. Defines how each of the top level expressions are nested in
|
|
340
|
+
# another expression
|
|
341
|
+
{
|
|
342
|
+
'a define' => ["define y{ #{decl} }", at_top],
|
|
343
|
+
'a function' => ["function y() { #{decl} }", at_top],
|
|
344
|
+
'a type definition' => ["type A { #{decl} }", at_top],
|
|
345
|
+
'an if expression' => ["if true { #{decl} }", false],
|
|
346
|
+
'an if-else expression' => ["if false {} else { #{decl} }", false],
|
|
347
|
+
'an unless' => ["unless false { #{decl} }", false]
|
|
348
|
+
}.each_pair do |nester, (source, abs_top)|
|
|
349
|
+
# Tests each top level expression in each nested expression
|
|
350
|
+
it "produces an error when #{word} is nested in #{nester}" do
|
|
351
|
+
expect(validate(parse(source))).to have_issue(issue(abs_top))
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
# Test that the expression can exist anywhere in a top level block
|
|
356
|
+
|
|
357
|
+
it "will allow #{word} as the only statement in a top level block" do
|
|
358
|
+
expect(validate(parse(decl))).not_to have_issue(issue(at_top))
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
it "will allow #{word} as the last statement in a top level block" do
|
|
362
|
+
source = "$a = 10\n#{decl}"
|
|
363
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
it "will allow #{word} as the first statement in a top level block" do
|
|
367
|
+
source = "#{decl}\n$a = 10"
|
|
368
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
it "will allow #{word} in between other statements in a top level block" do
|
|
372
|
+
source = "$a = 10\n#{decl}\n$b = 20"
|
|
373
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
|
235
374
|
end
|
|
236
375
|
end
|
|
237
376
|
|
|
238
|
-
|
|
239
|
-
it
|
|
240
|
-
source =
|
|
241
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::
|
|
377
|
+
context 'that are type aliases' do
|
|
378
|
+
it 'raises errors when RHS is a name that is an invalid reference' do
|
|
379
|
+
source = 'type MyInt = integer'
|
|
380
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::ILLEGAL_EXPRESSION)
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
it 'raises errors when RHS is an AccessExpression with a name that is an invalid reference on LHS' do
|
|
384
|
+
source = 'type IntegerArray = array[Integer]'
|
|
385
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::ILLEGAL_EXPRESSION)
|
|
242
386
|
end
|
|
243
387
|
end
|
|
244
388
|
end
|
|
@@ -139,6 +139,7 @@ describe Puppet::Type.type(:cron).provider(:crontab) do
|
|
|
139
139
|
expect(described_class.parse_line('MAILTO=""')).to eq({:record_type => :environment, :line => 'MAILTO=""'})
|
|
140
140
|
expect(described_class.parse_line('FOO=BAR')).to eq({:record_type => :environment, :line => 'FOO=BAR'})
|
|
141
141
|
expect(described_class.parse_line('FOO_BAR=BAR')).to eq({:record_type => :environment, :line => 'FOO_BAR=BAR'})
|
|
142
|
+
expect(described_class.parse_line('SPACE = BAR')).to eq({:record_type => :environment, :line => 'SPACE = BAR'})
|
|
142
143
|
end
|
|
143
144
|
|
|
144
145
|
it "should extract a cron entry" do
|
|
@@ -32,9 +32,9 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
|
|
|
32
32
|
|
|
33
33
|
describe "group type :members property helpers" do
|
|
34
34
|
|
|
35
|
-
let(:user1) { stub(:account => 'user1', :domain => '.', :
|
|
36
|
-
let(:user2) { stub(:account => 'user2', :domain => '.', :
|
|
37
|
-
let(:user3) { stub(:account => 'user3', :domain => '.', :
|
|
35
|
+
let(:user1) { stub(:account => 'user1', :domain => '.', :sid => 'user1sid') }
|
|
36
|
+
let(:user2) { stub(:account => 'user2', :domain => '.', :sid => 'user2sid') }
|
|
37
|
+
let(:user3) { stub(:account => 'user3', :domain => '.', :sid => 'user3sid') }
|
|
38
38
|
let(:invalid_user) { SecureRandom.uuid }
|
|
39
39
|
|
|
40
40
|
before :each do
|
|
@@ -183,9 +183,9 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
|
|
|
183
183
|
provider.group.stubs(:members).returns ['user1', 'user2']
|
|
184
184
|
|
|
185
185
|
member_sids = [
|
|
186
|
-
stub(:account => 'user1', :domain => 'testcomputername'),
|
|
187
|
-
stub(:account => 'user2', :domain => 'testcomputername'),
|
|
188
|
-
stub(:account => 'user3', :domain => 'testcomputername'),
|
|
186
|
+
stub(:account => 'user1', :domain => 'testcomputername', :sid => 1),
|
|
187
|
+
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2),
|
|
188
|
+
stub(:account => 'user3', :domain => 'testcomputername', :sid => 3),
|
|
189
189
|
]
|
|
190
190
|
|
|
191
191
|
provider.group.stubs(:member_sids).returns(member_sids[0..1])
|
|
@@ -241,8 +241,8 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
|
|
|
241
241
|
end
|
|
242
242
|
|
|
243
243
|
it "should be able to test whether a group exists" do
|
|
244
|
-
Puppet::Util::Windows::
|
|
245
|
-
Puppet::Util::Windows::ADSI.stubs(:connect).returns stub('connection')
|
|
244
|
+
Puppet::Util::Windows::SID.stubs(:name_to_sid_object).returns(nil)
|
|
245
|
+
Puppet::Util::Windows::ADSI.stubs(:connect).returns stub('connection', :Class => 'Group')
|
|
246
246
|
expect(provider).to be_exists
|
|
247
247
|
|
|
248
248
|
Puppet::Util::Windows::ADSI.stubs(:connect).returns nil
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
require 'spec_helper'
|
|
7
7
|
|
|
8
8
|
require 'puppet'
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
module Puppet::Util::Plist
|
|
11
|
+
end
|
|
10
12
|
|
|
11
13
|
provider_class = Puppet::Type.type(:macauthorization).provider(:macauthorization)
|
|
12
14
|
|
|
@@ -26,7 +28,8 @@ describe provider_class do
|
|
|
26
28
|
authdb["rights"] = { "fooright" => "foo" }
|
|
27
29
|
|
|
28
30
|
# Stub out Plist::parse_xml
|
|
29
|
-
Plist.stubs(:
|
|
31
|
+
Puppet::Util::Plist.stubs(:parse_plist).returns(authdb)
|
|
32
|
+
Puppet::Util::Plist.stubs(:write_plist_file)
|
|
30
33
|
|
|
31
34
|
# A catch all; no parameters set
|
|
32
35
|
@resource.stubs(:[]).returns(nil)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#! /usr/bin/env ruby
|
|
2
2
|
require 'spec_helper'
|
|
3
3
|
|
|
4
|
+
module Puppet::Util::Plist
|
|
5
|
+
end
|
|
6
|
+
|
|
4
7
|
# We use this as a reasonable way to obtain all the support infrastructure.
|
|
5
8
|
[:group].each do |type_for_this_round|
|
|
6
9
|
provider_class = Puppet::Type.type(type_for_this_round).provider(:directoryservice)
|
|
@@ -79,19 +82,17 @@ describe 'DirectoryService password behavior' do
|
|
|
79
82
|
end
|
|
80
83
|
|
|
81
84
|
let :shadow_hash_data do
|
|
82
|
-
{'ShadowHashData' => [
|
|
85
|
+
{'ShadowHashData' => [binary_plist]}
|
|
83
86
|
end
|
|
84
87
|
|
|
85
88
|
subject do
|
|
86
89
|
Puppet::Provider::NameService::DirectoryService
|
|
87
90
|
end
|
|
88
91
|
|
|
89
|
-
it 'should execute
|
|
90
|
-
subject.expects(:
|
|
92
|
+
it 'should execute convert_binary_to_hash once when getting the password' do
|
|
93
|
+
subject.expects(:convert_binary_to_hash).returns({'SALTED-SHA512' => pw_string})
|
|
91
94
|
Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
|
|
92
|
-
Plist.expects(:
|
|
93
|
-
# On Mac OS X 10.7 we first need to convert to xml when reading the password
|
|
94
|
-
subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
|
|
95
|
+
Puppet::Util::Plist.expects(:read_plist_file).returns(shadow_hash_data)
|
|
95
96
|
subject.get_password('uid', 'jeff')
|
|
96
97
|
end
|
|
97
98
|
|
|
@@ -102,25 +103,19 @@ describe 'DirectoryService password behavior' do
|
|
|
102
103
|
end
|
|
103
104
|
|
|
104
105
|
it 'should convert xml-to-binary and binary-to-xml when setting the pw on >= 10.7' do
|
|
105
|
-
subject.expects(:
|
|
106
|
-
subject.expects(:
|
|
106
|
+
subject.expects(:convert_binary_to_hash).returns({'SALTED-SHA512' => pw_string})
|
|
107
|
+
subject.expects(:convert_hash_to_binary).returns(binary_plist)
|
|
107
108
|
Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
|
|
108
|
-
Plist.expects(:
|
|
109
|
-
|
|
110
|
-
subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
|
|
111
|
-
# And again back to a binary plist or DirectoryService will complain
|
|
112
|
-
subject.expects(:plutil).with('-convert', 'binary1', plist_path)
|
|
113
|
-
Plist::Emit.expects(:save_plist).with(shadow_hash_data, plist_path)
|
|
109
|
+
Puppet::Util::Plist.expects(:read_plist_file).returns(shadow_hash_data)
|
|
110
|
+
Puppet::Util::Plist.expects(:write_plist_file).with(shadow_hash_data, plist_path, :binary)
|
|
114
111
|
subject.set_password('jeff', 'uid', sha512_hash)
|
|
115
112
|
end
|
|
116
113
|
|
|
117
114
|
it '[#13686] should handle an empty ShadowHashData field in the users plist' do
|
|
118
|
-
subject.expects(:
|
|
115
|
+
subject.expects(:convert_hash_to_binary).returns(binary_plist)
|
|
119
116
|
Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
|
|
120
|
-
Plist.expects(:
|
|
121
|
-
|
|
122
|
-
subject.expects(:plutil).with('-convert', 'binary1', plist_path)
|
|
123
|
-
Plist::Emit.expects(:save_plist)
|
|
117
|
+
Puppet::Util::Plist.expects(:read_plist_file).returns({'ShadowHashData' => nil})
|
|
118
|
+
Puppet::Util::Plist.expects(:write_plist_file)
|
|
124
119
|
subject.set_password('jeff', 'uid', sha512_hash)
|
|
125
120
|
end
|
|
126
121
|
end
|
|
@@ -7,8 +7,7 @@ describe Puppet::Type.type(:package).provider(:appdmg) do
|
|
|
7
7
|
|
|
8
8
|
describe "when installing an appdmg" do
|
|
9
9
|
let(:fake_mountpoint) { "/tmp/dmg.foo" }
|
|
10
|
-
let(:
|
|
11
|
-
let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
|
|
10
|
+
let(:fake_hdiutil_plist) { {"system-entities" => [{"mount-point" => fake_mountpoint}]} }
|
|
12
11
|
|
|
13
12
|
before do
|
|
14
13
|
fh = mock 'filehandle'
|
|
@@ -32,7 +31,8 @@ describe Puppet::Type.type(:package).provider(:appdmg) do
|
|
|
32
31
|
described_class.expects(:curl).with do |*args|
|
|
33
32
|
args[0] == "-o" && args[1].include?(tmpdir) && ! args.include?("-k")
|
|
34
33
|
end
|
|
35
|
-
described_class.stubs(:hdiutil).returns
|
|
34
|
+
described_class.stubs(:hdiutil).returns 'a plist'
|
|
35
|
+
Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
|
|
36
36
|
described_class.expects(:installapp)
|
|
37
37
|
|
|
38
38
|
provider.install
|
|
@@ -35,6 +35,22 @@ describe provider_class do
|
|
|
35
35
|
it { is_expected.to be_virtual_packages }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
describe "default provider" do
|
|
39
|
+
before do
|
|
40
|
+
Facter.expects(:value).with(:operatingsystem).returns("fedora")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should be the default provider on Fedora 22" do
|
|
44
|
+
Facter.expects(:value).with(:operatingsystemmajrelease).returns('22')
|
|
45
|
+
expect(described_class.default?).to be_truthy
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should be the default provider on Fedora 23" do
|
|
49
|
+
Facter.expects(:value).with(:operatingsystemmajrelease).returns('23')
|
|
50
|
+
expect(described_class.default?).to be_truthy
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
38
54
|
# provider should repond to the following methods
|
|
39
55
|
[:install, :latest, :update, :purge, :install_options].each do |method|
|
|
40
56
|
it "should have a(n) #{method}" do
|