puppet 3.4.3 → 3.5.0.rc1
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.
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +22 -16
- data/LICENSE +1 -1
- data/README.md +33 -11
- data/Rakefile +1 -1
- data/conf/auth.conf +4 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +6 -6
- data/ext/ips/transforms +1 -1
- data/ext/nagios/naggen +1 -1
- data/ext/project_data.yaml +21 -1
- data/ext/puppet-test +3 -3
- data/ext/redhat/puppet.spec.erb +28 -2
- data/ext/suse/puppet.spec +1 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/service/daemon.rb +99 -20
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet.rb +68 -5
- data/lib/puppet/agent.rb +5 -1
- data/lib/puppet/application.rb +20 -11
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +61 -41
- data/lib/puppet/application/cert.rb +3 -3
- data/lib/puppet/application/device.rb +7 -8
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/queue.rb +9 -9
- data/lib/puppet/application/resource.rb +2 -2
- data/lib/puppet/bindings.rb +6 -6
- data/lib/puppet/configurer.rb +17 -14
- data/lib/puppet/configurer/fact_handler.rb +1 -1
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/exists.rb +1 -1
- data/lib/puppet/confiner.rb +1 -0
- data/lib/puppet/context.rb +55 -0
- data/lib/puppet/context/trusted_information.rb +56 -0
- data/lib/puppet/defaults.rb +97 -26
- data/lib/puppet/environments.rb +187 -0
- data/lib/puppet/error.rb +2 -1
- data/lib/puppet/external/pson/common.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -1
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/config.rb +73 -15
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/help.rb +2 -1
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/help/global.erb +1 -0
- data/lib/puppet/face/help/man.erb +9 -8
- data/lib/puppet/face/module/list.rb +13 -7
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/parser.rb +11 -5
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +2 -2
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +9 -5
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_serving/content.rb +2 -2
- data/lib/puppet/file_serving/fileset.rb +4 -4
- data/lib/puppet/file_serving/metadata.rb +69 -15
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_system.rb +361 -1
- data/lib/puppet/file_system/file18.rb +3 -3
- data/lib/puppet/file_system/file19.rb +3 -3
- data/lib/puppet/file_system/file19windows.rb +18 -23
- data/lib/puppet/file_system/file_impl.rb +145 -0
- data/lib/puppet/file_system/memory_file.rb +23 -9
- data/lib/puppet/file_system/memory_impl.rb +64 -0
- data/lib/puppet/forge.rb +4 -3
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/graph/relationship_graph.rb +7 -7
- data/lib/puppet/indirector.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -30
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
- data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/face.rb +3 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
- data/lib/puppet/indirector/file_metadata/file.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/key/file.rb +8 -5
- data/lib/puppet/indirector/ldap.rb +1 -1
- data/lib/puppet/indirector/memory.rb +4 -0
- data/lib/puppet/indirector/msgpack.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +3 -3
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +15 -0
- data/lib/puppet/indirector/queue.rb +3 -2
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/request.rb +17 -20
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +3 -13
- data/lib/puppet/indirector/rest.rb +6 -7
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +9 -13
- data/lib/puppet/metatype/manager.rb +12 -7
- data/lib/puppet/module.rb +14 -9
- data/lib/puppet/module_tool.rb +21 -26
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/applications/generator.rb +2 -1
- data/lib/puppet/module_tool/applications/installer.rb +9 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +2 -0
- data/lib/puppet/module_tool/dependency.rb +4 -5
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +3 -0
- data/lib/puppet/module_tool/metadata.rb +3 -5
- data/lib/puppet/module_tool/modulefile.rb +3 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
- data/lib/puppet/module_tool/skeleton.rb +3 -0
- data/lib/puppet/module_tool/tar.rb +3 -0
- data/lib/puppet/network/auth_config_parser.rb +1 -1
- data/lib/puppet/network/authconfig.rb +5 -2
- data/lib/puppet/network/authentication.rb +7 -2
- data/lib/puppet/network/authorization.rb +2 -2
- data/lib/puppet/network/format_support.rb +4 -0
- data/lib/puppet/network/formats.rb +9 -14
- data/lib/puppet/network/http.rb +11 -0
- data/lib/puppet/network/http/api.rb +0 -2
- data/lib/puppet/network/http/api/v1.rb +146 -11
- data/lib/puppet/network/http/api/v2.rb +32 -0
- data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
- data/lib/puppet/network/http/api/v2/environments.rb +21 -0
- data/lib/puppet/network/http/connection.rb +94 -37
- data/lib/puppet/network/http/error.rb +69 -0
- data/lib/puppet/network/http/handler.rb +28 -196
- data/lib/puppet/network/http/issues.rb +9 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/rack/rest.rb +10 -18
- data/lib/puppet/network/http/request.rb +56 -0
- data/lib/puppet/network/http/response.rb +11 -0
- data/lib/puppet/network/http/route.rb +91 -0
- data/lib/puppet/network/http/webrick.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +7 -12
- data/lib/puppet/network/http_pool.rb +3 -3
- data/lib/puppet/network/rights.rb +4 -4
- data/lib/puppet/node.rb +23 -14
- data/lib/puppet/node/environment.rb +149 -125
- data/lib/puppet/node/facts.rb +6 -5
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +1 -6
- data/lib/puppet/parser/ast/collexpr.rb +54 -2
- data/lib/puppet/parser/ast/lambda.rb +9 -0
- data/lib/puppet/parser/ast/leaf.rb +15 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
- data/lib/puppet/parser/code_merger.rb +13 -0
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +28 -30
- data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
- data/lib/puppet/parser/e_parser_adapter.rb +0 -1
- data/lib/puppet/parser/files.rb +12 -7
- data/lib/puppet/parser/functions.rb +36 -29
- data/lib/puppet/parser/functions/collect.rb +1 -1
- data/lib/puppet/parser/functions/defined.rb +40 -16
- data/lib/puppet/parser/functions/each.rb +55 -41
- data/lib/puppet/parser/functions/epp.rb +41 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +68 -16
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +3 -2
- data/lib/puppet/parser/functions/inline_epp.rb +79 -0
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +127 -27
- data/lib/puppet/parser/functions/map.rb +64 -12
- data/lib/puppet/parser/functions/reduce.rb +40 -16
- data/lib/puppet/parser/functions/select.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +42 -23
- data/lib/puppet/parser/grammar.ra +3 -0
- data/lib/puppet/parser/lexer.rb +10 -9
- data/lib/puppet/parser/parser.rb +15 -12
- data/lib/puppet/parser/parser_factory.rb +26 -1
- data/lib/puppet/parser/parser_support.rb +13 -4
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +246 -97
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +13 -2
- data/lib/puppet/pops.rb +15 -1
- data/lib/puppet/pops/adapters.rb +64 -32
- data/lib/puppet/pops/binder/binder.rb +122 -150
- data/lib/puppet/pops/binder/binder_issues.rb +1 -21
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
- data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
- data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
- data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
- data/lib/puppet/pops/binder/bindings_model.rb +17 -31
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
- data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
- data/lib/puppet/pops/binder/config/issues.rb +1 -21
- data/lib/puppet/pops/binder/injector.rb +86 -7
- data/lib/puppet/pops/binder/injector_entry.rb +6 -2
- data/lib/puppet/pops/binder/key_factory.rb +7 -1
- data/lib/puppet/pops/binder/lookup.rb +191 -0
- data/lib/puppet/pops/binder/producers.rb +5 -5
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
- data/lib/puppet/pops/binder/system_bindings.rb +4 -16
- data/lib/puppet/pops/containment.rb +72 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
- data/lib/puppet/pops/issue_reporter.rb +8 -4
- data/lib/puppet/pops/issues.rb +199 -4
- data/lib/puppet/pops/label_provider.rb +5 -0
- data/lib/puppet/pops/model/ast_transformer.rb +55 -31
- data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
- data/lib/puppet/pops/model/factory.rb +265 -111
- data/lib/puppet/pops/model/model.rb +179 -140
- data/lib/puppet/pops/model/model_label_provider.rb +38 -9
- data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
- data/lib/puppet/pops/parser/code_merger.rb +17 -0
- data/lib/puppet/pops/parser/egrammar.ra +110 -61
- data/lib/puppet/pops/parser/eparser.rb +1415 -1092
- data/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +247 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
- data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
- data/lib/puppet/pops/parser/lexer.rb +83 -192
- data/lib/puppet/pops/parser/lexer2.rb +684 -0
- data/lib/puppet/pops/parser/lexer_support.rb +107 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +291 -0
- data/lib/puppet/pops/parser/makefile +1 -8
- data/lib/puppet/pops/parser/parser_support.rb +76 -48
- data/lib/puppet/pops/parser/slurp_support.rb +95 -0
- data/lib/puppet/pops/patterns.rb +13 -4
- data/lib/puppet/pops/types/class_loader.rb +2 -2
- data/lib/puppet/pops/types/enumeration.rb +34 -0
- data/lib/puppet/pops/types/type_calculator.rb +983 -58
- data/lib/puppet/pops/types/type_factory.rb +203 -15
- data/lib/puppet/pops/types/type_parser.rb +355 -12
- data/lib/puppet/pops/types/types.rb +314 -24
- data/lib/puppet/pops/utils.rb +23 -7
- data/lib/puppet/pops/validation.rb +14 -8
- data/lib/puppet/pops/validation/checker3_1.rb +17 -12
- data/lib/puppet/pops/validation/checker4_0.rb +514 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
- data/lib/puppet/pops/visitor.rb +146 -4
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider.rb +47 -26
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +11 -11
- data/lib/puppet/provider/cron/crontab.rb +10 -1
- data/lib/puppet/provider/exec.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +2 -2
- data/lib/puppet/provider/file/windows.rb +15 -9
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
- data/lib/puppet/provider/mount.rb +7 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -4
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +3 -3
- data/lib/puppet/provider/package/openbsd.rb +6 -4
- data/lib/puppet/provider/package/pacman.rb +58 -5
- data/lib/puppet/provider/package/pip.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +25 -10
- data/lib/puppet/provider/package/pkgin.rb +48 -23
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/portupgrade.rb +7 -7
- data/lib/puppet/provider/package/rpm.rb +16 -8
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +5 -5
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +20 -20
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +4 -4
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/service.rb +3 -4
- data/lib/puppet/provider/service/smf.rb +1 -1
- data/lib/puppet/provider/service/src.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +4 -4
- data/lib/puppet/provider/service/upstart.rb +22 -7
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
- data/lib/puppet/provider/user/aix.rb +5 -5
- data/lib/puppet/provider/user/directoryservice.rb +8 -5
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +19 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/rails.rb +16 -11
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/rails/resource.rb +5 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/report.rb +1 -1
- data/lib/puppet/relationship.rb +10 -5
- data/lib/puppet/reports/http.rb +8 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +4 -4
- data/lib/puppet/resource.rb +37 -44
- data/lib/puppet/resource/catalog.rb +18 -20
- data/lib/puppet/resource/status.rb +7 -6
- data/lib/puppet/resource/type.rb +6 -5
- data/lib/puppet/resource/type_collection.rb +2 -2
- data/lib/puppet/run.rb +9 -8
- data/lib/puppet/settings.rb +395 -244
- data/lib/puppet/settings/base_setting.rb +10 -4
- data/lib/puppet/settings/config_file.rb +81 -44
- data/lib/puppet/settings/directory_setting.rb +1 -2
- data/lib/puppet/settings/file_setting.rb +12 -5
- data/lib/puppet/settings/ini_file.rb +171 -0
- data/lib/puppet/ssl/base.rb +4 -0
- data/lib/puppet/ssl/certificate_authority.rb +16 -11
- data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
- data/lib/puppet/ssl/certificate_factory.rb +50 -5
- data/lib/puppet/ssl/certificate_request.rb +2 -2
- data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
- data/lib/puppet/ssl/host.rb +9 -8
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/status.rb +8 -7
- data/lib/puppet/test/test_helper.rb +35 -4
- data/lib/puppet/transaction/event.rb +6 -5
- data/lib/puppet/transaction/report.rb +10 -10
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/augeas.rb +2 -1
- data/lib/puppet/type/cron.rb +41 -11
- data/lib/puppet/type/exec.rb +5 -5
- data/lib/puppet/type/file.rb +42 -4
- data/lib/puppet/type/file/content.rb +5 -6
- data/lib/puppet/type/file/ensure.rb +3 -3
- data/lib/puppet/type/file/source.rb +12 -6
- data/lib/puppet/type/file/target.rb +5 -5
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +79 -3
- data/lib/puppet/type/resources.rb +34 -5
- data/lib/puppet/type/selboolean.rb +1 -1
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -1
- data/lib/puppet/type/sshkey.rb +2 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +4 -1
- data/lib/puppet/type/yumrepo.rb +219 -344
- data/lib/puppet/type/zone.rb +15 -5
- data/lib/puppet/util.rb +14 -13
- data/lib/puppet/util/adsi.rb +19 -3
- data/lib/puppet/util/autoload.rb +27 -24
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/colors.rb +4 -12
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +3 -3
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +8 -1
- data/lib/puppet/util/execution.rb +12 -5
- data/lib/puppet/util/filetype.rb +5 -5
- data/lib/puppet/util/inifile.rb +19 -4
- data/lib/puppet/util/instrumentation/data.rb +5 -0
- data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
- data/lib/puppet/util/instrumentation/listener.rb +6 -1
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/lockfile.rb +10 -6
- data/lib/puppet/util/log.rb +6 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/metric.rb +9 -4
- data/lib/puppet/util/nagios_maker.rb +26 -1
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/profiler.rb +13 -1
- data/lib/puppet/util/pson.rb +1 -1
- data/lib/puppet/util/queue/stomp.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retryaction.rb +1 -1
- data/lib/puppet/util/selinux.rb +2 -2
- data/lib/puppet/util/storage.rb +3 -3
- data/lib/puppet/util/symbolic_file_mode.rb +1 -1
- data/lib/puppet/util/tag_set.rb +15 -3
- data/lib/puppet/util/tagging.rb +12 -17
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +20 -4
- data/lib/puppet/util/windows/registry.rb +2 -2
- data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +1 -21
- data/lib/puppetx/puppet/syntax_checker.rb +1 -1
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
- data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
- data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
- data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
- data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
- data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
- data/spec/integration/agent/logging_spec.rb +1 -1
- data/spec/integration/application/apply_spec.rb +78 -3
- data/spec/integration/application/doc_spec.rb +3 -2
- data/spec/integration/configurer_spec.rb +5 -3
- data/spec/integration/directory_environments_spec.rb +50 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
- data/spec/integration/network/authconfig_spec.rb +4 -4
- data/spec/integration/network/formats_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +67 -15
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +100 -60
- data/spec/integration/parser/compiler_spec.rb +102 -13
- data/spec/integration/parser/future_compiler_spec.rb +416 -0
- data/spec/integration/parser/parser_spec.rb +44 -105
- data/spec/integration/parser/scope_spec.rb +614 -528
- data/spec/integration/provider/cron/crontab_spec.rb +21 -0
- data/spec/integration/provider/mount_spec.rb +15 -2
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +3 -4
- data/spec/integration/ssl/autosign_spec.rb +1 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +114 -41
- data/spec/integration/type/nagios_spec.rb +80 -0
- data/spec/integration/type/tidy_spec.rb +2 -2
- data/spec/integration/util/execution_spec.rb +17 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +27 -2
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/matchers/json.rb +135 -79
- data/spec/lib/matchers/match_tokens2.rb +74 -0
- data/spec/lib/matchers/resource.rb +35 -0
- data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
- data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
- data/spec/lib/puppet/indirector_testing.rb +12 -2
- data/spec/lib/puppet_spec/files.rb +1 -0
- data/spec/lib/puppet_spec/matchers.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +1 -1
- data/spec/lib/puppet_spec/scope.rb +14 -0
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/spec_helper.rb +47 -17
- data/spec/unit/agent_spec.rb +8 -1
- data/spec/unit/application/agent_spec.rb +5 -4
- data/spec/unit/application/apply_spec.rb +34 -15
- data/spec/unit/application/device_spec.rb +27 -32
- data/spec/unit/application/doc_spec.rb +4 -4
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +5 -16
- data/spec/unit/configurer_spec.rb +2 -2
- data/spec/unit/confine/exists_spec.rb +5 -5
- data/spec/unit/context/trusted_information_spec.rb +124 -0
- data/spec/unit/context_spec.rb +74 -0
- data/spec/unit/environments_spec.rb +126 -0
- data/spec/unit/face/config_spec.rb +31 -16
- data/spec/unit/face/module/build_spec.rb +1 -0
- data/spec/unit/face/module/install_spec.rb +21 -104
- data/spec/unit/face/module/list_spec.rb +52 -36
- data/spec/unit/face/module/uninstall_spec.rb +18 -25
- data/spec/unit/face/parser_spec.rb +39 -23
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +9 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +7 -12
- data/spec/unit/file_serving/fileset_spec.rb +49 -53
- data/spec/unit/file_serving/metadata_spec.rb +83 -32
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_system/tempfile_spec.rb +3 -3
- data/spec/unit/file_system_spec.rb +508 -0
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/hiera/scope_spec.rb +6 -2
- data/spec/unit/hiera_puppet_spec.rb +13 -6
- data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +5 -5
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +6 -6
- data/spec/unit/indirector/key/file_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +191 -0
- data/spec/unit/indirector/node/active_record_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +16 -7
- data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
- data/spec/unit/indirector/node/plain_spec.rb +1 -1
- data/spec/unit/indirector/queue_spec.rb +1 -1
- data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
- data/spec/unit/indirector/request_spec.rb +16 -8
- data/spec/unit/indirector/rest_spec.rb +0 -4
- data/spec/unit/indirector/ssl_file_spec.rb +12 -11
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/man_spec.rb +32 -0
- data/spec/unit/module_spec.rb +60 -46
- data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
- data/spec/unit/module_tool/tar_spec.rb +1 -1
- data/spec/unit/module_tool_spec.rb +17 -90
- data/spec/unit/network/authconfig_spec.rb +3 -4
- data/spec/unit/network/authentication_spec.rb +20 -6
- data/spec/unit/network/authorization_spec.rb +11 -1
- data/spec/unit/network/formats_spec.rb +32 -9
- data/spec/unit/network/http/api/v1_spec.rb +365 -62
- data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
- data/spec/unit/network/http/api/v2_spec.rb +14 -0
- data/spec/unit/network/http/connection_spec.rb +39 -5
- data/spec/unit/network/http/error_spec.rb +30 -0
- data/spec/unit/network/http/handler_spec.rb +69 -419
- data/spec/unit/network/http/rack/rest_spec.rb +20 -28
- data/spec/unit/network/http/route_spec.rb +75 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
- data/spec/unit/network/http_pool_spec.rb +3 -3
- data/spec/unit/network/rights_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +108 -89
- data/spec/unit/node/facts_spec.rb +5 -12
- data/spec/unit/node_spec.rb +22 -22
- data/spec/unit/parser/ast/collection_spec.rb +1 -1
- data/spec/unit/parser/ast/leaf_spec.rb +2 -0
- data/spec/unit/parser/ast/resource_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +5 -3
- data/spec/unit/parser/files_spec.rb +40 -50
- data/spec/unit/parser/functions/defined_spec.rb +80 -18
- data/spec/unit/parser/functions/epp_spec.rb +88 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
- data/spec/unit/parser/functions/generate_spec.rb +6 -2
- data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
- data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
- data/spec/unit/parser/functions/hiera_spec.rb +5 -2
- data/spec/unit/parser/functions/include_spec.rb +0 -1
- data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
- data/spec/unit/parser/functions/lookup_spec.rb +66 -16
- data/spec/unit/parser/functions_spec.rb +25 -91
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/filter_spec.rb +56 -0
- data/spec/unit/parser/methods/map_spec.rb +94 -5
- data/spec/unit/parser/methods/reduce_spec.rb +10 -0
- data/spec/unit/parser/methods/shared.rb +2 -18
- data/spec/unit/parser/methods/slice_spec.rb +39 -1
- data/spec/unit/parser/parser_spec.rb +14 -10
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/scope_spec.rb +81 -78
- data/spec/unit/parser/type_loader_spec.rb +0 -4
- data/spec/unit/pops/benchmark_spec.rb +142 -0
- data/spec/unit/pops/binder/binder_spec.rb +15 -34
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
- data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
- data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
- data/spec/unit/pops/binder/injector_spec.rb +76 -81
- data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
- data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
- data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
- data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
- data/spec/unit/pops/factory_spec.rb +6 -29
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
- data/spec/unit/pops/model/model_spec.rb +2 -2
- data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
- data/spec/unit/pops/parser/lexer_spec.rb +25 -86
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
- data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
- data/spec/unit/pops/parser/parser_spec.rb +3 -1
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
- data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
- data/spec/unit/pops/types/enumeration_spec.rb +50 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
- data/spec/unit/pops/types/type_factory_spec.rb +108 -4
- data/spec/unit/pops/types/type_parser_spec.rb +114 -10
- data/spec/unit/pops/validator/validator_spec.rb +36 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
- data/spec/unit/provider/cron/parsed_spec.rb +27 -31
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/package/msi_spec.rb +4 -0
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +36 -7
- data/spec/unit/provider/package/pkgin_spec.rb +57 -55
- data/spec/unit/provider/package/rpm_spec.rb +51 -6
- data/spec/unit/provider/service/base_spec.rb +4 -4
- data/spec/unit/provider/service/daemontools_spec.rb +8 -13
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +24 -24
- data/spec/unit/provider/service/init_spec.rb +15 -15
- data/spec/unit/provider/service/openbsd_spec.rb +16 -16
- data/spec/unit/provider/service/openrc_spec.rb +20 -20
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +5 -8
- data/spec/unit/provider/service/src_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_spec.rb +24 -14
- data/spec/unit/provider/service/upstart_spec.rb +12 -4
- data/spec/unit/provider/service/windows_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/useradd_spec.rb +43 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +120 -62
- data/spec/unit/rails/host_spec.rb +1 -1
- data/spec/unit/rails/param_value_spec.rb +4 -0
- data/spec/unit/relationship_spec.rb +4 -4
- data/spec/unit/reports/http_spec.rb +14 -3
- data/spec/unit/reports/rrdgraph_spec.rb +0 -1
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +17 -29
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +28 -47
- data/spec/unit/resource/type_spec.rb +12 -23
- data/spec/unit/resource_spec.rb +54 -93
- data/spec/unit/run_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/config_file_spec.rb +68 -15
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/ini_file_spec.rb +184 -0
- data/spec/unit/settings_spec.rb +137 -79
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
- data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
- data/spec/unit/ssl/host_spec.rb +8 -20
- data/spec/unit/ssl/inventory_spec.rb +2 -2
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/status_spec.rb +6 -4
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
- data/spec/unit/transaction/event_spec.rb +2 -2
- data/spec/unit/transaction/report_spec.rb +24 -15
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +39 -1
- data/spec/unit/type/file/content_spec.rb +4 -5
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +5 -4
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +30 -7
- data/spec/unit/type/file_spec.rb +8 -8
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +6 -0
- data/spec/unit/type/package/package_settings_spec.rb +135 -0
- data/spec/unit/type/package_spec.rb +13 -1
- data/spec/unit/type/resources_spec.rb +155 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
- data/spec/unit/type/sshkey_spec.rb +39 -30
- data/spec/unit/type/tidy_spec.rb +19 -12
- data/spec/unit/type/user_spec.rb +47 -2
- data/spec/unit/type/whit_spec.rb +2 -2
- data/spec/unit/type/yumrepo_spec.rb +32 -177
- data/spec/unit/type/zone_spec.rb +2 -2
- data/spec/unit/type_spec.rb +11 -0
- data/spec/unit/util/adsi_spec.rb +48 -1
- data/spec/unit/util/autoload_spec.rb +24 -39
- data/spec/unit/util/backups_spec.rb +25 -28
- data/spec/unit/util/checksums_spec.rb +1 -3
- data/spec/unit/util/colors_spec.rb +14 -0
- data/spec/unit/util/docs_spec.rb +9 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/instrumentation/data_spec.rb +3 -1
- data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
- data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
- data/spec/unit/util/json_lockfile_spec.rb +25 -4
- data/spec/unit/util/lockfile_spec.rb +49 -7
- data/spec/unit/util/log/destinations_spec.rb +1 -0
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/metric_spec.rb +1 -1
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/pson_spec.rb +2 -2
- data/spec/unit/util/rdoc/parser_spec.rb +32 -29
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +5 -5
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/tag_set_spec.rb +1 -1
- data/spec/unit/util/watcher_spec.rb +1 -4
- data/spec/unit/util/yaml_spec.rb +2 -2
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/benchmark.rake +0 -1
- data/tasks/parallel.rake +408 -0
- data/tasks/yard.rake +59 -0
- metadata +2889 -2782
- checksums.yaml +0 -7
- data/README_DEVELOPER.md +0 -809
- data/lib/puppet/file_system/file.rb +0 -271
- data/lib/puppet/network/http/rack/httphandler.rb +0 -13
- data/lib/puppet/pops/binder/hiera2.rb +0 -10
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
- data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
- data/lib/puppet/pops/parser/grammar.ra +0 -746
- data/lib/puppet/provider/port/parsed.rb +0 -173
- data/lib/puppet/type/port.rb +0 -119
- data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
- data/spec/unit/file_system/file_spec.rb +0 -486
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
- data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -1,22 +1,7 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
|
-
|
4
3
|
require 'puppet/file_serving/metadata'
|
5
|
-
|
6
|
-
# the json-schema gem doesn't support windows
|
7
|
-
if not Puppet.features.microsoft_windows?
|
8
|
-
FILE_METADATA_SCHEMA = JSON.parse(File.read(File.join(File.dirname(__FILE__), '../../../api/schemas/file_metadata.json')))
|
9
|
-
|
10
|
-
describe "catalog schema" do
|
11
|
-
it "should validate against the json meta-schema" do
|
12
|
-
JSON::Validator.validate!(JSON_META_SCHEMA, FILE_METADATA_SCHEMA)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def validate_json_for_file_metadata(file_metadata)
|
17
|
-
JSON::Validator.validate!(FILE_METADATA_SCHEMA, file_metadata.to_pson)
|
18
|
-
end
|
19
|
-
end
|
4
|
+
require 'matchers/json'
|
20
5
|
|
21
6
|
describe Puppet::FileServing::Metadata do
|
22
7
|
let(:foobar) { File.expand_path('/foo/bar') }
|
@@ -41,8 +26,8 @@ describe Puppet::FileServing::Metadata do
|
|
41
26
|
Puppet::FileServing::Metadata.new(foobar).should respond_to(:to_pson_data_hash)
|
42
27
|
end
|
43
28
|
|
44
|
-
it "should support
|
45
|
-
Puppet::FileServing::Metadata.should respond_to(:
|
29
|
+
it "should support deserialization" do
|
30
|
+
Puppet::FileServing::Metadata.should respond_to(:from_data_hash)
|
46
31
|
end
|
47
32
|
|
48
33
|
describe "when serializing" do
|
@@ -103,6 +88,7 @@ describe Puppet::FileServing::Metadata do
|
|
103
88
|
end
|
104
89
|
|
105
90
|
describe Puppet::FileServing::Metadata do
|
91
|
+
include JSONMatchers
|
106
92
|
include PuppetSpec::Files
|
107
93
|
|
108
94
|
shared_examples_for "metadata collector" do
|
@@ -154,8 +140,8 @@ describe Puppet::FileServing::Metadata do
|
|
154
140
|
end
|
155
141
|
end
|
156
142
|
|
157
|
-
it "should validate against the schema"
|
158
|
-
|
143
|
+
it "should validate against the schema" do
|
144
|
+
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
159
145
|
end
|
160
146
|
end
|
161
147
|
|
@@ -179,14 +165,54 @@ describe Puppet::FileServing::Metadata do
|
|
179
165
|
metadata.checksum.should == "{ctime}#{time}"
|
180
166
|
end
|
181
167
|
|
182
|
-
it "should validate against the schema"
|
168
|
+
it "should validate against the schema" do
|
183
169
|
metadata.collect
|
184
|
-
|
170
|
+
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
185
171
|
end
|
186
172
|
end
|
187
173
|
end
|
188
174
|
end
|
189
175
|
|
176
|
+
describe "WindowsStat", :if => Puppet.features.microsoft_windows? do
|
177
|
+
include PuppetSpec::Files
|
178
|
+
|
179
|
+
it "should return default owner, group and mode when the given path has an invalid DACL (such as a non-NTFS volume)" do
|
180
|
+
invalid_error = Puppet::Util::Windows::Error.new('Invalid DACL', 1336)
|
181
|
+
path = tmpfile('foo')
|
182
|
+
FileUtils.touch(path)
|
183
|
+
|
184
|
+
Puppet::Util::Windows::Security.stubs(:get_owner).with(path).raises(invalid_error)
|
185
|
+
Puppet::Util::Windows::Security.stubs(:get_group).with(path).raises(invalid_error)
|
186
|
+
Puppet::Util::Windows::Security.stubs(:get_mode).with(path).raises(invalid_error)
|
187
|
+
|
188
|
+
stat = Puppet::FileSystem.stat(path)
|
189
|
+
|
190
|
+
win_stat = Puppet::FileServing::Metadata::WindowsStat.new(stat, path)
|
191
|
+
|
192
|
+
win_stat.owner.should == 'S-1-5-32-544'
|
193
|
+
win_stat.group.should == 'S-1-0-0'
|
194
|
+
win_stat.mode.should == 0644
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should still raise errors that are not the result of an 'Invalid DACL'" do
|
198
|
+
invalid_error = ArgumentError.new('bar')
|
199
|
+
path = tmpfile('bar')
|
200
|
+
FileUtils.touch(path)
|
201
|
+
|
202
|
+
Puppet::Util::Windows::Security.stubs(:get_owner).with(path).raises(invalid_error)
|
203
|
+
Puppet::Util::Windows::Security.stubs(:get_group).with(path).raises(invalid_error)
|
204
|
+
Puppet::Util::Windows::Security.stubs(:get_mode).with(path).raises(invalid_error)
|
205
|
+
|
206
|
+
stat = Puppet::FileSystem.stat(path)
|
207
|
+
|
208
|
+
win_stat = Puppet::FileServing::Metadata::WindowsStat.new(stat, path)
|
209
|
+
|
210
|
+
expect { win_stat.owner }.to raise_error(ArgumentError)
|
211
|
+
expect { win_stat.group }.to raise_error(ArgumentError)
|
212
|
+
expect { win_stat.mode }.to raise_error(ArgumentError)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
190
216
|
shared_examples_for "metadata collector symlinks" do
|
191
217
|
|
192
218
|
let(:metadata) do
|
@@ -201,21 +227,21 @@ describe Puppet::FileServing::Metadata do
|
|
201
227
|
let(:path) { tmpfile('file_serving_metadata_link') }
|
202
228
|
let(:target) { tmpfile('file_serving_metadata_target') }
|
203
229
|
let(:checksum) { Digest::MD5.hexdigest("some content\n") }
|
204
|
-
let(:fmode) { Puppet::FileSystem
|
230
|
+
let(:fmode) { Puppet::FileSystem.lstat(path).mode & 0777 }
|
205
231
|
|
206
232
|
before :each do
|
207
233
|
File.open(target, "wb") {|f| f.print("some content\n")}
|
208
234
|
set_mode(0644, target)
|
209
235
|
|
210
|
-
Puppet::FileSystem
|
236
|
+
Puppet::FileSystem.symlink(target, path)
|
211
237
|
end
|
212
238
|
|
213
239
|
it "should read links instead of returning their checksums" do
|
214
240
|
metadata.destination.should == target
|
215
241
|
end
|
216
242
|
|
217
|
-
it "should validate against the schema"
|
218
|
-
|
243
|
+
it "should validate against the schema" do
|
244
|
+
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
219
245
|
end
|
220
246
|
end
|
221
247
|
end
|
@@ -248,8 +274,8 @@ describe Puppet::FileServing::Metadata do
|
|
248
274
|
proc { metadata.collect}.should raise_error(Errno::ENOENT)
|
249
275
|
end
|
250
276
|
|
251
|
-
it "should validate against the schema"
|
252
|
-
|
277
|
+
it "should validate against the schema" do
|
278
|
+
expect(metadata.to_pson).to validate_against('api/schemas/file_metadata.json')
|
253
279
|
end
|
254
280
|
end
|
255
281
|
end
|
@@ -291,6 +317,9 @@ describe Puppet::FileServing::Metadata do
|
|
291
317
|
data.collect
|
292
318
|
data
|
293
319
|
end
|
320
|
+
let (:invalid_dacl_error) do
|
321
|
+
Puppet::Util::Windows::Error.new('Invalid DACL', 1336)
|
322
|
+
end
|
294
323
|
|
295
324
|
it "should default owner" do
|
296
325
|
Puppet::Util::Windows::Security.stubs(:get_owner).returns nil
|
@@ -309,6 +338,28 @@ describe Puppet::FileServing::Metadata do
|
|
309
338
|
|
310
339
|
metadata.mode.should == 0644
|
311
340
|
end
|
341
|
+
|
342
|
+
describe "when the path raises an Invalid ACL error" do
|
343
|
+
# these simulate the behavior of a symlink file whose target does not support ACLs
|
344
|
+
it "should default owner" do
|
345
|
+
Puppet::Util::Windows::Security.stubs(:get_owner).raises(invalid_dacl_error)
|
346
|
+
|
347
|
+
metadata.owner.should == 'S-1-5-32-544'
|
348
|
+
end
|
349
|
+
|
350
|
+
it "should default group" do
|
351
|
+
Puppet::Util::Windows::Security.stubs(:get_group).raises(invalid_dacl_error)
|
352
|
+
|
353
|
+
metadata.group.should == 'S-1-0-0'
|
354
|
+
end
|
355
|
+
|
356
|
+
it "should default mode" do
|
357
|
+
Puppet::Util::Windows::Security.stubs(:get_mode).raises(invalid_dacl_error)
|
358
|
+
|
359
|
+
metadata.mode.should == 0644
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
312
363
|
end
|
313
364
|
|
314
365
|
def set_mode(mode, path)
|
@@ -325,7 +376,8 @@ describe Puppet::FileServing::Metadata, " when pointing to a link", :if => Puppe
|
|
325
376
|
@file = Puppet::FileServing::Metadata.new(path, :links => :manage)
|
326
377
|
stat = stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
|
327
378
|
stub_file = stub(:readlink => "/some/other/path", :lstat => stat)
|
328
|
-
Puppet::FileSystem
|
379
|
+
Puppet::FileSystem.expects(:lstat).with(path).at_least_once.returns stat
|
380
|
+
Puppet::FileSystem.expects(:readlink).with(path).at_least_once.returns "/some/other/path"
|
329
381
|
@checksum = Digest::MD5.hexdigest("some content\n") # Remove these when :managed links are no longer checksumed.
|
330
382
|
@file.stubs(:md5_file).returns(@checksum) #
|
331
383
|
|
@@ -356,9 +408,8 @@ describe Puppet::FileServing::Metadata, " when pointing to a link", :if => Puppe
|
|
356
408
|
path = "/base/path/my/file"
|
357
409
|
@file = Puppet::FileServing::Metadata.new(path, :links => :follow)
|
358
410
|
stat = stub("stat", :uid => 1, :gid => 2, :ftype => "file", :mode => 0755)
|
359
|
-
|
360
|
-
Puppet::FileSystem
|
361
|
-
mocked_file.expects(:readlink).never
|
411
|
+
Puppet::FileSystem.expects(:stat).with(path).at_least_once.returns stat
|
412
|
+
Puppet::FileSystem.expects(:readlink).never
|
362
413
|
|
363
414
|
if Puppet.features.microsoft_windows?
|
364
415
|
win_stat = stub('win_stat', :owner => 'snarf', :group => 'thundercats',
|
@@ -85,7 +85,7 @@ describe Puppet::FileServing::Mount::File do
|
|
85
85
|
include FileServingMountTesting
|
86
86
|
|
87
87
|
before do
|
88
|
-
Puppet::FileSystem
|
88
|
+
Puppet::FileSystem.stubs(:exist?).returns(true)
|
89
89
|
FileTest.stubs(:directory?).returns(true)
|
90
90
|
FileTest.stubs(:readable?).returns(true)
|
91
91
|
@mount = Puppet::FileServing::Mount::File.new("test")
|
@@ -95,12 +95,12 @@ describe Puppet::FileServing::Mount::File do
|
|
95
95
|
end
|
96
96
|
|
97
97
|
it "should return nil if the file is absent" do
|
98
|
-
Puppet::FileSystem
|
98
|
+
Puppet::FileSystem.stubs(:exist?).returns(false)
|
99
99
|
@mount.complete_path("/my/path", nil).should be_nil
|
100
100
|
end
|
101
101
|
|
102
102
|
it "should write a log message if the file is absent" do
|
103
|
-
Puppet::FileSystem
|
103
|
+
Puppet::FileSystem.stubs(:exist?).returns(false)
|
104
104
|
|
105
105
|
Puppet.expects(:info).with("File does not exist or is not accessible: /mount/my/path")
|
106
106
|
|
@@ -108,12 +108,12 @@ describe Puppet::FileServing::Mount::File do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should return the file path if the file is present" do
|
111
|
-
Puppet::FileSystem
|
111
|
+
Puppet::FileSystem.stubs(:exist?).with("/my/path").returns(true)
|
112
112
|
@mount.complete_path("/my/path", nil).should == "/mount/my/path"
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should treat a nil file name as the path to the mount itself" do
|
116
|
-
Puppet::FileSystem
|
116
|
+
Puppet::FileSystem.stubs(:exist?).returns(true)
|
117
117
|
@mount.complete_path(nil, nil).should == "/mount"
|
118
118
|
end
|
119
119
|
|
@@ -141,7 +141,7 @@ describe Puppet::FileServing::Mount::File do
|
|
141
141
|
include FileServingMountTesting
|
142
142
|
|
143
143
|
before do
|
144
|
-
Puppet::FileSystem
|
144
|
+
Puppet::FileSystem.stubs(:exist?).returns(true)
|
145
145
|
FileTest.stubs(:directory?).returns(true)
|
146
146
|
FileTest.stubs(:readable?).returns(true)
|
147
147
|
@mount = Puppet::FileServing::Mount::File.new("test")
|
@@ -153,7 +153,7 @@ describe Puppet::FileServing::Mount::File do
|
|
153
153
|
end
|
154
154
|
|
155
155
|
it "should return the results of the complete file path" do
|
156
|
-
Puppet::FileSystem
|
156
|
+
Puppet::FileSystem.stubs(:exist?).returns(false)
|
157
157
|
@mount.expects(:complete_path).with("/my/path", "foo").returns "eh"
|
158
158
|
@mount.find("/my/path", @request).should == "eh"
|
159
159
|
end
|
@@ -163,7 +163,7 @@ describe Puppet::FileServing::Mount::File do
|
|
163
163
|
include FileServingMountTesting
|
164
164
|
|
165
165
|
before do
|
166
|
-
Puppet::FileSystem
|
166
|
+
Puppet::FileSystem.stubs(:exist?).returns(true)
|
167
167
|
FileTest.stubs(:directory?).returns(true)
|
168
168
|
FileTest.stubs(:readable?).returns(true)
|
169
169
|
@mount = Puppet::FileServing::Mount::File.new("test")
|
@@ -175,13 +175,13 @@ describe Puppet::FileServing::Mount::File do
|
|
175
175
|
end
|
176
176
|
|
177
177
|
it "should return the results of the complete file path as an array" do
|
178
|
-
Puppet::FileSystem
|
178
|
+
Puppet::FileSystem.stubs(:exist?).returns(false)
|
179
179
|
@mount.expects(:complete_path).with("/my/path", "foo").returns "eh"
|
180
180
|
@mount.search("/my/path", @request).should == ["eh"]
|
181
181
|
end
|
182
182
|
|
183
183
|
it "should return nil if the complete path is nil" do
|
184
|
-
Puppet::FileSystem
|
184
|
+
Puppet::FileSystem.stubs(:exist?).returns(false)
|
185
185
|
@mount.expects(:complete_path).with("/my/path", "foo").returns nil
|
186
186
|
@mount.search("/my/path", @request).should be_nil
|
187
187
|
end
|
@@ -12,7 +12,7 @@ describe Puppet::FileSystem::Tempfile do
|
|
12
12
|
file.write("stuff")
|
13
13
|
file.flush
|
14
14
|
|
15
|
-
expect(Puppet::FileSystem
|
15
|
+
expect(Puppet::FileSystem.read(file.path)).to eq("stuff")
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -29,7 +29,7 @@ describe Puppet::FileSystem::Tempfile do
|
|
29
29
|
file.path
|
30
30
|
end
|
31
31
|
|
32
|
-
expect(Puppet::FileSystem
|
32
|
+
expect(Puppet::FileSystem.exist?(filename)).to be_false
|
33
33
|
end
|
34
34
|
|
35
35
|
it "unlinks the temporary file even if the block raises an error" do
|
@@ -43,6 +43,6 @@ describe Puppet::FileSystem::Tempfile do
|
|
43
43
|
rescue
|
44
44
|
end
|
45
45
|
|
46
|
-
expect(Puppet::FileSystem
|
46
|
+
expect(Puppet::FileSystem.exist?(filename)).to be_false
|
47
47
|
end
|
48
48
|
end
|
@@ -0,0 +1,508 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/file_system'
|
3
|
+
require 'puppet/util/platform'
|
4
|
+
|
5
|
+
describe "Puppet::FileSystem" do
|
6
|
+
include PuppetSpec::Files
|
7
|
+
|
8
|
+
context "#exclusive_open" do
|
9
|
+
it "opens ands allows updating of an existing file" do
|
10
|
+
file = file_containing("file_to_update", "the contents")
|
11
|
+
|
12
|
+
Puppet::FileSystem.exclusive_open(file, 0660, 'r+') do |fh|
|
13
|
+
old = fh.read
|
14
|
+
fh.truncate(0)
|
15
|
+
fh.rewind
|
16
|
+
fh.write("updated #{old}")
|
17
|
+
end
|
18
|
+
|
19
|
+
expect(Puppet::FileSystem.read(file)).to eq("updated the contents")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "opens, creates ands allows updating of a new file" do
|
23
|
+
file = tmpfile("file_to_update")
|
24
|
+
|
25
|
+
Puppet::FileSystem.exclusive_open(file, 0660, 'w') do |fh|
|
26
|
+
fh.write("updated new file")
|
27
|
+
end
|
28
|
+
|
29
|
+
expect(Puppet::FileSystem.read(file)).to eq("updated new file")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "excludes other processes from updating at the same time", :unless => Puppet::Util::Platform.windows? do
|
33
|
+
file = file_containing("file_to_update", "0")
|
34
|
+
|
35
|
+
increment_counter_in_multiple_processes(file, 5, 'r+')
|
36
|
+
|
37
|
+
expect(Puppet::FileSystem.read(file)).to eq("5")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "excludes other processes from updating at the same time even when creating the file", :unless => Puppet::Util::Platform.windows? do
|
41
|
+
file = tmpfile("file_to_update")
|
42
|
+
|
43
|
+
increment_counter_in_multiple_processes(file, 5, 'a+')
|
44
|
+
|
45
|
+
expect(Puppet::FileSystem.read(file)).to eq("5")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "times out if the lock cannot be aquired in a specified amount of time", :unless => Puppet::Util::Platform.windows? do
|
49
|
+
file = tmpfile("file_to_update")
|
50
|
+
|
51
|
+
child = spawn_process_that_locks(file)
|
52
|
+
|
53
|
+
expect do
|
54
|
+
Puppet::FileSystem.exclusive_open(file, 0666, 'a', 0.1) do |f|
|
55
|
+
end
|
56
|
+
end.to raise_error(Timeout::Error)
|
57
|
+
|
58
|
+
Process.kill(9, child)
|
59
|
+
end
|
60
|
+
|
61
|
+
def spawn_process_that_locks(file)
|
62
|
+
read, write = IO.pipe
|
63
|
+
|
64
|
+
child = Kernel.fork do
|
65
|
+
read.close
|
66
|
+
Puppet::FileSystem.exclusive_open(file, 0666, 'a') do |fh|
|
67
|
+
write.write(true)
|
68
|
+
write.close
|
69
|
+
sleep 10
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
write.close
|
74
|
+
read.read
|
75
|
+
read.close
|
76
|
+
|
77
|
+
child
|
78
|
+
end
|
79
|
+
|
80
|
+
def increment_counter_in_multiple_processes(file, num_procs, options)
|
81
|
+
children = []
|
82
|
+
num_procs.times do
|
83
|
+
children << Kernel.fork do
|
84
|
+
Puppet::FileSystem.exclusive_open(file, 0660, options) do |fh|
|
85
|
+
fh.rewind
|
86
|
+
contents = (fh.read || 0).to_i
|
87
|
+
fh.truncate(0)
|
88
|
+
fh.rewind
|
89
|
+
fh.write((contents + 1).to_s)
|
90
|
+
end
|
91
|
+
exit(0)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
children.each { |pid| Process.wait(pid) }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "symlink",
|
100
|
+
:if => ! Puppet.features.manages_symlinks? &&
|
101
|
+
Puppet.features.microsoft_windows? do
|
102
|
+
|
103
|
+
let(:file) { tmpfile("somefile") }
|
104
|
+
let(:missing_file) { tmpfile("missingfile") }
|
105
|
+
let(:expected_msg) { "This version of Windows does not support symlinks. Windows Vista / 2008 or higher is required." }
|
106
|
+
|
107
|
+
before :each do
|
108
|
+
FileUtils.touch(file)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should raise an error when trying to create a symlink" do
|
112
|
+
expect { Puppet::FileSystem.symlink(file, 'foo') }.to raise_error(Puppet::Util::Windows::Error)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should return false when trying to check if a path is a symlink" do
|
116
|
+
Puppet::FileSystem.symlink?(file).should be_false
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should raise an error when trying to read a symlink" do
|
120
|
+
expect { Puppet::FileSystem.readlink(file) }.to raise_error(Puppet::Util::Windows::Error)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return a File::Stat instance when calling stat on an existing file" do
|
124
|
+
Puppet::FileSystem.stat(file).should be_instance_of(File::Stat)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should raise Errno::ENOENT when calling stat on a missing file" do
|
128
|
+
expect { Puppet::FileSystem.stat(missing_file) }.to raise_error(Errno::ENOENT)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should fall back to stat when trying to lstat a file" do
|
132
|
+
Puppet::Util::Windows::File.expects(:stat).with(Puppet::FileSystem.assert_path(file))
|
133
|
+
|
134
|
+
Puppet::FileSystem.lstat(file)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "symlink", :if => Puppet.features.manages_symlinks? do
|
139
|
+
|
140
|
+
let(:file) { tmpfile("somefile") }
|
141
|
+
let(:missing_file) { tmpfile("missingfile") }
|
142
|
+
let(:dir) { tmpdir("somedir") }
|
143
|
+
|
144
|
+
before :each do
|
145
|
+
FileUtils.touch(file)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should return true for exist? on a present file" do
|
149
|
+
Puppet::FileSystem.exist?(file).should be_true
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should return true for file? on a present file" do
|
153
|
+
Puppet::FileSystem.file?(file).should be_true
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should return false for exist? on a non-existant file" do
|
157
|
+
Puppet::FileSystem.exist?(missing_file).should be_false
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should return true for exist? on a present directory" do
|
161
|
+
Puppet::FileSystem.exist?(dir).should be_true
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should return false for exist? on a dangling symlink" do
|
165
|
+
symlink = tmpfile("somefile_link")
|
166
|
+
Puppet::FileSystem.symlink(missing_file, symlink)
|
167
|
+
|
168
|
+
Puppet::FileSystem.exist?(missing_file).should be_false
|
169
|
+
Puppet::FileSystem.exist?(symlink).should be_false
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should return true for exist? on valid symlinks" do
|
173
|
+
[file, dir].each do |target|
|
174
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(target).to_s}_link")
|
175
|
+
Puppet::FileSystem.symlink(target, symlink)
|
176
|
+
|
177
|
+
Puppet::FileSystem.exist?(target).should be_true
|
178
|
+
Puppet::FileSystem.exist?(symlink).should be_true
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should not create a symlink when the :noop option is specified" do
|
183
|
+
[file, dir].each do |target|
|
184
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(target)}_link")
|
185
|
+
Puppet::FileSystem.symlink(target, symlink, { :noop => true })
|
186
|
+
|
187
|
+
Puppet::FileSystem.exist?(target).should be_true
|
188
|
+
Puppet::FileSystem.exist?(symlink).should be_false
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should raise Errno::EEXIST if trying to create a file / directory symlink when the symlink path already exists as a file" do
|
193
|
+
existing_file = tmpfile("#{Puppet::FileSystem.basename(file)}_link")
|
194
|
+
FileUtils.touch(existing_file)
|
195
|
+
|
196
|
+
[file, dir].each do |target|
|
197
|
+
expect { Puppet::FileSystem.symlink(target, existing_file) }.to raise_error(Errno::EEXIST)
|
198
|
+
|
199
|
+
Puppet::FileSystem.exist?(existing_file).should be_true
|
200
|
+
Puppet::FileSystem.symlink?(existing_file).should be_false
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should silently fail if trying to create a file / directory symlink when the symlink path already exists as a directory" do
|
205
|
+
existing_dir = tmpdir("#{Puppet::FileSystem.basename(file)}_dir")
|
206
|
+
|
207
|
+
[file, dir].each do |target|
|
208
|
+
Puppet::FileSystem.symlink(target, existing_dir).should == 0
|
209
|
+
|
210
|
+
Puppet::FileSystem.exist?(existing_dir).should be_true
|
211
|
+
File.directory?(existing_dir).should be_true
|
212
|
+
Puppet::FileSystem.symlink?(existing_dir).should be_false
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should silently fail to modify an existing directory symlink to reference a new file or directory" do
|
217
|
+
[file, dir].each do |target|
|
218
|
+
existing_dir = tmpdir("#{Puppet::FileSystem.basename(target)}_dir")
|
219
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(existing_dir)}_link")
|
220
|
+
Puppet::FileSystem.symlink(existing_dir, symlink)
|
221
|
+
|
222
|
+
Puppet::FileSystem.readlink(symlink).should == Puppet::FileSystem.path_string(existing_dir)
|
223
|
+
|
224
|
+
# now try to point it at the new target, no error raised, but file system unchanged
|
225
|
+
Puppet::FileSystem.symlink(target, symlink).should == 0
|
226
|
+
Puppet::FileSystem.readlink(symlink).should == existing_dir.to_s
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should raise Errno::EEXIST if trying to modify a file symlink to reference a new file or directory" do
|
231
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(file)}_link")
|
232
|
+
file_2 = tmpfile("#{Puppet::FileSystem.basename(file)}_2")
|
233
|
+
FileUtils.touch(file_2)
|
234
|
+
# symlink -> file_2
|
235
|
+
Puppet::FileSystem.symlink(file_2, symlink)
|
236
|
+
|
237
|
+
[file, dir].each do |target|
|
238
|
+
expect { Puppet::FileSystem.symlink(target, symlink) }.to raise_error(Errno::EEXIST)
|
239
|
+
Puppet::FileSystem.readlink(symlink).should == file_2.to_s
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should delete the existing file when creating a file / directory symlink with :force when the symlink path exists as a file" do
|
244
|
+
[file, dir].each do |target|
|
245
|
+
existing_file = tmpfile("#{Puppet::FileSystem.basename(target)}_existing")
|
246
|
+
FileUtils.touch(existing_file)
|
247
|
+
Puppet::FileSystem.symlink?(existing_file).should be_false
|
248
|
+
|
249
|
+
Puppet::FileSystem.symlink(target, existing_file, { :force => true })
|
250
|
+
|
251
|
+
Puppet::FileSystem.symlink?(existing_file).should be_true
|
252
|
+
Puppet::FileSystem.readlink(existing_file).should == target.to_s
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should modify an existing file symlink when using :force to reference a new file or directory" do
|
257
|
+
[file, dir].each do |target|
|
258
|
+
existing_file = tmpfile("#{Puppet::FileSystem.basename(target)}_existing")
|
259
|
+
FileUtils.touch(existing_file)
|
260
|
+
existing_symlink = tmpfile("#{Puppet::FileSystem.basename(existing_file)}_link")
|
261
|
+
Puppet::FileSystem.symlink(existing_file, existing_symlink)
|
262
|
+
|
263
|
+
Puppet::FileSystem.readlink(existing_symlink).should == existing_file.to_s
|
264
|
+
|
265
|
+
Puppet::FileSystem.symlink(target, existing_symlink, { :force => true })
|
266
|
+
|
267
|
+
Puppet::FileSystem.readlink(existing_symlink).should == target.to_s
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
it "should silently fail if trying to overwrite an existing directory with a new symlink when using :force to reference a file or directory" do
|
272
|
+
[file, dir].each do |target|
|
273
|
+
existing_dir = tmpdir("#{Puppet::FileSystem.basename(target)}_existing")
|
274
|
+
|
275
|
+
Puppet::FileSystem.symlink(target, existing_dir, { :force => true }).should == 0
|
276
|
+
|
277
|
+
Puppet::FileSystem.symlink?(existing_dir).should be_false
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should silently fail if trying to modify an existing directory symlink when using :force to reference a new file or directory" do
|
282
|
+
[file, dir].each do |target|
|
283
|
+
existing_dir = tmpdir("#{Puppet::FileSystem.basename(target)}_existing")
|
284
|
+
existing_symlink = tmpfile("#{Puppet::FileSystem.basename(existing_dir)}_link")
|
285
|
+
Puppet::FileSystem.symlink(existing_dir, existing_symlink)
|
286
|
+
|
287
|
+
Puppet::FileSystem.readlink(existing_symlink).should == existing_dir.to_s
|
288
|
+
|
289
|
+
Puppet::FileSystem.symlink(target, existing_symlink, { :force => true }).should == 0
|
290
|
+
|
291
|
+
Puppet::FileSystem.readlink(existing_symlink).should == existing_dir.to_s
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
it "should accept a string, Pathname or object with to_str (Puppet::Util::WatchedFile) for exist?" do
|
296
|
+
[ tmpfile('bogus1'),
|
297
|
+
Pathname.new(tmpfile('bogus2')),
|
298
|
+
Puppet::Util::WatchedFile.new(tmpfile('bogus3'))
|
299
|
+
].each { |f| Puppet::FileSystem.exist?(f).should be_false }
|
300
|
+
end
|
301
|
+
|
302
|
+
it "should return a File::Stat instance when calling stat on an existing file" do
|
303
|
+
Puppet::FileSystem.stat(file).should be_instance_of(File::Stat)
|
304
|
+
end
|
305
|
+
|
306
|
+
it "should raise Errno::ENOENT when calling stat on a missing file" do
|
307
|
+
expect { Puppet::FileSystem.stat(missing_file) }.to raise_error(Errno::ENOENT)
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should be able to create a symlink, and verify it with symlink?" do
|
311
|
+
symlink = tmpfile("somefile_link")
|
312
|
+
Puppet::FileSystem.symlink(file, symlink)
|
313
|
+
|
314
|
+
Puppet::FileSystem.symlink?(symlink).should be_true
|
315
|
+
end
|
316
|
+
|
317
|
+
it "should report symlink? as false on file, directory and missing files" do
|
318
|
+
[file, dir, missing_file].each do |f|
|
319
|
+
Puppet::FileSystem.symlink?(f).should be_false
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
it "should return a File::Stat with ftype 'link' when calling lstat on a symlink pointing to existing file" do
|
324
|
+
symlink = tmpfile("somefile_link")
|
325
|
+
Puppet::FileSystem.symlink(file, symlink)
|
326
|
+
|
327
|
+
stat = Puppet::FileSystem.lstat(symlink)
|
328
|
+
stat.should be_instance_of(File::Stat)
|
329
|
+
stat.ftype.should == 'link'
|
330
|
+
end
|
331
|
+
|
332
|
+
it "should return a File::Stat of ftype 'link' when calling lstat on a symlink pointing to missing file" do
|
333
|
+
symlink = tmpfile("somefile_link")
|
334
|
+
Puppet::FileSystem.symlink(missing_file, symlink)
|
335
|
+
|
336
|
+
stat = Puppet::FileSystem.lstat(symlink)
|
337
|
+
stat.should be_instance_of(File::Stat)
|
338
|
+
stat.ftype.should == 'link'
|
339
|
+
end
|
340
|
+
|
341
|
+
it "should return a File::Stat of ftype 'file' when calling stat on a symlink pointing to existing file" do
|
342
|
+
symlink = tmpfile("somefile_link")
|
343
|
+
Puppet::FileSystem.symlink(file, symlink)
|
344
|
+
|
345
|
+
stat = Puppet::FileSystem.stat(symlink)
|
346
|
+
stat.should be_instance_of(File::Stat)
|
347
|
+
stat.ftype.should == 'file'
|
348
|
+
end
|
349
|
+
|
350
|
+
it "should return a File::Stat of ftype 'directory' when calling stat on a symlink pointing to existing directory" do
|
351
|
+
symlink = tmpfile("somefile_link")
|
352
|
+
Puppet::FileSystem.symlink(dir, symlink)
|
353
|
+
|
354
|
+
stat = Puppet::FileSystem.stat(symlink)
|
355
|
+
stat.should be_instance_of(File::Stat)
|
356
|
+
stat.ftype.should == 'directory'
|
357
|
+
|
358
|
+
# on Windows, this won't get cleaned up if still linked
|
359
|
+
Puppet::FileSystem.unlink(symlink)
|
360
|
+
end
|
361
|
+
|
362
|
+
it "should return a File::Stat of ftype 'file' when calling stat on a symlink pointing to another symlink" do
|
363
|
+
# point symlink -> file
|
364
|
+
symlink = tmpfile("somefile_link")
|
365
|
+
Puppet::FileSystem.symlink(file, symlink)
|
366
|
+
|
367
|
+
# point symlink2 -> symlink
|
368
|
+
symlink2 = tmpfile("somefile_link2")
|
369
|
+
Puppet::FileSystem.symlink(symlink, symlink2)
|
370
|
+
|
371
|
+
Puppet::FileSystem.stat(symlink2).ftype.should == 'file'
|
372
|
+
end
|
373
|
+
|
374
|
+
|
375
|
+
it "should raise Errno::ENOENT when calling stat on a dangling symlink" do
|
376
|
+
symlink = tmpfile("somefile_link")
|
377
|
+
Puppet::FileSystem.symlink(missing_file, symlink)
|
378
|
+
|
379
|
+
expect { Puppet::FileSystem.stat(symlink) }.to raise_error(Errno::ENOENT)
|
380
|
+
end
|
381
|
+
|
382
|
+
it "should be able to readlink to resolve the physical path to a symlink" do
|
383
|
+
symlink = tmpfile("somefile_link")
|
384
|
+
Puppet::FileSystem.symlink(file, symlink)
|
385
|
+
|
386
|
+
Puppet::FileSystem.exist?(file).should be_true
|
387
|
+
Puppet::FileSystem.readlink(symlink).should == file.to_s
|
388
|
+
end
|
389
|
+
|
390
|
+
it "should not resolve entire symlink chain with readlink on a symlink'd symlink" do
|
391
|
+
# point symlink -> file
|
392
|
+
symlink = tmpfile("somefile_link")
|
393
|
+
Puppet::FileSystem.symlink(file, symlink)
|
394
|
+
|
395
|
+
# point symlink2 -> symlink
|
396
|
+
symlink2 = tmpfile("somefile_link2")
|
397
|
+
Puppet::FileSystem.symlink(symlink, symlink2)
|
398
|
+
|
399
|
+
Puppet::FileSystem.exist?(file).should be_true
|
400
|
+
Puppet::FileSystem.readlink(symlink2).should == symlink.to_s
|
401
|
+
end
|
402
|
+
|
403
|
+
it "should be able to readlink to resolve the physical path to a dangling symlink" do
|
404
|
+
symlink = tmpfile("somefile_link")
|
405
|
+
Puppet::FileSystem.symlink(missing_file, symlink)
|
406
|
+
|
407
|
+
Puppet::FileSystem.exist?(missing_file).should be_false
|
408
|
+
Puppet::FileSystem.readlink(symlink).should == missing_file.to_s
|
409
|
+
end
|
410
|
+
|
411
|
+
it "should delete only the symlink and not the target when calling unlink instance method" do
|
412
|
+
[file, dir].each do |target|
|
413
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(target)}_link")
|
414
|
+
Puppet::FileSystem.symlink(target, symlink)
|
415
|
+
|
416
|
+
Puppet::FileSystem.exist?(target).should be_true
|
417
|
+
Puppet::FileSystem.readlink(symlink).should == target.to_s
|
418
|
+
|
419
|
+
Puppet::FileSystem.unlink(symlink).should == 1 # count of files
|
420
|
+
|
421
|
+
Puppet::FileSystem.exist?(target).should be_true
|
422
|
+
Puppet::FileSystem.exist?(symlink).should be_false
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
it "should delete only the symlink and not the target when calling unlink class method" do
|
427
|
+
[file, dir].each do |target|
|
428
|
+
symlink = tmpfile("#{Puppet::FileSystem.basename(target)}_link")
|
429
|
+
Puppet::FileSystem.symlink(target, symlink)
|
430
|
+
|
431
|
+
Puppet::FileSystem.exist?(target).should be_true
|
432
|
+
Puppet::FileSystem.readlink(symlink).should == target.to_s
|
433
|
+
|
434
|
+
Puppet::FileSystem.unlink(symlink).should == 1 # count of files
|
435
|
+
|
436
|
+
Puppet::FileSystem.exist?(target).should be_true
|
437
|
+
Puppet::FileSystem.exist?(symlink).should be_false
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
describe "unlink" do
|
442
|
+
it "should delete files with unlink" do
|
443
|
+
Puppet::FileSystem.exist?(file).should be_true
|
444
|
+
|
445
|
+
Puppet::FileSystem.unlink(file).should == 1 # count of files
|
446
|
+
|
447
|
+
Puppet::FileSystem.exist?(file).should be_false
|
448
|
+
end
|
449
|
+
|
450
|
+
it "should delete files with unlink class method" do
|
451
|
+
Puppet::FileSystem.exist?(file).should be_true
|
452
|
+
|
453
|
+
Puppet::FileSystem.unlink(file).should == 1 # count of files
|
454
|
+
|
455
|
+
Puppet::FileSystem.exist?(file).should be_false
|
456
|
+
end
|
457
|
+
|
458
|
+
it "should delete multiple files with unlink class method" do
|
459
|
+
paths = (1..3).collect do |i|
|
460
|
+
f = tmpfile("somefile_#{i}")
|
461
|
+
FileUtils.touch(f)
|
462
|
+
Puppet::FileSystem.exist?(f).should be_true
|
463
|
+
f.to_s
|
464
|
+
end
|
465
|
+
|
466
|
+
Puppet::FileSystem.unlink(*paths).should == 3 # count of files
|
467
|
+
|
468
|
+
paths.each { |p| Puppet::FileSystem.exist?(p).should be_false }
|
469
|
+
end
|
470
|
+
|
471
|
+
it "should raise Errno::EPERM or Errno::EISDIR when trying to delete a directory with the unlink class method" do
|
472
|
+
Puppet::FileSystem.exist?(dir).should be_true
|
473
|
+
|
474
|
+
ex = nil
|
475
|
+
begin
|
476
|
+
Puppet::FileSystem.unlink(dir)
|
477
|
+
rescue Exception => e
|
478
|
+
ex = e
|
479
|
+
end
|
480
|
+
|
481
|
+
[
|
482
|
+
Errno::EPERM, # Windows and OSX
|
483
|
+
Errno::EISDIR # Linux
|
484
|
+
].should include(ex.class)
|
485
|
+
|
486
|
+
Puppet::FileSystem.exist?(dir).should be_true
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
describe "exclusive_create" do
|
491
|
+
it "should create a file that doesn't exist" do
|
492
|
+
Puppet::FileSystem.exist?(missing_file).should be_false
|
493
|
+
|
494
|
+
Puppet::FileSystem.exclusive_create(missing_file, nil) {}
|
495
|
+
|
496
|
+
Puppet::FileSystem.exist?(missing_file).should be_true
|
497
|
+
end
|
498
|
+
|
499
|
+
it "should raise Errno::EEXIST creating a file that does exist" do
|
500
|
+
Puppet::FileSystem.exist?(file).should be_true
|
501
|
+
|
502
|
+
expect do
|
503
|
+
Puppet::FileSystem.exclusive_create(file, nil) {}
|
504
|
+
end.to raise_error(Errno::EEXIST)
|
505
|
+
end
|
506
|
+
end
|
507
|
+
end
|
508
|
+
end
|