puppet 4.3.2 → 4.4.0
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
@@ -158,7 +158,7 @@ describe Puppet::Parser::Scope do
|
|
158
158
|
expect { @scope[:foo] = 12 }.to raise_error(Puppet::ParseError, /Scope variable name .* not a string/)
|
159
159
|
end
|
160
160
|
|
161
|
-
it "should return nil for unset variables" do
|
161
|
+
it "should return nil for unset variables when --strict variables is not in effect" do
|
162
162
|
expect(@scope["var"]).to be_nil
|
163
163
|
end
|
164
164
|
|
@@ -208,6 +208,26 @@ describe Puppet::Parser::Scope do
|
|
208
208
|
expect(@scope).not_to be_include("var")
|
209
209
|
end
|
210
210
|
|
211
|
+
it "warns and return nil for non found unqualified variable" do
|
212
|
+
Puppet.expects(:warn_once)
|
213
|
+
expect(@scope["santa_clause"]).to be_nil
|
214
|
+
end
|
215
|
+
|
216
|
+
it "warns once for a non found variable" do
|
217
|
+
Puppet.expects(:warning).once
|
218
|
+
expect([@scope["santa_claus"],@scope["santa_claus"]]).to eq([nil, nil])
|
219
|
+
end
|
220
|
+
|
221
|
+
it "warns and return nil for non found qualified variable" do
|
222
|
+
Puppet.expects(:warn_once)
|
223
|
+
expect(@scope["north_pole::santa_clause"]).to be_nil
|
224
|
+
end
|
225
|
+
|
226
|
+
it "does not warn when a numeric variable is missing - they always exist" do
|
227
|
+
Puppet.expects(:warn_once).never
|
228
|
+
expect(@scope["1"]).to be_nil
|
229
|
+
end
|
230
|
+
|
211
231
|
describe "and the variable is qualified" do
|
212
232
|
before :each do
|
213
233
|
@known_resource_types = @scope.known_resource_types
|
@@ -266,17 +286,16 @@ describe Puppet::Parser::Scope do
|
|
266
286
|
|
267
287
|
it "should warn and return nil for qualified variables whose classes have not been evaluated" do
|
268
288
|
klass = newclass("other::deep::klass")
|
269
|
-
|
289
|
+
Puppet.expects(:warn_once)
|
270
290
|
expect(@scope["other::deep::klass::var"]).to be_nil
|
271
291
|
end
|
272
292
|
|
273
293
|
it "should warn and return nil for qualified variables whose classes do not exist" do
|
274
|
-
|
294
|
+
Puppet.expects(:warn_once)
|
275
295
|
expect(@scope["other::deep::klass::var"]).to be_nil
|
276
296
|
end
|
277
297
|
|
278
298
|
it "should return nil when asked for a non-string qualified variable from a class that does not exist" do
|
279
|
-
@scope.stubs(:warning)
|
280
299
|
expect(@scope["other::deep::klass::var"]).to be_nil
|
281
300
|
end
|
282
301
|
|
@@ -489,17 +508,15 @@ describe Puppet::Parser::Scope do
|
|
489
508
|
expect(@scope.include?("1")).to be_falsey
|
490
509
|
end
|
491
510
|
|
492
|
-
describe "when
|
511
|
+
describe "when using a guarded scope" do
|
493
512
|
it "should remove ephemeral scopes up to this level" do
|
494
513
|
@scope.set_match_data({1 => :value1})
|
495
514
|
@scope.new_ephemeral
|
496
515
|
@scope.set_match_data({1 => :value2})
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
@scope.unset_ephemeral_var(level)
|
502
|
-
|
516
|
+
@scope.with_guarded_scope do
|
517
|
+
@scope.new_ephemeral
|
518
|
+
@scope.set_match_data({1 => :value3})
|
519
|
+
end
|
503
520
|
expect(@scope["1"]).to eq(:value2)
|
504
521
|
end
|
505
522
|
end
|
@@ -120,7 +120,7 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
|
|
120
120
|
|
121
121
|
it 'produces an Integer[1]' do
|
122
122
|
expr = fqr('Integer')[1]
|
123
|
-
expect(evaluate(expr)).to eql(range(1
|
123
|
+
expect(evaluate(expr)).to eql(range(1,:default))
|
124
124
|
end
|
125
125
|
|
126
126
|
it 'gives an error for Integer[from, <from]' do
|
@@ -146,12 +146,12 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
|
|
146
146
|
|
147
147
|
it 'produces a Float[1.0]' do
|
148
148
|
expr = fqr('Float')[1.0]
|
149
|
-
expect(evaluate(expr)).to eql(float_range(1.0
|
149
|
+
expect(evaluate(expr)).to eql(float_range(1.0,:default))
|
150
150
|
end
|
151
151
|
|
152
152
|
it 'produces a Float[1]' do
|
153
153
|
expr = fqr('Float')[1]
|
154
|
-
expect(evaluate(expr)).to eql(float_range(1.0
|
154
|
+
expect(evaluate(expr)).to eql(float_range(1.0,:default))
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'gives an error for Float[from, <from]' do
|
@@ -86,6 +86,9 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
86
86
|
it "'1.0' < 1.1 == true" do
|
87
87
|
expect{evaluate(literal('1.0') < literal(1.1))}.to raise_error(/String < Float/)
|
88
88
|
end
|
89
|
+
it "undef < 1.1 == true" do
|
90
|
+
expect{evaluate(literal(nil) < literal(1.1))}.to raise_error(/Undef Value < Float/)
|
91
|
+
end
|
89
92
|
end
|
90
93
|
|
91
94
|
context "of regular expressions" do
|
@@ -598,6 +598,11 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
598
598
|
expect(result).to include(['b', 20])
|
599
599
|
end
|
600
600
|
|
601
|
+
it "should create an array from an Iterator" do
|
602
|
+
expect(parser.evaluate_string(scope, '[1,2,3].reverse_each', __FILE__).is_a?(Array)).to be(false)
|
603
|
+
result = parser.evaluate_string(scope, '*[1,2,3].reverse_each', __FILE__)
|
604
|
+
expect(result).to eql([3,2,1])
|
605
|
+
end
|
601
606
|
end
|
602
607
|
|
603
608
|
context "When evaluator performs [] operations" do
|
@@ -861,7 +866,8 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
861
866
|
# NOTE: these meta-esque parameters are not recognized as such
|
862
867
|
"notify { id: message=>explicit} Notify[id][title]" => /does not have a parameter called 'title'/,
|
863
868
|
"notify { id: message=>explicit} Notify[id]['type']" => /does not have a parameter called 'type'/,
|
864
|
-
"notify { id: message=>explicit } Notify[id]{message=>override}" => /'message' is already set on Notify\[id\]
|
869
|
+
"notify { id: message=>explicit } Notify[id]{message=>override}" => /'message' is already set on Notify\[id\]/,
|
870
|
+
"notify { id: message => 'once', message => 'twice' }" => /'message' has already been set/
|
865
871
|
}.each do |source, result|
|
866
872
|
it "should parse '#{source}' and raise error matching #{result}" do
|
867
873
|
expect { parser.evaluate_string(scope, source, __FILE__)}.to raise_error(result)
|
@@ -55,10 +55,10 @@ module EvaluatorRspecHelper
|
|
55
55
|
result = evaluator.evaluate(in_top_scope.current, top_scope)
|
56
56
|
if in_local_scope
|
57
57
|
# This is really bad in 3.x scope
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
top_scope.with_guarded_scope do
|
59
|
+
top_scope.new_ephemeral(true)
|
60
|
+
result = evaluator.evaluate(in_local_scope.current, top_scope)
|
61
|
+
end
|
62
62
|
end
|
63
63
|
if in_top_scope_again
|
64
64
|
result = evaluator.evaluate(in_top_scope_again.current, top_scope)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'puppet/pops'
|
4
|
+
require 'puppet/pops/evaluator/json_strict_literal_evaluator'
|
5
|
+
|
6
|
+
describe "Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator" do
|
7
|
+
let(:parser) { Puppet::Pops::Parser::EvaluatingParser.new }
|
8
|
+
let(:leval) { Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator.new }
|
9
|
+
|
10
|
+
{ "1" => 1,
|
11
|
+
"3.14" => 3.14,
|
12
|
+
"true" => true,
|
13
|
+
"false" => false,
|
14
|
+
"'1'" => '1',
|
15
|
+
"'a'" => 'a',
|
16
|
+
'"a"' => 'a',
|
17
|
+
'a' => 'a',
|
18
|
+
'a::b' => 'a::b',
|
19
|
+
'undef' => nil,
|
20
|
+
|
21
|
+
# collections
|
22
|
+
'[1,2,3]' => [1,2,3],
|
23
|
+
'{a=>1,b=>2}' => {'a' => 1, 'b' => 2},
|
24
|
+
'[undef]' => [nil],
|
25
|
+
'{a=>undef}' => { 'a' => nil }
|
26
|
+
|
27
|
+
}.each do |source, result|
|
28
|
+
it "evaluates '#{source}' to #{result}" do
|
29
|
+
expect(leval.literal(parser.parse_string(source))).to eq(result)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
[ '1+1',
|
34
|
+
'File',
|
35
|
+
'[1,2, 1+2]',
|
36
|
+
'{a=>1+1}',
|
37
|
+
'Integer[1]',
|
38
|
+
'"x$y"',
|
39
|
+
'"x${y}z"'
|
40
|
+
].each do |source|
|
41
|
+
it "throws :not_literal for non literal expression '#{source}'" do
|
42
|
+
expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
[ 'default',
|
47
|
+
'/.*/',
|
48
|
+
'{1=>100}',
|
49
|
+
'{undef => 10}',
|
50
|
+
'{default => 10}',
|
51
|
+
'{/.*/ => 10}',
|
52
|
+
'{"ok" => {1 => 100}}',
|
53
|
+
'[default]',
|
54
|
+
'[[default]]',
|
55
|
+
'[/.*/]',
|
56
|
+
'[[/.*/]]',
|
57
|
+
'[{1 => 100}]',
|
58
|
+
].each do |source|
|
59
|
+
it "throws :not_literal for values not representable as pure JSON '#{source}'" do
|
60
|
+
expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -16,4 +16,10 @@ describe 'when converting to 3.x' do
|
|
16
16
|
converted = Puppet::Pops::Evaluator::Runtime3Converter.instance.catalog_type_to_split_type_title(t)
|
17
17
|
expect(converted).to eql(['class', 'kermit'])
|
18
18
|
end
|
19
|
+
|
20
|
+
it "errors on attempts to convert an 'Iterator'" do
|
21
|
+
expect {
|
22
|
+
Puppet::Pops::Evaluator::Runtime3Converter.convert(Puppet::Pops::Types::Iterable.on((1..3)), {}, nil)
|
23
|
+
}.to raise_error(Puppet::Error, /Use of an Iterator is not supported here/)
|
24
|
+
end
|
19
25
|
end
|
@@ -53,6 +53,59 @@ describe 'dependency loader' do
|
|
53
53
|
expect(function.class.name).to eq('testmodule::foo')
|
54
54
|
expect(function.is_a?(Puppet::Functions::Function)).to eq(true)
|
55
55
|
end
|
56
|
+
|
57
|
+
describe "when parsing files from disk" do
|
58
|
+
|
59
|
+
# First line of Rune version of Rune poem at http://www.columbia.edu/~fdc/utf8/
|
60
|
+
# characters chosen since they will not parse on Windows with codepage 437 or 1252
|
61
|
+
# Section 3.2.1.3 of Ruby spec guarantees that \u strings are encoded as UTF-8
|
62
|
+
let (:node) { Puppet::Node.new('node') }
|
63
|
+
let (:rune_utf8) { "\u16A0\u16C7\u16BB" } # ᚠᛇᚻ
|
64
|
+
let (:code_utf8) do <<-CODE
|
65
|
+
Puppet::Functions.create_function('testmodule::foo') {
|
66
|
+
def foo
|
67
|
+
return \"#{rune_utf8}\"
|
68
|
+
end
|
69
|
+
}
|
70
|
+
CODE
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when loading files from disk' do
|
74
|
+
it 'should always read files as UTF-8' do
|
75
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
76
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
77
|
+
end
|
78
|
+
|
79
|
+
module_dir = dir_containing('testmodule', {
|
80
|
+
'lib' => { 'puppet' => { 'functions' => { 'testmodule' => {
|
81
|
+
'foo.rb' => code_utf8
|
82
|
+
}}}}})
|
83
|
+
|
84
|
+
loader = loader_for('testmodule', module_dir)
|
85
|
+
|
86
|
+
function = loader.load_typed(typed_name(:function, 'testmodule::foo')).value
|
87
|
+
expect(function.call({})).to eq(rune_utf8)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'currently ignores the UTF-8 BOM (Byte Order Mark) when loading module files' do
|
91
|
+
bom = "\uFEFF"
|
92
|
+
|
93
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
94
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
95
|
+
end
|
96
|
+
|
97
|
+
module_dir = dir_containing('testmodule', {
|
98
|
+
'lib' => { 'puppet' => { 'functions' => { 'testmodule' => {
|
99
|
+
'foo.rb' => "#{bom}#{code_utf8}"
|
100
|
+
}}}}})
|
101
|
+
|
102
|
+
loader = loader_for('testmodule', module_dir)
|
103
|
+
|
104
|
+
function = loader.load_typed(typed_name(:function, 'testmodule::foo')).value
|
105
|
+
expect(function.call({})).to eq(rune_utf8)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
56
109
|
end
|
57
110
|
|
58
111
|
def loader_for(name, dir)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet_spec/files'
|
3
|
+
require 'puppet_spec/compiler'
|
3
4
|
|
4
5
|
require 'puppet/pops'
|
5
6
|
require 'puppet/loaders'
|
@@ -25,6 +26,7 @@ end
|
|
25
26
|
|
26
27
|
describe 'loaders' do
|
27
28
|
include PuppetSpec::Files
|
29
|
+
include PuppetSpec::Compiler
|
28
30
|
|
29
31
|
let(:module_without_metadata) { File.join(config_dir('wo_metadata_module'), 'modules') }
|
30
32
|
let(:module_without_lib) { File.join(config_dir('module_no_lib'), 'modules') }
|
@@ -205,8 +207,49 @@ describe 'loaders' do
|
|
205
207
|
end
|
206
208
|
end
|
207
209
|
end
|
208
|
-
end
|
209
210
|
|
211
|
+
it "a type can reference an autoloaded type alias from another module when dependency is present in metadata.json" do
|
212
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
213
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
214
|
+
assert_type(Usee::Zero, 0)
|
215
|
+
notice(ok)
|
216
|
+
CODE
|
217
|
+
end
|
218
|
+
|
219
|
+
it "a type can reference an autoloaded type alias from another module when no metadata is present" do
|
220
|
+
Puppet::Module.any_instance.expects('has_metadata?').at_least_once.returns(false)
|
221
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
222
|
+
assert_type(Usee::Zero, 0)
|
223
|
+
notice(ok)
|
224
|
+
CODE
|
225
|
+
end
|
226
|
+
|
227
|
+
it "a type can reference a type alias from another module when other module has it declared in init.pp" do
|
228
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
229
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
230
|
+
include 'usee'
|
231
|
+
assert_type(Usee::One, 1)
|
232
|
+
notice(ok)
|
233
|
+
CODE
|
234
|
+
end
|
235
|
+
|
236
|
+
it "an autoloaded type can reference an autoloaded type alias from another module when dependency is present in metadata.json" do
|
237
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
238
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
239
|
+
assert_type(User::WithUseeZero, [0])
|
240
|
+
notice(ok)
|
241
|
+
CODE
|
242
|
+
end
|
243
|
+
|
244
|
+
it "an autoloaded type can reference an autoloaded type alias from another module when other module has it declared in init.pp" do
|
245
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
246
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
247
|
+
include 'usee'
|
248
|
+
assert_type(User::WithUseeOne, [1])
|
249
|
+
notice(ok)
|
250
|
+
CODE
|
251
|
+
end
|
252
|
+
end
|
210
253
|
|
211
254
|
context 'when loading from a module without metadata' do
|
212
255
|
it 'loads a ruby function with a qualified name' do
|
@@ -339,9 +339,9 @@ describe 'Lexer2' do
|
|
339
339
|
"!~" => [:NOMATCH, "!~ /./"],
|
340
340
|
"," => [:COMMA, ", /./"],
|
341
341
|
"(" => [:LPAREN, "( /./"],
|
342
|
-
"["
|
343
|
-
"["
|
344
|
-
"[" => [[:NAME, :LISTSTART], "a [ /./"],
|
342
|
+
"[ (liststart)" => [:LISTSTART, "[ /./"],
|
343
|
+
"[ (LBRACK)" => [[:NAME, :LBRACK], "a[ /./"],
|
344
|
+
"[ (liststart after name)" => [[:NAME, :LISTSTART], "a [ /./"],
|
345
345
|
"{" => [:LBRACE, "{ /./"],
|
346
346
|
"+" => [:PLUS, "+ /./"],
|
347
347
|
"-" => [:MINUS, "- /./"],
|
@@ -477,6 +477,18 @@ describe 'Lexer2' do
|
|
477
477
|
end
|
478
478
|
end
|
479
479
|
end
|
480
|
+
context 'when not given multi byte characters' do
|
481
|
+
it 'produces byte offsets for tokens' do
|
482
|
+
code = <<-"CODE"
|
483
|
+
1 2\n3
|
484
|
+
CODE
|
485
|
+
expect(tokens_scanned_from(code)).to match_tokens2(
|
486
|
+
[:NUMBER, '1', {:line => 1, :offset => 0, :length=>1}],
|
487
|
+
[:NUMBER, '2', {:line => 1, :offset => 2, :length=>1}],
|
488
|
+
[:NUMBER, '3', {:line => 2, :offset => 4, :length=>1}]
|
489
|
+
)
|
490
|
+
end
|
491
|
+
end
|
480
492
|
|
481
493
|
context 'when dealing with multi byte characters' do
|
482
494
|
it 'should support unicode characters' do
|
@@ -486,6 +498,7 @@ describe 'Lexer2' do
|
|
486
498
|
# >= Ruby 1.9.3 reports \u
|
487
499
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
|
488
500
|
end
|
501
|
+
|
489
502
|
it 'should support unicode characters in long form' do
|
490
503
|
code = <<-CODE
|
491
504
|
"x\\u{1f452}y"
|
@@ -493,6 +506,23 @@ describe 'Lexer2' do
|
|
493
506
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u{1f452}y"])
|
494
507
|
end
|
495
508
|
|
509
|
+
it 'produces byte offsets that counts each byte in a comment' do
|
510
|
+
code = <<-"CODE"
|
511
|
+
# \u{0400}\na
|
512
|
+
CODE
|
513
|
+
expect(tokens_scanned_from(code.strip)).to match_tokens2([:NAME, 'a', {:line => 2, :offset => 5, :length=>1}])
|
514
|
+
end
|
515
|
+
|
516
|
+
it 'produces byte offsets that counts each byte in value token' do
|
517
|
+
code = <<-"CODE"
|
518
|
+
'\u{0400}'\na
|
519
|
+
CODE
|
520
|
+
expect(tokens_scanned_from(code.strip)).to match_tokens2(
|
521
|
+
[:STRING, "\u{400}", {:line => 1, :offset => 0, :length=>4}],
|
522
|
+
[:NAME, 'a', {:line => 2, :offset => 5, :length=>1}]
|
523
|
+
)
|
524
|
+
end
|
525
|
+
|
496
526
|
it 'should not select LISTSTART token when preceded by multibyte chars' do
|
497
527
|
# This test is sensitive to the number of multibyte characters and position of the expressions
|
498
528
|
# within the string - it is designed to fail if the position is calculated on the byte offset of the '['
|
@@ -702,4 +732,83 @@ describe 'Lexer2' do
|
|
702
732
|
expect_issue('"asd', Puppet::Pops::Issues::UNCLOSED_QUOTE)
|
703
733
|
end
|
704
734
|
end
|
735
|
+
|
736
|
+
context 'when dealing with non UTF-8 and Byte Order Marks (BOMs)' do
|
737
|
+
{
|
738
|
+
'UTF_8' => [0xEF, 0xBB, 0xBF],
|
739
|
+
'UTF_16_1' => [0xFE, 0xFF],
|
740
|
+
'UTF_16_2' => [0xFF, 0xFE],
|
741
|
+
'UTF_32_1' => [0x00, 0x00, 0xFE, 0xFF],
|
742
|
+
'UTF_32_2' => [0xFF, 0xFE, 0x00, 0x00],
|
743
|
+
'UTF_1' => [0xF7, 0x64, 0x4C],
|
744
|
+
'UTF_EBCDIC' => [0xDD, 0x73, 0x66, 0x73],
|
745
|
+
'SCSU' => [0x0E, 0xFE, 0xFF],
|
746
|
+
'BOCU' => [0xFB, 0xEE, 0x28],
|
747
|
+
'GB_18030' => [0x84, 0x31, 0x95, 0x33]
|
748
|
+
}.each do |key, bytes|
|
749
|
+
it "errors on the byte order mark for #{key} '[#{bytes.map() {|b| '%X' % b}.join(' ')}]'" do
|
750
|
+
format_name = key.split('_')[0,2].join('-')
|
751
|
+
bytes_str = "\\[#{bytes.map {|b| '%X' % b}.join(' ')}\\]"
|
752
|
+
fix = " - remove these from the puppet source"
|
753
|
+
expect {
|
754
|
+
tokens_scanned_from(bytes.pack('C*'))
|
755
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
756
|
+
/Illegal #{format_name} .* at beginning of input: #{bytes_str}#{fix}/)
|
757
|
+
end
|
758
|
+
|
759
|
+
it "can use a possibly 'broken' UTF-16 string without problems for #{key}" do
|
760
|
+
format_name = key.split('_')[0,2].join('-')
|
761
|
+
string = bytes.pack('C*').force_encoding('UTF-16')
|
762
|
+
bytes_str = "\\[#{string.bytes.map {|b| '%X' % b}.join(' ')}\\]"
|
763
|
+
fix = " - remove these from the puppet source"
|
764
|
+
expect {
|
765
|
+
tokens_scanned_from(string)
|
766
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
767
|
+
/Illegal #{format_name} .* at beginning of input: #{bytes_str}#{fix}/)
|
768
|
+
end
|
769
|
+
end
|
770
|
+
end
|
771
|
+
end
|
772
|
+
|
773
|
+
describe Puppet::Pops::Parser::Lexer2 do
|
774
|
+
|
775
|
+
include PuppetSpec::Files
|
776
|
+
|
777
|
+
# First line of Rune version of Rune poem at http://www.columbia.edu/~fdc/utf8/
|
778
|
+
# characters chosen since they will not parse on Windows with codepage 437 or 1252
|
779
|
+
# Section 3.2.1.3 of Ruby spec guarantees that \u strings are encoded as UTF-8
|
780
|
+
# Runes (may show up as garbage if font is not available): ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ
|
781
|
+
let (:rune_utf8) {
|
782
|
+
"\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2"
|
783
|
+
"\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA"
|
784
|
+
"\u16B3\u16A2\u16D7"
|
785
|
+
}
|
786
|
+
|
787
|
+
context 'when lexing files from disk' do
|
788
|
+
it 'should always read files as UTF-8' do
|
789
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
790
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
791
|
+
end
|
792
|
+
|
793
|
+
manifest_code = "notify { '#{rune_utf8}': }"
|
794
|
+
manifest = file_containing('manifest.pp', manifest_code)
|
795
|
+
lexed_file = described_class.new.lex_file(manifest)
|
796
|
+
|
797
|
+
expect(lexed_file.string.encoding).to eq(Encoding::UTF_8)
|
798
|
+
expect(lexed_file.string).to eq(manifest_code)
|
799
|
+
end
|
800
|
+
|
801
|
+
it 'currently errors when the UTF-8 BOM (Byte Order Mark) is present when lexing files' do
|
802
|
+
bom = "\uFEFF"
|
803
|
+
|
804
|
+
manifest_code = "#{bom}notify { '#{rune_utf8}': }"
|
805
|
+
manifest = file_containing('manifest.pp', manifest_code)
|
806
|
+
|
807
|
+
expect {
|
808
|
+
lexed_file = described_class.new.lex_file(manifest)
|
809
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
810
|
+
'Illegal UTF-8 Byte Order mark at beginning of input: [EF BB BF] - remove these from the puppet source')
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
705
814
|
end
|