puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- 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/build_defaults.yaml +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/hiera/scope.rb +1 -1
- 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 +45 -47
- 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/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- 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/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/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- 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/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- 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/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- 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/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- 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 +6 -2
- 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/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- 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/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- 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/functions.rb +28 -16
- 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 +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- 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 +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -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 +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -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 +18 -13
- 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/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -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 +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- 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 +16 -8
- 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 +140 -387
- 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 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- 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/group/windows_adsi.rb +2 -2
- 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 +16 -9
- 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/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- 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/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- 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/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 +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- 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/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- 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/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- 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/type.rb +11 -11
- 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 +65 -28
- 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 +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- 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 +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- 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/puppet.rb +17 -0
- 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/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -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/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- 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/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- 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/collection_spec.rb +8 -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 +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- 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/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- 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/epp_face_spec.rb +2 -2
- 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 +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- 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 +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- 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/indirector/json_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 +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- 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 +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -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 -390
- 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 +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- 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 +88 -47
- 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/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- 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 +99 -50
- 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 +46 -38
- 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 +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- 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/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- 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
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe Puppet::Type.type(:file).attrclass(:checksum_value), :uses_checksums => true do
|
|
5
|
+
include PuppetSpec::Files
|
|
6
|
+
include_context 'with supported checksum types'
|
|
7
|
+
|
|
8
|
+
let(:path) { tmpfile('foo_bar') }
|
|
9
|
+
let(:source_file) { file_containing('temp_foo', 'nothing at all') }
|
|
10
|
+
let(:environment) { Puppet::Node::Environment.create(:testing, []) }
|
|
11
|
+
let(:catalog) { Puppet::Resource::Catalog.new(:test, environment) }
|
|
12
|
+
let(:resource) { Puppet::Type.type(:file).new(:path => path, :catalog => catalog) }
|
|
13
|
+
|
|
14
|
+
it "should be a property" do
|
|
15
|
+
expect(described_class.superclass).to eq(Puppet::Property)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "when retrieving the current checksum_value" do
|
|
19
|
+
let(:checksum_value) { described_class.new(:resource => resource) }
|
|
20
|
+
|
|
21
|
+
it "should not compute a checksum if source is absent" do
|
|
22
|
+
resource.expects(:stat).never
|
|
23
|
+
expect(checksum_value.retrieve).to be_nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "when using a source" do
|
|
27
|
+
before do
|
|
28
|
+
resource[:source] = source_file
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should return :absent if the target does not exist" do
|
|
32
|
+
resource.expects(:stat).returns nil
|
|
33
|
+
|
|
34
|
+
expect(checksum_value.retrieve).to eq(:absent)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should not manage content on directories" do
|
|
38
|
+
stat = mock 'stat', :ftype => "directory"
|
|
39
|
+
resource.expects(:stat).returns stat
|
|
40
|
+
|
|
41
|
+
expect(checksum_value.retrieve).to be_nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not manage content on links" do
|
|
45
|
+
stat = mock 'stat', :ftype => "link"
|
|
46
|
+
resource.expects(:stat).returns stat
|
|
47
|
+
|
|
48
|
+
expect(checksum_value.retrieve).to be_nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should always return the checksum as a string" do
|
|
52
|
+
resource[:checksum] = :mtime
|
|
53
|
+
|
|
54
|
+
stat = mock 'stat', :ftype => "file"
|
|
55
|
+
resource.expects(:stat).returns stat
|
|
56
|
+
|
|
57
|
+
time = Time.now
|
|
58
|
+
resource.parameter(:checksum).expects(:mtime_file).with(resource[:path]).returns time
|
|
59
|
+
|
|
60
|
+
expect(checksum_value.retrieve).to eq(time.to_s)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
with_digest_algorithms do
|
|
65
|
+
it "should return the checksum of the target if it exists and is a normal file" do
|
|
66
|
+
stat = mock 'stat', :ftype => "file"
|
|
67
|
+
resource.expects(:stat).returns stat
|
|
68
|
+
resource.parameter(:checksum).expects("#{digest_algorithm}_file".intern).with(resource[:path]).returns "mysum"
|
|
69
|
+
resource[:source] = source_file
|
|
70
|
+
|
|
71
|
+
expect(checksum_value.retrieve).to eq("mysum")
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "when testing whether the checksum_value is in sync" do
|
|
77
|
+
let(:checksum_value) { described_class.new(:resource => resource) }
|
|
78
|
+
|
|
79
|
+
before do
|
|
80
|
+
resource[:ensure] = :file
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should return true if source is not specified" do
|
|
84
|
+
checksum_value.should = "foo"
|
|
85
|
+
expect(checksum_value).to be_safe_insync("whatever")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe "when a source is provided" do
|
|
89
|
+
before do
|
|
90
|
+
resource[:source] = source_file
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
with_digest_algorithms do
|
|
94
|
+
before(:each) do
|
|
95
|
+
resource[:checksum] = digest_algorithm
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "should return true if the resource shouldn't be a regular file" do
|
|
99
|
+
resource.expects(:should_be_file?).returns false
|
|
100
|
+
checksum_value.should = "foo"
|
|
101
|
+
expect(checksum_value).to be_safe_insync("whatever")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should return false if the current checksum_value is :absent" do
|
|
105
|
+
checksum_value.should = "foo"
|
|
106
|
+
expect(checksum_value).not_to be_safe_insync(:absent)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should return false if the file should be a file but is not present" do
|
|
110
|
+
resource.expects(:should_be_file?).returns true
|
|
111
|
+
checksum_value.should = "foo"
|
|
112
|
+
|
|
113
|
+
expect(checksum_value).not_to be_safe_insync(:absent)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe "and the file exists" do
|
|
117
|
+
before do
|
|
118
|
+
resource.stubs(:stat).returns mock("stat")
|
|
119
|
+
checksum_value.should = "somechecksum"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should return false if the current checksum_value is different from the desired checksum_value" do
|
|
123
|
+
expect(checksum_value).not_to be_safe_insync("otherchecksum")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should return true if the current checksum_value is the same as the desired checksum_value" do
|
|
127
|
+
expect(checksum_value).to be_safe_insync("somechecksum")
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should include the diff module" do
|
|
131
|
+
expect(checksum_value.respond_to?("diff")).to eq(false)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
[true, false].product([true, false]).each do |cfg, param|
|
|
135
|
+
describe "and Puppet[:show_diff] is #{cfg} and show_diff => #{param}" do
|
|
136
|
+
before do
|
|
137
|
+
Puppet[:show_diff] = cfg
|
|
138
|
+
resource.stubs(:show_diff?).returns param
|
|
139
|
+
resource[:loglevel] = "debug"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
if cfg and param
|
|
143
|
+
it "should display a diff" do
|
|
144
|
+
checksum_value.expects(:diff).returns("my diff").once
|
|
145
|
+
checksum_value.expects(:debug).with("\nmy diff").once
|
|
146
|
+
expect(checksum_value).not_to be_safe_insync("otherchecksum")
|
|
147
|
+
end
|
|
148
|
+
else
|
|
149
|
+
it "should not display a diff" do
|
|
150
|
+
checksum_value.expects(:diff).never
|
|
151
|
+
expect(checksum_value).not_to be_safe_insync("otherchecksum")
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
let(:saved_time) { Time.now }
|
|
160
|
+
[:ctime, :mtime].each do |time_stat|
|
|
161
|
+
[["older", -1, false], ["same", 0, true], ["newer", 1, true]].each do
|
|
162
|
+
|compare, target_time, success|
|
|
163
|
+
describe "with #{compare} target #{time_stat} compared to source" do
|
|
164
|
+
before do
|
|
165
|
+
resource[:checksum] = time_stat
|
|
166
|
+
checksum_value.should = saved_time.to_s
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it "should return #{success}" do
|
|
170
|
+
if success
|
|
171
|
+
expect(checksum_value).to be_safe_insync((saved_time+target_time).to_s)
|
|
172
|
+
else
|
|
173
|
+
expect(checksum_value).not_to be_safe_insync((saved_time+target_time).to_s)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
describe "with #{time_stat}" do
|
|
180
|
+
before do
|
|
181
|
+
resource[:checksum] = time_stat
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "should not be insync if trying to create it" do
|
|
185
|
+
checksum_value.should = saved_time.to_s
|
|
186
|
+
expect(checksum_value).not_to be_safe_insync(:absent)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "should raise an error if checksum_value is not a checksum" do
|
|
190
|
+
checksum_value.should = "some content"
|
|
191
|
+
expect {
|
|
192
|
+
checksum_value.safe_insync?(saved_time.to_s)
|
|
193
|
+
}.to raise_error(/Resource with checksum_type #{time_stat} didn't contain a date in/)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "should not be insync even if checksum_value is the absent symbol" do
|
|
197
|
+
checksum_value.should = :absent
|
|
198
|
+
expect(checksum_value).not_to be_safe_insync(:absent)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
describe "and :replace is false" do
|
|
204
|
+
before do
|
|
205
|
+
resource.stubs(:replace?).returns false
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "should be insync if the file exists and the checksum_value is different" do
|
|
209
|
+
resource.stubs(:stat).returns mock('stat')
|
|
210
|
+
|
|
211
|
+
expect(checksum_value).to be_safe_insync("whatever")
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "should be insync if the file exists and the checksum_value is right" do
|
|
215
|
+
resource.stubs(:stat).returns mock('stat')
|
|
216
|
+
|
|
217
|
+
expect(checksum_value).to be_safe_insync("something")
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "should not be insync if the file does not exist" do
|
|
221
|
+
checksum_value.should = "foo"
|
|
222
|
+
expect(checksum_value).not_to be_safe_insync(:absent)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
describe "when testing whether the checksum_value is initialized in the resource and in sync" do
|
|
229
|
+
CHECKSUM_TYPES_TO_TRY.each do |checksum_type, checksum|
|
|
230
|
+
describe "sync with checksum type #{checksum_type} and the file exists" do
|
|
231
|
+
before do
|
|
232
|
+
@new_resource = Puppet::Type.type(:file).new :ensure => :file, :path => path, :catalog => catalog,
|
|
233
|
+
:checksum_value => checksum, :checksum => checksum_type, :source => source_file
|
|
234
|
+
@new_resource.stubs(:stat).returns mock('stat')
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "should return false if the current checksum_value is different from the desired checksum_value" do
|
|
238
|
+
expect(@new_resource.parameters[:checksum_value]).not_to be_safe_insync("abcdef")
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
it "should return true if the current checksum_value is the same as the desired checksum_value" do
|
|
242
|
+
expect(@new_resource.parameters[:checksum_value]).to be_safe_insync(checksum)
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
describe "when changing the checksum_value" do
|
|
249
|
+
let(:checksum_value) { described_class.new(:resource => resource) }
|
|
250
|
+
|
|
251
|
+
before do
|
|
252
|
+
resource.stubs(:[]).with(:path).returns "/boo"
|
|
253
|
+
resource.stubs(:stat).returns "eh"
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it "should raise if source is absent" do
|
|
257
|
+
resource.expects(:write).never
|
|
258
|
+
|
|
259
|
+
expect { checksum_value.sync }.to raise_error "checksum_value#sync should not be called without a source parameter"
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
describe "when using a source" do
|
|
263
|
+
before do
|
|
264
|
+
resource[:source] = source_file
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "should use the file's :write method to write the checksum_value" do
|
|
268
|
+
resource.expects(:write).with(resource.parameter(:source))
|
|
269
|
+
|
|
270
|
+
checksum_value.sync
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "should return :file_changed if the file already existed" do
|
|
274
|
+
resource.expects(:stat).returns "something"
|
|
275
|
+
resource.stubs(:write)
|
|
276
|
+
expect(checksum_value.sync).to eq(:file_changed)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
it "should return :file_created if the file did not exist" do
|
|
280
|
+
resource.expects(:stat).returns nil
|
|
281
|
+
resource.stubs(:write)
|
|
282
|
+
expect(checksum_value.sync).to eq(:file_created)
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
#! /usr/bin/env ruby
|
|
2
2
|
require 'spec_helper'
|
|
3
|
-
require 'puppet/network/http_pool'
|
|
4
|
-
|
|
5
|
-
require 'puppet/network/resolver'
|
|
6
3
|
|
|
7
4
|
describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true do
|
|
8
5
|
include PuppetSpec::Files
|
|
@@ -183,6 +180,10 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
|
183
180
|
expect(content).to be_safe_insync("{#{digest_algorithm}}" + digest("some content"))
|
|
184
181
|
end
|
|
185
182
|
|
|
183
|
+
it "should include the diff module" do
|
|
184
|
+
expect(content.respond_to?("diff")).to eq(false)
|
|
185
|
+
end
|
|
186
|
+
|
|
186
187
|
[true, false].product([true, false]).each do |cfg, param|
|
|
187
188
|
describe "and Puppet[:show_diff] is #{cfg} and show_diff => #{param}" do
|
|
188
189
|
before do
|
|
@@ -208,21 +209,21 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
|
208
209
|
end
|
|
209
210
|
end
|
|
210
211
|
|
|
211
|
-
|
|
212
|
+
let(:saved_time) { Time.now }
|
|
212
213
|
[:ctime, :mtime].each do |time_stat|
|
|
213
|
-
[["older",
|
|
214
|
+
[["older", -1, false], ["same", 0, true], ["newer", 1, true]].each do
|
|
214
215
|
|compare, target_time, success|
|
|
215
216
|
describe "with #{compare} target #{time_stat} compared to source" do
|
|
216
217
|
before do
|
|
217
218
|
resource[:checksum] = time_stat
|
|
218
|
-
content.should = "{#{time_stat}}#{
|
|
219
|
+
content.should = "{#{time_stat}}#{saved_time}"
|
|
219
220
|
end
|
|
220
221
|
|
|
221
222
|
it "should return #{success}" do
|
|
222
223
|
if success
|
|
223
|
-
expect(content).to be_safe_insync("{#{time_stat}}#{target_time}")
|
|
224
|
+
expect(content).to be_safe_insync("{#{time_stat}}#{saved_time+target_time}")
|
|
224
225
|
else
|
|
225
|
-
expect(content).not_to be_safe_insync("{#{time_stat}}#{target_time}")
|
|
226
|
+
expect(content).not_to be_safe_insync("{#{time_stat}}#{saved_time+target_time}")
|
|
226
227
|
end
|
|
227
228
|
end
|
|
228
229
|
end
|
|
@@ -234,14 +235,14 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
|
234
235
|
end
|
|
235
236
|
|
|
236
237
|
it "should not be insync if trying to create it" do
|
|
237
|
-
content.should = "{#{time_stat}}#{
|
|
238
|
+
content.should = "{#{time_stat}}#{saved_time}"
|
|
238
239
|
expect(content).not_to be_safe_insync(:absent)
|
|
239
240
|
end
|
|
240
241
|
|
|
241
242
|
it "should raise an error if content is not a checksum" do
|
|
242
243
|
content.should = "some content"
|
|
243
244
|
expect {
|
|
244
|
-
content.safe_insync?("{#{time_stat}}#{
|
|
245
|
+
content.safe_insync?("{#{time_stat}}#{saved_time}")
|
|
245
246
|
}.to raise_error(/Resource with checksum_type #{time_stat} didn't contain a date in/)
|
|
246
247
|
end
|
|
247
248
|
|
|
@@ -316,7 +317,7 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
|
316
317
|
end
|
|
317
318
|
|
|
318
319
|
it "should use the file's :write method to write the content" do
|
|
319
|
-
resource.expects(:write).with(
|
|
320
|
+
resource.expects(:write).with(content)
|
|
320
321
|
|
|
321
322
|
content.sync
|
|
322
323
|
end
|
|
@@ -389,187 +390,5 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
|
389
390
|
content.write(fh)
|
|
390
391
|
end
|
|
391
392
|
end
|
|
392
|
-
|
|
393
|
-
describe "from local source" do
|
|
394
|
-
let(:source_content) { "source file content\r\n"*10 }
|
|
395
|
-
before(:each) do
|
|
396
|
-
sourcename = tmpfile('source')
|
|
397
|
-
resource[:backup] = false
|
|
398
|
-
resource[:source] = sourcename
|
|
399
|
-
|
|
400
|
-
File.open(sourcename, 'wb') {|f| f.write source_content}
|
|
401
|
-
|
|
402
|
-
# This needs to be invoked to properly initialize the content property,
|
|
403
|
-
# or attempting to write a file will fail.
|
|
404
|
-
resource.newattr(:content)
|
|
405
|
-
end
|
|
406
|
-
|
|
407
|
-
it "should copy content from the source to the file" do
|
|
408
|
-
source = resource.parameter(:source)
|
|
409
|
-
resource.write(source)
|
|
410
|
-
|
|
411
|
-
expect(Puppet::FileSystem.binread(filename)).to eq(source_content)
|
|
412
|
-
end
|
|
413
|
-
|
|
414
|
-
with_digest_algorithms do
|
|
415
|
-
it "should return the checksum computed" do
|
|
416
|
-
File.open(filename, 'wb') do |file|
|
|
417
|
-
resource[:checksum] = digest_algorithm
|
|
418
|
-
expect(content.write(file)).to eq("{#{digest_algorithm}}#{digest(source_content)}")
|
|
419
|
-
end
|
|
420
|
-
end
|
|
421
|
-
end
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
describe 'from remote source' do
|
|
425
|
-
let(:source_content) { "source file content\n"*10 }
|
|
426
|
-
let(:source) { resource.newattr(:source) }
|
|
427
|
-
let(:response) { stub_everything('response') }
|
|
428
|
-
let(:conn) { mock('connection') }
|
|
429
|
-
|
|
430
|
-
before(:each) do
|
|
431
|
-
resource[:backup] = false
|
|
432
|
-
# This needs to be invoked to properly initialize the content property,
|
|
433
|
-
# or attempting to write a file will fail.
|
|
434
|
-
resource.newattr(:content)
|
|
435
|
-
|
|
436
|
-
response.stubs(:read_body).multiple_yields(*source_content.lines)
|
|
437
|
-
conn.stubs(:request_get).yields(response)
|
|
438
|
-
end
|
|
439
|
-
|
|
440
|
-
it 'should use an explicit fileserver if source starts with puppet://' do
|
|
441
|
-
response.stubs(:code).returns('200')
|
|
442
|
-
source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet://somehostname/test/foo', :ftype => 'file')
|
|
443
|
-
Puppet::Network::HttpPool.expects(:http_instance).with('somehostname', anything).returns(conn)
|
|
444
|
-
|
|
445
|
-
resource.write(source)
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
it 'should use the default fileserver if source starts with puppet:///' do
|
|
449
|
-
response.stubs(:code).returns('200')
|
|
450
|
-
source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo', :ftype => 'file')
|
|
451
|
-
Puppet::Network::HttpPool.expects(:http_instance).with(Puppet.settings[:server], anything).returns(conn)
|
|
452
|
-
|
|
453
|
-
resource.write(source)
|
|
454
|
-
end
|
|
455
|
-
|
|
456
|
-
it 'should percent encode reserved characters' do
|
|
457
|
-
response.stubs(:code).returns('200')
|
|
458
|
-
Puppet::Network::HttpPool.stubs(:http_instance).returns(conn)
|
|
459
|
-
source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo bar', :ftype => 'file')
|
|
460
|
-
|
|
461
|
-
conn.unstub(:request_get)
|
|
462
|
-
conn.expects(:request_get).with("#{Puppet::Network::HTTP::MASTER_URL_PREFIX}/v3/file_content/test/foo%20bar?environment=testing&", anything).yields(response)
|
|
463
|
-
|
|
464
|
-
resource.write(source)
|
|
465
|
-
end
|
|
466
|
-
|
|
467
|
-
describe 'when handling file_content responses' do
|
|
468
|
-
before(:each) do
|
|
469
|
-
Puppet::Network::HttpPool.stubs(:http_instance).returns(conn)
|
|
470
|
-
source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo', :ftype => 'file')
|
|
471
|
-
end
|
|
472
|
-
|
|
473
|
-
it 'should not write anything if source is not found' do
|
|
474
|
-
response.stubs(:code).returns('404')
|
|
475
|
-
|
|
476
|
-
expect { resource.write(source) }.to raise_error(Net::HTTPError, /404/)
|
|
477
|
-
expect(File.read(filename)).to eq('initial file content')
|
|
478
|
-
end
|
|
479
|
-
|
|
480
|
-
it 'should raise an HTTP error in case of server error' do
|
|
481
|
-
response.stubs(:code).returns('500')
|
|
482
|
-
|
|
483
|
-
expect { resource.write(source) }.to raise_error(Net::HTTPError, /500/)
|
|
484
|
-
end
|
|
485
|
-
|
|
486
|
-
context 'and the request was successful' do
|
|
487
|
-
before(:each) { response.stubs(:code).returns '200' }
|
|
488
|
-
|
|
489
|
-
it 'should write the contents to the file' do
|
|
490
|
-
resource.write(source)
|
|
491
|
-
expect(Puppet::FileSystem.binread(filename)).to eq(source_content)
|
|
492
|
-
end
|
|
493
|
-
|
|
494
|
-
with_digest_algorithms do
|
|
495
|
-
it 'should return the checksum computed' do
|
|
496
|
-
File.open(filename, 'w') do |file|
|
|
497
|
-
resource[:checksum] = digest_algorithm
|
|
498
|
-
expect(content.write(file)).to eq("{#{digest_algorithm}}#{digest(source_content)}")
|
|
499
|
-
end
|
|
500
|
-
end
|
|
501
|
-
end
|
|
502
|
-
|
|
503
|
-
end
|
|
504
|
-
|
|
505
|
-
end
|
|
506
|
-
end
|
|
507
|
-
|
|
508
|
-
# These are testing the implementation rather than the desired behaviour; while that bites, there are a whole
|
|
509
|
-
# pile of other methods in the File type that depend on intimate details of this implementation and vice-versa.
|
|
510
|
-
# If these blow up, you are gonna have to review the callers to make sure they don't explode! --daniel 2011-02-01
|
|
511
|
-
describe "each_chunk_from should work" do
|
|
512
|
-
|
|
513
|
-
it "when content is a string" do
|
|
514
|
-
content.each_chunk_from('i_am_a_string') { |chunk| expect(chunk).to eq('i_am_a_string') }
|
|
515
|
-
end
|
|
516
|
-
|
|
517
|
-
# The following manifest is a case where source and content.should are both set
|
|
518
|
-
# file { "/tmp/mydir" :
|
|
519
|
-
# source => '/tmp/sourcedir',
|
|
520
|
-
# recurse => true,
|
|
521
|
-
# }
|
|
522
|
-
it "when content checksum comes from source" do
|
|
523
|
-
source_param = Puppet::Type.type(:file).attrclass(:source)
|
|
524
|
-
source = source_param.new(:resource => resource)
|
|
525
|
-
content.should = "{md5}123abcd"
|
|
526
|
-
|
|
527
|
-
content.expects(:chunk_file_from_source).returns('from_source')
|
|
528
|
-
content.each_chunk_from(source) { |chunk| expect(chunk).to eq('from_source') }
|
|
529
|
-
end
|
|
530
|
-
|
|
531
|
-
it "when no content, source, but ensure present" do
|
|
532
|
-
resource[:ensure] = :present
|
|
533
|
-
content.each_chunk_from(nil) { |chunk| expect(chunk).to eq('') }
|
|
534
|
-
end
|
|
535
|
-
|
|
536
|
-
# you might do this if you were just auditing
|
|
537
|
-
it "when no content, source, but ensure file" do
|
|
538
|
-
resource[:ensure] = :file
|
|
539
|
-
content.each_chunk_from(nil) { |chunk| expect(chunk).to eq('') }
|
|
540
|
-
end
|
|
541
|
-
|
|
542
|
-
it "when source_or_content is nil and content not a checksum" do
|
|
543
|
-
content.each_chunk_from(nil) { |chunk| expect(chunk).to eq('') }
|
|
544
|
-
end
|
|
545
|
-
|
|
546
|
-
# the content is munged so that if it's a checksum nil gets passed in
|
|
547
|
-
it "when content is a checksum it should try to read from filebucket" do
|
|
548
|
-
content.should = "{md5}123abcd"
|
|
549
|
-
content.expects(:read_file_from_filebucket).once.returns('im_a_filebucket')
|
|
550
|
-
content.each_chunk_from(nil) { |chunk| expect(chunk).to eq('im_a_filebucket') }
|
|
551
|
-
end
|
|
552
|
-
|
|
553
|
-
it "when running as puppet apply" do
|
|
554
|
-
Puppet[:default_file_terminus] = "file_server"
|
|
555
|
-
source_or_content = stubs('source_or_content')
|
|
556
|
-
source_or_content.expects(:content).once.returns :whoo
|
|
557
|
-
content.each_chunk_from(source_or_content) { |chunk| expect(chunk).to eq(:whoo) }
|
|
558
|
-
end
|
|
559
|
-
|
|
560
|
-
it "when running from source with a local file" do
|
|
561
|
-
source_or_content = stubs('source_or_content')
|
|
562
|
-
source_or_content.expects(:local?).returns true
|
|
563
|
-
content.expects(:chunk_file_from_disk).with(source_or_content).once.yields 'woot'
|
|
564
|
-
content.each_chunk_from(source_or_content) { |chunk| expect(chunk).to eq('woot') }
|
|
565
|
-
end
|
|
566
|
-
|
|
567
|
-
it "when running from source with a remote file" do
|
|
568
|
-
source_or_content = stubs('source_or_content')
|
|
569
|
-
source_or_content.expects(:local?).returns false
|
|
570
|
-
content.expects(:chunk_file_from_source).with(source_or_content).once.yields 'woot'
|
|
571
|
-
content.each_chunk_from(source_or_content) { |chunk| expect(chunk).to eq('woot') }
|
|
572
|
-
end
|
|
573
|
-
end
|
|
574
393
|
end
|
|
575
394
|
end
|