puppet 4.3.2-x64-mingw32 → 4.4.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -0,0 +1,57 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet'
|
4
|
+
require 'puppet/data_providers/hiera_config'
|
5
|
+
require 'puppet/data_providers/hiera_interpolate'
|
6
|
+
|
7
|
+
describe "Puppet::DataProviders::HieraInterpolate" do
|
8
|
+
|
9
|
+
let(:interpolator) { Class.new { include Puppet::DataProviders::HieraInterpolate }.new }
|
10
|
+
let(:scope) { {} }
|
11
|
+
let(:lookup_invocation) { Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, nil) }
|
12
|
+
|
13
|
+
context 'when interpolating nested data' do
|
14
|
+
let(:nested_hash) { { 'a' => { 'aa' => "%{alias('aaa')}" } } }
|
15
|
+
|
16
|
+
it 'produces a nested hash with arrays from nested aliases with hashes and arrays' do
|
17
|
+
Puppet::Pops::Lookup.expects(:lookup).with('aaa', nil, '', true, nil, lookup_invocation).returns({ 'b' => { 'bb' => "%{alias('bbb')}" } })
|
18
|
+
Puppet::Pops::Lookup.expects(:lookup).with('bbb', nil, '', true, nil, lookup_invocation).returns([ "%{alias('ccc')}" ])
|
19
|
+
Puppet::Pops::Lookup.expects(:lookup).with('ccc', nil, '', true, nil, lookup_invocation).returns('text')
|
20
|
+
expect(interpolator.interpolate(nested_hash, lookup_invocation, true)).to eq('a'=>{'aa'=>{'b'=>{'bb'=>['text']}}})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when there are empty interpolations %{} in data' do
|
25
|
+
|
26
|
+
let(:empty_interpolation) {'clown%{}shoe'}
|
27
|
+
let(:empty_interpolation_as_escape) {'clown%%{}{shoe}s'}
|
28
|
+
let(:only_empty_interpolation) {'%{}'}
|
29
|
+
let(:empty_namespace) {'%{::}'}
|
30
|
+
let(:whitespace1) {'%{ :: }'}
|
31
|
+
let(:whitespace2) {'%{ }'}
|
32
|
+
|
33
|
+
it 'should produce an empty string for the interpolation' do
|
34
|
+
expect(interpolator.interpolate(empty_interpolation, lookup_invocation, true)).to eq('clownshoe')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'the empty interpolation can be used as an escape mechanism' do
|
38
|
+
expect(interpolator.interpolate(empty_interpolation_as_escape, lookup_invocation, true)).to eq('clown%{shoe}s')
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'the value can consist of only an empty escape' do
|
42
|
+
expect(interpolator.interpolate(only_empty_interpolation, lookup_invocation, true)).to eq('')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'the value can consist of an empty namespace %{::}' do
|
46
|
+
expect(interpolator.interpolate(empty_namespace, lookup_invocation, true)).to eq('')
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'the value can consist of whitespace %{ :: }' do
|
50
|
+
expect(interpolator.interpolate(whitespace1, lookup_invocation, true)).to eq('')
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'the value can consist of whitespace %{ }' do
|
54
|
+
expect(interpolator.interpolate(whitespace2, lookup_invocation, true)).to eq('')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/unit/defaults_spec.rb
CHANGED
@@ -71,4 +71,19 @@ describe "Defaults" do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
end
|
74
|
+
|
75
|
+
describe 'supported_checksum_types' do
|
76
|
+
it 'should default to md5,sha256' do
|
77
|
+
expect(Puppet.settings[:supported_checksum_types]).to eq(['md5', 'sha256'])
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should raise an error on an unsupported checksum type' do
|
81
|
+
expect { Puppet.settings[:supported_checksum_types] = ['md5', 'foo'] }.to raise_exception ArgumentError, 'Unrecognized checksum types ["foo"] are not supported. Valid values are ["md5", "md5lite", "sha256", "sha256lite", "sha1", "sha1lite", "mtime", "ctime"].'
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should not raise an error on setting a valid list of checksum types' do
|
85
|
+
Puppet.settings[:supported_checksum_types] = ['sha256', 'md5lite', 'mtime']
|
86
|
+
expect(Puppet.settings[:supported_checksum_types]).to eq(['sha256', 'md5lite', 'mtime'])
|
87
|
+
end
|
88
|
+
end
|
74
89
|
end
|
@@ -121,6 +121,7 @@ describe Puppet::Environments do
|
|
121
121
|
manifest=#{manifestdir}
|
122
122
|
modulepath=#{modulepath.join(File::PATH_SEPARATOR)}
|
123
123
|
config_version=/some/script
|
124
|
+
static_catalogs=false
|
124
125
|
EOF
|
125
126
|
end
|
126
127
|
|
@@ -156,6 +157,17 @@ config_version=/some/script
|
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
160
|
+
it "reads static_catalogs setting" do
|
161
|
+
loader_from(:filesystem => [envdir, manifestdir, modulepath].flatten,
|
162
|
+
:directory => envdir) do |loader|
|
163
|
+
expect(loader.get("env1")).to environment(:env1).
|
164
|
+
with_manifest(manifestdir.path).
|
165
|
+
with_modulepath(modulepath.map(&:path)).
|
166
|
+
with_config_version(File.expand_path('/some/script')).
|
167
|
+
with_static_catalogs(false)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
159
171
|
it "accepts an empty environment.conf without warning" do
|
160
172
|
content = nil
|
161
173
|
|
@@ -176,7 +188,8 @@ config_version=/some/script
|
|
176
188
|
expect(loader.get("env1")).to environment(:env1).
|
177
189
|
with_manifest("#{FS.path_string(envdir)}/env1/manifests").
|
178
190
|
with_modulepath(["#{FS.path_string(envdir)}/env1/modules", global_path_location]).
|
179
|
-
with_config_version(nil)
|
191
|
+
with_config_version(nil).
|
192
|
+
with_static_catalogs(true)
|
180
193
|
end
|
181
194
|
|
182
195
|
expect(@logs).to be_empty
|
@@ -386,6 +399,7 @@ config_version=$vardir/random/scripts
|
|
386
399
|
expect(conf.modulepath).to eq('')
|
387
400
|
expect(conf.manifest).to eq(:no_manifest)
|
388
401
|
expect(conf.config_version).to be_nil
|
402
|
+
expect(conf.static_catalogs).to eq(true)
|
389
403
|
end
|
390
404
|
|
391
405
|
it "returns nil if you request a configuration from an env that doesn't exist" do
|
@@ -547,7 +561,8 @@ config_version=$vardir/random/scripts
|
|
547
561
|
(!@manifest || @manifest == env.manifest) &&
|
548
562
|
(!@modulepath || @modulepath == env.modulepath) &&
|
549
563
|
(!@full_modulepath || @full_modulepath == env.full_modulepath) &&
|
550
|
-
(!@config_version || @config_version == env.config_version)
|
564
|
+
(!@config_version || @config_version == env.config_version) &&
|
565
|
+
(!@static_catalogs || @static_catalogs == env.static_catalogs?)
|
551
566
|
end
|
552
567
|
|
553
568
|
chain :with_manifest do |manifest|
|
@@ -566,16 +581,21 @@ config_version=$vardir/random/scripts
|
|
566
581
|
@config_version = config_version
|
567
582
|
end
|
568
583
|
|
584
|
+
chain :with_static_catalogs do |static_catalogs|
|
585
|
+
@static_catalogs = static_catalogs
|
586
|
+
end
|
587
|
+
|
569
588
|
description do
|
570
589
|
"environment #{expected}" +
|
571
590
|
(@manifest ? " with manifest #{@manifest}" : "") +
|
572
591
|
(@modulepath ? " with modulepath [#{@modulepath.join(', ')}]" : "") +
|
573
592
|
(@full_modulepath ? " with full_modulepath [#{@full_modulepath.join(', ')}]" : "") +
|
574
|
-
(@config_version ? " with config_version #{@config_version}" : "")
|
593
|
+
(@config_version ? " with config_version #{@config_version}" : "") +
|
594
|
+
(@static_catalogs ? " with static_catalogs #{@static_catalogs}" : "")
|
575
595
|
end
|
576
596
|
|
577
597
|
failure_message do |env|
|
578
|
-
"expected <#{env.name}: modulepath = [#{env.full_modulepath.join(', ')}], manifest = #{env.manifest}, config_version = #{env.config_version}
|
598
|
+
"expected <#{env.name}: modulepath = [#{env.full_modulepath.join(', ')}], manifest = #{env.manifest}, config_version = #{env.config_version}>, static_catalogs = #{env.static_catalogs?} to be #{description}"
|
579
599
|
end
|
580
600
|
end
|
581
601
|
|
@@ -30,9 +30,25 @@ describe Puppet::Face[:parser, :current] do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "runs error free when there are no validation errors" do
|
33
|
-
|
33
|
+
expect {
|
34
|
+
manifest = file_containing('site.pp', "notify { valid: }")
|
35
|
+
parser.validate(manifest)
|
36
|
+
}.to_not raise_error
|
37
|
+
end
|
38
|
+
|
39
|
+
it "runs error free when there is a puppet function in manifest being validated" do
|
40
|
+
expect {
|
41
|
+
manifest = file_containing('site.pp', "function valid() { 'valid' } notify{ valid(): }")
|
42
|
+
parser.validate(manifest)
|
43
|
+
}.to_not raise_error
|
44
|
+
end
|
34
45
|
|
35
|
-
|
46
|
+
it "runs error free when there is a type alias in a manifest that requires type resolution" do
|
47
|
+
expect {
|
48
|
+
manifest = file_containing('site.pp',
|
49
|
+
"type A = String; type B = Array[A]; function valid(B $x) { $x } notify{ valid([valid]): }")
|
50
|
+
parser.validate(manifest)
|
51
|
+
}.to_not raise_error
|
36
52
|
end
|
37
53
|
|
38
54
|
it "reports missing files" do
|
@@ -98,6 +114,31 @@ describe Puppet::Face[:parser, :current] do
|
|
98
114
|
expect(@logs[0].message).to eq("Syntax error at end of file")
|
99
115
|
expect(@logs[0].level).to eq(:err)
|
100
116
|
end
|
117
|
+
|
118
|
+
it "logs an error if the input begins with a UTF-8 BOM (Byte Order Mark)" do
|
119
|
+
utf8_bom_manifest = file_containing('utf8_bom.pp', "\uFEFFnotice hi")
|
120
|
+
|
121
|
+
output = parser.dump(utf8_bom_manifest)
|
122
|
+
|
123
|
+
expect(output).to eq("")
|
124
|
+
expect(@logs[1].message).to eq("Illegal UTF-8 Byte Order mark at beginning of input: [EF BB BF] - remove these from the puppet source")
|
125
|
+
expect(@logs[1].level).to eq(:err)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "runs error free when there is a puppet function in manifest being dumped" do
|
129
|
+
expect {
|
130
|
+
manifest = file_containing('site.pp', "function valid() { 'valid' } notify{ valid(): }")
|
131
|
+
parser.dump(manifest)
|
132
|
+
}.to_not raise_error
|
133
|
+
end
|
134
|
+
|
135
|
+
it "runs error free when there is a type alias in a manifest that requires type resolution" do
|
136
|
+
expect {
|
137
|
+
manifest = file_containing('site.pp',
|
138
|
+
"type A = String; type B = Array[A]; function valid(B $x) { $x } notify{ valid([valid]): }")
|
139
|
+
parser.dump(manifest)
|
140
|
+
}.to_not raise_error
|
141
|
+
end
|
101
142
|
end
|
102
143
|
|
103
144
|
def from_an_interactive_terminal
|
@@ -0,0 +1,85 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/file_serving/http_metadata'
|
4
|
+
require 'matchers/json'
|
5
|
+
require 'net/http'
|
6
|
+
require 'digest'
|
7
|
+
|
8
|
+
describe Puppet::FileServing::HttpMetadata do
|
9
|
+
let(:foobar) { File.expand_path('/foo/bar') }
|
10
|
+
|
11
|
+
it "should be a subclass of Metadata" do
|
12
|
+
expect( described_class.superclass ).to be Puppet::FileServing::Metadata
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "when initializing" do
|
16
|
+
let(:http_response) { Net::HTTPOK.new(1.0, '200', 'OK') }
|
17
|
+
|
18
|
+
it "can be instantiated from a HTTP response object" do
|
19
|
+
expect( described_class.new(http_response) ).to_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "represents a plain file" do
|
23
|
+
expect( described_class.new(http_response).ftype ).to eq 'file'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "carries no information on owner, group and mode" do
|
27
|
+
metadata = described_class.new(http_response)
|
28
|
+
expect( metadata.owner ).to be_nil
|
29
|
+
expect( metadata.group ).to be_nil
|
30
|
+
expect( metadata.mode ).to be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
context "with no Last-Modified or Content-MD5 header from the server" do
|
34
|
+
before do
|
35
|
+
http_response.stubs(:[]).with('last-modified').returns nil
|
36
|
+
http_response.stubs(:[]).with('content-md5').returns nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should use :mtime as the checksum type, based on current time" do
|
40
|
+
# Stringifying Time.now does some rounding; do so here so we don't end up with a time
|
41
|
+
# that's greater than the stringified version returned by collect.
|
42
|
+
time = Time.parse(Time.now.to_s)
|
43
|
+
metadata = described_class.new(http_response)
|
44
|
+
metadata.collect
|
45
|
+
expect( metadata.checksum_type ).to eq :mtime
|
46
|
+
checksum = metadata.checksum
|
47
|
+
expect( checksum[0...7] ).to eq '{mtime}'
|
48
|
+
expect( Time.parse(checksum[7..-1]) ).to be >= time
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with a Last-Modified header from the server" do
|
53
|
+
let(:time) { Time.now.utc }
|
54
|
+
before do
|
55
|
+
http_response.stubs(:[]).with('content-md5').returns nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should use :mtime as the checksum type, based on Last-Modified" do
|
59
|
+
# HTTP uses "GMT" not "UTC"
|
60
|
+
http_response.stubs(:[]).with('last-modified').returns(time.strftime("%a, %d %b %Y %T GMT"))
|
61
|
+
metadata = described_class.new(http_response)
|
62
|
+
metadata.collect
|
63
|
+
expect( metadata.checksum_type ).to eq :mtime
|
64
|
+
expect( metadata.checksum ).to eq "{mtime}#{time.to_time}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with a Content-MD5 header being received" do
|
69
|
+
let(:input) { Time.now.to_s }
|
70
|
+
let(:base64) { Digest::MD5.new.base64digest input }
|
71
|
+
let(:hex) { Digest::MD5.new.hexdigest input }
|
72
|
+
before do
|
73
|
+
http_response.stubs(:[]).with('last-modified').returns nil
|
74
|
+
http_response.stubs(:[]).with('content-md5').returns base64
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should use the md5 checksum" do
|
78
|
+
metadata = described_class.new(http_response)
|
79
|
+
metadata.collect
|
80
|
+
expect( metadata.checksum_type ).to eq :md5
|
81
|
+
expect( metadata.checksum ).to eq "{md5}#{hex}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -76,6 +76,45 @@ describe Puppet::FileServing::Metadata do
|
|
76
76
|
it "should pass the checksum in the hash verbatim as the checksum's value" do
|
77
77
|
expect(metadata.to_data_hash['checksum']['value']).to eq(metadata.checksum)
|
78
78
|
end
|
79
|
+
|
80
|
+
describe "when a source and content_uri are set" do
|
81
|
+
before do
|
82
|
+
metadata.source = '/foo'
|
83
|
+
metadata.content_uri = 'puppet:///foo'
|
84
|
+
end
|
85
|
+
|
86
|
+
it "the data should include the path, relative_path, links, owner, group, mode, checksum, type, destination, source, and content_uri" do
|
87
|
+
expect(metadata.to_data_hash.keys.sort).to eq(%w{ path relative_path links owner group mode checksum type destination source content_uri }.sort)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should pass the source in the hash verbatim" do
|
91
|
+
expect(metadata.to_data_hash['source']).to eq(metadata.source)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should pass the content_uri in the hash verbatim" do
|
95
|
+
expect(metadata.to_data_hash['content_uri']).to eq(metadata.content_uri)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "when assigning a content_uri" do
|
100
|
+
it "should fail if uri is invalid" do
|
101
|
+
expect { metadata.content_uri = '://' }.to raise_error ArgumentError, /Could not understand URI :\/\//
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should accept characters that require percent-encoding" do
|
105
|
+
uri = 'puppet:///modules/foo/files/ %:?#[]@!$&\'()*+,;='
|
106
|
+
metadata.content_uri = uri
|
107
|
+
expect(metadata.content_uri).to eq(uri)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should fail if uri is opaque" do
|
111
|
+
expect { metadata.content_uri = 'scheme:www.example.com' }.to raise_error ArgumentError, "Cannot use opaque URLs 'scheme:www.example.com'"
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should fail if uri is not a puppet scheme" do
|
115
|
+
expect { metadata.content_uri = 'http://www.example.com' }.to raise_error ArgumentError, "Must use URLs of type puppet as content URI"
|
116
|
+
end
|
117
|
+
end
|
79
118
|
end
|
80
119
|
end
|
81
120
|
|
@@ -135,6 +174,17 @@ describe Puppet::FileServing::Metadata, :uses_checksums => true do
|
|
135
174
|
it "should validate against the schema" do
|
136
175
|
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
137
176
|
end
|
177
|
+
|
178
|
+
describe "when a source and content_uri are set" do
|
179
|
+
before do
|
180
|
+
metadata.source = '/foo'
|
181
|
+
metadata.content_uri = 'puppet:///foo'
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should validate against the schema" do
|
185
|
+
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
186
|
+
end
|
187
|
+
end
|
138
188
|
end
|
139
189
|
|
140
190
|
describe "when managing directories" do
|
@@ -22,8 +22,18 @@ describe Puppet::FileServing::TerminusSelector do
|
|
22
22
|
expect(@object.select(@request)).to eq(:file)
|
23
23
|
end
|
24
24
|
|
25
|
-
it "should
|
26
|
-
@request.
|
25
|
+
it "should return :http if the URI protocol is set to 'http'" do
|
26
|
+
@request.expects(:protocol).returns "http"
|
27
|
+
expect(@object.select(@request)).to eq :http
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return :http if the URI protocol is set to 'https'" do
|
31
|
+
@request.expects(:protocol).returns "https"
|
32
|
+
expect(@object.select(@request)).to eq :http
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should fail when a protocol other than :puppet, :http(s) or :file is used" do
|
36
|
+
@request.stubs(:protocol).returns "ftp"
|
27
37
|
expect { @object.select(@request) }.to raise_error(ArgumentError)
|
28
38
|
end
|
29
39
|
|
@@ -134,6 +134,32 @@ describe "Puppet::FileSystem" do
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
+
context "read should allow an encoding to be specified" do
|
138
|
+
# First line of Rune version of Rune poem at http://www.columbia.edu/~fdc/utf8/
|
139
|
+
# characters chosen since they will not parse on Windows with codepage 437 or 1252
|
140
|
+
# Section 3.2.1.3 of Ruby spec guarantees that \u strings are encoded as UTF-8
|
141
|
+
let (:rune_utf8) { "\u16A0\u16C7\u16BB" } # 'ᚠᛇᚻ'
|
142
|
+
|
143
|
+
it "and should read a UTF8 file properly" do
|
144
|
+
temp_file = file_containing('utf8.txt', rune_utf8)
|
145
|
+
|
146
|
+
contents = Puppet::FileSystem.read(temp_file, :encoding => 'utf-8')
|
147
|
+
|
148
|
+
expect(contents.encoding).to eq(Encoding::UTF_8)
|
149
|
+
expect(contents).to eq(rune_utf8)
|
150
|
+
end
|
151
|
+
|
152
|
+
it "does not strip the UTF8 BOM (Byte Order Mark) if present in a file" do
|
153
|
+
bom = "\uFEFF"
|
154
|
+
|
155
|
+
temp_file = file_containing('utf8bom.txt', "#{bom}#{rune_utf8}")
|
156
|
+
contents = Puppet::FileSystem.read(temp_file, :encoding => 'utf-8')
|
157
|
+
|
158
|
+
expect(contents.encoding).to eq(Encoding::UTF_8)
|
159
|
+
expect(contents).to eq("#{bom}#{rune_utf8}")
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
137
163
|
describe "symlink",
|
138
164
|
:if => ! Puppet.features.manages_symlinks? &&
|
139
165
|
Puppet.features.microsoft_windows? do
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/pops'
|
3
3
|
require 'puppet/loaders'
|
4
|
+
require 'puppet_spec/compiler'
|
4
5
|
|
5
6
|
describe 'the assert_type function' do
|
7
|
+
include PuppetSpec::Compiler
|
8
|
+
|
6
9
|
after(:all) { Puppet::Pops::Loaders.clear }
|
7
10
|
|
8
11
|
let(:loaders) { Puppet::Pops::Loaders.new(Puppet::Node::Environment.create(:testing, [])) }
|
@@ -19,13 +22,13 @@ describe 'the assert_type function' do
|
|
19
22
|
it 'asserts non compliant type by raising an error' do
|
20
23
|
expect do
|
21
24
|
func.call({}, type(Integer), 'hello world')
|
22
|
-
end.to raise_error(Puppet::Pops::Types::TypeAssertionError, /
|
25
|
+
end.to raise_error(Puppet::Pops::Types::TypeAssertionError, /expected an Integer value, got String/)
|
23
26
|
end
|
24
27
|
|
25
28
|
it 'checks that first argument is a type' do
|
26
29
|
expect do
|
27
30
|
func.call({}, 10, 10)
|
28
|
-
end.to raise_error(ArgumentError, "'assert_type'
|
31
|
+
end.to raise_error(ArgumentError, "'assert_type' expects one of:
|
29
32
|
(Type type, Any value, Callable[Type, Type] block?)
|
30
33
|
rejected: parameter 'type' expects a Type value, got Integer
|
31
34
|
(String type_string, Any value, Callable[Type, Type] block?)
|
@@ -52,4 +55,35 @@ describe 'the assert_type function' do
|
|
52
55
|
def type(type_ref)
|
53
56
|
Puppet::Pops::Types::TypeFactory.type_of(type_ref)
|
54
57
|
end
|
58
|
+
|
59
|
+
it 'can validate a resource type' do
|
60
|
+
expect(eval_and_collect_notices("assert_type(Type[Resource], File['/tmp/test']) notice('ok')")).to eq(['ok'])
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'can validate a type alias' do
|
64
|
+
code = <<-CODE
|
65
|
+
type UnprivilegedPort = Integer[1024,65537]
|
66
|
+
assert_type(UnprivilegedPort, 5432)
|
67
|
+
notice('ok')
|
68
|
+
CODE
|
69
|
+
expect(eval_and_collect_notices(code)).to eq(['ok'])
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'can validate a type alias passed as a String' do
|
73
|
+
code = <<-CODE
|
74
|
+
type UnprivilegedPort = Integer[1024,65537]
|
75
|
+
assert_type('UnprivilegedPort', 5432)
|
76
|
+
notice('ok')
|
77
|
+
CODE
|
78
|
+
expect(eval_and_collect_notices(code)).to eq(['ok'])
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'can validate and fail using a type alias' do
|
82
|
+
code = <<-CODE
|
83
|
+
type UnprivilegedPort = Integer[1024,65537]
|
84
|
+
assert_type(UnprivilegedPort, 345)
|
85
|
+
notice('ok')
|
86
|
+
CODE
|
87
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /expected an UnprivilegedPort = Integer\[1024, 65537\] value, got Integer\[345, 345\]/)
|
88
|
+
end
|
55
89
|
end
|