puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin
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 +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2595
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -1,18 +1,23 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
3
|
require 'puppet'
|
4
|
-
require 'puppet/data_providers/hiera_config'
|
5
|
-
require 'puppet/data_providers/hiera_interpolate'
|
6
4
|
|
7
5
|
module Puppet::Pops
|
8
6
|
describe 'Puppet::Pops::Lookup::Interpolation' do
|
7
|
+
include Lookup::SubLookup
|
9
8
|
|
10
9
|
let(:interpolator) { Class.new { include Lookup::Interpolation }.new }
|
11
10
|
let(:scope) { {} }
|
12
11
|
let(:lookup_invocation) { Lookup::Invocation.new(scope, {}, {}, nil) }
|
13
12
|
|
14
13
|
def expect_lookup(*keys)
|
15
|
-
keys.each
|
14
|
+
keys.each do |key|
|
15
|
+
segments = split_key(key)
|
16
|
+
root_key = segments.shift
|
17
|
+
found = data[root_key]
|
18
|
+
found = sub_lookup(key, lookup_invocation, segments, found) unless segments.empty?
|
19
|
+
Lookup.expects(:lookup).with(key, nil, '', true, nil, lookup_invocation).returns(found)
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
context 'when interpolating nested data' do
|
@@ -160,12 +165,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
160
165
|
end
|
161
166
|
|
162
167
|
it 'should find an entry using a quoted interpolation with method lookup' do
|
163
|
-
expect_lookup('a.b')
|
168
|
+
expect_lookup("'a.b'")
|
164
169
|
expect(interpolator.interpolate("a dot c: %{lookup(\"'a.b'\")}", lookup_invocation, true)).to eq('a dot c: (lookup) a dot b')
|
165
170
|
end
|
166
171
|
|
167
172
|
it 'should find an entry using a quoted interpolation with method alias' do
|
168
|
-
expect_lookup('a.b')
|
173
|
+
expect_lookup("'a.b'")
|
169
174
|
expect(interpolator.interpolate("%{alias(\"'a.b'\")}", lookup_invocation, true)).to eq('(lookup) a dot b')
|
170
175
|
end
|
171
176
|
|
@@ -173,8 +178,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
173
178
|
expect(interpolator.interpolate('a dot e: %{a.d}', lookup_invocation, true)).to eq('a dot e: (scope) a dot d is a hash entry')
|
174
179
|
end
|
175
180
|
|
176
|
-
it 'should
|
177
|
-
|
181
|
+
it 'should report a key missing and replace with empty string when a dotted key is used to navigate into a structure and then not found' do
|
182
|
+
expect(interpolator.interpolate('a dot n: %{a.n}', lookup_invocation, true)).to eq('a dot n: ')
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'should use a dotted key to navigate into a structure when it is not quoted with method lookup' do
|
186
|
+
expect_lookup('a.d')
|
178
187
|
expect(interpolator.interpolate("a dot e: %{lookup('a.d')}", lookup_invocation, true)).to eq('a dot e: (lookup) a dot d is a hash entry')
|
179
188
|
end
|
180
189
|
|
@@ -183,7 +192,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
183
192
|
end
|
184
193
|
|
185
194
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is last and method is lookup' do
|
186
|
-
expect_lookup(
|
195
|
+
expect_lookup("a.'d.x'")
|
187
196
|
expect(interpolator.interpolate("a dot ex: %{lookup(\"a.'d.x'\")}", lookup_invocation, true)).to eq('a dot ex: (lookup) a dot d.x is a hash entry')
|
188
197
|
end
|
189
198
|
|
@@ -192,7 +201,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
192
201
|
end
|
193
202
|
|
194
203
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is first and method is lookup' do
|
195
|
-
expect_lookup('a.x')
|
204
|
+
expect_lookup("'a.x'.d")
|
196
205
|
expect(interpolator.interpolate("a dot xe: %{lookup(\"'a.x'.d\")}", lookup_invocation, true)).to eq('a dot xe: (lookup) a.x dot d is a hash entry')
|
197
206
|
end
|
198
207
|
|
@@ -201,7 +210,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
201
210
|
end
|
202
211
|
|
203
212
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is in the middle and method is lookup' do
|
204
|
-
expect_lookup(
|
213
|
+
expect_lookup("a.'d.z'.g")
|
205
214
|
expect(interpolator.interpolate("a dot xm: %{lookup(\"a.'d.z'.g\")}", lookup_invocation, true)).to eq('a dot xm: (lookup) a dot d.z dot g is a hash entry')
|
206
215
|
end
|
207
216
|
|
@@ -210,7 +219,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
210
219
|
end
|
211
220
|
|
212
221
|
it 'should use a mix of several quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is in the middle and method is lookup' do
|
213
|
-
expect_lookup('a.x')
|
222
|
+
expect_lookup("'a.x'.'d.z'.g")
|
214
223
|
expect(interpolator.interpolate("a dot xx: %{lookup(\"'a.x'.'d.z'.g\")}", lookup_invocation, true)).to eq('a dot xx: (lookup) a.x dot d.z dot g is a hash entry')
|
215
224
|
end
|
216
225
|
|
@@ -219,7 +228,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
219
228
|
end
|
220
229
|
|
221
230
|
it 'should find an entry using using a quoted interpolation on dotted key containing numbers using method lookup' do
|
222
|
-
expect_lookup('x.1')
|
231
|
+
expect_lookup("'x.1'")
|
223
232
|
expect(interpolator.interpolate("x dot 2: %{lookup(\"'x.1'\")}", lookup_invocation, true)).to eq('x dot 2: (lookup) x dot 1')
|
224
233
|
end
|
225
234
|
|
@@ -228,13 +237,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
228
237
|
end
|
229
238
|
|
230
239
|
it 'should not find a subkey when the dotted key is quoted with method lookup' do
|
231
|
-
expect_lookup('a.d')
|
240
|
+
expect_lookup("'a.d'")
|
232
241
|
expect(interpolator.interpolate("a dot f: %{lookup(\"'a.d'\")}", lookup_invocation, true)).to eq('a dot f: ')
|
233
242
|
end
|
234
243
|
|
235
244
|
it 'should not find a subkey that is matched within a string' do
|
236
|
-
expect_lookup('key')
|
237
|
-
expect{ interpolator.interpolate('%{hiera("key.subkey")}', lookup_invocation, true) }.to raise_error(/Got String when a hash-like object was expected to access value using 'subkey' from key 'key.subkey'/)
|
245
|
+
expect{ expect_lookup('key.subkey') }.to raise_error(/Got String when a hash-like object was expected to access value using 'subkey' from key 'key.subkey'/)
|
238
246
|
end
|
239
247
|
end
|
240
248
|
|
@@ -267,27 +275,27 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
267
275
|
end
|
268
276
|
|
269
277
|
it 'allows dotted keys with non alphanumeric characters' do
|
270
|
-
expect_lookup('very_angry', '
|
278
|
+
expect_lookup('very_angry', '!$\%!.\#@!&%|')
|
271
279
|
expect(interpolator.interpolate("%{lookup('very_angry')}", lookup_invocation, true)).to eq('not happy at all')
|
272
280
|
end
|
273
281
|
|
274
282
|
it 'allows dotted keys with nested white space' do
|
275
|
-
expect_lookup('a key with')
|
283
|
+
expect_lookup('a key with.nested whitespace')
|
276
284
|
expect(interpolator.interpolate("%{lookup('a key with.nested whitespace')}", lookup_invocation, true)).to eq('value for nested ws key')
|
277
285
|
end
|
278
286
|
|
279
287
|
it 'will trim each key element' do
|
280
|
-
expect_lookup('a key with')
|
288
|
+
expect_lookup(' a key with . nested whitespace ')
|
281
289
|
expect(interpolator.interpolate("%{lookup(' a key with . nested whitespace ')}", lookup_invocation, true)).to eq('value for nested ws key')
|
282
290
|
end
|
283
291
|
|
284
292
|
it 'will not trim quoted key element' do
|
285
|
-
expect_lookup('a key with')
|
293
|
+
expect_lookup(' a key with ." untrimmed whitespace "')
|
286
294
|
expect(interpolator.interpolate("%{lookup(' a key with .\" untrimmed whitespace \"')}", lookup_invocation, true)).to eq('value for untrimmed ws key')
|
287
295
|
end
|
288
296
|
|
289
297
|
it 'will not trim spaces outside of quoted key element' do
|
290
|
-
expect_lookup('a key with')
|
298
|
+
expect_lookup(' a key with . " untrimmed whitespace " ')
|
291
299
|
expect(interpolator.interpolate("%{lookup(' a key with . \" untrimmed whitespace \" ')}", lookup_invocation, true)).to eq('value for untrimmed ws key')
|
292
300
|
end
|
293
301
|
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet_spec/files'
|
3
|
+
require 'puppet/pops'
|
4
|
+
require 'deep_merge/core'
|
5
|
+
|
6
|
+
module Puppet::Pops
|
7
|
+
module Lookup
|
8
|
+
describe 'The lookup API' do
|
9
|
+
include PuppetSpec::Files
|
10
|
+
|
11
|
+
let(:env_name) { 'spec' }
|
12
|
+
let(:code_dir) { Puppet[:environmentpath] }
|
13
|
+
let(:env_dir) { File.join(code_dir, env_name) }
|
14
|
+
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, 'modules')]) }
|
15
|
+
let(:node) { Puppet::Node.new('test', :environment => env) }
|
16
|
+
let(:compiler) { Puppet::Parser::Compiler.new(node) }
|
17
|
+
let(:scope) { compiler.topscope }
|
18
|
+
let(:invocation) { Invocation.new(scope) }
|
19
|
+
|
20
|
+
let(:code_dir_content) do
|
21
|
+
{
|
22
|
+
'hiera.yaml' => <<-YAML.unindent,
|
23
|
+
version: 5
|
24
|
+
YAML
|
25
|
+
'data' => {
|
26
|
+
'common.yaml' => <<-YAML.unindent
|
27
|
+
a: a (from global)
|
28
|
+
d: d (from global)
|
29
|
+
mod::e: mod::e (from global)
|
30
|
+
YAML
|
31
|
+
}
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:env_content) do
|
36
|
+
{
|
37
|
+
'hiera.yaml' => <<-YAML.unindent,
|
38
|
+
version: 5
|
39
|
+
YAML
|
40
|
+
'data' => {
|
41
|
+
'common.yaml' => <<-YAML.unindent
|
42
|
+
b: b (from environment)
|
43
|
+
d: d (from environment)
|
44
|
+
mod::f: mod::f (from environment)
|
45
|
+
YAML
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:mod_content) do
|
51
|
+
{
|
52
|
+
'hiera.yaml' => <<-YAML.unindent,
|
53
|
+
version: 5
|
54
|
+
YAML
|
55
|
+
'data' => {
|
56
|
+
'common.yaml' => <<-YAML.unindent
|
57
|
+
mod::c: mod::c (from module)
|
58
|
+
mod::e: mod::e (from module)
|
59
|
+
mod::f: mod::f (from module)
|
60
|
+
YAML
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:populated_env_dir) do
|
66
|
+
all_content = code_dir_content.merge(env_name => env_content.merge('modules' => { 'mod' => mod_content }))
|
67
|
+
dir_contained_in(code_dir, all_content)
|
68
|
+
all_content.keys.each { |key| PuppetSpec::Files.record_tmp(File.join(code_dir, key)) }
|
69
|
+
env_dir
|
70
|
+
end
|
71
|
+
|
72
|
+
before(:each) do
|
73
|
+
Puppet[:hiera_config] = File.join(code_dir, 'hiera.yaml')
|
74
|
+
Puppet.push_context(:loaders => Puppet::Pops::Loaders.new(env))
|
75
|
+
end
|
76
|
+
|
77
|
+
after(:each) do
|
78
|
+
Puppet.pop_context
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'when doing lookup' do
|
82
|
+
it 'finds data in global layer' do
|
83
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'finds data in environment layer' do
|
87
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('b (from environment)')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'global layer wins over environment layer' do
|
91
|
+
expect(Lookup.lookup('d', nil, 'not found', true, nil, invocation)).to eql('d (from global)')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'finds data in module layer' do
|
95
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('mod::c (from module)')
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'global layer wins over module layer' do
|
99
|
+
expect(Lookup.lookup('mod::e', nil, 'not found', true, nil, invocation)).to eql('mod::e (from global)')
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'environment layer wins over module layer' do
|
103
|
+
expect(Lookup.lookup('mod::f', nil, 'not found', true, nil, invocation)).to eql('mod::f (from environment)')
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with 'global_only' set to true in the invocation" do
|
107
|
+
let(:invocation) { Invocation.new(scope).set_global_only }
|
108
|
+
|
109
|
+
it 'finds data in global layer' do
|
110
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'does not find data in environment layer' do
|
114
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('not found')
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'does not find data in module layer' do
|
118
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('not found')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "with 'global_only' set to true in the lookup adapter" do
|
123
|
+
it 'finds data in global layer' do
|
124
|
+
invocation.lookup_adapter.set_global_only
|
125
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'does not find data in environment layer' do
|
129
|
+
invocation.lookup_adapter.set_global_only
|
130
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('not found')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'does not find data in module layer' do
|
134
|
+
invocation.lookup_adapter.set_global_only
|
135
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('not found')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'with subclassed lookup adpater' do
|
140
|
+
let(:other_dir) { tmpdir('other') }
|
141
|
+
let(:other_dir_content) do
|
142
|
+
{
|
143
|
+
'hiera.yaml' => <<-YAML.unindent,
|
144
|
+
version: 5
|
145
|
+
YAML
|
146
|
+
'data' => {
|
147
|
+
'common.yaml' => <<-YAML.unindent
|
148
|
+
a: a (from other global)
|
149
|
+
d: d (from other global)
|
150
|
+
mod::e: mod::e (from other global)
|
151
|
+
YAML
|
152
|
+
}
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
156
|
+
let(:populated_other_dir) do
|
157
|
+
dir_contained_in(other_dir, other_dir_content)
|
158
|
+
other_dir
|
159
|
+
end
|
160
|
+
|
161
|
+
before(:each) do
|
162
|
+
eval(<<-RUBY.unindent)
|
163
|
+
class SpecialLookupAdapter < LookupAdapter
|
164
|
+
def initialize(compiler)
|
165
|
+
super
|
166
|
+
set_global_only
|
167
|
+
set_global_hiera_config_path(File.join('#{populated_other_dir}', 'hiera.yaml'))
|
168
|
+
end
|
169
|
+
end
|
170
|
+
RUBY
|
171
|
+
end
|
172
|
+
|
173
|
+
after(:each) do
|
174
|
+
Puppet::Pops::Lookup.send(:remove_const, :SpecialLookupAdapter)
|
175
|
+
end
|
176
|
+
|
177
|
+
let(:other_invocation) { Invocation.new(scope, EMPTY_HASH, EMPTY_HASH, nil, SpecialLookupAdapter) }
|
178
|
+
|
179
|
+
it 'finds different data in global layer' do
|
180
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, other_invocation)).to eql('a (from other global)')
|
181
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'does not find data in environment layer' do
|
185
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, other_invocation)).to eql('not found')
|
186
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('b (from environment)')
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'does not find data in module layer' do
|
190
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, other_invocation)).to eql('not found')
|
191
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('mod::c (from module)')
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/pops'
|
4
|
+
|
5
|
+
module Puppet::Pops
|
6
|
+
describe 'MergeStrategy' do
|
7
|
+
context 'deep merge' do
|
8
|
+
it 'does not mutate the source of a merge' do
|
9
|
+
a = { 'a' => { 'b' => 'va' }, 'c' => 2 }
|
10
|
+
b = { 'a' => { 'b' => 'vb' }, 'b' => 3}
|
11
|
+
c = MergeStrategy.strategy(:deep).merge(a, b);
|
12
|
+
expect(a).to eql({ 'a' => { 'b' => 'va' }, 'c' => 2 })
|
13
|
+
expect(b).to eql({ 'a' => { 'b' => 'vb' }, 'b' => 3 })
|
14
|
+
expect(c).to eql({ 'a' => { 'b' => 'va' }, 'b' => 3, 'c' => 2 })
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -513,7 +513,15 @@ describe 'Lexer2' do
|
|
513
513
|
"x\\u2713y"
|
514
514
|
CODE
|
515
515
|
# >= Ruby 1.9.3 reports \u
|
516
|
-
|
516
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
|
517
|
+
end
|
518
|
+
|
519
|
+
it 'should support adjacent short form unicode characters' do
|
520
|
+
code = <<-CODE
|
521
|
+
"x\\u2713\\u2713y"
|
522
|
+
CODE
|
523
|
+
# >= Ruby 1.9.3 reports \u
|
524
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713\u2713y"])
|
517
525
|
end
|
518
526
|
|
519
527
|
it 'should support unicode characters in long form' do
|
@@ -523,6 +531,13 @@ describe 'Lexer2' do
|
|
523
531
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u{1f452}y"])
|
524
532
|
end
|
525
533
|
|
534
|
+
it 'can escape the unicode escape' do
|
535
|
+
code = <<-"CODE"
|
536
|
+
"x\\\\u{1f452}y"
|
537
|
+
CODE
|
538
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\\u{1f452}y"])
|
539
|
+
end
|
540
|
+
|
526
541
|
it 'produces byte offsets that counts each byte in a comment' do
|
527
542
|
code = <<-"CODE"
|
528
543
|
# \u{0400}\na
|
@@ -42,6 +42,10 @@ describe "egrammar parsing of site expression" do
|
|
42
42
|
it "allows the keyword '#{keyword}' as a value in a hash" do
|
43
43
|
expect(dump(parse("$a = {'x'=>#{keyword}}"))).to(eq("(= $a ({} ('x' '#{keyword}')))"))
|
44
44
|
end
|
45
|
+
|
46
|
+
it "allows the keyword '#{keyword}' as an attribute name" do
|
47
|
+
expect(dump(parse("foo { 'x': #{keyword} => 'value' } "))).to eql("(resource foo\n ('x'\n (#{keyword} => 'value')))")
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
@@ -87,15 +87,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
87
87
|
expect(val2).to eql(val)
|
88
88
|
end
|
89
89
|
|
90
|
-
it 'Sensitive' do
|
91
|
-
sval = 'the sensitive value'
|
92
|
-
val = Types::PSensitiveType::Sensitive.new(sval)
|
93
|
-
write(val)
|
94
|
-
val2 = read
|
95
|
-
expect(val2).to be_a(Types::PSensitiveType::Sensitive)
|
96
|
-
expect(val2.unwrap).to eql(sval)
|
97
|
-
end
|
98
|
-
|
99
90
|
it 'Timespan' do
|
100
91
|
val = Time::Timespan.from_fields(false, 3, 12, 40, 31, 123)
|
101
92
|
write(val)
|
@@ -113,18 +104,18 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
113
104
|
end
|
114
105
|
|
115
106
|
it 'Version' do
|
116
|
-
val =
|
107
|
+
val = SemanticPuppet::Version.parse('1.2.3-alpha2')
|
117
108
|
write(val)
|
118
109
|
val2 = read
|
119
|
-
expect(val2).to be_a(
|
110
|
+
expect(val2).to be_a(SemanticPuppet::Version)
|
120
111
|
expect(val2).to eql(val)
|
121
112
|
end
|
122
113
|
|
123
114
|
it 'VersionRange' do
|
124
|
-
val =
|
115
|
+
val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
|
125
116
|
write(val)
|
126
117
|
val2 = read
|
127
|
-
expect(val2).to be_a(
|
118
|
+
expect(val2).to be_a(SemanticPuppet::VersionRange)
|
128
119
|
expect(val2).to eql(val)
|
129
120
|
end
|
130
121
|
|
@@ -135,16 +126,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
135
126
|
expect(val2).to be_a(Types::PBinaryType::Binary)
|
136
127
|
expect(val2).to eql(val)
|
137
128
|
end
|
138
|
-
|
139
|
-
it 'Sensitive with rich data' do
|
140
|
-
sval = Time::Timestamp.now
|
141
|
-
val = Types::PSensitiveType::Sensitive.new(sval)
|
142
|
-
write(val)
|
143
|
-
val2 = read
|
144
|
-
expect(val2).to be_a(Types::PSensitiveType::Sensitive)
|
145
|
-
expect(val2.unwrap).to be_a(Time::Timestamp)
|
146
|
-
expect(val2.unwrap).to eql(sval)
|
147
|
-
end
|
148
129
|
end
|
149
130
|
|
150
131
|
context 'will fail on attempts to write' do
|
@@ -121,19 +121,19 @@ module Serialization
|
|
121
121
|
|
122
122
|
it 'Version' do
|
123
123
|
# It does succeed on rare occasions, so we need to repeat
|
124
|
-
val =
|
124
|
+
val = SemanticPuppet::Version.parse('1.2.3-alpha2')
|
125
125
|
write(val)
|
126
126
|
val2 = read
|
127
|
-
expect(val2).to be_a(
|
127
|
+
expect(val2).to be_a(SemanticPuppet::Version)
|
128
128
|
expect(val2).to eql(val)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'VersionRange' do
|
132
132
|
# It does succeed on rare occasions, so we need to repeat
|
133
|
-
val =
|
133
|
+
val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
|
134
134
|
write(val)
|
135
135
|
val2 = read
|
136
|
-
expect(val2).to be_a(
|
136
|
+
expect(val2).to be_a(SemanticPuppet::VersionRange)
|
137
137
|
expect(val2).to eql(val)
|
138
138
|
end
|
139
139
|
|
@@ -186,6 +186,30 @@ module Serialization
|
|
186
186
|
expect(val2).to eql(val)
|
187
187
|
end
|
188
188
|
|
189
|
+
it 'Collection' do
|
190
|
+
val = Types::TypeFactory.collection(Types::TypeFactory.range(0, 20))
|
191
|
+
write(val)
|
192
|
+
val2 = read
|
193
|
+
expect(val2).to be_a(Types::PCollectionType)
|
194
|
+
expect(val2).to eql(val)
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'Array' do
|
198
|
+
val = Types::TypeFactory.array_of(Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
|
199
|
+
write(val)
|
200
|
+
val2 = read
|
201
|
+
expect(val2).to be_a(Types::PArrayType)
|
202
|
+
expect(val2).to eql(val)
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'Hash' do
|
206
|
+
val = Types::TypeFactory.hash_kv(Types::TypeFactory.string, Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
|
207
|
+
write(val)
|
208
|
+
val2 = read
|
209
|
+
expect(val2).to be_a(Types::PHashType)
|
210
|
+
expect(val2).to eql(val)
|
211
|
+
end
|
212
|
+
|
189
213
|
it 'Variant' do
|
190
214
|
val = Types::TypeFactory.variant(Types::TypeFactory.string, Types::TypeFactory.range(1, :default))
|
191
215
|
write(val)
|
@@ -208,8 +232,8 @@ module Serialization
|
|
208
232
|
val = [
|
209
233
|
Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
|
210
234
|
Time::Timestamp.now,
|
211
|
-
|
212
|
-
|
235
|
+
SemanticPuppet::Version.parse('1.2.3-alpha2'),
|
236
|
+
SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
|
213
237
|
Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
|
214
238
|
]
|
215
239
|
write(val)
|
@@ -222,8 +246,8 @@ module Serialization
|
|
222
246
|
val = {
|
223
247
|
'duration' => Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
|
224
248
|
'time' => Time::Timestamp.now,
|
225
|
-
'version' =>
|
226
|
-
'range' =>
|
249
|
+
'version' => SemanticPuppet::Version.parse('1.2.3-alpha2'),
|
250
|
+
'range' => SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
|
227
251
|
'binary' => Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
|
228
252
|
}
|
229
253
|
write(val)
|
@@ -9,9 +9,15 @@ describe 'The Object Type' do
|
|
9
9
|
|
10
10
|
let(:parser) { TypeParser.singleton }
|
11
11
|
let(:pp_parser) { Parser::EvaluatingParser.new }
|
12
|
-
let(:loader) {
|
12
|
+
let(:loader) { Loaders.find_loader(nil) }
|
13
13
|
let(:factory) { TypeFactory }
|
14
14
|
|
15
|
+
around(:each) do |example|
|
16
|
+
Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
|
17
|
+
example.run
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
15
21
|
def type_object_t(name, body_string)
|
16
22
|
object = PObjectType.new(name, pp_parser.parse_string("{#{body_string}}").current.body)
|
17
23
|
loader.set_entry(Loader::TypedName.new(:type, name.downcase), object)
|
@@ -148,7 +154,7 @@ describe 'The Object Type' do
|
|
148
154
|
end
|
149
155
|
|
150
156
|
context 'when dealing with functions' do
|
151
|
-
it 'raises an error
|
157
|
+
it 'raises an error unless the function type is a Type[Callable]' do
|
152
158
|
obj = <<-OBJECT
|
153
159
|
functions => {
|
154
160
|
a => String
|
@@ -207,7 +213,7 @@ describe 'The Object Type' do
|
|
207
213
|
'function MyDerivedObject[a] attempts to override attribute MyObject[a]')
|
208
214
|
end
|
209
215
|
|
210
|
-
it 'raises an error when the
|
216
|
+
it 'raises an error when the a function overrides an attribute' do
|
211
217
|
parent = <<-OBJECT
|
212
218
|
functions => {
|
213
219
|
a => Callable
|
@@ -699,6 +705,43 @@ describe 'The Object Type' do
|
|
699
705
|
end
|
700
706
|
end
|
701
707
|
|
708
|
+
context 'when stringifying created instances' do
|
709
|
+
it 'outputs a Puppet constructor using the initializer hash' do
|
710
|
+
code = <<-CODE
|
711
|
+
type Spec::MyObject = Object[{attributes => { a => Integer }}]
|
712
|
+
type Spec::MySecondObject = Object[{parent => Spec::MyObject, attributes => { b => String }}]
|
713
|
+
notice(Spec::MySecondObject(42, 'Meaning of life'))
|
714
|
+
CODE
|
715
|
+
expect(eval_and_collect_notices(code)).to eql(["Spec::MySecondObject({\n 'a' => 42,\n 'b' => 'Meaning of life'\n})"])
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
context 'when used from Ruby' do
|
720
|
+
it 'can create an instance without scope using positional arguments' do
|
721
|
+
parse_object('MyObject', <<-OBJECT)
|
722
|
+
attributes => {
|
723
|
+
a => { type => Integer }
|
724
|
+
}
|
725
|
+
OBJECT
|
726
|
+
|
727
|
+
t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
|
728
|
+
instance = t.create(32)
|
729
|
+
expect(instance.a).to eql(32)
|
730
|
+
end
|
731
|
+
|
732
|
+
it 'can create an instance without scope using initialization hash' do
|
733
|
+
parse_object('MyObject', <<-OBJECT)
|
734
|
+
attributes => {
|
735
|
+
a => { type => Integer }
|
736
|
+
}
|
737
|
+
OBJECT
|
738
|
+
|
739
|
+
t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
|
740
|
+
instance = t.from_hash('a' => 32)
|
741
|
+
expect(instance.a).to eql(32)
|
742
|
+
end
|
743
|
+
end
|
744
|
+
|
702
745
|
context 'when used in Puppet expressions' do
|
703
746
|
it 'two anonymous empty objects are equal' do
|
704
747
|
code = <<-CODE
|
@@ -763,6 +806,28 @@ describe 'The Object Type' do
|
|
763
806
|
/attribute MySecondObject\[a\] attempts to override final attribute MyObject\[a\]/)
|
764
807
|
end
|
765
808
|
|
809
|
+
it 'can inherit from an aliased type' do
|
810
|
+
code = <<-CODE
|
811
|
+
type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
|
812
|
+
type MyObjectAlias = MyObject
|
813
|
+
type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }}]
|
814
|
+
notice(MySecondObject < MyObjectAlias)
|
815
|
+
notice(MySecondObject < MyObject)
|
816
|
+
CODE
|
817
|
+
expect(eval_and_collect_notices(code)).to eql(['true', 'true'])
|
818
|
+
end
|
819
|
+
|
820
|
+
it 'detects equality duplication when inherited from an aliased type' do
|
821
|
+
code = <<-CODE
|
822
|
+
type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
|
823
|
+
type MyObjectAlias = MyObject
|
824
|
+
type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }, equality => a}]
|
825
|
+
notice(MySecondObject < MyObject)
|
826
|
+
CODE
|
827
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error,
|
828
|
+
/MySecondObject equality is referencing attribute MyObject\[a\] which is included in equality of MyObject/)
|
829
|
+
end
|
830
|
+
|
766
831
|
it 'raises an error when object when circular inheritance is detected' do
|
767
832
|
code = <<-CODE
|
768
833
|
type MyFirstObject = Object[{
|
@@ -20,12 +20,12 @@ describe 'Semantic Versions' do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns its argument when the argument is a version' do
|
23
|
-
v =
|
23
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
24
24
|
expect(PSemVerType.convert(v)).to equal(v)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'converts a valid version string argument to a version' do
|
28
|
-
v =
|
28
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
29
29
|
expect(PSemVerType.convert('1.0.0')).to eq(v)
|
30
30
|
end
|
31
31
|
|
@@ -42,12 +42,12 @@ describe 'Semantic Versions' do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'returns its argument when the argument is a version range' do
|
45
|
-
vr =
|
45
|
+
vr = SemanticPuppet::VersionRange.parse('1.x')
|
46
46
|
expect(PSemVerRangeType.convert(vr)).to equal(vr)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'converts a valid version string argument to a version range' do
|
50
|
-
vr =
|
50
|
+
vr = SemanticPuppet::VersionRange.parse('1.x')
|
51
51
|
expect(PSemVerRangeType.convert('1.x')).to eq(vr)
|
52
52
|
end
|
53
53
|
|