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
@@ -268,11 +268,11 @@ describe "the 'defined' function" do
|
|
268
268
|
end
|
269
269
|
|
270
270
|
it 'raises error if referencing undef' do
|
271
|
-
expect{func.call(@scope, nil)}.to raise_error(ArgumentError, /'defined' parameter 'vals' expects a value of type String
|
271
|
+
expect{func.call(@scope, nil)}.to raise_error(ArgumentError, /'defined' parameter 'vals' expects a value of type String or Type, got Undef/)
|
272
272
|
end
|
273
273
|
|
274
274
|
it 'raises error if referencing a number' do
|
275
|
-
expect{func.call(@scope, 42)}.to raise_error(ArgumentError, /'defined' parameter 'vals' expects a value of type String
|
275
|
+
expect{func.call(@scope, 42)}.to raise_error(ArgumentError, /'defined' parameter 'vals' expects a value of type String or Type, got Integer/)
|
276
276
|
end
|
277
277
|
|
278
278
|
it 'is false if referencing empty string' do
|
@@ -5,7 +5,7 @@ describe "the epp function" do
|
|
5
5
|
|
6
6
|
let :node do Puppet::Node.new('localhost') end
|
7
7
|
let :compiler do Puppet::Parser::Compiler.new(node) end
|
8
|
-
let :scope do
|
8
|
+
let :scope do compiler.topscope end
|
9
9
|
|
10
10
|
context "when accessing scope variables as $ variables" do
|
11
11
|
it "looks up the value from the scope" do
|
@@ -27,11 +27,19 @@ describe "the epp function" do
|
|
27
27
|
expect(eval_template_with_args("<%= $phantom == dragos %>", 'phantom' => 'dragos')).to eq("true")
|
28
28
|
end
|
29
29
|
|
30
|
-
it "can use values from the
|
30
|
+
it "can use values from the global scope for defaults" do
|
31
31
|
scope['phantom'] = 'of the opera'
|
32
|
-
expect(eval_template("<%- |$phantom =
|
32
|
+
expect(eval_template("<%- |$phantom = $::phantom| -%><%= $phantom %>")).to eq("of the opera")
|
33
33
|
end
|
34
34
|
|
35
|
+
it "will not use values from the enclosing scope for defaults" do
|
36
|
+
scope['the_phantom'] = 'of the state opera'
|
37
|
+
scope.new_ephemeral(true)
|
38
|
+
scope['the_phantom'] = 'of the local opera'
|
39
|
+
expect(scope['the_phantom']).to eq('of the local opera')
|
40
|
+
expect(eval_template("<%- |$phantom = $the_phantom| -%><%= $phantom %>")).to eq("of the state opera")
|
41
|
+
end
|
42
|
+
|
35
43
|
it "uses the default value if the given value is undef/nil" do
|
36
44
|
expect(eval_template_with_args("<%- |$phantom = 'inside your mind'| -%><%= $phantom %>", 'phantom' => nil)).to eq("inside your mind")
|
37
45
|
end
|
@@ -170,7 +170,7 @@ describe "when performing lookup" do
|
|
170
170
|
it 'will not accept a succesful lookup of an undef value when the type rejects it' do
|
171
171
|
expect do
|
172
172
|
assemble_and_compile('${r}', "'abc::n'", 'String')
|
173
|
-
end.to raise_error(Puppet::ParseError, /
|
173
|
+
end.to raise_error(Puppet::ParseError, /Found value has wrong type, expected a String value, got Undef/)
|
174
174
|
end
|
175
175
|
|
176
176
|
it 'will raise an exception when value is not found for array key and no default is provided' do
|
@@ -248,7 +248,8 @@ describe "when performing lookup" do
|
|
248
248
|
it 'fails unless default is an instance of value_type' do
|
249
249
|
expect do
|
250
250
|
assemble_and_compile('${r[a]}_${r[b]}', "'abc::x'", 'Hash[String,String]', 'undef', "{'a' => 'dflt_x', 'b' => 32}")
|
251
|
-
end.to raise_error(Puppet::ParseError,
|
251
|
+
end.to raise_error(Puppet::ParseError,
|
252
|
+
/Default value has wrong type, expected a Hash\[String, String\] value, got Struct\[\{'a' => String, 'b' => Integer\}\]/)
|
252
253
|
end
|
253
254
|
end
|
254
255
|
|
@@ -281,7 +282,8 @@ describe "when performing lookup" do
|
|
281
282
|
it 'fails unless block returns an instance of value_type' do
|
282
283
|
expect do
|
283
284
|
assemble_and_compile_with_block('${r[a]}_${r[b]}', "{'a' => 'dflt_x', 'b' => 32}", "'abc::x'", 'Hash[String,String]')
|
284
|
-
end.to raise_error(Puppet::ParseError,
|
285
|
+
end.to raise_error(Puppet::ParseError,
|
286
|
+
/Value returned from default block has wrong type, expected a Hash\[String, String\] value, got Struct\[\{'a' => String, 'b' => Integer\}\]/)
|
285
287
|
end
|
286
288
|
|
287
289
|
it 'receives a single name parameter' do
|
@@ -345,11 +347,28 @@ describe "when performing lookup" do
|
|
345
347
|
end
|
346
348
|
|
347
349
|
context 'when accessing from outside a module' do
|
348
|
-
it 'will raise an exception when key in the function provided module data is not prefixed' do
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
350
|
+
it 'will both log a warning and raise an exception when key in the function provided module data is not prefixed' do
|
351
|
+
logs = []
|
352
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
353
|
+
Puppet[:code] = "include bad_data\nlookup('bad_data::b')"
|
354
|
+
expect { compiler.compile }.to raise_error(Puppet::ParseError, /did not find a value for the name 'bad_data::b'/)
|
355
|
+
end
|
356
|
+
warnings = logs.select {|log| log.level == :warning }.map {|log| log.message }
|
357
|
+
expect(warnings).to include("Module data for module 'bad_data' must use keys qualified with the name of the module")
|
358
|
+
end
|
359
|
+
|
360
|
+
it 'will succeed finding prefixed keys even when a key in the function provided module data is not prefixed' do
|
361
|
+
logs = []
|
362
|
+
resources = nil
|
363
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
364
|
+
resources = compile_and_get_notifications(<<-END.gsub(/^ {10}/, ''))
|
365
|
+
include bad_data
|
366
|
+
notify { lookup('bad_data::c'): }
|
367
|
+
END
|
368
|
+
expect(resources).to include('module_c')
|
369
|
+
end
|
370
|
+
warnings = logs.select {|log| log.level == :warning }.map {|log| log.message }
|
371
|
+
expect(warnings).to include("Module data for module 'bad_data' must use keys qualified with the name of the module")
|
353
372
|
end
|
354
373
|
|
355
374
|
it 'will resolve global, environment, and module correctly' do
|
@@ -378,14 +397,40 @@ describe "when performing lookup" do
|
|
378
397
|
end
|
379
398
|
|
380
399
|
context 'when accessing bad data' do
|
381
|
-
it 'will
|
382
|
-
Puppet[:code] =
|
383
|
-
|
384
|
-
|
385
|
-
|
400
|
+
it 'a warning will be logged when key in the function provided module data is not prefixed' do
|
401
|
+
Puppet[:code] = "include bad_data\nlookup('bad_data::c')"
|
402
|
+
logs = []
|
403
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
404
|
+
compiler.compile
|
405
|
+
end
|
406
|
+
warnings = logs.select {|log| log.level == :warning }.map {|log| log.message }
|
407
|
+
expect(warnings).to include("Module data for module 'bad_data' must use keys qualified with the name of the module")
|
408
|
+
end
|
409
|
+
|
410
|
+
it 'a warning will be logged when key in the hiera provided module data is not prefixed' do
|
411
|
+
Puppet[:code] = "include hieraprovider\nlookup('hieraprovider::test::param_a')"
|
412
|
+
logs = []
|
413
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
414
|
+
compiler.compile
|
415
|
+
end
|
416
|
+
warnings = logs.select {|log| log.level == :warning }.map {|log| log.message }
|
417
|
+
expect(warnings).to include("Module data for module 'hieraprovider' must use keys qualified with the name of the module")
|
386
418
|
end
|
387
419
|
end
|
388
420
|
|
421
|
+
context 'when accessing empty files' do
|
422
|
+
# An empty YAML file is OK and should be treated as a file that contains no keys
|
423
|
+
it "will fail normally with a 'did not find a value' error when a yaml file is empty" do
|
424
|
+
Puppet[:code] = "include empty_yaml\nlookup('empty_yaml::a')"
|
425
|
+
expect { compiler.compile }.to raise_error(Puppet::ParseError, /did not find a value for the name 'empty_yaml::a'/)
|
426
|
+
end
|
427
|
+
|
428
|
+
# An empty JSON file is not OK. Should yield a parse error
|
429
|
+
it "will fail with a LookupError indicating a parser failure when a json file is empty" do
|
430
|
+
Puppet[:code] = "include empty_json\nlookup('empty_json::a')"
|
431
|
+
expect { compiler.compile }.to raise_error(Puppet::DataBinding::LookupError, /Unable to parse/)
|
432
|
+
end
|
433
|
+
end
|
389
434
|
|
390
435
|
context 'when using explain' do
|
391
436
|
it 'will explain that module is not found' do
|
@@ -56,7 +56,7 @@ describe 'the regsubst function' do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'should raise an Error if given a flag other thant G' do
|
59
|
-
expect { regsubst('foo', /bar/, 'gazonk', 'I') }.to raise_error(/
|
59
|
+
expect { regsubst('foo', /bar/, 'gazonk', 'I') }.to raise_error(/expects one of/)
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'should handle global substitutions' do
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
|
5
|
+
require 'shared_behaviours/iterative_functions'
|
6
|
+
|
7
|
+
describe 'the reverse_each function' do
|
8
|
+
include PuppetSpec::Compiler
|
9
|
+
|
10
|
+
it 'raises an error when given a type that cannot be iterated' do
|
11
|
+
expect do
|
12
|
+
compile_to_catalog(<<-MANIFEST)
|
13
|
+
3.14.reverse_each |$v| { }
|
14
|
+
MANIFEST
|
15
|
+
end.to raise_error(Puppet::Error, /expects an Iterable value, got Float/)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'raises an error when called with more than one argument and without a block' do
|
19
|
+
expect do
|
20
|
+
compile_to_catalog(<<-MANIFEST)
|
21
|
+
[1].reverse_each(1)
|
22
|
+
MANIFEST
|
23
|
+
end.to raise_error(Puppet::Error, /expects 1 argument, got 2/)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'raises an error when called with more than one argument and a block' do
|
27
|
+
expect do
|
28
|
+
compile_to_catalog(<<-MANIFEST)
|
29
|
+
[1].reverse_each(1) |$v| { }
|
30
|
+
MANIFEST
|
31
|
+
end.to raise_error(Puppet::Error, /expects 1 argument, got 2/)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'raises an error when called with a block with too many required parameters' do
|
35
|
+
expect do
|
36
|
+
compile_to_catalog(<<-MANIFEST)
|
37
|
+
[1].reverse_each() |$v1, $v2| { }
|
38
|
+
MANIFEST
|
39
|
+
end.to raise_error(Puppet::Error, /block expects 1 argument, got 2/)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'raises an error when called with a block with too few parameters' do
|
43
|
+
expect do
|
44
|
+
compile_to_catalog(<<-MANIFEST)
|
45
|
+
[1].reverse_each() | | { }
|
46
|
+
MANIFEST
|
47
|
+
end.to raise_error(Puppet::Error, /block expects 1 argument, got none/)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'does not raise an error when called with a block with too many but optional arguments' do
|
51
|
+
expect do
|
52
|
+
compile_to_catalog(<<-MANIFEST)
|
53
|
+
[1].reverse_each() |$v1, $v2=extra| { }
|
54
|
+
MANIFEST
|
55
|
+
end.to_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns an Undef when called with a block' do
|
59
|
+
expect do
|
60
|
+
compile_to_catalog(<<-MANIFEST)
|
61
|
+
assert_type(Undef, [1].reverse_each |$x| { $x })
|
62
|
+
MANIFEST
|
63
|
+
end.not_to raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns an Iterable when called without a block' do
|
67
|
+
expect do
|
68
|
+
compile_to_catalog(<<-MANIFEST)
|
69
|
+
assert_type(Iterable, [1].reverse_each)
|
70
|
+
MANIFEST
|
71
|
+
end.not_to raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should produce "times" interval of integer in reverse' do
|
75
|
+
expect(eval_and_collect_notices('5.reverse_each |$x| { notice($x) }')).to eq(['4', '3', '2', '1', '0'])
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should produce range Integer[5,8] in reverse' do
|
79
|
+
expect(eval_and_collect_notices('Integer[5,8].reverse_each |$x| { notice($x) }')).to eq(['8', '7', '6', '5'])
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should produce the choices of [first,second,third] in reverse' do
|
83
|
+
expect(eval_and_collect_notices('[first,second,third].reverse_each |$x| { notice($x) }')).to eq(%w(third second first))
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should produce the choices of {first => 1,second => 2,third => 3} in reverse' do
|
87
|
+
expect(eval_and_collect_notices('{first => 1,second => 2,third => 3}.reverse_each |$t| { notice($t[0]) }')).to eq(%w(third second first))
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should produce the choices of Enum[first,second,third] in reverse' do
|
91
|
+
expect(eval_and_collect_notices('Enum[first,second,third].reverse_each |$x| { notice($x) }')).to eq(%w(third second first))
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should produce nth element in reverse of range Integer[5,20] when chained after a step' do
|
95
|
+
expect(eval_and_collect_notices('Integer[5,20].step(4).reverse_each |$x| { notice($x) }')
|
96
|
+
).to eq(['17', '13', '9', '5'])
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should produce nth element in reverse of times 5 when chained after a step' do
|
100
|
+
expect(eval_and_collect_notices('5.step(2).reverse_each |$x| { notice($x) }')).to eq(['4', '2', '0'])
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should produce nth element in reverse of range Integer[5,20] when chained after a step' do
|
104
|
+
expect(eval_and_collect_notices(
|
105
|
+
'[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20].step(4).reverse_each |$x| { notice($x) }')
|
106
|
+
).to eq(['17', '13', '9', '5'])
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
|
5
|
+
require 'shared_behaviours/iterative_functions'
|
6
|
+
|
7
|
+
describe 'the step method' do
|
8
|
+
include PuppetSpec::Compiler
|
9
|
+
|
10
|
+
it 'raises an error when given a type that cannot be iterated' do
|
11
|
+
expect do
|
12
|
+
compile_to_catalog(<<-MANIFEST)
|
13
|
+
3.14.step(1) |$v| { }
|
14
|
+
MANIFEST
|
15
|
+
end.to raise_error(Puppet::Error, /expects an Iterable value, got Float/)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'raises an error when called with more than two arguments and a block' do
|
19
|
+
expect do
|
20
|
+
compile_to_catalog(<<-MANIFEST)
|
21
|
+
[1].step(1,2) |$v| { }
|
22
|
+
MANIFEST
|
23
|
+
end.to raise_error(Puppet::Error, /expects 2 arguments, got 3/)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'raises an error when called with more than two arguments and without a block' do
|
27
|
+
expect do
|
28
|
+
compile_to_catalog(<<-MANIFEST)
|
29
|
+
[1].step(1,2)
|
30
|
+
MANIFEST
|
31
|
+
end.to raise_error(Puppet::Error, /expects 2 arguments, got 3/)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'raises an error when called with a block with too many required parameters' do
|
35
|
+
expect do
|
36
|
+
compile_to_catalog(<<-MANIFEST)
|
37
|
+
[1].step(1) |$v1, $v2| { }
|
38
|
+
MANIFEST
|
39
|
+
end.to raise_error(Puppet::Error, /block expects 1 argument, got 2/)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'raises an error when called with a block with too few parameters' do
|
43
|
+
expect do
|
44
|
+
compile_to_catalog(<<-MANIFEST)
|
45
|
+
[1].step(1) | | { }
|
46
|
+
MANIFEST
|
47
|
+
end.to raise_error(Puppet::Error, /block expects 1 argument, got none/)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'raises an error when called with step == 0' do
|
51
|
+
expect do
|
52
|
+
compile_to_catalog(<<-MANIFEST)
|
53
|
+
[1].step(0) |$x| { }
|
54
|
+
MANIFEST
|
55
|
+
end.to raise_error(Puppet::Error, /'step' expects an Integer\[1, default\] value, got Integer\[0, 0\]/)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'raises an error when step is not an integer' do
|
59
|
+
expect do
|
60
|
+
compile_to_catalog(<<-MANIFEST)
|
61
|
+
[1].step('three') |$x| { }
|
62
|
+
MANIFEST
|
63
|
+
end.to raise_error(Puppet::Error, /'step' expects an Integer value, got String/)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'does not raise an error when called with a block with too many but optional arguments' do
|
67
|
+
expect do
|
68
|
+
compile_to_catalog(<<-MANIFEST)
|
69
|
+
[1].step(1) |$v1, $v2=extra| { }
|
70
|
+
MANIFEST
|
71
|
+
end.to_not raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'returns Undef when called with a block' do
|
75
|
+
expect do
|
76
|
+
compile_to_catalog(<<-MANIFEST)
|
77
|
+
assert_type(Undef, [1].step(2) |$x| { $x })
|
78
|
+
MANIFEST
|
79
|
+
end.not_to raise_error
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns an Iterable when called without a block' do
|
83
|
+
expect do
|
84
|
+
compile_to_catalog(<<-MANIFEST)
|
85
|
+
assert_type(Iterable, [1].step(2))
|
86
|
+
MANIFEST
|
87
|
+
end.not_to raise_error
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should produce "times" interval of integer according to step' do
|
91
|
+
expect(eval_and_collect_notices('10.step(2) |$x| { notice($x) }')).to eq(['0', '2', '4', '6', '8'])
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should produce interval of Integer[5,20] according to step' do
|
95
|
+
expect(eval_and_collect_notices('Integer[5,20].step(4) |$x| { notice($x) }')).to eq(['5', '9', '13', '17'])
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should produce the elements of [a,b,c,d,e,f,g,h] according to step' do
|
99
|
+
expect(eval_and_collect_notices('[a,b,c,d,e,f,g,h].step(2) |$x| { notice($x) }')).to eq(%w(a c e g))
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should produce the elements {a=>1,b=>2,c=>3,d=>4,e=>5,f=>6,g=>7,h=>8} according to step' do
|
103
|
+
expect(eval_and_collect_notices('{a=>1,b=>2,c=>3,d=>4,e=>5,f=>6,g=>7,h=>8}.step(2) |$t| { notice($t[1]) }')).to eq(%w(1 3 5 7))
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should produce the choices of Enum[a,b,c,d,e,f,g,h] according to step' do
|
107
|
+
expect(eval_and_collect_notices('Enum[a,b,c,d,e,f,g,h].step(2) |$x| { notice($x) }')).to eq(%w(a c e g))
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should produce descending interval of Integer[5,20] when chained after a reverse_each' do
|
111
|
+
expect(eval_and_collect_notices('Integer[5,20].reverse_each.step(4) |$x| { notice($x) }')).to eq(['20', '16', '12', '8'])
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
require 'matchers/resource'
|
5
|
+
|
6
|
+
describe 'the type function' do
|
7
|
+
include PuppetSpec::Compiler
|
8
|
+
include Matchers::Resource
|
9
|
+
|
10
|
+
it 'produces the type of a given value with default detailed quality' do
|
11
|
+
expect(compile_to_catalog('notify { "${ type([2, 3.14]) }": }')).to have_resource(
|
12
|
+
'Notify[Tuple[Integer[2, 2], Float[3.14, 3.14]]]')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'produces the type of a give value with detailed quality when quality is given' do
|
16
|
+
expect(compile_to_catalog('notify { "${ type([2, 3.14], detailed) }": }')).to have_resource(
|
17
|
+
'Notify[Tuple[Integer[2, 2], Float[3.14, 3.14]]]')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'produces the type of a given value with reduced quality when quality is given' do
|
21
|
+
expect(compile_to_catalog('notify { "${ type([2, 3.14], reduced) }": }')).to have_resource(
|
22
|
+
'Notify[Array[Numeric, 2, 2]]')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'produces the type of a given value with generalized quality when quality is given' do
|
26
|
+
expect(compile_to_catalog('notify { "${ type([2, 3.14], generalized) }": }')).to have_resource(
|
27
|
+
'Notify[Array[Numeric]]')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'errors when given a fault inference quality' do
|
31
|
+
expect do
|
32
|
+
compile_to_catalog("notify { type([2, 4.14], gobbledygooked): }")
|
33
|
+
end.to raise_error(/expects a match for Enum\['detailed', 'generalized', 'reduced'\], got 'gobbledygooked'/)
|
34
|
+
end
|
35
|
+
end
|
@@ -10,18 +10,24 @@ module FunctionAPISpecModule
|
|
10
10
|
|
11
11
|
class TestFunctionLoader < Puppet::Pops::Loader::StaticLoader
|
12
12
|
def initialize
|
13
|
-
@
|
13
|
+
@constants = {}
|
14
14
|
end
|
15
15
|
|
16
16
|
def add_function(name, function)
|
17
17
|
typed_name = Puppet::Pops::Loader::Loader::TypedName.new(:function, name)
|
18
18
|
entry = Puppet::Pops::Loader::Loader::NamedEntry.new(typed_name, function, __FILE__)
|
19
|
-
@
|
19
|
+
@constants[typed_name] = entry
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_type(name, type)
|
23
|
+
typed_name = Puppet::Pops::Loader::Loader::TypedName.new(:type, name)
|
24
|
+
entry = Puppet::Pops::Loader::Loader::NamedEntry.new(typed_name, type, __FILE__)
|
25
|
+
@constants[typed_name] = entry
|
20
26
|
end
|
21
27
|
|
22
28
|
# override StaticLoader
|
23
29
|
def load_constant(typed_name)
|
24
|
-
@
|
30
|
+
@constants[typed_name]
|
25
31
|
end
|
26
32
|
end
|
27
33
|
end
|
@@ -149,7 +155,7 @@ describe 'the 4x function api' do
|
|
149
155
|
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
150
156
|
expect do
|
151
157
|
func.call({}, 3, 10, 3, "4")
|
152
|
-
end.to raise_error(ArgumentError, "'min'
|
158
|
+
end.to raise_error(ArgumentError, "'min' expects one of:
|
153
159
|
(Numeric x, Numeric y, Numeric a?, Numeric b?, Numeric c*)
|
154
160
|
rejected: parameter 'b' expects a Numeric value, got String
|
155
161
|
(String x, String y, String a+)
|
@@ -217,7 +223,7 @@ describe 'the 4x function api' do
|
|
217
223
|
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
218
224
|
expect do
|
219
225
|
func.call({}, 10, '20')
|
220
|
-
end.to raise_error(ArgumentError, "'min'
|
226
|
+
end.to raise_error(ArgumentError, "'min' expects one of:
|
221
227
|
(Numeric a, Numeric b)
|
222
228
|
rejected: parameter 'b' expects a Numeric value, got String
|
223
229
|
(String s1, String s2)
|
@@ -466,6 +472,48 @@ describe 'the 4x function api' do
|
|
466
472
|
end
|
467
473
|
end
|
468
474
|
|
475
|
+
context 'can use a loader when parsing types in function dispatch' do
|
476
|
+
let(:parser) { Puppet::Pops::Parser::EvaluatingParser.new }
|
477
|
+
|
478
|
+
it 'and resolve a referenced Type alias' do
|
479
|
+
the_loader = loader()
|
480
|
+
the_loader.add_type('myalias', type_alias_t('MyAlias', 'Integer'))
|
481
|
+
here = get_binding(the_loader)
|
482
|
+
fc = eval(<<-CODE, here)
|
483
|
+
Puppet::Functions.create_function('testing::test') do
|
484
|
+
dispatch :test do
|
485
|
+
param 'MyAlias', :x
|
486
|
+
end
|
487
|
+
def test(x)
|
488
|
+
x
|
489
|
+
end
|
490
|
+
end
|
491
|
+
CODE
|
492
|
+
the_loader.add_function('testing::test', fc.new({}, the_loader))
|
493
|
+
program = parser.parse_string('testing::test(10)', __FILE__)
|
494
|
+
Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
|
495
|
+
expect(parser.evaluate({}, program)).to eql(10)
|
496
|
+
end
|
497
|
+
|
498
|
+
it 'and distinguish between a Type alias and a Resource type' do
|
499
|
+
the_loader = loader()
|
500
|
+
here = get_binding(the_loader)
|
501
|
+
fc = eval(<<-CODE, here)
|
502
|
+
Puppet::Functions.create_function('testing::test') do
|
503
|
+
dispatch :test do
|
504
|
+
param 'MyAlias', :x
|
505
|
+
end
|
506
|
+
def test(x)
|
507
|
+
x
|
508
|
+
end
|
509
|
+
end
|
510
|
+
CODE
|
511
|
+
the_loader.add_function('testing::test', fc.new({}, the_loader))
|
512
|
+
program = parser.parse_string('testing::test(10)', __FILE__)
|
513
|
+
Puppet::Pops::Adapters::LoaderAdapter.adapt(program.model).loader = the_loader
|
514
|
+
expect { parser.evaluate({}, program) }.to raise_error(Puppet::Error, /parameter 'x' expects a Resource value, got Integer/)
|
515
|
+
end
|
516
|
+
end
|
469
517
|
end
|
470
518
|
|
471
519
|
def create_noargs_function_class
|
@@ -801,4 +849,12 @@ describe 'the 4x function api' do
|
|
801
849
|
end
|
802
850
|
end
|
803
851
|
|
852
|
+
def type_alias_t(name, type_string)
|
853
|
+
type_expr = Puppet::Pops::Parser::EvaluatingParser.new.parse_string(type_string).current
|
854
|
+
Puppet::Pops::Types::TypeFactory.type_alias(name, type_expr)
|
855
|
+
end
|
856
|
+
|
857
|
+
def get_binding(loader_injected_arg)
|
858
|
+
binding
|
859
|
+
end
|
804
860
|
end
|