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
@@ -123,7 +123,7 @@ module Puppet::Pops
|
|
123
123
|
version => '1.x',
|
124
124
|
pcore_version => '1.0.0',
|
125
125
|
OBJECT
|
126
|
-
expect { parse_type_set('MySet', ts) }.to raise_error(
|
126
|
+
expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
|
127
127
|
end
|
128
128
|
|
129
129
|
it 'the pcore_version is an invalid semantic version' do
|
@@ -131,7 +131,7 @@ module Puppet::Pops
|
|
131
131
|
version => '1.0.0',
|
132
132
|
pcore_version => '1.x',
|
133
133
|
OBJECT
|
134
|
-
expect { parse_type_set('MySet', ts) }.to raise_error(
|
134
|
+
expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'the pcore_version is outside of the range of that is parsable by this runtime' do
|
@@ -419,6 +419,35 @@ module Puppet::Pops
|
|
419
419
|
OBJECT
|
420
420
|
end
|
421
421
|
end
|
422
|
+
|
423
|
+
it '#name_for method reports the name of deeply nested type correctly' do
|
424
|
+
tv = parse_type_set('Vehicles', <<-OBJECT)
|
425
|
+
version => '1.0.0',
|
426
|
+
pcore_version => '1.0.0',
|
427
|
+
types => { Car => Object[{}] }
|
428
|
+
OBJECT
|
429
|
+
tt = parse_type_set('Transports', <<-OBJECT)
|
430
|
+
version => '1.0.0',
|
431
|
+
pcore_version => '1.0.0',
|
432
|
+
references => {
|
433
|
+
Vecs => {
|
434
|
+
name => 'Vehicles',
|
435
|
+
version_range => '1.x'
|
436
|
+
}
|
437
|
+
}
|
438
|
+
OBJECT
|
439
|
+
ts = parse_type_set('TheSet', <<-OBJECT)
|
440
|
+
version => '1.0.0',
|
441
|
+
pcore_version => '1.0.0',
|
442
|
+
references => {
|
443
|
+
T => {
|
444
|
+
name => 'Transports',
|
445
|
+
version_range => '1.x'
|
446
|
+
}
|
447
|
+
}
|
448
|
+
OBJECT
|
449
|
+
expect(ts.name_for(tv['Car'], nil)).to eql('T::Vecs::Car')
|
450
|
+
end
|
422
451
|
end
|
423
452
|
end
|
424
453
|
end
|
@@ -1,24 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/pops/types/type_acceptor'
|
3
3
|
|
4
|
+
class PuppetSpec::TestTypeAcceptor
|
5
|
+
include Puppet::Pops::Types::TypeAcceptor
|
6
|
+
attr_reader :visitors, :guard
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@visitors = []
|
10
|
+
@guard = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def visit(type, guard)
|
14
|
+
@visitors << type
|
15
|
+
@guard = guard
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
4
19
|
module Puppet::Pops::Types
|
5
20
|
describe 'the Puppet::Pops::Types::TypeAcceptor' do
|
6
|
-
|
7
|
-
|
8
|
-
include TypeAcceptor
|
9
|
-
attr_reader :visitors, :guard
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@visitors = []
|
13
|
-
@guard = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def visit(type, guard)
|
17
|
-
@visitors << type
|
18
|
-
@guard = guard
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
21
|
+
|
22
|
+
let!(:acceptor_class) { PuppetSpec::TestTypeAcceptor }
|
22
23
|
|
23
24
|
let(:acceptor) { acceptor_class.new }
|
24
25
|
let(:guard) { RecursionGuard.new }
|
@@ -102,4 +103,4 @@ describe 'the Puppet::Pops::Types::TypeAcceptor' do
|
|
102
103
|
expect(acceptor.visitors).to include(t, PStringType::DEFAULT, PIntegerType::DEFAULT)
|
103
104
|
end
|
104
105
|
end
|
105
|
-
end
|
106
|
+
end
|
@@ -18,12 +18,12 @@ describe 'The type calculator' do
|
|
18
18
|
TypeFactory.regexp(pattern)
|
19
19
|
end
|
20
20
|
|
21
|
-
def string_t(
|
22
|
-
TypeFactory.string(
|
21
|
+
def string_t(string = nil)
|
22
|
+
TypeFactory.string(string)
|
23
23
|
end
|
24
24
|
|
25
|
-
def constrained_string_t(size_type
|
26
|
-
TypeFactory.string(size_type
|
25
|
+
def constrained_string_t(size_type)
|
26
|
+
TypeFactory.string(size_type)
|
27
27
|
end
|
28
28
|
|
29
29
|
def callable_t(*params)
|
@@ -141,7 +141,7 @@ describe 'The type calculator' do
|
|
141
141
|
it 'inferred string type knows the string value' do
|
142
142
|
t = calculator.infer('foo')
|
143
143
|
expect(t.class).to eq(PStringType)
|
144
|
-
expect(t.
|
144
|
+
expect(t.value).to eq('foo')
|
145
145
|
end
|
146
146
|
|
147
147
|
it 'boolean true translates to PBooleanType' do
|
@@ -222,15 +222,15 @@ describe 'The type calculator' do
|
|
222
222
|
|
223
223
|
context 'version' do
|
224
224
|
it 'translates to PVersionType' do
|
225
|
-
expect(calculator.infer(
|
225
|
+
expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
|
226
226
|
end
|
227
227
|
|
228
228
|
it 'range translates to PVersionRangeType' do
|
229
|
-
expect(calculator.infer(
|
229
|
+
expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
|
230
230
|
end
|
231
231
|
|
232
232
|
it 'translates to a limited PVersionType by infer_set' do
|
233
|
-
v =
|
233
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
234
234
|
t = calculator.infer_set(v)
|
235
235
|
expect(t.class).to eq(PSemVerType)
|
236
236
|
expect(t.ranges.size).to eq(1)
|
@@ -287,9 +287,9 @@ describe 'The type calculator' do
|
|
287
287
|
expect(t.to).to eq(42)
|
288
288
|
end
|
289
289
|
|
290
|
-
it 'Compound string values are
|
290
|
+
it 'Compound string values are converted to enums' do
|
291
291
|
t = calculator.infer(['a','b', 'c']).element_type
|
292
|
-
expect(t.class).to eq(
|
292
|
+
expect(t.class).to eq(PEnumType)
|
293
293
|
expect(t.values).to eq(['a', 'b', 'c'])
|
294
294
|
end
|
295
295
|
|
@@ -326,16 +326,16 @@ describe 'The type calculator' do
|
|
326
326
|
end
|
327
327
|
|
328
328
|
it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
|
329
|
-
et = calculator.infer([['first' 'array'], ['second','array']])
|
329
|
+
et = calculator.infer([['first', 'array'], ['second','array']])
|
330
330
|
expect(et.class).to eq(PArrayType)
|
331
331
|
et = et.element_type
|
332
332
|
expect(et.class).to eq(PArrayType)
|
333
333
|
et = et.element_type
|
334
|
-
expect(et.class).to eq(
|
334
|
+
expect(et.class).to eq(PEnumType)
|
335
335
|
end
|
336
336
|
|
337
337
|
it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarType]]' do
|
338
|
-
et = calculator.infer([['first' 'array'], [1,2]])
|
338
|
+
et = calculator.infer([['first', 'array'], [1,2]])
|
339
339
|
expect(et.class).to eq(PArrayType)
|
340
340
|
et = et.element_type
|
341
341
|
expect(et.class).to eq(PArrayType)
|
@@ -343,13 +343,13 @@ describe 'The type calculator' do
|
|
343
343
|
expect(et.class).to eq(PScalarType)
|
344
344
|
end
|
345
345
|
|
346
|
-
it 'with hashes of string values translates to PArrayType[PHashType[
|
346
|
+
it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
|
347
347
|
et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
|
348
348
|
expect(et.class).to eq(PArrayType)
|
349
349
|
et = et.element_type
|
350
350
|
expect(et.class).to eq(PHashType)
|
351
|
-
et = et.
|
352
|
-
expect(et.class).to eq(
|
351
|
+
et = et.value_type
|
352
|
+
expect(et.class).to eq(PEnumType)
|
353
353
|
end
|
354
354
|
|
355
355
|
it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarType]]' do
|
@@ -357,7 +357,7 @@ describe 'The type calculator' do
|
|
357
357
|
expect(et.class).to eq(PArrayType)
|
358
358
|
et = et.element_type
|
359
359
|
expect(et.class).to eq(PHashType)
|
360
|
-
et = et.
|
360
|
+
et = et.value_type
|
361
361
|
expect(et.class).to eq(PScalarType)
|
362
362
|
end
|
363
363
|
end
|
@@ -374,12 +374,12 @@ describe 'The type calculator' do
|
|
374
374
|
expect(k.runtime_type_name).to eq('Symbol')
|
375
375
|
end
|
376
376
|
|
377
|
-
it 'with string keys translates to PHashType[
|
378
|
-
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(
|
377
|
+
it 'with string keys translates to PHashType[PEnumType, value]' do
|
378
|
+
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
|
379
379
|
end
|
380
380
|
|
381
381
|
it 'with fixnum values translates to PHashType[key, PIntegerType]' do
|
382
|
-
expect(calculator.infer({:first => 1, :second => 2}).
|
382
|
+
expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
|
383
383
|
end
|
384
384
|
|
385
385
|
it 'when empty infers a type that answers true to is_the_empty_hash?' do
|
@@ -435,8 +435,8 @@ describe 'The type calculator' do
|
|
435
435
|
expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
|
436
436
|
end
|
437
437
|
|
438
|
-
it 'constructs a
|
439
|
-
t =
|
438
|
+
it 'constructs a PEnumType with multiple strings' do
|
439
|
+
t = enum_t('a', 'b', 'c', 'abc')
|
440
440
|
expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
|
441
441
|
end
|
442
442
|
end
|
@@ -482,7 +482,7 @@ describe 'The type calculator' do
|
|
482
482
|
t1 = string_t('abc')
|
483
483
|
t2 = string_t('xyz')
|
484
484
|
common_t = calculator.common_type(t1,t2)
|
485
|
-
expect(common_t.class).to eq(
|
485
|
+
expect(common_t.class).to eq(PEnumType)
|
486
486
|
expect(common_t.values).to eq(['abc', 'xyz'])
|
487
487
|
end
|
488
488
|
|
@@ -503,11 +503,11 @@ describe 'The type calculator' do
|
|
503
503
|
end
|
504
504
|
|
505
505
|
it 'computes values to be empty if the one has empty values' do
|
506
|
-
t1 =
|
506
|
+
t1 = string_t('apa')
|
507
507
|
t2 = constrained_string_t(range_t(2,4))
|
508
508
|
common_t = calculator.common_type(t1,t2)
|
509
509
|
expect(common_t.class).to eq(PStringType)
|
510
|
-
expect(common_t.
|
510
|
+
expect(common_t.value).to be_nil
|
511
511
|
end
|
512
512
|
end
|
513
513
|
|
@@ -1154,7 +1154,7 @@ describe 'The type calculator' do
|
|
1154
1154
|
|
1155
1155
|
it 'should accept multiple strings if they all match any patterns' do
|
1156
1156
|
p_t = pattern_t('X', 'Y', 'abc')
|
1157
|
-
p_s =
|
1157
|
+
p_s = enum_t('Xa', 'aY', 'abc')
|
1158
1158
|
expect(calculator.assignable?(p_t, p_s)).to eq(true)
|
1159
1159
|
end
|
1160
1160
|
|
@@ -1166,7 +1166,7 @@ describe 'The type calculator' do
|
|
1166
1166
|
|
1167
1167
|
it 'should reject multiple strings if not all match any patterns' do
|
1168
1168
|
p_t = pattern_t('abc', 'ab', 'c', 'q')
|
1169
|
-
p_s =
|
1169
|
+
p_s = enum_t('X', 'Y', 'Z')
|
1170
1170
|
expect(calculator.assignable?(p_t, p_s)).to eq(false)
|
1171
1171
|
end
|
1172
1172
|
|
@@ -1661,9 +1661,8 @@ describe 'The type calculator' do
|
|
1661
1661
|
end
|
1662
1662
|
|
1663
1663
|
it 'should consider string values' do
|
1664
|
-
string = string_t('a'
|
1664
|
+
string = string_t('a')
|
1665
1665
|
expect(calculator.instance?(string, 'a')).to eq(true)
|
1666
|
-
expect(calculator.instance?(string, 'b')).to eq(true)
|
1667
1666
|
expect(calculator.instance?(string, 'c')).to eq(false)
|
1668
1667
|
end
|
1669
1668
|
|
@@ -1936,7 +1935,7 @@ describe 'The type calculator' do
|
|
1936
1935
|
t = calculator.type(Hash)
|
1937
1936
|
expect(t.class).to eq(PHashType)
|
1938
1937
|
expect(t.key_type.class).to eq(PScalarType)
|
1939
|
-
expect(t.
|
1938
|
+
expect(t.value_type.class).to eq(PDataType)
|
1940
1939
|
end
|
1941
1940
|
end
|
1942
1941
|
|
@@ -2066,25 +2065,25 @@ describe 'The type calculator' do
|
|
2066
2065
|
end
|
2067
2066
|
|
2068
2067
|
it 'a generic inference is produced using infer_generic' do
|
2069
|
-
expect(calculator.infer_generic(['a','b']).element_type
|
2068
|
+
expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
|
2070
2069
|
end
|
2071
2070
|
|
2072
2071
|
it 'a generic result is created by generalize given an instance specific result for an Array' do
|
2073
2072
|
generic = calculator.infer(['a','b'])
|
2074
|
-
expect(generic.element_type.values).to eq(['a',
|
2073
|
+
expect(generic.element_type.values).to eq(['a','b'])
|
2075
2074
|
generic = generic.generalize
|
2076
|
-
expect(generic.element_type
|
2075
|
+
expect(generic.element_type).to eql(string_t(range_t(1,1)))
|
2077
2076
|
end
|
2078
2077
|
|
2079
2078
|
it 'a generic result is created by generalize given an instance specific result for a Hash' do
|
2080
|
-
generic = calculator.infer({'a' =>1,'
|
2081
|
-
expect(generic.key_type.values.sort).to eq(['a', '
|
2082
|
-
expect(generic.
|
2083
|
-
expect(generic.
|
2079
|
+
generic = calculator.infer({'a' =>1,'bcd' => 2})
|
2080
|
+
expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
|
2081
|
+
expect(generic.value_type.from).to eq(1)
|
2082
|
+
expect(generic.value_type.to).to eq(2)
|
2084
2083
|
generic = generic.generalize
|
2085
|
-
expect(generic.key_type.
|
2086
|
-
expect(generic.
|
2087
|
-
expect(generic.
|
2084
|
+
expect(generic.key_type.size_type).to eq(range_t(1,3))
|
2085
|
+
expect(generic.value_type.from).to eq(nil)
|
2086
|
+
expect(generic.value_type.to).to eq(nil)
|
2088
2087
|
end
|
2089
2088
|
|
2090
2089
|
it 'ensures that Struct key types are not generalized' do
|
@@ -82,7 +82,7 @@ describe 'The type factory' do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'sem_ver(r1, r2) returns constrained PSemVerType' do
|
85
|
-
expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(
|
85
|
+
expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(SemanticPuppet::VersionRange.parse('1.x'), SemanticPuppet::VersionRange.parse('3.x'))
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'sem_ver_range() returns PSemVerRangeType' do
|
@@ -173,7 +173,7 @@ describe 'The type factory' do
|
|
173
173
|
ht = TypeFactory.hash_of_data
|
174
174
|
expect(ht.class()).to eq(PHashType)
|
175
175
|
expect(ht.key_type.class).to eq(PScalarType)
|
176
|
-
expect(ht.
|
176
|
+
expect(ht.value_type.class).to eq(PDataType)
|
177
177
|
end
|
178
178
|
|
179
179
|
it 'ruby(1) returns PRuntimeType[ruby, \'Fixnum\']' do
|
@@ -211,7 +211,7 @@ describe 'The type factory' do
|
|
211
211
|
expect(t.size_type.from).to eq(0)
|
212
212
|
expect(t.size_type.to).to eq(0)
|
213
213
|
expect(t.key_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
|
214
|
-
expect(t.
|
214
|
+
expect(t.value_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
|
215
215
|
end
|
216
216
|
|
217
217
|
context 'callable types' do
|
@@ -75,7 +75,7 @@ end
|
|
75
75
|
expect(s.string(f.type_type)).to eq('Type')
|
76
76
|
end
|
77
77
|
|
78
|
-
it "should yield '
|
78
|
+
it "should yield 'Any' for PAnyType" do
|
79
79
|
expect(s.string(f.any)).to eq('Any')
|
80
80
|
end
|
81
81
|
|
@@ -119,8 +119,12 @@ end
|
|
119
119
|
expect(s.string(f.string)).to eq('String')
|
120
120
|
end
|
121
121
|
|
122
|
-
it "should yield 'String' for PStringType with
|
123
|
-
expect(s.string(f.string(
|
122
|
+
it "should yield 'String' for PStringType with value" do
|
123
|
+
expect(s.string(f.string('a'))).to eq('String')
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should yield 'String['a']' for PStringType with value if printed with debug_string" do
|
127
|
+
expect(s.debug_string(f.string('a'))).to eq("String['a']")
|
124
128
|
end
|
125
129
|
|
126
130
|
it "should yield 'String' and from/to for PStringType" do
|
@@ -87,7 +87,7 @@ describe 'the type mismatch describer' do
|
|
87
87
|
check_port({ 34 => 'some service'})
|
88
88
|
CODE
|
89
89
|
expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
|
90
|
-
/parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\
|
90
|
+
/parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\]/))
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'will not include the aliased type more than once when reporting a mismatch that involves an alias that is self recursive' do
|
@@ -98,7 +98,7 @@ describe 'the type mismatch describer' do
|
|
98
98
|
check_tree({ 'x' => {'y' => {32 => 'n'}}})
|
99
99
|
CODE
|
100
100
|
expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
|
101
|
-
/parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\
|
101
|
+
/parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\]/))
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'will use type normalization' do
|
@@ -130,6 +130,17 @@ describe 'the type mismatch describer' do
|
|
130
130
|
/parameter 'arg' expects a match for Enum\['a', 'b'\], got Sensitive/))
|
131
131
|
end
|
132
132
|
|
133
|
+
it "reports errors on the first failing parameter when that parameter is not the first in order" do
|
134
|
+
code = <<-CODE
|
135
|
+
type Abc = Enum['a', 'b', 'c']
|
136
|
+
type Cde = Enum['c', 'd', 'e']
|
137
|
+
function two_params(Abc $a, Cde $b) {}
|
138
|
+
two_params('a', 'x')
|
139
|
+
CODE
|
140
|
+
expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
|
141
|
+
/parameter 'b' expects a match for Cde = Enum\['c', 'd', 'e'\], got 'x'/))
|
142
|
+
end
|
143
|
+
|
133
144
|
it "will not generalize a string that doesn't match an enum in a define call" do
|
134
145
|
code = <<-CODE
|
135
146
|
define check_enums(Enum[a,b] $arg) {}
|
@@ -386,7 +386,7 @@ describe 'Puppet Type System' do
|
|
386
386
|
type Bar = Fee
|
387
387
|
notice(0 =~ Bar)
|
388
388
|
CODE
|
389
|
-
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias '
|
389
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
|
390
390
|
end
|
391
391
|
|
392
392
|
it 'will not allow an alias chain that contains nothing but aliases and variants' do
|
@@ -396,7 +396,7 @@ describe 'Puppet Type System' do
|
|
396
396
|
type Bar = Variant[Fee,Foo]
|
397
397
|
notice(0 =~ Bar)
|
398
398
|
CODE
|
399
|
-
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias '
|
399
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
|
400
400
|
end
|
401
401
|
|
402
402
|
it 'will not allow an alias to directly reference itself' do
|
@@ -572,6 +572,29 @@ describe 'Puppet Type System' do
|
|
572
572
|
end
|
573
573
|
end
|
574
574
|
|
575
|
+
context 'instantiation via ruby create function' do
|
576
|
+
around(:each) do |example|
|
577
|
+
Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
|
578
|
+
example.run
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
it 'is supported by Integer' do
|
583
|
+
int = tf.integer.create('32')
|
584
|
+
expect(int).to eq(32)
|
585
|
+
end
|
586
|
+
|
587
|
+
it 'is supported by Optional[Integer]' do
|
588
|
+
int = tf.optional(tf.integer).create('32')
|
589
|
+
expect(int).to eq(32)
|
590
|
+
end
|
591
|
+
|
592
|
+
it 'is not supported by Any, Scalar, Collection' do
|
593
|
+
[tf.any, tf.scalar, tf.collection ].each do |t|
|
594
|
+
expect { t.create }.to raise_error(ArgumentError, /Creation of new instance of type '#{t.to_s}' is not supported/)
|
595
|
+
end
|
596
|
+
end
|
597
|
+
end
|
575
598
|
end
|
576
599
|
end
|
577
600
|
end
|
@@ -50,42 +50,98 @@ describe "validating 4x" do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'with the default settings for --strict' do
|
53
|
-
it 'produces a warning for duplicate
|
53
|
+
it 'produces a warning for duplicate keys in a literal hash' do
|
54
54
|
acceptor = validate(parse('{ a => 1, a => 2 }'))
|
55
55
|
expect(acceptor.warning_count).to eql(1)
|
56
56
|
expect(acceptor.error_count).to eql(0)
|
57
57
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
|
58
58
|
end
|
59
|
+
|
60
|
+
it 'produces a warning for duplicate default in a case expression' do
|
61
|
+
acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
|
62
|
+
expect(acceptor.warning_count).to eql(1)
|
63
|
+
expect(acceptor.error_count).to eql(0)
|
64
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'produces a warning for duplicate default in a selector expression' do
|
68
|
+
acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
|
69
|
+
expect(acceptor.warning_count).to eql(1)
|
70
|
+
expect(acceptor.error_count).to eql(0)
|
71
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
72
|
+
end
|
59
73
|
end
|
60
74
|
|
61
75
|
context 'with --strict set to warning' do
|
62
76
|
before(:each) { Puppet[:strict] = :warning }
|
63
|
-
it 'produces a warning for duplicate
|
77
|
+
it 'produces a warning for duplicate keys in a literal hash' do
|
64
78
|
acceptor = validate(parse('{ a => 1, a => 2 }'))
|
65
79
|
expect(acceptor.warning_count).to eql(1)
|
66
80
|
expect(acceptor.error_count).to eql(0)
|
67
81
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
|
68
82
|
end
|
83
|
+
|
84
|
+
it 'produces a warning for duplicate default in a case expression' do
|
85
|
+
acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
|
86
|
+
expect(acceptor.warning_count).to eql(1)
|
87
|
+
expect(acceptor.error_count).to eql(0)
|
88
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'produces a warning for duplicate default in a selector expression' do
|
92
|
+
acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
|
93
|
+
expect(acceptor.warning_count).to eql(1)
|
94
|
+
expect(acceptor.error_count).to eql(0)
|
95
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
96
|
+
end
|
69
97
|
end
|
70
98
|
|
71
99
|
context 'with --strict set to error' do
|
72
100
|
before(:each) { Puppet[:strict] = :error }
|
73
|
-
it 'produces an error for duplicate
|
101
|
+
it 'produces an error for duplicate keys in a literal hash' do
|
74
102
|
acceptor = validate(parse('{ a => 1, a => 2 }'))
|
75
103
|
expect(acceptor.warning_count).to eql(0)
|
76
104
|
expect(acceptor.error_count).to eql(1)
|
77
105
|
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
|
78
106
|
end
|
107
|
+
|
108
|
+
it 'produces an error for duplicate default in a case expression' do
|
109
|
+
acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
|
110
|
+
expect(acceptor.warning_count).to eql(0)
|
111
|
+
expect(acceptor.error_count).to eql(1)
|
112
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'produces an error for duplicate default in a selector expression' do
|
116
|
+
acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
|
117
|
+
expect(acceptor.warning_count).to eql(0)
|
118
|
+
expect(acceptor.error_count).to eql(1)
|
119
|
+
expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
120
|
+
end
|
79
121
|
end
|
80
122
|
|
81
123
|
context 'with --strict set to off' do
|
82
124
|
before(:each) { Puppet[:strict] = :off }
|
83
|
-
it 'does not produce an error or warning for duplicate
|
125
|
+
it 'does not produce an error or warning for duplicate keys in a literal hash' do
|
84
126
|
acceptor = validate(parse('{ a => 1, a => 2 }'))
|
85
127
|
expect(acceptor.warning_count).to eql(0)
|
86
128
|
expect(acceptor.error_count).to eql(0)
|
87
129
|
expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
|
88
130
|
end
|
131
|
+
|
132
|
+
it 'does not produce an error for duplicate default in a case expression' do
|
133
|
+
acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
|
134
|
+
expect(acceptor.warning_count).to eql(0)
|
135
|
+
expect(acceptor.error_count).to eql(0)
|
136
|
+
expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'does not produce an error for duplicate default in a selector expression' do
|
140
|
+
acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
|
141
|
+
expect(acceptor.warning_count).to eql(0)
|
142
|
+
expect(acceptor.error_count).to eql(0)
|
143
|
+
expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
|
144
|
+
end
|
89
145
|
end
|
90
146
|
|
91
147
|
context 'for non productive expressions' do
|
@@ -301,4 +301,46 @@ describe Puppet::Provider::NameService do
|
|
301
301
|
end
|
302
302
|
end
|
303
303
|
|
304
|
+
describe "comments_insync?" do
|
305
|
+
# comments_insync? overrides Puppet::Property#insync? and will act on an
|
306
|
+
# array containing a should value (the expected value of Puppet::Property
|
307
|
+
# @should)
|
308
|
+
context "given strings with compatible encodings" do
|
309
|
+
it "should return false if the is-value and should-value are not equal" do
|
310
|
+
is_value = "foo"
|
311
|
+
should_value = ["bar"]
|
312
|
+
expect(provider.comments_insync?(is_value, should_value)).to be_falsey
|
313
|
+
end
|
314
|
+
|
315
|
+
it "should return true if the is-value and should-value are equal" do
|
316
|
+
is_value = "foo"
|
317
|
+
should_value = ["foo"]
|
318
|
+
expect(provider.comments_insync?(is_value, should_value)).to be_truthy
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
context "given strings with incompatible encodings" do
|
323
|
+
let(:snowman_iso) { "\u2603".force_encoding(Encoding::ISO_8859_1) }
|
324
|
+
let(:snowman_utf8) { "\u2603".force_encoding(Encoding::UTF_8) }
|
325
|
+
let(:snowman_binary) { "\u2603".force_encoding(Encoding::ASCII_8BIT) }
|
326
|
+
let(:arabic_heh_utf8) { "\u06FF".force_encoding(Encoding::UTF_8) }
|
327
|
+
|
328
|
+
it "should be able to compare unequal strings and return false" do
|
329
|
+
expect(Encoding.compatible?(snowman_iso, arabic_heh_utf8)).to be_falsey
|
330
|
+
expect(provider.comments_insync?(snowman_iso, [arabic_heh_utf8])).to be_falsey
|
331
|
+
end
|
332
|
+
|
333
|
+
it "should be able to compare equal strings and return true" do
|
334
|
+
expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
|
335
|
+
expect(provider.comments_insync?(snowman_binary, [snowman_utf8])).to be_truthy
|
336
|
+
end
|
337
|
+
|
338
|
+
it "should not manipulate the actual encoding of either string" do
|
339
|
+
expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
|
340
|
+
provider.comments_insync?(snowman_binary, [snowman_utf8])
|
341
|
+
expect(snowman_binary.encoding).to eq(Encoding::ASCII_8BIT)
|
342
|
+
expect(snowman_utf8.encoding).to eq(Encoding::UTF_8)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
304
346
|
end
|
@@ -17,7 +17,7 @@ describe Puppet::Type.type(:package).provider(:aptrpm) do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def rpm_args
|
20
|
-
['-q', 'faff', '--nosignature', '--nodigest', '--qf', "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n"]
|
20
|
+
['-q', 'faff', '--nosignature', '--nodigest', '--qf', "'%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n'"]
|
21
21
|
end
|
22
22
|
|
23
23
|
def rpm(args = rpm_args)
|
@@ -25,6 +25,28 @@ describe Puppet::Type.type(:package).provider(:pkg) do
|
|
25
25
|
|
26
26
|
it_should_respond_to :install, :uninstall, :update, :query, :latest
|
27
27
|
|
28
|
+
context 'default' do
|
29
|
+
[ 10 ].each do |ver|
|
30
|
+
it "should not be the default provider on Solaris #{ver}" do
|
31
|
+
Facter.stubs(:value).with(:osfamily).returns(:Solaris)
|
32
|
+
Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
|
33
|
+
Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
|
34
|
+
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
|
35
|
+
expect(described_class).to_not be_default
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
[ 11, 12 ].each do |ver|
|
40
|
+
it "should be the default provider on Solaris #{ver}" do
|
41
|
+
Facter.stubs(:value).with(:osfamily).returns(:Solaris)
|
42
|
+
Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
|
43
|
+
Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
|
44
|
+
Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
|
45
|
+
expect(described_class).to be_default
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
28
50
|
it "should be versionable" do
|
29
51
|
expect(described_class).to be_versionable
|
30
52
|
end
|