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
@@ -0,0 +1,241 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/pops'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Types
|
6
|
+
describe 'Puppet Type System' do
|
7
|
+
let(:tf) { TypeFactory }
|
8
|
+
context 'Integer type' do
|
9
|
+
let!(:a) { tf.range(10, 20) }
|
10
|
+
let!(:b) { tf.range(18, 28) }
|
11
|
+
let!(:c) { tf.range( 2, 12) }
|
12
|
+
let!(:d) { tf.range(12, 18) }
|
13
|
+
let!(:e) { tf.range( 8, 22) }
|
14
|
+
let!(:f) { tf.range( 8, 9) }
|
15
|
+
let!(:g) { tf.range(21, 22) }
|
16
|
+
let!(:h) { tf.range(30, 31) }
|
17
|
+
let!(:i) { tf.float_range(1.0, 30.0) }
|
18
|
+
let!(:j) { tf.float_range(1.0, 9.0) }
|
19
|
+
|
20
|
+
context 'when testing if ranges intersect' do
|
21
|
+
it 'detects an intersection when self is before its argument' do
|
22
|
+
expect(a.intersect?(b)).to be_truthy
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'detects an intersection when self is after its argument' do
|
26
|
+
expect(a.intersect?(c)).to be_truthy
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'detects an intersection when self covers its argument' do
|
30
|
+
expect(a.intersect?(d)).to be_truthy
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'detects an intersection when self equals its argument' do
|
34
|
+
expect(a.intersect?(a)).to be_truthy
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'detects an intersection when self is covered by its argument' do
|
38
|
+
expect(a.intersect?(e)).to be_truthy
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'does not consider an adjacent range to be intersecting' do
|
42
|
+
[f, g].each {|x| expect(a.intersect?(x)).to be_falsey }
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'does not consider an range that is apart to be intersecting' do
|
46
|
+
expect(a.intersect?(h)).to be_falsey
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'does not consider an overlapping float range to be intersecting' do
|
50
|
+
expect(a.intersect?(i)).to be_falsey
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when testing if ranges are adjacent' do
|
55
|
+
it 'detects an adjacent type when self is after its argument' do
|
56
|
+
expect(a.adjacent?(f)).to be_truthy
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'detects an adjacent type when self is before its argument' do
|
60
|
+
expect(a.adjacent?(g)).to be_truthy
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'does not consider overlapping types to be adjacent' do
|
64
|
+
[a, b, c, d, e].each { |x| expect(a.adjacent?(x)).to be_falsey }
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'does not consider an range that is apart to be adjacent' do
|
68
|
+
expect(a.adjacent?(h)).to be_falsey
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'does not consider an adjacent float range to be adjancent' do
|
72
|
+
expect(a.adjacent?(j)).to be_falsey
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'when merging ranges' do
|
77
|
+
it 'will merge intersecting ranges' do
|
78
|
+
expect(a.merge(b)).to eq(tf.range(10, 28))
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'will merge adjacent ranges' do
|
82
|
+
expect(a.merge(g)).to eq(tf.range(10, 22))
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'will not merge ranges that are apart' do
|
86
|
+
expect(a.merge(h)).to be_nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'will not merge overlapping float ranges' do
|
90
|
+
expect(a.merge(i)).to be_nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'will not merge adjacent float ranges' do
|
94
|
+
expect(a.merge(j)).to be_nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'Float type' do
|
100
|
+
let!(:a) { tf.float_range(10.0, 20.0) }
|
101
|
+
let!(:b) { tf.float_range(18.0, 28.0) }
|
102
|
+
let!(:c) { tf.float_range( 2.0, 12.0) }
|
103
|
+
let!(:d) { tf.float_range(12.0, 18.0) }
|
104
|
+
let!(:e) { tf.float_range( 8.0, 22.0) }
|
105
|
+
let!(:f) { tf.float_range(30.0, 31.0) }
|
106
|
+
let!(:g) { tf.range(1, 30) }
|
107
|
+
|
108
|
+
context 'when testing if ranges intersect' do
|
109
|
+
it 'detects an intersection when self is before its argument' do
|
110
|
+
expect(a.intersect?(b)).to be_truthy
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'detects an intersection when self is after its argument' do
|
114
|
+
expect(a.intersect?(c)).to be_truthy
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'detects an intersection when self covers its argument' do
|
118
|
+
expect(a.intersect?(d)).to be_truthy
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'detects an intersection when self equals its argument' do
|
122
|
+
expect(a.intersect?(a)).to be_truthy
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'detects an intersection when self is covered by its argument' do
|
126
|
+
expect(a.intersect?(e)).to be_truthy
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'does not consider an range that is apart to be intersecting' do
|
130
|
+
expect(a.intersect?(f)).to be_falsey
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'does not consider an overlapping integer range to be intersecting' do
|
134
|
+
expect(a.intersect?(g)).to be_falsey
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'when merging ranges' do
|
139
|
+
it 'will merge intersecting ranges' do
|
140
|
+
expect(a.merge(b)).to eq(tf.float_range(10.0, 28.0))
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'will not merge ranges that are apart' do
|
144
|
+
expect(a.merge(f)).to be_nil
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'will not merge overlapping integer ranges' do
|
148
|
+
expect(a.merge(g)).to be_nil
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'Optional type' do
|
154
|
+
let!(:overlapping_ints) { tf.variant(tf.range(10, 20), tf.range(18, 28)) }
|
155
|
+
let!(:optoptopt) { tf.optional(tf.optional(tf.optional(overlapping_ints))) }
|
156
|
+
let!(:optnu) { tf.optional(tf.not_undef(overlapping_ints)) }
|
157
|
+
|
158
|
+
context 'when normalizing' do
|
159
|
+
it 'compacts optional in optional in optional to just optional' do
|
160
|
+
expect(optoptopt.normalize).to eq(tf.optional(tf.range(10, 28)))
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'compacts NotUndef in Optional to just Optional' do
|
165
|
+
expect(optnu.normalize).to eq(tf.optional(tf.range(10, 28)))
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'NotUndef type' do
|
170
|
+
let!(:nununu) { tf.not_undef(tf.not_undef(tf.not_undef(tf.any))) }
|
171
|
+
let!(:nuopt) { tf.not_undef(tf.optional(tf.any)) }
|
172
|
+
|
173
|
+
context 'when normalizing' do
|
174
|
+
it 'compacts NotUndef in NotUndef in NotUndef to just NotUndef' do
|
175
|
+
expect(nununu.normalize).to eq(tf.not_undef(tf.any))
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'compacts Optional in NotUndef to just NotUndef' do
|
179
|
+
expect(nuopt.normalize).to eq(tf.not_undef(tf.any))
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'Variant type' do
|
185
|
+
let!(:overlapping_ints) { tf.variant(tf.range(10, 20), tf.range(18, 28)) }
|
186
|
+
let!(:adjacent_ints) { tf.variant(tf.range(10, 20), tf.range(8, 9)) }
|
187
|
+
let!(:mix_ints) { tf.variant(overlapping_ints, adjacent_ints) }
|
188
|
+
let!(:overlapping_floats) { tf.variant(tf.float_range(10.0, 20.0), tf.float_range(18.0, 28.0)) }
|
189
|
+
let!(:enums) { tf.variant(tf.enum('a', 'b'), tf.enum('b', 'c')) }
|
190
|
+
let!(:patterns) { tf.variant(tf.pattern('a', 'b'), tf.pattern('b', 'c')) }
|
191
|
+
let!(:with_undef) { tf.variant(tf.undef, tf.range(1,10)) }
|
192
|
+
let!(:all_optional) { tf.variant(tf.optional(tf.range(1,10)), tf.optional(tf.range(11,20))) }
|
193
|
+
let!(:groups) { tf.variant(mix_ints, overlapping_floats, enums, patterns, with_undef, all_optional) }
|
194
|
+
|
195
|
+
context 'when normalizing contained types that' do
|
196
|
+
it 'are overlapping ints, the result is a range' do
|
197
|
+
expect(overlapping_ints.normalize).to eq(tf.range(10, 28))
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'are adjacent ints, the result is a range' do
|
201
|
+
expect(adjacent_ints.normalize).to eq(tf.range(8, 20))
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'are mixed variants with adjacent and overlapping ints, the result is a range' do
|
205
|
+
expect(mix_ints.normalize).to eq(tf.range(8, 28))
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'are overlapping floats, the result is a float range' do
|
209
|
+
expect(overlapping_floats.normalize).to eq(tf.float_range(10.0, 28.0))
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'are enums, the result is an enum' do
|
213
|
+
expect(enums.normalize).to eq(tf.enum('a', 'b', 'c'))
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'are patterns, the result is a pattern' do
|
217
|
+
expect(patterns.normalize).to eq(tf.pattern('a', 'b', 'c'))
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'contains an Undef, the result is Optional' do
|
221
|
+
expect(with_undef.normalize).to eq(tf.optional(tf.range(1,10)))
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'are all Optional, the result is an Optional with normalized type' do
|
225
|
+
expect(all_optional.normalize).to eq(tf.optional(tf.range(1,20)))
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'can be normalized in groups, the result is a Variant containing the resulting normalizations' do
|
229
|
+
expect(groups.normalize).to eq(tf.variant(
|
230
|
+
tf.range(8, 28),
|
231
|
+
tf.float_range(10.0, 28.0),
|
232
|
+
tf.enum('a', 'b', 'c'),
|
233
|
+
tf.pattern('a', 'b', 'c'),
|
234
|
+
tf.optional(tf.range(1,20)))
|
235
|
+
)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
@@ -151,7 +151,7 @@ describe "validating 4x" do
|
|
151
151
|
end
|
152
152
|
|
153
153
|
context 'for reserved words' do
|
154
|
-
['private', '
|
154
|
+
['private', 'attr'].each do |word|
|
155
155
|
it "produces an error for the word '#{word}'" do
|
156
156
|
source = "$a = #{word}"
|
157
157
|
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::RESERVED_WORD)
|
@@ -217,6 +217,27 @@ describe "validating 4x" do
|
|
217
217
|
end
|
218
218
|
end
|
219
219
|
|
220
|
+
context 'for keywords' do
|
221
|
+
it "should allow using the 'type' as the name of a function with no parameters" do
|
222
|
+
source = "type()"
|
223
|
+
expect(validate(parse(source))).not_to have_any_issues
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should allow using the keyword 'type' as the name of a function with parameters" do
|
227
|
+
source = "type('a', 'b')"
|
228
|
+
expect(validate(parse(source))).not_to have_any_issues
|
229
|
+
end
|
230
|
+
it "should allow using the 'type' as the name of a function with no parameters and a block" do
|
231
|
+
source = "type() |$x| { $x }"
|
232
|
+
expect(validate(parse(source))).not_to have_any_issues
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should allow using the keyword 'type' as the name of a function with parameters and a block" do
|
236
|
+
source = "type('a', 'b') |$x| { $x }"
|
237
|
+
expect(validate(parse(source))).not_to have_any_issues
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
220
241
|
context 'for parameter names' do
|
221
242
|
['class', 'define'].each do |word|
|
222
243
|
it "should require that #{word} parameter names are unique" do
|
@@ -229,6 +250,34 @@ describe "validating 4x" do
|
|
229
250
|
end
|
230
251
|
end
|
231
252
|
|
253
|
+
context 'for parameter defaults' do
|
254
|
+
['class', 'define'].each do |word|
|
255
|
+
it "should not permit assignments in #{word} parameter default expressions" do
|
256
|
+
expect { parse("#{word} foo($a = $x = 10) {}") }.to raise_error(Puppet::ParseErrorWithIssue, /Syntax error at '='/)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
['class', 'define'].each do |word|
|
261
|
+
it "should not permit assignments in #{word} parameter default nested expressions" do
|
262
|
+
expect(validate(parse("#{word} foo($a = [$x = 10]) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should not permit assignments to subsequently declared parameters in #{word} parameter default nested expressions" do
|
266
|
+
expect(validate(parse("#{word} foo($a = ($b = 3), $b = 5) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
267
|
+
end
|
268
|
+
|
269
|
+
it "should not permit assignments to previously declared parameters in #{word} parameter default nested expressions" do
|
270
|
+
expect(validate(parse("#{word} foo($a = 10, $b = ($a = 10)) {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT)
|
271
|
+
end
|
272
|
+
|
273
|
+
it "should permit assignments in #{word} parameter default inside nested lambda expressions" do
|
274
|
+
expect(validate(parse(
|
275
|
+
"#{word} foo($a = [1,2,3], $b = 0, $c = $a.map |$x| { $b = $x; $b * $a.reduce |$x, $y| {$x + $y}}) {}"))).not_to(
|
276
|
+
have_issue(Puppet::Pops::Issues::ILLEGAL_ASSIGNMENT_CONTEXT))
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
232
281
|
context 'for reserved parameter names' do
|
233
282
|
['name', 'title'].each do |word|
|
234
283
|
it "produces an error when $#{word} is used as a parameter in a class" do
|
@@ -272,61 +321,69 @@ describe "validating 4x" do
|
|
272
321
|
end
|
273
322
|
end
|
274
323
|
|
275
|
-
context 'top level constructs
|
276
|
-
|
277
|
-
|
278
|
-
source = "if true { #{word} x {} }"
|
279
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::NOT_TOP_LEVEL)
|
280
|
-
end
|
324
|
+
context 'top level constructs' do
|
325
|
+
def issue(at_top)
|
326
|
+
at_top ? Puppet::Pops::Issues::NOT_ABSOLUTE_TOP_LEVEL : Puppet::Pops::Issues::NOT_TOP_LEVEL
|
281
327
|
end
|
282
328
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
329
|
+
# Top level. Defines the expressions that are tested inside of other things
|
330
|
+
{
|
331
|
+
'a class' => ['class x{}', false],
|
332
|
+
'a define' => ['define x{}', false],
|
333
|
+
'a node' => ['node x{}', false],
|
334
|
+
'a function' => ['function x() {}', true],
|
335
|
+
'a type alias' => ['type A = Data', true],
|
336
|
+
'a type alias for a complex type' => ['type C = Hash[String[1],Integer]', true],
|
337
|
+
'a type definition' => ['type A {}', true]
|
338
|
+
}.each_pair do |word, (decl, at_top)|
|
339
|
+
# Nesting level. Defines how each of the top level expressions are nested in
|
340
|
+
# another expression
|
341
|
+
{
|
342
|
+
'a define' => ["define y{ #{decl} }", at_top],
|
343
|
+
'a function' => ["function y() { #{decl} }", at_top],
|
344
|
+
'a type definition' => ["type A { #{decl} }", at_top],
|
345
|
+
'an if expression' => ["if true { #{decl} }", false],
|
346
|
+
'an if-else expression' => ["if false {} else { #{decl} }", false],
|
347
|
+
'an unless' => ["unless false { #{decl} }", false]
|
348
|
+
}.each_pair do |nester, (source, abs_top)|
|
349
|
+
# Tests each top level expression in each nested expression
|
350
|
+
it "produces an error when #{word} is nested in #{nester}" do
|
351
|
+
expect(validate(parse(source))).to have_issue(issue(abs_top))
|
352
|
+
end
|
287
353
|
end
|
288
|
-
end
|
289
354
|
|
290
|
-
|
291
|
-
it "produces an error when $#{word} is nested in an unless expression" do
|
292
|
-
source = "unless false { #{word} x {} }"
|
293
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::NOT_TOP_LEVEL)
|
294
|
-
end
|
295
|
-
end
|
355
|
+
# Test that the expression can exist anywhere in a top level block
|
296
356
|
|
297
|
-
|
298
|
-
|
299
|
-
source = "function y() { #{word} x {} }"
|
300
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::NOT_TOP_LEVEL)
|
357
|
+
it "will allow #{word} as the only statement in a top level block" do
|
358
|
+
expect(validate(parse(decl))).not_to have_issue(issue(at_top))
|
301
359
|
end
|
302
|
-
end
|
303
360
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
361
|
+
it "will allow #{word} as the last statement in a top level block" do
|
362
|
+
source = "$a = 10\n#{decl}"
|
363
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
364
|
+
end
|
308
365
|
|
309
|
-
|
310
|
-
|
311
|
-
source
|
312
|
-
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::NOT_ABSOLUTE_TOP_LEVEL)
|
366
|
+
it "will allow #{word} as the first statement in a top level block" do
|
367
|
+
source = "#{decl}\n$a = 10"
|
368
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
313
369
|
end
|
314
|
-
end
|
315
370
|
|
316
|
-
|
317
|
-
|
318
|
-
|
371
|
+
it "will allow #{word} in between other statements in a top level block" do
|
372
|
+
source = "$a = 10\n#{decl}\n$b = 20"
|
373
|
+
expect(validate(parse(source))).not_to have_issue(issue(at_top))
|
374
|
+
end
|
319
375
|
end
|
320
376
|
|
321
|
-
|
322
|
-
|
377
|
+
context 'that are type aliases' do
|
378
|
+
it 'raises errors when RHS is a name that is an invalid reference' do
|
379
|
+
source = 'type MyInt = integer'
|
380
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::ILLEGAL_EXPRESSION)
|
381
|
+
end
|
323
382
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
program.body.addStatements(function)
|
329
|
-
expect(validate(program)).not_to have_issue(Puppet::Pops::Issues::NOT_ABSOLUTE_TOP_LEVEL)
|
383
|
+
it 'raises errors when RHS is an AccessExpression with a name that is an invalid reference on LHS' do
|
384
|
+
source = 'type IntegerArray = array[Integer]'
|
385
|
+
expect(validate(parse(source))).to have_issue(Puppet::Pops::Issues::ILLEGAL_EXPRESSION)
|
386
|
+
end
|
330
387
|
end
|
331
388
|
end
|
332
389
|
|
@@ -139,6 +139,7 @@ describe Puppet::Type.type(:cron).provider(:crontab) do
|
|
139
139
|
expect(described_class.parse_line('MAILTO=""')).to eq({:record_type => :environment, :line => 'MAILTO=""'})
|
140
140
|
expect(described_class.parse_line('FOO=BAR')).to eq({:record_type => :environment, :line => 'FOO=BAR'})
|
141
141
|
expect(described_class.parse_line('FOO_BAR=BAR')).to eq({:record_type => :environment, :line => 'FOO_BAR=BAR'})
|
142
|
+
expect(described_class.parse_line('SPACE = BAR')).to eq({:record_type => :environment, :line => 'SPACE = BAR'})
|
142
143
|
end
|
143
144
|
|
144
145
|
it "should extract a cron entry" do
|
@@ -6,7 +6,9 @@
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
8
|
require 'puppet'
|
9
|
-
|
9
|
+
|
10
|
+
module Puppet::Util::Plist
|
11
|
+
end
|
10
12
|
|
11
13
|
provider_class = Puppet::Type.type(:macauthorization).provider(:macauthorization)
|
12
14
|
|
@@ -26,7 +28,8 @@ describe provider_class do
|
|
26
28
|
authdb["rights"] = { "fooright" => "foo" }
|
27
29
|
|
28
30
|
# Stub out Plist::parse_xml
|
29
|
-
Plist.stubs(:
|
31
|
+
Puppet::Util::Plist.stubs(:parse_plist).returns(authdb)
|
32
|
+
Puppet::Util::Plist.stubs(:write_plist_file)
|
30
33
|
|
31
34
|
# A catch all; no parameters set
|
32
35
|
@resource.stubs(:[]).returns(nil)
|