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
@@ -116,13 +116,25 @@ describe "Puppet defaults" do
|
|
116
116
|
end
|
117
117
|
|
118
118
|
describe "on a Windows-like platform it", :if => Puppet.features.microsoft_windows? do
|
119
|
-
|
119
|
+
let (:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
120
|
+
|
121
|
+
it "path should not add anything" do
|
120
122
|
path = "c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows"
|
121
|
-
Puppet::Util.withenv("PATH" => path) do
|
123
|
+
Puppet::Util.withenv( {"PATH" => path }, :windows ) do
|
122
124
|
Puppet.settings[:path] = "none" # this causes it to ignore the setting
|
123
125
|
expect(ENV["PATH"]).to eq(path)
|
124
126
|
end
|
125
127
|
end
|
128
|
+
|
129
|
+
it "path should support UTF8 characters" do
|
130
|
+
path = "c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows#{File::PATH_SEPARATOR}C:\\" + rune_utf8
|
131
|
+
Puppet::Util.withenv( {"PATH" => path }, :windows) do
|
132
|
+
Puppet.settings[:path] = "none" # this causes it to ignore the setting
|
133
|
+
|
134
|
+
envhash = Puppet::Util::Windows::Process.get_environment_strings
|
135
|
+
expect(envhash['Path']).to eq(path)
|
136
|
+
end
|
137
|
+
end
|
126
138
|
end
|
127
139
|
|
128
140
|
it "should default to pson for the preferred serialization format" do
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Puppet::FileSystem::Uniquefile do
|
4
|
+
|
5
|
+
describe "#open_tmp on Windows", :if => Puppet.features.microsoft_windows? do
|
6
|
+
|
7
|
+
describe "with UTF8 characters" do
|
8
|
+
include PuppetSpec::Files
|
9
|
+
|
10
|
+
let(:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
11
|
+
let(:temp_rune_utf8) { tmpdir(rune_utf8) }
|
12
|
+
|
13
|
+
it "should use UTF8 characters in TMP,TEMP,TMPDIR environment variable" do
|
14
|
+
# Set the temporary environment variables to the UTF8 temp path
|
15
|
+
Puppet::Util::Windows::Process.set_environment_variable('TMPDIR', temp_rune_utf8)
|
16
|
+
Puppet::Util::Windows::Process.set_environment_variable('TMP', temp_rune_utf8)
|
17
|
+
Puppet::Util::Windows::Process.set_environment_variable('TEMP', temp_rune_utf8)
|
18
|
+
|
19
|
+
# Create a unique file
|
20
|
+
filename = Puppet::FileSystem::Uniquefile.open_tmp('foo') do |file|
|
21
|
+
File.dirname(file.path)
|
22
|
+
end
|
23
|
+
|
24
|
+
expect(filename).to eq(temp_rune_utf8)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/module_tool'
|
3
|
+
require 'puppet_spec/files'
|
4
|
+
|
5
|
+
describe Puppet::ModuleTool::Tar::Mini, :if => (Puppet.features.minitar? && Puppet.features.zlib?) do
|
6
|
+
let(:minitar) { described_class.new }
|
7
|
+
|
8
|
+
describe "Extracts tars with long and short pathnames" do
|
9
|
+
let (:sourcetar) { File.expand_path('../../../../fixtures/module.tar.gz', __FILE__) }
|
10
|
+
|
11
|
+
let (:longfilepath) { "puppetlabs-dsc-1.0.0/lib/puppet_x/dsc_resources/xWebAdministration/DSCResources/MSFT_xWebAppPoolDefaults/MSFT_xWebAppPoolDefaults.schema.mof" }
|
12
|
+
let (:shortfilepath) { "puppetlabs-dsc-1.0.0/README.md" }
|
13
|
+
|
14
|
+
it "unpacks a tar with a short path length" do
|
15
|
+
extractdir = PuppetSpec::Files.tmpdir('minitar')
|
16
|
+
|
17
|
+
minitar.unpack(sourcetar,extractdir,'module')
|
18
|
+
expect(File).to exist(File.expand_path("#{extractdir}/#{shortfilepath}"))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "unpacks a tar with a long path length" do
|
22
|
+
extractdir = PuppetSpec::Files.tmpdir('minitar')
|
23
|
+
|
24
|
+
minitar.unpack(sourcetar,extractdir,'module')
|
25
|
+
expect(File).to exist(File.expand_path("#{extractdir}/#{longfilepath}"))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -119,4 +119,17 @@ describe Puppet::Node::Environment do
|
|
119
119
|
# be raised if 'b' is evaluated before 'a').
|
120
120
|
:strict_variables => true
|
121
121
|
end
|
122
|
+
|
123
|
+
describe "#extralibs on Windows", :if => Puppet.features.microsoft_windows? do
|
124
|
+
|
125
|
+
describe "with UTF8 characters in PUPPETLIB" do
|
126
|
+
let(:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
127
|
+
|
128
|
+
before { Puppet::Util::Windows::Process.set_environment_variable('PUPPETLIB', rune_utf8) }
|
129
|
+
|
130
|
+
it "should use UTF8 characters in PUPPETLIB environment variable" do
|
131
|
+
expect(Puppet::Node::Environment.extralibs()).to eq([rune_utf8])
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
122
135
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/pops'
|
3
|
+
require 'puppet/parser/parser_factory'
|
4
|
+
require 'puppet_spec/compiler'
|
5
|
+
require 'puppet_spec/pops'
|
6
|
+
require 'puppet_spec/scope'
|
7
|
+
require 'matchers/resource'
|
8
|
+
require 'rgen/metamodel_builder'
|
9
|
+
|
10
|
+
# These tests are in a separate file since othr compiler related tests have
|
11
|
+
# been dramatically changed between 3.x and 4.x and it is a pain to merge
|
12
|
+
# them.
|
13
|
+
#
|
14
|
+
describe "Puppet::Parser::Compiler when dealing with relative naming" do
|
15
|
+
include PuppetSpec::Compiler
|
16
|
+
include Matchers::Resource
|
17
|
+
|
18
|
+
describe "the compiler when using 4.x parser and evaluator" do
|
19
|
+
it "should use absolute references even if references are not anchored" do
|
20
|
+
node = Puppet::Node.new("testnodex")
|
21
|
+
catalog = compile_to_catalog(<<-PP, node)
|
22
|
+
class foo::thing {
|
23
|
+
notify {"from foo::thing":}
|
24
|
+
}
|
25
|
+
|
26
|
+
class thing {
|
27
|
+
notify {"from ::thing":}
|
28
|
+
}
|
29
|
+
|
30
|
+
class foo {
|
31
|
+
# include thing
|
32
|
+
class {'thing':}
|
33
|
+
}
|
34
|
+
|
35
|
+
include foo
|
36
|
+
PP
|
37
|
+
|
38
|
+
catalog = Puppet::Parser::Compiler.compile(node)
|
39
|
+
|
40
|
+
expect(catalog).to have_resource("Notify[from ::thing]")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should use absolute references when references are absolute" do
|
44
|
+
node = Puppet::Node.new("testnodex")
|
45
|
+
catalog = compile_to_catalog(<<-PP, node)
|
46
|
+
class foo::thing {
|
47
|
+
notify {"from foo::thing":}
|
48
|
+
}
|
49
|
+
|
50
|
+
class thing {
|
51
|
+
notify {"from ::thing":}
|
52
|
+
}
|
53
|
+
|
54
|
+
class foo {
|
55
|
+
# include thing
|
56
|
+
class {'::thing':}
|
57
|
+
}
|
58
|
+
|
59
|
+
include foo
|
60
|
+
PP
|
61
|
+
|
62
|
+
catalog = Puppet::Parser::Compiler.compile(node)
|
63
|
+
|
64
|
+
expect(catalog).to have_resource("Notify[from ::thing]")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,336 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet_spec/language'
|
3
|
+
|
4
|
+
['Function', 'EPP'].each do |call_type|
|
5
|
+
describe "#{call_type} parameter default expressions" do
|
6
|
+
let! (:func_bodies) {
|
7
|
+
[
|
8
|
+
'{}',
|
9
|
+
'{ notice("\$a == ${a}") }',
|
10
|
+
'{ notice("\$a == ${a}") notice("\$b == ${b}") }',
|
11
|
+
'{ notice("\$a == ${a}") notice("\$b == ${b}") notice("\$c == ${c}") }'
|
12
|
+
]
|
13
|
+
}
|
14
|
+
|
15
|
+
let! (:epp_bodies) {
|
16
|
+
[
|
17
|
+
'',
|
18
|
+
'<% notice("\$a == ${a}") %>',
|
19
|
+
'<% notice("\$a == ${a}") notice("\$b == ${b}") %>',
|
20
|
+
'<% notice("\$a == ${a}") notice("\$b == ${b}") notice("\$c == ${c}") %>'
|
21
|
+
]
|
22
|
+
}
|
23
|
+
let! (:param_names) { ('a'..'c').to_a }
|
24
|
+
|
25
|
+
let (:call_type) { call_type }
|
26
|
+
|
27
|
+
let (:compiler) { Puppet::Parser::Compiler.new(Puppet::Node.new('specification')) }
|
28
|
+
|
29
|
+
def collect_notices(code)
|
30
|
+
logs = []
|
31
|
+
Puppet[:code] = code
|
32
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
33
|
+
compiler.compile
|
34
|
+
yield
|
35
|
+
end
|
36
|
+
logs.select { |log| log.level == :notice }.map { |log| log.message }
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param arg_list [String] comma separated parameter declarations. Not enclosed in parenthesis
|
40
|
+
# @param body [String,Integer] verbatim body or index of an entry in func_bodies
|
41
|
+
# @param call_params [Array[#to_s]] array of call parameters
|
42
|
+
# @return [Array] array of notice output entries
|
43
|
+
#
|
44
|
+
def eval_collect_notices(arg_list, body, call_params)
|
45
|
+
call = call_params.is_a?(String) ? call_params : "example(#{call_params.join(',')})"
|
46
|
+
body = func_bodies[body] if body.is_a?(Integer)
|
47
|
+
evaluator = Puppet::Pops::Parser::EvaluatingParser.new()
|
48
|
+
collect_notices("function example(#{arg_list}) #{body}") do
|
49
|
+
evaluator.evaluate_string(compiler.topscope, call)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param arg_list [String] comma separated parameter declarations. Not enclosed in parenthesis
|
54
|
+
# @param body [String,Integer] verbatim body or index of an entry in bodies
|
55
|
+
# @param call_params [Array] array of call parameters
|
56
|
+
# @param code [String] code to evaluate
|
57
|
+
# @return [Array] array of notice output entries
|
58
|
+
#
|
59
|
+
def epp_eval_collect_notices(arg_list, body, call_params, code, inline_epp)
|
60
|
+
body = body.is_a?(Integer) ? epp_bodies[body] : body.strip
|
61
|
+
source = "<%| #{arg_list} |%>#{body}"
|
62
|
+
named_params = call_params.reduce({}) {|h, v| h[param_names[h.size]] = v; h }
|
63
|
+
collect_notices(code) do
|
64
|
+
if inline_epp
|
65
|
+
Puppet::Pops::Evaluator::EppEvaluator.inline_epp(compiler.topscope, source, named_params)
|
66
|
+
else
|
67
|
+
file = Tempfile.new(['epp-script', '.epp'])
|
68
|
+
begin
|
69
|
+
file.write(source)
|
70
|
+
file.close
|
71
|
+
Puppet::Pops::Evaluator::EppEvaluator.epp(compiler.topscope, file.path, 'test', named_params)
|
72
|
+
ensure
|
73
|
+
file.unlink
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
# evaluates a function or EPP call, collects notice output in a log and compares log to expected result
|
81
|
+
#
|
82
|
+
# @param decl [Array[]] two element array with argument list declaration and body. Body can a verbatim string
|
83
|
+
# or an integer index of an entry in bodies
|
84
|
+
# @param call_params [Array[#to_s]] array of call parameters
|
85
|
+
# @param code [String] code to evaluate. Only applicable when call_type == 'EPP'
|
86
|
+
# @param inline_epp [Boolean] true for inline_epp, false for file based epp, Only applicable when call_type == 'EPP'
|
87
|
+
# @return [Array] array of notice output entries
|
88
|
+
#
|
89
|
+
def expect_log(decl, call_params, result, code = 'undef', inline_epp = true)
|
90
|
+
if call_type == 'Function'
|
91
|
+
expect(eval_collect_notices(decl[0], decl[1], call_params)).to include(*result)
|
92
|
+
else
|
93
|
+
expect(epp_eval_collect_notices(decl[0], decl[1], call_params, code, inline_epp)).to include(*result)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# evaluates a function or EPP call and expects a failure
|
98
|
+
#
|
99
|
+
# @param decl [Array[]] two element array with argument list declaration and body. Body can a verbatim string
|
100
|
+
# or an integer index of an entry in bodies
|
101
|
+
# @param call_params [Array[#to_s]] array of call parameters
|
102
|
+
# @param text [String,Regexp] expected error message
|
103
|
+
def expect_fail(decl, call, text, inline_epp = true)
|
104
|
+
if call_type == 'Function'
|
105
|
+
expect{eval_collect_notices(decl[0], decl[1], call) }.to raise_error(StandardError, text)
|
106
|
+
else
|
107
|
+
expect{epp_eval_collect_notices(decl[0], decl[1], call, 'undef', inline_epp) }.to raise_error(StandardError, text)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'that references a parameter to the left that has no default' do
|
112
|
+
let!(:params) { [ <<-SOURCE, 2 ]
|
113
|
+
$a,
|
114
|
+
$b = $a
|
115
|
+
SOURCE
|
116
|
+
}
|
117
|
+
|
118
|
+
it 'fails when no value is provided for required first parameter', :if => call_type == 'Function' do
|
119
|
+
expect_fail(params, [], /expects between 1 and 2 arguments, got none/)
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'fails when no value is provided for required first parameter', :if => call_type == 'EPP' do
|
123
|
+
expect_fail(params, [], /default expression for \$b tries to illegally access not yet evaluated \$a/)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "will use the referenced parameter's given value" do
|
127
|
+
expect_log(params, [2], ['$a == 2', '$b == 2'])
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'will not be evaluated when a value is given' do
|
131
|
+
expect_log(params, [2, 5], ['$a == 2', '$b == 5'])
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'that references a parameter to the left that has a default' do
|
136
|
+
let!(:params) { [ <<-SOURCE, 2 ]
|
137
|
+
$a = 10,
|
138
|
+
$b = $a
|
139
|
+
SOURCE
|
140
|
+
}
|
141
|
+
|
142
|
+
it "will use the referenced parameter's default value when no value is given for the referenced parameter" do
|
143
|
+
expect_log(params, [], ['$a == 10', '$b == 10'])
|
144
|
+
end
|
145
|
+
|
146
|
+
it "will use the referenced parameter's given value" do
|
147
|
+
expect_log(params, [2], ['$a == 2', '$b == 2'])
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'will not be evaluated when a value is given' do
|
151
|
+
expect_log(params, [2, 5], ['$a == 2', '$b == 5'])
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context 'that references a variable to the right' do
|
156
|
+
let!(:params) { [ <<-SOURCE, 3 ]
|
157
|
+
$a = 10,
|
158
|
+
$b = $c,
|
159
|
+
$c = 20
|
160
|
+
SOURCE
|
161
|
+
}
|
162
|
+
|
163
|
+
it 'fails when the reference is evaluated' do
|
164
|
+
expect_fail(params, [1], /default expression for \$b tries to illegally access not yet evaluated \$c/)
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'does not fail when a value is given for the culprit parameter' do
|
168
|
+
expect_log(params, [1,2], ['$a == 1', '$b == 2', '$c == 20'])
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'does not fail when all values are given' do
|
172
|
+
expect_log(params, [1,2,3], ['$a == 1', '$b == 2', '$c == 3'])
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context 'with regular expressions' do
|
177
|
+
it "evaluates unset match scope parameter's to undef" do
|
178
|
+
expect_log([<<-SOURCE, 2], [], ['$a == ', '$b == '])
|
179
|
+
$a = $0,
|
180
|
+
$b = $1
|
181
|
+
SOURCE
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'does not leak match variables from one expression to the next' do
|
185
|
+
expect_log([<<-SOURCE, 2], [], ['$a == [true, h, ello]', '$b == '])
|
186
|
+
$a = ['hello' =~ /(h)(.*)/, $1, $2],
|
187
|
+
$b = $1
|
188
|
+
SOURCE
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'can evaluate expressions in separate match scopes' do
|
192
|
+
expect_log([<<-SOURCE, 3], [], ['$a == [true, h, ell, o]', '$b == [true, h, i, ]', '$c == '])
|
193
|
+
$a = ['hello' =~ /(h)(.*)(o)/, $1, $2, $3],
|
194
|
+
$b = ['hi' =~ /(h)(.*)/, $1, $2, $3],
|
195
|
+
$c = $1
|
196
|
+
SOURCE
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'can have nested match expressions' do
|
200
|
+
expect_log([<<-SOURCE, 2], [], ['$a == [true, h, oo, h, i]', '$b == '] )
|
201
|
+
$a = ['hi' =~ /(h)(.*)/, $1, if'foo' =~ /f(oo)/ { $1 }, $1, $2],
|
202
|
+
$b = $0
|
203
|
+
SOURCE
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'can not see match scope from calling scope', :if => call_type == 'Function' do
|
207
|
+
expect_log([<<-SOURCE, <<-BODY], <<-CALL, ['$a == '])
|
208
|
+
$a = $0
|
209
|
+
SOURCE
|
210
|
+
{
|
211
|
+
notice("\\$a == ${a}")
|
212
|
+
}
|
213
|
+
function caller() {
|
214
|
+
example()
|
215
|
+
}
|
216
|
+
BODY
|
217
|
+
$tmp = 'foo' =~ /(f)(o)(o)/
|
218
|
+
caller()
|
219
|
+
CALL
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'matches in calling scope', :if => call_type == 'EPP' do
|
223
|
+
it 'are available when using inlined epp' do
|
224
|
+
# Note that CODE is evaluated before the EPP is evaluated
|
225
|
+
#
|
226
|
+
expect_log([<<-SOURCE, <<-BODY], [], ['$ax == true', '$bx == foo'], <<-CODE, true)
|
227
|
+
$a = $tmp,
|
228
|
+
$b = $0
|
229
|
+
SOURCE
|
230
|
+
<% called_from_template($a, $b) %>
|
231
|
+
BODY
|
232
|
+
function called_from_template($ax, $bx) {
|
233
|
+
notice("\\$ax == $ax")
|
234
|
+
notice("\\$bx == $bx")
|
235
|
+
}
|
236
|
+
$tmp = 'foo' =~ /(f)(o)(o)/
|
237
|
+
CODE
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'are not available when using epp file' do
|
241
|
+
# Note that CODE is evaluated before the EPP is evaluated
|
242
|
+
#
|
243
|
+
expect_log([<<-SOURCE, <<-BODY], [], ['$ax == true', '$bx == '], <<-CODE, false)
|
244
|
+
$a = $tmp,
|
245
|
+
$b = $0
|
246
|
+
SOURCE
|
247
|
+
<% called_from_template($a, $b) %>
|
248
|
+
BODY
|
249
|
+
function called_from_template($ax, $bx) {
|
250
|
+
notice("\\$ax == $ax")
|
251
|
+
notice("\\$bx == $bx")
|
252
|
+
}
|
253
|
+
$tmp = 'foo' =~ /(f)(o)(o)/
|
254
|
+
CODE
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
it 'will allow nested lambdas to access enclosing match scope' do
|
260
|
+
expect_log([<<-SOURCE, 1], [], ['$a == [1-ello, 2-ello, 3-ello]'])
|
261
|
+
$a = case "hello" {
|
262
|
+
/(h)(.*)/ : {
|
263
|
+
[1,2,3].map |$x| { "$x-$2" }
|
264
|
+
}
|
265
|
+
}
|
266
|
+
SOURCE
|
267
|
+
end
|
268
|
+
|
269
|
+
it "will not make match scope available to #{call_type} body" do
|
270
|
+
expect_log([<<-SOURCE, call_type == 'Function' ? <<-BODY : <<-EPP_BODY], [], ['Yes'])
|
271
|
+
$a = "hello" =~ /.*/
|
272
|
+
SOURCE
|
273
|
+
{
|
274
|
+
notice("Y${0}es")
|
275
|
+
}
|
276
|
+
BODY
|
277
|
+
<%
|
278
|
+
notice("Y${0}es")
|
279
|
+
%>
|
280
|
+
EPP_BODY
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'can access earlier match results when produced using the match function' do
|
284
|
+
expect_log([<<-SOURCE, 3], [], ['$a == [hello, h, ello]', '$b == hello', '$c == h'])
|
285
|
+
$a = 'hello'.match(/(h)(.*)/),
|
286
|
+
$b = $a[0],
|
287
|
+
$c = $a[1]
|
288
|
+
SOURCE
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
|
293
|
+
context 'will not permit assignments' do
|
294
|
+
it 'at top level' do
|
295
|
+
expect_fail([<<-SOURCE, 0], [], /Syntax error at '='/)
|
296
|
+
$a = $x = $0
|
297
|
+
SOURCE
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'in arrays' do
|
301
|
+
expect_fail([<<-SOURCE, 0], [], /Assignment not allowed here/)
|
302
|
+
$a = [$x = 3]
|
303
|
+
SOURCE
|
304
|
+
end
|
305
|
+
|
306
|
+
it 'of variable with the same name as a subsequently declared parameter' do
|
307
|
+
expect_fail([<<-SOURCE, 0], [], /Assignment not allowed here/)
|
308
|
+
$a = ($b = 3),
|
309
|
+
$b = 5
|
310
|
+
SOURCE
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'of variable with the same name as a previously declared parameter' do
|
314
|
+
expect_fail([<<-SOURCE, 0], [], /Assignment not allowed here/)
|
315
|
+
$a = 10,
|
316
|
+
$b = ($a = 10)
|
317
|
+
SOURCE
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'will permit assignments in nested scope' do
|
322
|
+
expect_log([<<-SOURCE, 3], [], ['$a == [1, 2, 3]', '$b == 0', '$c == [6, 12, 18]'])
|
323
|
+
$a = [1,2,3],
|
324
|
+
$b = 0,
|
325
|
+
$c = $a.map |$x| { $b = $x; $b * $a.reduce |$x, $y| {$x + $y} }
|
326
|
+
SOURCE
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'will not permit duplicate parameter names' do
|
330
|
+
expect_fail([<<-SOURCE, 0], [], /The parameter 'a' is declared more than once/ )
|
331
|
+
$a = 2,
|
332
|
+
$a = 5
|
333
|
+
SOURCE
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|