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
@@ -10,11 +10,21 @@ describe Puppet::Network::Authorization do
|
|
10
10
|
subject { AuthTest.new }
|
11
11
|
|
12
12
|
describe "when creating an authconfig object" do
|
13
|
-
|
13
|
+
before :each do
|
14
14
|
# Other tests may have created an authconfig, so we have to undo that.
|
15
|
+
@orig_auth_config = Puppet::Network::AuthConfigLoader.instance_variable_get(:@auth_config)
|
16
|
+
@orig_auth_config_file = Puppet::Network::AuthConfigLoader.instance_variable_get(:@auth_config_file)
|
17
|
+
|
15
18
|
Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config, nil)
|
16
19
|
Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config_file, nil)
|
20
|
+
end
|
17
21
|
|
22
|
+
after :each do
|
23
|
+
Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config, @orig_auth_config)
|
24
|
+
Puppet::Network::AuthConfigLoader.instance_variable_set(:@auth_config_file, @orig_auth_config_file)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "creates default ACL entries if no file has been read" do
|
18
28
|
Puppet::Network::AuthConfigParser.expects(:new_from_file).raises Errno::ENOENT
|
19
29
|
Puppet::Network::AuthConfig.any_instance.expects(:insert_default_acl)
|
20
30
|
|
@@ -9,7 +9,7 @@ class PsonTest
|
|
9
9
|
string == other.string
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.
|
12
|
+
def self.from_data_hash(data)
|
13
13
|
new(data)
|
14
14
|
end
|
15
15
|
|
@@ -43,11 +43,34 @@ describe "Puppet Network Format" do
|
|
43
43
|
@msgpack.weight.should == 20
|
44
44
|
end
|
45
45
|
|
46
|
-
it "should fail when one element does not have a
|
46
|
+
it "should fail when one element does not have a from_data_hash" do
|
47
47
|
expect do
|
48
48
|
@msgpack.intern_multiple(Hash, MessagePack.pack(["foo"]))
|
49
49
|
end.to raise_error(NoMethodError)
|
50
50
|
end
|
51
|
+
|
52
|
+
it "should be able to serialize a catalog" do
|
53
|
+
cat = Puppet::Resource::Catalog.new('foo')
|
54
|
+
cat.add_resource(Puppet::Resource.new(:file, 'my_file'))
|
55
|
+
catunpack = MessagePack.unpack(cat.to_msgpack)
|
56
|
+
catunpack.should include(
|
57
|
+
"tags"=>[],
|
58
|
+
"name"=>"foo",
|
59
|
+
"version"=>nil,
|
60
|
+
"environment"=>"",
|
61
|
+
"edges"=>[],
|
62
|
+
"classes"=>[]
|
63
|
+
)
|
64
|
+
catunpack["resources"][0].should include(
|
65
|
+
"type"=>"File",
|
66
|
+
"title"=>"my_file",
|
67
|
+
"exported"=>false
|
68
|
+
)
|
69
|
+
catunpack["resources"][0]["tags"].should include(
|
70
|
+
"file",
|
71
|
+
"my_file"
|
72
|
+
)
|
73
|
+
end
|
51
74
|
end
|
52
75
|
|
53
76
|
it "should include a yaml format" do
|
@@ -293,10 +316,10 @@ describe "Puppet Network Format" do
|
|
293
316
|
@pson.render_multiple(instances).should == "foo"
|
294
317
|
end
|
295
318
|
|
296
|
-
it "should intern by calling 'PSON.parse' on the text and then using
|
319
|
+
it "should intern by calling 'PSON.parse' on the text and then using from_data_hash to convert the data into an instance" do
|
297
320
|
text = "foo"
|
298
321
|
PSON.expects(:parse).with("foo").returns("type" => "PsonTest", "data" => "foo")
|
299
|
-
PsonTest.expects(:
|
322
|
+
PsonTest.expects(:from_data_hash).with("foo").returns "parsed_pson"
|
300
323
|
@pson.intern(PsonTest, text).should == "parsed_pson"
|
301
324
|
end
|
302
325
|
|
@@ -304,22 +327,22 @@ describe "Puppet Network Format" do
|
|
304
327
|
text = "foo"
|
305
328
|
instance = PsonTest.new("foo")
|
306
329
|
PSON.expects(:parse).with("foo").returns(instance)
|
307
|
-
PsonTest.expects(:
|
330
|
+
PsonTest.expects(:from_data_hash).never
|
308
331
|
@pson.intern(PsonTest, text).should equal(instance)
|
309
332
|
end
|
310
333
|
|
311
|
-
it "should intern by calling 'PSON.parse' on the text and then using
|
334
|
+
it "should intern by calling 'PSON.parse' on the text and then using from_data_hash to convert the actual into an instance if the pson has no class/data separation" do
|
312
335
|
text = "foo"
|
313
336
|
PSON.expects(:parse).with("foo").returns("foo")
|
314
|
-
PsonTest.expects(:
|
337
|
+
PsonTest.expects(:from_data_hash).with("foo").returns "parsed_pson"
|
315
338
|
@pson.intern(PsonTest, text).should == "parsed_pson"
|
316
339
|
end
|
317
340
|
|
318
341
|
it "should intern multiples by parsing the text and using 'class.intern' on each resulting data structure" do
|
319
342
|
text = "foo"
|
320
343
|
PSON.expects(:parse).with("foo").returns ["bar", "baz"]
|
321
|
-
PsonTest.expects(:
|
322
|
-
PsonTest.expects(:
|
344
|
+
PsonTest.expects(:from_data_hash).with("bar").returns "BAR"
|
345
|
+
PsonTest.expects(:from_data_hash).with("baz").returns "BAZ"
|
323
346
|
@pson.intern_multiple(PsonTest, text).should == %w{BAR BAZ}
|
324
347
|
end
|
325
348
|
|
@@ -1,216 +1,519 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
+
require 'puppet/network/http'
|
4
5
|
require 'puppet/network/http/api/v1'
|
5
|
-
|
6
|
-
class V1RestApiTester
|
7
|
-
include Puppet::Network::HTTP::API::V1
|
8
|
-
end
|
6
|
+
require 'puppet/indirector_testing'
|
9
7
|
|
10
8
|
describe Puppet::Network::HTTP::API::V1 do
|
11
|
-
|
12
|
-
|
9
|
+
let(:not_found_code) { Puppet::Network::HTTP::Error::HTTPNotFoundError::CODE }
|
10
|
+
let(:not_acceptable_code) { Puppet::Network::HTTP::Error::HTTPNotAcceptableError::CODE }
|
11
|
+
let(:not_authorized_code) { Puppet::Network::HTTP::Error::HTTPNotAuthorizedError::CODE }
|
12
|
+
|
13
|
+
let(:indirection) { Puppet::IndirectorTesting.indirection }
|
14
|
+
let(:handler) { Puppet::Network::HTTP::API::V1.new }
|
15
|
+
let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
|
16
|
+
|
17
|
+
def a_request_that_heads(data, request = {})
|
18
|
+
Puppet::Network::HTTP::Request.from_hash({
|
19
|
+
:headers => {
|
20
|
+
'accept' => request[:accept_header],
|
21
|
+
'content-type' => "text/yaml", },
|
22
|
+
:method => "HEAD",
|
23
|
+
:path => "/production/#{indirection.name}/#{data.value}",
|
24
|
+
:params => {},
|
25
|
+
})
|
26
|
+
end
|
27
|
+
|
28
|
+
def a_request_that_submits(data, request = {})
|
29
|
+
Puppet::Network::HTTP::Request.from_hash({
|
30
|
+
:headers => {
|
31
|
+
'accept' => request[:accept_header],
|
32
|
+
'content-type' => request[:content_type_header] || "text/yaml", },
|
33
|
+
:method => "PUT",
|
34
|
+
:path => "/production/#{indirection.name}/#{data.value}",
|
35
|
+
:params => {},
|
36
|
+
:body => request[:body] || data.render("text/yaml")
|
37
|
+
})
|
38
|
+
end
|
39
|
+
|
40
|
+
def a_request_that_destroys(data, request = {})
|
41
|
+
Puppet::Network::HTTP::Request.from_hash({
|
42
|
+
:headers => {
|
43
|
+
'accept' => request[:accept_header],
|
44
|
+
'content-type' => "text/yaml", },
|
45
|
+
:method => "DELETE",
|
46
|
+
:path => "/production/#{indirection.name}/#{data.value}",
|
47
|
+
:params => {},
|
48
|
+
:body => ''
|
49
|
+
})
|
13
50
|
end
|
14
51
|
|
15
|
-
|
16
|
-
|
52
|
+
def a_request_that_finds(data, request = {})
|
53
|
+
Puppet::Network::HTTP::Request.from_hash({
|
54
|
+
:headers => {
|
55
|
+
'accept' => request[:accept_header],
|
56
|
+
'content-type' => "text/yaml", },
|
57
|
+
:method => "GET",
|
58
|
+
:path => "/production/#{indirection.name}/#{data.value}",
|
59
|
+
:params => {},
|
60
|
+
:body => ''
|
61
|
+
})
|
17
62
|
end
|
18
63
|
|
19
|
-
|
20
|
-
|
64
|
+
def a_request_that_searches(key, request = {})
|
65
|
+
Puppet::Network::HTTP::Request.from_hash({
|
66
|
+
:headers => {
|
67
|
+
'accept' => request[:accept_header],
|
68
|
+
'content-type' => "text/yaml", },
|
69
|
+
:method => "GET",
|
70
|
+
:path => "/production/#{indirection.name}s/#{key}",
|
71
|
+
:params => {},
|
72
|
+
:body => ''
|
73
|
+
})
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
before do
|
78
|
+
Puppet::IndirectorTesting.indirection.terminus_class = :memory
|
79
|
+
Puppet::IndirectorTesting.indirection.terminus.clear
|
80
|
+
handler.stubs(:check_authorization)
|
81
|
+
handler.stubs(:warn_if_near_expiration)
|
21
82
|
end
|
22
83
|
|
23
84
|
describe "when converting a URI into a request" do
|
24
85
|
before do
|
25
|
-
|
86
|
+
handler.stubs(:handler).returns "foo"
|
26
87
|
end
|
27
88
|
|
28
89
|
it "should require the http method, the URI, and the query parameters" do
|
29
90
|
# Not a terribly useful test, but an important statement for the spec
|
30
|
-
lambda {
|
91
|
+
lambda { handler.uri2indirection("/foo") }.should raise_error(ArgumentError)
|
31
92
|
end
|
32
93
|
|
33
94
|
it "should use the first field of the URI as the environment" do
|
34
|
-
|
95
|
+
handler.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].to_s.should == "env"
|
35
96
|
end
|
36
97
|
|
37
98
|
it "should fail if the environment is not alphanumeric" do
|
38
|
-
lambda {
|
99
|
+
lambda { handler.uri2indirection("GET", "/env ness/foo/bar", {}) }.should raise_error(ArgumentError)
|
39
100
|
end
|
40
101
|
|
41
102
|
it "should use the environment from the URI even if one is specified in the parameters" do
|
42
|
-
|
103
|
+
handler.uri2indirection("GET", "/env/foo/bar", {:environment => "otherenv"})[3][:environment].to_s.should == "env"
|
43
104
|
end
|
44
105
|
|
45
106
|
it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
|
46
|
-
|
107
|
+
handler.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
|
47
108
|
end
|
48
109
|
|
49
110
|
it "should pass allowed parameters through" do
|
50
|
-
|
111
|
+
handler.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
|
51
112
|
end
|
52
113
|
|
53
114
|
it "should return the environment as a Puppet::Node::Environment" do
|
54
|
-
|
115
|
+
handler.uri2indirection("GET", "/env/foo/bar", {})[3][:environment].should be_a Puppet::Node::Environment
|
55
116
|
end
|
56
117
|
|
57
118
|
it "should not pass a buck_path parameter through (See Bugs #13553, #13518, #13511)" do
|
58
|
-
|
119
|
+
handler.uri2indirection("GET", "/env/foo/bar", { :bucket_path => "/malicious/path" })[3].should_not include({ :bucket_path => "/malicious/path" })
|
59
120
|
end
|
60
121
|
|
61
122
|
it "should pass allowed parameters through" do
|
62
|
-
|
123
|
+
handler.uri2indirection("GET", "/env/foo/bar", { :allowed_param => "value" })[3].should include({ :allowed_param => "value" })
|
63
124
|
end
|
64
125
|
|
65
126
|
it "should use the second field of the URI as the indirection name" do
|
66
|
-
|
127
|
+
handler.uri2indirection("GET", "/env/foo/bar", {})[0].should == "foo"
|
67
128
|
end
|
68
129
|
|
69
130
|
it "should fail if the indirection name is not alphanumeric" do
|
70
|
-
lambda {
|
131
|
+
lambda { handler.uri2indirection("GET", "/env/foo ness/bar", {}) }.should raise_error(ArgumentError)
|
71
132
|
end
|
72
133
|
|
73
134
|
it "should use the remainder of the URI as the indirection key" do
|
74
|
-
|
135
|
+
handler.uri2indirection("GET", "/env/foo/bar", {})[2].should == "bar"
|
75
136
|
end
|
76
137
|
|
77
138
|
it "should support the indirection key being a /-separated file path" do
|
78
|
-
|
139
|
+
handler.uri2indirection("GET", "/env/foo/bee/baz/bomb", {})[2].should == "bee/baz/bomb"
|
79
140
|
end
|
80
141
|
|
81
142
|
it "should fail if no indirection key is specified" do
|
82
|
-
lambda {
|
83
|
-
lambda {
|
143
|
+
lambda { handler.uri2indirection("GET", "/env/foo/", {}) }.should raise_error(ArgumentError)
|
144
|
+
lambda { handler.uri2indirection("GET", "/env/foo", {}) }.should raise_error(ArgumentError)
|
84
145
|
end
|
85
146
|
|
86
147
|
it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is singular" do
|
87
|
-
|
148
|
+
handler.uri2indirection("GET", "/env/foo/bar", {})[1].should == :find
|
88
149
|
end
|
89
150
|
|
90
151
|
it "should choose 'find' as the indirection method if the http method is a POST and the indirection name is singular" do
|
91
|
-
|
152
|
+
handler.uri2indirection("POST", "/env/foo/bar", {})[1].should == :find
|
92
153
|
end
|
93
154
|
|
94
155
|
it "should choose 'head' as the indirection method if the http method is a HEAD and the indirection name is singular" do
|
95
|
-
|
156
|
+
handler.uri2indirection("HEAD", "/env/foo/bar", {})[1].should == :head
|
96
157
|
end
|
97
158
|
|
98
159
|
it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is plural" do
|
99
|
-
|
160
|
+
handler.uri2indirection("GET", "/env/foos/bar", {})[1].should == :search
|
100
161
|
end
|
101
162
|
|
102
163
|
it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is facts" do
|
103
|
-
|
164
|
+
handler.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
|
104
165
|
end
|
105
166
|
|
106
167
|
it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is facts" do
|
107
|
-
|
168
|
+
handler.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
|
108
169
|
end
|
109
170
|
|
110
171
|
it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is inventory" do
|
111
|
-
|
172
|
+
handler.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
|
112
173
|
end
|
113
174
|
|
114
175
|
it "should choose 'find' as the indirection method if the http method is a GET and the indirection name is facts" do
|
115
|
-
|
176
|
+
handler.uri2indirection("GET", "/env/facts/bar", {})[1].should == :find
|
116
177
|
end
|
117
178
|
|
118
179
|
it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is facts" do
|
119
|
-
|
180
|
+
handler.uri2indirection("PUT", "/env/facts/bar", {})[1].should == :save
|
120
181
|
end
|
121
182
|
|
122
183
|
it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is inventory" do
|
123
|
-
|
184
|
+
handler.uri2indirection("GET", "/env/inventory/search", {})[1].should == :search
|
124
185
|
end
|
125
186
|
|
126
187
|
it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is facts_search" do
|
127
|
-
|
188
|
+
handler.uri2indirection("GET", "/env/facts_search/bar", {})[1].should == :search
|
128
189
|
end
|
129
190
|
|
130
191
|
it "should change indirection name to 'facts' if the http method is a GET and the indirection name is facts_search" do
|
131
|
-
|
192
|
+
handler.uri2indirection("GET", "/env/facts_search/bar", {})[0].should == 'facts'
|
132
193
|
end
|
133
194
|
|
134
195
|
it "should not change indirection name from 'facts' if the http method is a GET and the indirection name is facts" do
|
135
|
-
|
196
|
+
handler.uri2indirection("GET", "/env/facts/bar", {})[0].should == 'facts'
|
136
197
|
end
|
137
198
|
|
138
199
|
it "should change indirection name to 'status' if the http method is a GET and the indirection name is statuses" do
|
139
|
-
|
200
|
+
handler.uri2indirection("GET", "/env/statuses/bar", {})[0].should == 'status'
|
140
201
|
end
|
141
202
|
|
142
203
|
it "should change indirection name to 'probe' if the http method is a GET and the indirection name is probes" do
|
143
|
-
|
204
|
+
handler.uri2indirection("GET", "/env/probes/bar", {})[0].should == 'probe'
|
144
205
|
end
|
145
206
|
|
146
207
|
it "should choose 'delete' as the indirection method if the http method is a DELETE and the indirection name is singular" do
|
147
|
-
|
208
|
+
handler.uri2indirection("DELETE", "/env/foo/bar", {})[1].should == :destroy
|
148
209
|
end
|
149
210
|
|
150
211
|
it "should choose 'save' as the indirection method if the http method is a PUT and the indirection name is singular" do
|
151
|
-
|
212
|
+
handler.uri2indirection("PUT", "/env/foo/bar", {})[1].should == :save
|
152
213
|
end
|
153
214
|
|
154
215
|
it "should fail if an indirection method cannot be picked" do
|
155
|
-
lambda {
|
216
|
+
lambda { handler.uri2indirection("UPDATE", "/env/foo/bar", {}) }.should raise_error(ArgumentError)
|
156
217
|
end
|
157
218
|
|
158
219
|
it "should URI unescape the indirection key" do
|
159
220
|
escaped = URI.escape("foo bar")
|
160
|
-
indirection_name, method, key, params =
|
221
|
+
indirection_name, method, key, params = handler.uri2indirection("GET", "/env/foo/#{escaped}", {})
|
161
222
|
key.should == "foo bar"
|
162
223
|
end
|
163
224
|
end
|
164
225
|
|
165
226
|
describe "when converting a request into a URI" do
|
166
|
-
|
167
|
-
@request = Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv")
|
168
|
-
end
|
227
|
+
let(:request) { Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv") }
|
169
228
|
|
170
229
|
it "should use the environment as the first field of the URI" do
|
171
|
-
|
230
|
+
handler.class.indirection2uri(request).split("/")[1].should == "myenv"
|
172
231
|
end
|
173
232
|
|
174
233
|
it "should use the indirection as the second field of the URI" do
|
175
|
-
|
234
|
+
handler.class.indirection2uri(request).split("/")[2].should == "foo"
|
176
235
|
end
|
177
236
|
|
178
237
|
it "should pluralize the indirection name if the method is 'search'" do
|
179
|
-
|
180
|
-
|
238
|
+
request.stubs(:method).returns :search
|
239
|
+
handler.class.indirection2uri(request).split("/")[2].should == "foos"
|
181
240
|
end
|
182
241
|
|
183
242
|
it "should use the escaped key as the remainder of the URI" do
|
184
243
|
escaped = URI.escape("with spaces")
|
185
|
-
|
244
|
+
handler.class.indirection2uri(request).split("/")[3].sub(/\?.+/, '').should == escaped
|
186
245
|
end
|
187
246
|
|
188
247
|
it "should add the query string to the URI" do
|
189
|
-
|
190
|
-
|
248
|
+
request.expects(:query_string).returns "?query"
|
249
|
+
handler.class.indirection2uri(request).should =~ /\?query$/
|
191
250
|
end
|
192
251
|
end
|
193
252
|
|
194
253
|
describe "when converting a request into a URI with body" do
|
195
|
-
|
196
|
-
@request = Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv")
|
197
|
-
end
|
254
|
+
let(:request) { Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => "myenv") }
|
198
255
|
|
199
256
|
it "should use the environment as the first field of the URI" do
|
200
|
-
|
257
|
+
handler.class.request_to_uri_and_body(request).first.split("/")[1].should == "myenv"
|
201
258
|
end
|
202
259
|
|
203
260
|
it "should use the indirection as the second field of the URI" do
|
204
|
-
|
261
|
+
handler.class.request_to_uri_and_body(request).first.split("/")[2].should == "foo"
|
205
262
|
end
|
206
263
|
|
207
264
|
it "should use the escaped key as the remainder of the URI" do
|
208
265
|
escaped = URI.escape("with spaces")
|
209
|
-
|
266
|
+
handler.class.request_to_uri_and_body(request).first.split("/")[3].sub(/\?.+/, '').should == escaped
|
210
267
|
end
|
211
268
|
|
212
269
|
it "should return the URI and body separately" do
|
213
|
-
|
270
|
+
handler.class.request_to_uri_and_body(request).should == ["/myenv/foo/with%20spaces", "foo=bar"]
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
describe "when processing a request" do
|
275
|
+
it "should return not_authorized_code if the request is not authorized" do
|
276
|
+
request = a_request_that_heads(Puppet::IndirectorTesting.new("my data"))
|
277
|
+
|
278
|
+
handler.expects(:check_authorization).raises(Puppet::Network::AuthorizationError.new("forbidden"))
|
279
|
+
|
280
|
+
handler.call(request, response)
|
281
|
+
|
282
|
+
expect(response.code).to eq(not_authorized_code)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should return an error code if the indirection does not support remote requests" do
|
286
|
+
request = a_request_that_heads(Puppet::IndirectorTesting.new("my data"))
|
287
|
+
|
288
|
+
indirection.expects(:allow_remote_requests?).returns(false)
|
289
|
+
|
290
|
+
handler.call(request, response)
|
291
|
+
|
292
|
+
expect(response.code).to eq(not_found_code)
|
293
|
+
end
|
294
|
+
|
295
|
+
it "should serialize a controller exception when an exception is thrown while finding the model instance" do
|
296
|
+
request = a_request_that_finds(Puppet::IndirectorTesting.new("key"))
|
297
|
+
handler.expects(:do_find).raises(ArgumentError, "The exception")
|
298
|
+
|
299
|
+
handler.call(request, response)
|
300
|
+
|
301
|
+
expect(response.code).to eq(400)
|
302
|
+
expect(response.body).to eq("The exception")
|
303
|
+
expect(response.type).to eq("text/plain")
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
describe "when finding a model instance" do
|
308
|
+
it "uses the first supported format for the response" do
|
309
|
+
data = Puppet::IndirectorTesting.new("my data")
|
310
|
+
indirection.save(data, "my data")
|
311
|
+
request = a_request_that_finds(data, :accept_header => "unknown, pson, yaml")
|
312
|
+
|
313
|
+
handler.call(request, response)
|
314
|
+
|
315
|
+
expect(response.body).to eq(data.render(:pson))
|
316
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
317
|
+
end
|
318
|
+
|
319
|
+
it "responds with a not_acceptable_code error when no accept header is provided" do
|
320
|
+
data = Puppet::IndirectorTesting.new("my data")
|
321
|
+
indirection.save(data, "my data")
|
322
|
+
request = a_request_that_finds(data, :accept_header => nil)
|
323
|
+
|
324
|
+
handler.call(request, response)
|
325
|
+
|
326
|
+
expect(response.code).to eq(not_acceptable_code)
|
327
|
+
end
|
328
|
+
|
329
|
+
it "raises an error when no accepted formats are known" do
|
330
|
+
data = Puppet::IndirectorTesting.new("my data")
|
331
|
+
indirection.save(data, "my data")
|
332
|
+
request = a_request_that_finds(data, :accept_header => "unknown, also/unknown")
|
333
|
+
|
334
|
+
handler.call(request, response)
|
335
|
+
|
336
|
+
expect(response.code).to eq(not_acceptable_code)
|
337
|
+
end
|
338
|
+
|
339
|
+
it "should pass the result through without rendering it if the result is a string" do
|
340
|
+
data = Puppet::IndirectorTesting.new("my data")
|
341
|
+
data_string = "my data string"
|
342
|
+
request = a_request_that_finds(data, :accept_header => "pson")
|
343
|
+
indirection.expects(:find).returns(data_string)
|
344
|
+
|
345
|
+
handler.call(request, response)
|
346
|
+
|
347
|
+
expect(response.body).to eq(data_string)
|
348
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
349
|
+
end
|
350
|
+
|
351
|
+
it "should return a not_found_code when no model instance can be found" do
|
352
|
+
data = Puppet::IndirectorTesting.new("my data")
|
353
|
+
request = a_request_that_finds(data, :accept_header => "unknown, pson, yaml")
|
354
|
+
|
355
|
+
handler.call(request, response)
|
356
|
+
expect(response.code).to eq(not_found_code)
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
describe "when searching for model instances" do
|
361
|
+
it "uses the first supported format for the response" do
|
362
|
+
data = Puppet::IndirectorTesting.new("my data")
|
363
|
+
indirection.save(data, "my data")
|
364
|
+
request = a_request_that_searches("my", :accept_header => "unknown, pson, yaml")
|
365
|
+
|
366
|
+
handler.call(request, response)
|
367
|
+
|
368
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
369
|
+
expect(response.body).to eq(Puppet::IndirectorTesting.render_multiple(:pson, [data]))
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should return [] when searching returns an empty array" do
|
373
|
+
request = a_request_that_searches("nothing", :accept_header => "unknown, pson, yaml")
|
374
|
+
|
375
|
+
handler.call(request, response)
|
376
|
+
|
377
|
+
expect(response.body).to eq("[]")
|
378
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
379
|
+
end
|
380
|
+
|
381
|
+
it "should return a not_found_code when searching returns nil" do
|
382
|
+
request = a_request_that_searches("nothing", :accept_header => "unknown, pson, yaml")
|
383
|
+
indirection.expects(:search).returns(nil)
|
384
|
+
|
385
|
+
handler.call(request, response)
|
386
|
+
|
387
|
+
expect(response.code).to eq(not_found_code)
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe "when destroying a model instance" do
|
392
|
+
it "destroys the data indicated in the request" do
|
393
|
+
data = Puppet::IndirectorTesting.new("my data")
|
394
|
+
indirection.save(data, "my data")
|
395
|
+
request = a_request_that_destroys(data)
|
396
|
+
|
397
|
+
handler.call(request, response)
|
398
|
+
|
399
|
+
Puppet::IndirectorTesting.indirection.find("my data").should be_nil
|
400
|
+
end
|
401
|
+
|
402
|
+
it "responds with yaml when no Accept header is given" do
|
403
|
+
data = Puppet::IndirectorTesting.new("my data")
|
404
|
+
indirection.save(data, "my data")
|
405
|
+
request = a_request_that_destroys(data, :accept_header => nil)
|
406
|
+
|
407
|
+
handler.call(request, response)
|
408
|
+
|
409
|
+
expect(response.body).to eq(data.render(:yaml))
|
410
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:yaml))
|
411
|
+
end
|
412
|
+
|
413
|
+
it "uses the first supported format for the response" do
|
414
|
+
data = Puppet::IndirectorTesting.new("my data")
|
415
|
+
indirection.save(data, "my data")
|
416
|
+
request = a_request_that_destroys(data, :accept_header => "unknown, pson, yaml")
|
417
|
+
|
418
|
+
handler.call(request, response)
|
419
|
+
|
420
|
+
expect(response.body).to eq(data.render(:pson))
|
421
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
422
|
+
end
|
423
|
+
|
424
|
+
it "raises an error and does not destroy when no accepted formats are known" do
|
425
|
+
data = Puppet::IndirectorTesting.new("my data")
|
426
|
+
indirection.save(data, "my data")
|
427
|
+
request = a_request_that_submits(data, :accept_header => "unknown, also/unknown")
|
428
|
+
|
429
|
+
handler.call(request, response)
|
430
|
+
|
431
|
+
expect(response.code).to eq(not_acceptable_code)
|
432
|
+
Puppet::IndirectorTesting.indirection.find("my data").should_not be_nil
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
describe "when saving a model instance" do
|
437
|
+
it "allows an empty body when the format supports it" do
|
438
|
+
class Puppet::IndirectorTesting::Nonvalidatingmemory < Puppet::IndirectorTesting::Memory
|
439
|
+
def validate_key(_)
|
440
|
+
# nothing
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
indirection.terminus_class = :nonvalidatingmemory
|
445
|
+
|
446
|
+
data = Puppet::IndirectorTesting.new("test")
|
447
|
+
request = a_request_that_submits(data,
|
448
|
+
:content_type_header => "application/x-raw",
|
449
|
+
:body => '')
|
450
|
+
|
451
|
+
handler.call(request, response)
|
452
|
+
|
453
|
+
Puppet::IndirectorTesting.indirection.find("test").name.should == ''
|
454
|
+
end
|
455
|
+
|
456
|
+
it "saves the data sent in the request" do
|
457
|
+
data = Puppet::IndirectorTesting.new("my data")
|
458
|
+
request = a_request_that_submits(data)
|
459
|
+
|
460
|
+
handler.call(request, response)
|
461
|
+
|
462
|
+
saved = Puppet::IndirectorTesting.indirection.find("my data")
|
463
|
+
expect(saved.name).to eq(data.name)
|
464
|
+
end
|
465
|
+
|
466
|
+
it "responds with yaml when no Accept header is given" do
|
467
|
+
data = Puppet::IndirectorTesting.new("my data")
|
468
|
+
request = a_request_that_submits(data, :accept_header => nil)
|
469
|
+
|
470
|
+
handler.call(request, response)
|
471
|
+
|
472
|
+
expect(response.body).to eq(data.render(:yaml))
|
473
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:yaml))
|
474
|
+
end
|
475
|
+
|
476
|
+
it "uses the first supported format for the response" do
|
477
|
+
data = Puppet::IndirectorTesting.new("my data")
|
478
|
+
request = a_request_that_submits(data, :accept_header => "unknown, pson, yaml")
|
479
|
+
|
480
|
+
handler.call(request, response)
|
481
|
+
|
482
|
+
expect(response.body).to eq(data.render(:pson))
|
483
|
+
expect(response.type).to eq(Puppet::Network::FormatHandler.format(:pson))
|
484
|
+
end
|
485
|
+
|
486
|
+
it "raises an error and does not save when no accepted formats are known" do
|
487
|
+
data = Puppet::IndirectorTesting.new("my data")
|
488
|
+
request = a_request_that_submits(data, :accept_header => "unknown, also/unknown")
|
489
|
+
|
490
|
+
handler.call(request, response)
|
491
|
+
|
492
|
+
expect(Puppet::IndirectorTesting.indirection.find("my data")).to be_nil
|
493
|
+
expect(response.code).to eq(not_acceptable_code)
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
describe "when performing head operation" do
|
498
|
+
it "should not generate a response when a model head call succeeds" do
|
499
|
+
data = Puppet::IndirectorTesting.new("my data")
|
500
|
+
indirection.save(data, "my data")
|
501
|
+
request = a_request_that_heads(data)
|
502
|
+
|
503
|
+
handler.call(request, response)
|
504
|
+
|
505
|
+
expect(response.code).to eq(nil)
|
506
|
+
end
|
507
|
+
|
508
|
+
it "should return a not_found_code when the model head call returns false" do
|
509
|
+
data = Puppet::IndirectorTesting.new("my data")
|
510
|
+
request = a_request_that_heads(data)
|
511
|
+
|
512
|
+
handler.call(request, response)
|
513
|
+
|
514
|
+
expect(response.code).to eq(not_found_code)
|
515
|
+
expect(response.type).to eq("text/plain")
|
516
|
+
expect(response.body).to eq("Not Found: Could not find indirector_testing my data")
|
214
517
|
end
|
215
518
|
end
|
216
519
|
end
|