puppet 3.1.1 → 3.2.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 +2 -2
- data/Gemfile +32 -19
- data/README_DEVELOPER.md +332 -14
- data/Rakefile +9 -5
- data/ext/build_defaults.yaml +2 -3
- data/ext/debian/changelog.erb +6 -0
- data/ext/debian/control +6 -6
- data/ext/envpuppet +4 -4
- data/ext/project_data.yaml +1 -0
- data/ext/puppet-nm-dispatcher +13 -0
- data/ext/redhat/puppet.spec.erb +17 -0
- data/ext/suse/client.init +1 -1
- data/ext/systemd/puppetagent.service +2 -2
- data/ext/systemd/puppetmaster.service +2 -2
- data/lib/hiera/scope.rb +29 -11
- data/lib/hiera_puppet.rb +1 -3
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application.rb +2 -2
- data/lib/puppet/application/agent.rb +27 -12
- data/lib/puppet/application/apply.rb +11 -1
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/doc.rb +13 -9
- data/lib/puppet/application/filebucket.rb +0 -1
- data/lib/puppet/application/kick.rb +1 -0
- data/lib/puppet/application/master.rb +16 -8
- data/lib/puppet/daemon.rb +19 -64
- data/lib/puppet/defaults.rb +61 -5
- data/lib/puppet/error.rb +15 -4
- data/lib/puppet/external/nagios/grammar.ry +1 -1
- data/lib/puppet/external/nagios/makefile +1 -1
- data/lib/puppet/external/nagios/parser.rb +185 -618
- data/lib/puppet/external/pson/pure/parser.rb +47 -1
- data/lib/puppet/face/certificate.rb +3 -3
- data/lib/puppet/face/module.rb +1 -1
- data/lib/puppet/face/module/changes.rb +3 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/node/clean.rb +5 -5
- data/lib/puppet/feature/base.rb +3 -1
- data/lib/puppet/feature/libuser.rb +8 -0
- data/lib/puppet/file_serving/fileset.rb +9 -1
- data/lib/puppet/forge.rb +28 -5
- data/lib/puppet/forge/errors.rb +34 -0
- data/lib/puppet/forge/repository.rb +1 -1
- data/lib/puppet/indirector.rb +4 -1
- data/lib/puppet/indirector/catalog/compiler.rb +37 -30
- data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
- data/lib/puppet/indirector/indirection.rb +28 -15
- data/lib/puppet/indirector/rest.rb +18 -10
- data/lib/puppet/interface.rb +11 -4
- data/lib/puppet/interface/action.rb +1 -3
- data/lib/puppet/interface/action_builder.rb +0 -3
- data/lib/puppet/interface/action_manager.rb +0 -3
- data/lib/puppet/interface/face_collection.rb +0 -2
- data/lib/puppet/interface/option.rb +0 -2
- data/lib/puppet/interface/option_builder.rb +0 -2
- data/lib/puppet/interface/option_manager.rb +0 -2
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module_tool.rb +1 -0
- data/lib/puppet/module_tool/applications/application.rb +0 -3
- data/lib/puppet/module_tool/applications/builder.rb +8 -20
- data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +18 -1
- data/lib/puppet/module_tool/modulefile.rb +2 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
- data/lib/puppet/module_tool/tar.rb +17 -0
- data/lib/puppet/module_tool/tar/gnu.rb +9 -0
- data/lib/puppet/module_tool/tar/mini.rb +39 -0
- data/lib/puppet/module_tool/tar/solaris.rb +5 -0
- data/lib/puppet/network/http.rb +1 -0
- data/lib/puppet/network/http/connection.rb +9 -23
- data/lib/puppet/network/http/handler.rb +38 -7
- data/lib/puppet/network/http/rack/rest.rb +14 -3
- data/lib/puppet/network/http/webrick.rb +3 -1
- data/lib/puppet/network/http/webrick/rest.rb +11 -2
- data/lib/puppet/node/environment.rb +3 -1
- data/lib/puppet/parameter.rb +32 -29
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +7 -3
- data/lib/puppet/parser/ast.rb +3 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
- data/lib/puppet/parser/ast/astarray.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +41 -0
- data/lib/puppet/parser/ast/function.rb +13 -2
- data/lib/puppet/parser/ast/lambda.rb +107 -0
- data/lib/puppet/parser/ast/leaf.rb +1 -2
- data/lib/puppet/parser/ast/method_call.rb +77 -0
- data/lib/puppet/parser/ast/vardef.rb +7 -0
- data/lib/puppet/parser/compiler.rb +27 -16
- data/lib/puppet/parser/e_parser_adapter.rb +120 -0
- data/lib/puppet/parser/files.rb +7 -6
- data/lib/puppet/parser/functions.rb +10 -8
- data/lib/puppet/parser/functions/collect.rb +43 -0
- data/lib/puppet/parser/functions/each.rb +96 -0
- data/lib/puppet/parser/functions/foreach.rb +96 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
- data/lib/puppet/parser/functions/hiera.rb +20 -2
- data/lib/puppet/parser/functions/hiera_array.rb +21 -2
- data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
- data/lib/puppet/parser/functions/hiera_include.rb +33 -2
- data/lib/puppet/parser/functions/inline_template.rb +4 -4
- data/lib/puppet/parser/functions/reduce.rb +74 -0
- data/lib/puppet/parser/functions/reject.rb +46 -0
- data/lib/puppet/parser/functions/select.rb +46 -0
- data/lib/puppet/parser/functions/slice.rb +96 -0
- data/lib/puppet/parser/functions/template.rb +2 -2
- data/lib/puppet/parser/grammar.ra +7 -4
- data/lib/puppet/parser/lexer.rb +10 -0
- data/lib/puppet/parser/methods.rb +69 -0
- data/lib/puppet/parser/parser.rb +855 -808
- data/lib/puppet/parser/parser_factory.rb +62 -0
- data/lib/puppet/parser/parser_support.rb +8 -2
- data/lib/puppet/parser/scope.rb +153 -47
- data/lib/puppet/parser/templatewrapper.rb +28 -21
- data/lib/puppet/parser/type_loader.rb +3 -1
- data/lib/puppet/pops.rb +40 -0
- data/lib/puppet/pops/adaptable.rb +190 -0
- data/lib/puppet/pops/adapters.rb +65 -0
- data/lib/puppet/pops/containment.rb +37 -0
- data/lib/puppet/pops/issues.rb +258 -0
- data/lib/puppet/pops/label_provider.rb +71 -0
- data/lib/puppet/pops/model/ast_transformer.rb +636 -0
- data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
- data/lib/puppet/pops/model/factory.rb +804 -0
- data/lib/puppet/pops/model/model.rb +567 -0
- data/lib/puppet/pops/model/model_label_provider.rb +75 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
- data/lib/puppet/pops/model/tree_dumper.rb +59 -0
- data/lib/puppet/pops/parser/egrammar.ra +723 -0
- data/lib/puppet/pops/parser/eparser.rb +2300 -0
- data/lib/puppet/pops/parser/grammar.ra +746 -0
- data/lib/puppet/pops/parser/lexer.rb +842 -0
- data/lib/puppet/pops/parser/makefile +13 -0
- data/lib/puppet/pops/parser/parser_support.rb +203 -0
- data/lib/puppet/pops/patterns.rb +35 -0
- data/lib/puppet/pops/utils.rb +104 -0
- data/lib/puppet/pops/validation.rb +297 -0
- data/lib/puppet/pops/validation/checker3_1.rb +551 -0
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
- data/lib/puppet/pops/visitable.rb +6 -0
- data/lib/puppet/pops/visitor.rb +50 -0
- data/lib/puppet/property.rb +37 -28
- data/lib/puppet/property/ensure.rb +2 -2
- data/lib/puppet/property/ordered_list.rb +1 -1
- data/lib/puppet/provider.rb +26 -30
- data/lib/puppet/provider/aixobject.rb +45 -44
- data/lib/puppet/provider/augeas/augeas.rb +0 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +107 -67
- data/lib/puppet/provider/group/groupadd.rb +59 -3
- data/lib/puppet/provider/interface/cisco.rb +4 -4
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +22 -6
- data/lib/puppet/provider/nameservice/pw.rb +1 -1
- data/lib/puppet/provider/package/aix.rb +28 -4
- data/lib/puppet/provider/package/gem.rb +0 -2
- data/lib/puppet/provider/package/macports.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +249 -4
- data/lib/puppet/provider/package/opkg.rb +77 -0
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +30 -16
- data/lib/puppet/provider/package/yum.rb +3 -3
- data/lib/puppet/provider/parsedfile.rb +80 -3
- data/lib/puppet/provider/selmodule/semodule.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +0 -4
- data/lib/puppet/provider/service/freebsd.rb +2 -2
- data/lib/puppet/provider/service/gentoo.rb +0 -9
- data/lib/puppet/provider/service/init.rb +27 -2
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/openwrt.rb +36 -0
- data/lib/puppet/provider/service/redhat.rb +0 -9
- data/lib/puppet/provider/service/src.rb +38 -4
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +1 -8
- data/lib/puppet/provider/user/aix.rb +4 -10
- data/lib/puppet/provider/user/pw.rb +6 -10
- data/lib/puppet/provider/user/useradd.rb +129 -31
- data/lib/puppet/provider/vlan/cisco.rb +4 -4
- data/lib/puppet/reference/function.rb +2 -2
- data/lib/puppet/reference/indirection.rb +46 -5
- data/lib/puppet/reference/metaparameter.rb +2 -2
- data/lib/puppet/reports.rb +5 -5
- data/lib/puppet/reports/rrdgraph.rb +4 -4
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/type.rb +13 -11
- data/lib/puppet/scheduler.rb +16 -0
- data/lib/puppet/scheduler/job.rb +53 -0
- data/lib/puppet/scheduler/scheduler.rb +45 -0
- data/lib/puppet/scheduler/splay_job.rb +32 -0
- data/lib/puppet/scheduler/timer.rb +13 -0
- data/lib/puppet/settings/base_setting.rb +1 -1
- data/lib/puppet/simple_graph.rb +4 -4
- data/lib/puppet/ssl/base.rb +12 -2
- data/lib/puppet/ssl/certificate.rb +4 -1
- data/lib/puppet/ssl/certificate_request.rb +4 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
- data/lib/puppet/ssl/configuration.rb +32 -0
- data/lib/puppet/ssl/host.rb +18 -21
- data/lib/puppet/ssl/key.rb +4 -1
- data/lib/puppet/ssl/validator.rb +116 -0
- data/lib/puppet/transaction.rb +1 -1
- data/lib/puppet/transaction/event.rb +3 -10
- data/lib/puppet/transaction/event_manager.rb +8 -1
- data/lib/puppet/transaction/report.rb +17 -16
- data/lib/puppet/type.rb +77 -69
- data/lib/puppet/type/cron.rb +20 -8
- data/lib/puppet/type/exec.rb +9 -3
- data/lib/puppet/type/file.rb +95 -21
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/mode.rb +7 -1
- data/lib/puppet/type/file/source.rb +2 -2
- data/lib/puppet/type/group.rb +11 -0
- data/lib/puppet/type/scheduled_task.rb +5 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/user.rb +24 -6
- data/lib/puppet/util.rb +12 -2
- data/lib/puppet/util/classgen.rb +4 -4
- data/lib/puppet/util/colors.rb +55 -0
- data/lib/puppet/util/command_line/trollop.rb +4 -4
- data/lib/puppet/util/errors.rb +39 -3
- data/lib/puppet/util/fileparsing.rb +5 -0
- data/lib/puppet/util/filetype.rb +11 -9
- data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +12 -0
- data/lib/puppet/util/monkey_patches.rb +48 -0
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/base.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +29 -19
- data/lib/puppet/util/network_device/config.rb +5 -2
- data/lib/puppet/util/network_device/ipcalc.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
- data/lib/puppet/util/plugins.rb +4 -4
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +28 -0
- data/lib/puppet/util/profiler/logging.rb +47 -0
- data/lib/puppet/util/profiler/none.rb +8 -0
- data/lib/puppet/util/profiler/object_counts.rb +17 -0
- data/lib/puppet/util/profiler/wall_clock.rb +34 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +5 -5
- data/lib/puppet/util/ssl.rb +38 -0
- data/lib/puppet/util/subclass_loader.rb +1 -5
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/process.rb +3 -0
- data/lib/puppet/util/windows/root_certs.rb +86 -0
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
- data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
- data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
- data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
- data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
- data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
- data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
- data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
- data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
- data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
- data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
- data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
- data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
- data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
- data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
- data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
- data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
- data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
- data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
- data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
- data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
- data/spec/integration/parser/collector_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +252 -227
- data/spec/integration/parser/parser_spec.rb +171 -53
- data/spec/integration/parser/scope_spec.rb +1 -1
- data/spec/integration/provider/cron/crontab_spec.rb +187 -0
- data/spec/integration/provider/service/systemd_spec.rb +20 -0
- data/spec/integration/type/file_spec.rb +21 -21
- data/spec/integration/type/package_spec.rb +1 -1
- data/spec/lib/puppet_spec/database.rb +2 -5
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/application/apply_spec.rb +16 -1
- data/spec/unit/application/describe_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +55 -32
- data/spec/unit/application/kick_spec.rb +8 -6
- data/spec/unit/application/master_spec.rb +4 -4
- data/spec/unit/daemon_spec.rb +1 -1
- data/spec/unit/forge/errors_spec.rb +40 -0
- data/spec/unit/forge/repository_spec.rb +11 -1
- data/spec/unit/forge_spec.rb +13 -3
- data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
- data/spec/unit/hiera/scope_spec.rb +48 -25
- data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
- data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
- data/spec/unit/indirector/indirection_spec.rb +5 -0
- data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
- data/spec/unit/indirector_spec.rb +7 -1
- data/spec/unit/interface/action_builder_spec.rb +1 -1
- data/spec/unit/interface/action_manager_spec.rb +0 -2
- data/spec/unit/interface/action_spec.rb +1 -1
- data/spec/unit/interface/documentation_spec.rb +0 -2
- data/spec/unit/interface/face_collection_spec.rb +1 -1
- data/spec/unit/interface/option_builder_spec.rb +1 -1
- data/spec/unit/interface/option_spec.rb +0 -1
- data/spec/unit/module_spec.rb +17 -19
- data/spec/unit/module_tool/application_spec.rb +1 -3
- data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
- data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
- data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
- data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
- data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
- data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
- data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
- data/spec/unit/network/http/connection_spec.rb +17 -2
- data/spec/unit/network/http/handler_spec.rb +195 -167
- data/spec/unit/network/http/rack/rest_spec.rb +26 -4
- data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
- data/spec/unit/network/http/webrick_spec.rb +12 -3
- data/spec/unit/node/environment_spec.rb +421 -404
- data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
- data/spec/unit/parser/collector_spec.rb +4 -4
- data/spec/unit/parser/compiler_spec.rb +13 -13
- data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
- data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
- data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
- data/spec/unit/parser/functions/hiera_spec.rb +0 -2
- data/spec/unit/parser/functions_spec.rb +27 -15
- data/spec/unit/parser/methods/collect_spec.rb +110 -0
- data/spec/unit/parser/methods/each_spec.rb +91 -0
- data/spec/unit/parser/methods/foreach_spec.rb +91 -0
- data/spec/unit/parser/methods/reduce_spec.rb +67 -0
- data/spec/unit/parser/methods/reject_spec.rb +73 -0
- data/spec/unit/parser/methods/select_spec.rb +79 -0
- data/spec/unit/parser/methods/shared.rb +61 -0
- data/spec/unit/parser/methods/slice_spec.rb +97 -0
- data/spec/unit/parser/parser_spec.rb +2 -2
- data/spec/unit/parser/scope_spec.rb +39 -16
- data/spec/unit/parser/templatewrapper_spec.rb +6 -5
- data/spec/unit/parser/type_loader_spec.rb +191 -165
- data/spec/unit/pops/adaptable_spec.rb +143 -0
- data/spec/unit/pops/containment_spec.rb +25 -0
- data/spec/unit/pops/factory_rspec_helper.rb +77 -0
- data/spec/unit/pops/factory_spec.rb +329 -0
- data/spec/unit/pops/issues_spec.rb +26 -0
- data/spec/unit/pops/label_provider_spec.rb +42 -0
- data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
- data/spec/unit/pops/model/model_spec.rb +37 -0
- data/spec/unit/pops/parser/lexer_spec.rb +884 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
- data/spec/unit/pops/parser/parser_spec.rb +15 -0
- data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
- data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
- data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
- data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
- data/spec/unit/pops/visitor_spec.rb +94 -0
- data/spec/unit/property_spec.rb +11 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
- data/spec/unit/provider/cron/crontab_spec.rb +97 -7
- data/spec/unit/provider/cron/parsed_spec.rb +325 -0
- data/spec/unit/provider/exec/posix_spec.rb +1 -1
- data/spec/unit/provider/group/groupadd_spec.rb +33 -3
- data/spec/unit/provider/group/pw_spec.rb +5 -5
- data/spec/unit/provider/nameservice_spec.rb +304 -0
- data/spec/unit/provider/package/aix_spec.rb +53 -11
- data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
- data/spec/unit/provider/package/gem_spec.rb +6 -11
- data/spec/unit/provider/package/nim_spec.rb +216 -7
- data/spec/unit/provider/package/opkg_spec.rb +180 -0
- data/spec/unit/provider/package/rpm_spec.rb +149 -3
- data/spec/unit/provider/package/yum_spec.rb +6 -5
- data/spec/unit/provider/parsedfile_spec.rb +122 -28
- data/spec/unit/provider/service/freebsd_spec.rb +18 -0
- data/spec/unit/provider/service/init_spec.rb +108 -87
- data/spec/unit/provider/service/launchd_spec.rb +2 -2
- data/spec/unit/provider/service/openwrt_spec.rb +109 -0
- data/spec/unit/provider/service/src_spec.rb +117 -41
- data/spec/unit/provider/service/systemd_spec.rb +125 -17
- data/spec/unit/provider/service/upstart_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +42 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +24 -12
- data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +179 -15
- data/spec/unit/resource/type_spec.rb +3 -3
- data/spec/unit/scheduler/job_spec.rb +79 -0
- data/spec/unit/scheduler/scheduler_spec.rb +129 -0
- data/spec/unit/scheduler/splay_job_spec.rb +35 -0
- data/spec/unit/ssl/base_spec.rb +3 -9
- data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
- data/spec/unit/ssl/certificate_request_spec.rb +3 -1
- data/spec/unit/ssl/certificate_spec.rb +3 -1
- data/spec/unit/ssl/configuration_spec.rb +74 -0
- data/spec/unit/ssl/host_spec.rb +28 -7
- data/spec/unit/ssl/validator_spec.rb +311 -0
- data/spec/unit/transaction/event_manager_spec.rb +49 -0
- data/spec/unit/transaction/event_spec.rb +20 -5
- data/spec/unit/transaction/report_spec.rb +8 -0
- data/spec/unit/type/cron_spec.rb +9 -0
- data/spec/unit/type/exec_spec.rb +11 -0
- data/spec/unit/type/file/content_spec.rb +20 -20
- data/spec/unit/type/file/mode_spec.rb +6 -0
- data/spec/unit/type/file/source_spec.rb +9 -7
- data/spec/unit/type/file_spec.rb +22 -3
- data/spec/unit/type/service_spec.rb +34 -21
- data/spec/unit/type_spec.rb +46 -1
- data/spec/unit/util/backups_spec.rb +2 -2
- data/spec/unit/util/execution_spec.rb +4 -1
- data/spec/unit/util/filetype_spec.rb +6 -0
- data/spec/unit/util/monkey_patches_spec.rb +18 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
- data/spec/unit/util/network_device/config_spec.rb +14 -0
- data/spec/unit/util/network_device_spec.rb +3 -3
- data/spec/unit/util/profiler/logging_spec.rb +81 -0
- data/spec/unit/util/profiler/none_spec.rb +12 -0
- data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
- data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
- data/spec/unit/util/pson_spec.rb +5 -0
- data/spec/unit/util/ssl_spec.rb +51 -0
- data/spec/unit/util/windows/root_certs_spec.rb +15 -0
- data/spec/unit/util_spec.rb +28 -0
- metadata +2593 -2307
- data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,182 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/pops'
|
4
|
+
|
5
|
+
# relative to this spec file (./) does not work as this file is loaded by rspec
|
6
|
+
require File.join(File.dirname(__FILE__), '/transformer_rspec_helper')
|
7
|
+
|
8
|
+
describe "transformation to Puppet AST for containers" do
|
9
|
+
include TransformerRspecHelper
|
10
|
+
|
11
|
+
context "When transforming file scope" do
|
12
|
+
it "$a = 10 $b = 20" do
|
13
|
+
astdump(parse("$a = 10 $b = 20")).should == "(block (= $a 10) (= $b 20))"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "$a = 10" do
|
17
|
+
astdump(parse("$a = 10")).should == "(= $a 10)"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "When transforming class" do
|
22
|
+
it "class foo {}" do
|
23
|
+
astdump(parse("class foo {}")).should == "(class foo ())"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "class foo::bar {}" do
|
27
|
+
astdump(parse("class foo::bar {}")).should == "(class foo::bar ())"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "class foo inherits bar {}" do
|
31
|
+
astdump(parse("class foo inherits bar {}")).should == "(class foo (inherits bar) ())"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "class foo($a) {}" do
|
35
|
+
astdump(parse("class foo($a) {}")).should == "(class foo (parameters a) ())"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "class foo($a, $b) {}" do
|
39
|
+
astdump(parse("class foo($a, $b) {}")).should == "(class foo (parameters a b) ())"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "class foo($a, $b=10) {}" do
|
43
|
+
astdump(parse("class foo($a, $b=10) {}")).should == "(class foo (parameters a (= b 10)) ())"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "class foo($a, $b) inherits belgo::bar {}" do
|
47
|
+
astdump(parse("class foo($a, $b) inherits belgo::bar{}")).should == "(class foo (inherits belgo::bar) (parameters a b) ())"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "class foo {$a = 10 $b = 20}" do
|
51
|
+
astdump(parse("class foo {$a = 10 $b = 20}")).should == "(class foo (block (= $a 10) (= $b 20)))"
|
52
|
+
end
|
53
|
+
|
54
|
+
context "it should handle '3x weirdness'" do
|
55
|
+
it "class class {} # a class named 'class'" do
|
56
|
+
# Not as much weird as confusing that it is possible to name a class 'class'. Can have
|
57
|
+
# a very confusing effect when resolving relative names, getting the global hardwired "Class"
|
58
|
+
# instead of some foo::class etc.
|
59
|
+
# This is allowed in 3.x.
|
60
|
+
astdump(parse("class class {}")).should == "(class class ())"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "class default {} # a class named 'default'" do
|
64
|
+
# The weirdness here is that a class can inherit 'default' but not declare a class called default.
|
65
|
+
# (It will work with relative names i.e. foo::default though). The whole idea with keywords as
|
66
|
+
# names is flawed to begin with - it generally just a very bad idea.
|
67
|
+
expect { dump(parse("class default {}")).should == "(class default ())" }.to raise_error(Puppet::ParseError)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "class foo::default {} # a nested name 'default'" do
|
71
|
+
astdump(parse("class foo::default {}")).should == "(class foo::default ())"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "class class inherits default {} # inherits default", :broken => true do
|
75
|
+
astdump(parse("class class inherits default {}")).should == "(class class (inherits default) ())"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "class class inherits default {} # inherits default" do
|
79
|
+
# TODO: See previous test marked as :broken=>true, it is actually this test (result) that is wacky,
|
80
|
+
# this because a class is named at parse time (since class evaluation is lazy, the model must have the
|
81
|
+
# full class name for nested classes - only, it gets this wrong when a class is named "class" - or at least
|
82
|
+
# I think it is wrong.)
|
83
|
+
#
|
84
|
+
astdump(parse("class class inherits default {}")).should == "(class class::class (inherits default) ())"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "class foo inherits class" do
|
88
|
+
astdump(parse("class foo inherits class {}")).should == "(class foo (inherits class) ())"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "When transforming define" do
|
94
|
+
it "define foo {}" do
|
95
|
+
astdump(parse("define foo {}")).should == "(define foo ())"
|
96
|
+
end
|
97
|
+
|
98
|
+
it "define foo::bar {}" do
|
99
|
+
astdump(parse("define foo::bar {}")).should == "(define foo::bar ())"
|
100
|
+
end
|
101
|
+
|
102
|
+
it "define foo($a) {}" do
|
103
|
+
astdump(parse("define foo($a) {}")).should == "(define foo (parameters a) ())"
|
104
|
+
end
|
105
|
+
|
106
|
+
it "define foo($a, $b) {}" do
|
107
|
+
astdump(parse("define foo($a, $b) {}")).should == "(define foo (parameters a b) ())"
|
108
|
+
end
|
109
|
+
|
110
|
+
it "define foo($a, $b=10) {}" do
|
111
|
+
astdump(parse("define foo($a, $b=10) {}")).should == "(define foo (parameters a (= b 10)) ())"
|
112
|
+
end
|
113
|
+
|
114
|
+
it "define foo {$a = 10 $b = 20}" do
|
115
|
+
astdump(parse("define foo {$a = 10 $b = 20}")).should == "(define foo (block (= $a 10) (= $b 20)))"
|
116
|
+
end
|
117
|
+
|
118
|
+
context "it should handle '3x weirdness'" do
|
119
|
+
it "define class {} # a define named 'class'" do
|
120
|
+
# This is weird because Class already exists, and instantiating this define will probably not
|
121
|
+
# work
|
122
|
+
astdump(parse("define class {}")).should == "(define class ())"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "define default {} # a define named 'default'" do
|
126
|
+
# Check unwanted ability to define 'default'.
|
127
|
+
# The expression below is not allowed (which is good).
|
128
|
+
#
|
129
|
+
expect { dump(parse("define default {}")).should == "(define default ())"}.to raise_error(Puppet::ParseError)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "When transforming node" do
|
135
|
+
it "node foo {}" do
|
136
|
+
# AST can not differentiate between bare word and string
|
137
|
+
astdump(parse("node foo {}")).should == "(node (matches 'foo') ())"
|
138
|
+
end
|
139
|
+
|
140
|
+
it "node foo, x.bar, default {}" do
|
141
|
+
# AST can not differentiate between bare word and string
|
142
|
+
astdump(parse("node foo, x_bar, default {}")).should == "(node (matches 'foo' 'x_bar' :default) ())"
|
143
|
+
end
|
144
|
+
|
145
|
+
it "node 'foo' {}" do
|
146
|
+
# AST can not differentiate between bare word and string
|
147
|
+
astdump(parse("node 'foo' {}")).should == "(node (matches 'foo') ())"
|
148
|
+
end
|
149
|
+
|
150
|
+
it "node foo inherits x::bar {}" do
|
151
|
+
# AST can not differentiate between bare word and string
|
152
|
+
astdump(parse("node foo inherits x_bar {}")).should == "(node (matches 'foo') (parent x_bar) ())"
|
153
|
+
end
|
154
|
+
|
155
|
+
it "node foo inherits 'bar' {}" do
|
156
|
+
# AST can not differentiate between bare word and string
|
157
|
+
astdump(parse("node foo inherits 'bar' {}")).should == "(node (matches 'foo') (parent 'bar') ())"
|
158
|
+
end
|
159
|
+
|
160
|
+
it "node foo inherits default {}" do
|
161
|
+
# AST can not differentiate between bare word and string
|
162
|
+
astdump(parse("node foo inherits default {}")).should == "(node (matches 'foo') (parent :default) ())"
|
163
|
+
end
|
164
|
+
|
165
|
+
it "node /web.*/ {}" do
|
166
|
+
astdump(parse("node /web.*/ {}")).should == "(node (matches /web.*/) ())"
|
167
|
+
end
|
168
|
+
|
169
|
+
it "node /web.*/, /do\.wop.*/, and.so.on {}" do
|
170
|
+
astdump(parse("node /web.*/, /do\.wop.*/, 'and.so.on' {}")).should == "(node (matches /web.*/ /do\.wop.*/ 'and.so.on') ())"
|
171
|
+
end
|
172
|
+
|
173
|
+
it "node wat inherits /apache.*/ {}" do
|
174
|
+
expect { parse("node wat inherits /apache.*/ {}")}.to raise_error(Puppet::ParseError)
|
175
|
+
end
|
176
|
+
|
177
|
+
it "node foo inherits bar {$a = 10 $b = 20}" do
|
178
|
+
# AST can not differentiate between bare word and string
|
179
|
+
astdump(parse("node foo inherits bar {$a = 10 $b = 20}")).should == "(node (matches 'foo') (parent bar) (block (= $a 10) (= $b 20)))"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/pops'
|
4
|
+
|
5
|
+
# relative to this spec file (./) does not work as this file is loaded by rspec
|
6
|
+
require File.join(File.dirname(__FILE__), '/transformer_rspec_helper')
|
7
|
+
|
8
|
+
describe "transformation to Puppet AST for resource declarations" do
|
9
|
+
include TransformerRspecHelper
|
10
|
+
|
11
|
+
context "When transforming regular resource" do
|
12
|
+
it "file { 'title': }" do
|
13
|
+
astdump(parse("file { 'title': }")).should == [
|
14
|
+
"(resource file",
|
15
|
+
" ('title'))"
|
16
|
+
].join("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "file { 'title': ; 'other_title': }" do
|
20
|
+
astdump(parse("file { 'title': ; 'other_title': }")).should == [
|
21
|
+
"(resource file",
|
22
|
+
" ('title')",
|
23
|
+
" ('other_title'))"
|
24
|
+
].join("\n")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "file { 'title': path => '/somewhere', mode => 0777}" do
|
28
|
+
astdump(parse("file { 'title': path => '/somewhere', mode => 0777}")).should == [
|
29
|
+
"(resource file",
|
30
|
+
" ('title'",
|
31
|
+
" (path => '/somewhere')",
|
32
|
+
" (mode => 0777)))"
|
33
|
+
].join("\n")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "file { 'title1': path => 'x'; 'title2': path => 'y'}" do
|
37
|
+
astdump(parse("file { 'title1': path => 'x'; 'title2': path => 'y'}")).should == [
|
38
|
+
"(resource file",
|
39
|
+
" ('title1'",
|
40
|
+
" (path => 'x'))",
|
41
|
+
" ('title2'",
|
42
|
+
" (path => 'y')))",
|
43
|
+
].join("\n")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "When transforming resource defaults" do
|
48
|
+
it "File { }" do
|
49
|
+
astdump(parse("File { }")).should == "(resource-defaults file)"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "File { mode => 0777 }" do
|
53
|
+
astdump(parse("File { mode => 0777}")).should == [
|
54
|
+
"(resource-defaults file",
|
55
|
+
" (mode => 0777))"
|
56
|
+
].join("\n")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "When transforming resource override" do
|
61
|
+
it "File['x'] { }" do
|
62
|
+
astdump(parse("File['x'] { }")).should == "(override (slice file 'x'))"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "File['x'] { x => 1 }" do
|
66
|
+
astdump(parse("File['x'] { x => 1}")).should == "(override (slice file 'x')\n (x => 1))"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "File['x', 'y'] { x => 1 }" do
|
70
|
+
astdump(parse("File['x', 'y'] { x => 1}")).should == "(override (slice file ('x' 'y'))\n (x => 1))"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "File['x'] { x => 1, y => 2 }" do
|
74
|
+
astdump(parse("File['x'] { x => 1, y=> 2}")).should == "(override (slice file 'x')\n (x => 1)\n (y => 2))"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "File['x'] { x +> 1 }" do
|
78
|
+
astdump(parse("File['x'] { x +> 1}")).should == "(override (slice file 'x')\n (x +> 1))"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "When transforming virtual and exported resources" do
|
83
|
+
it "@@file { 'title': }" do
|
84
|
+
astdump(parse("@@file { 'title': }")).should == "(exported-resource file\n ('title'))"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "@file { 'title': }" do
|
88
|
+
astdump(parse("@file { 'title': }")).should == "(virtual-resource file\n ('title'))"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "When transforming class resource" do
|
93
|
+
it "class { 'cname': }" do
|
94
|
+
astdump(parse("class { 'cname': }")).should == [
|
95
|
+
"(resource class",
|
96
|
+
" ('cname'))"
|
97
|
+
].join("\n")
|
98
|
+
end
|
99
|
+
|
100
|
+
it "class { 'cname': x => 1, y => 2}" do
|
101
|
+
astdump(parse("class { 'cname': x => 1, y => 2}")).should == [
|
102
|
+
"(resource class",
|
103
|
+
" ('cname'",
|
104
|
+
" (x => 1)",
|
105
|
+
" (y => 2)))"
|
106
|
+
].join("\n")
|
107
|
+
end
|
108
|
+
|
109
|
+
it "class { 'cname1': x => 1; 'cname2': y => 2}" do
|
110
|
+
astdump(parse("class { 'cname1': x => 1; 'cname2': y => 2}")).should == [
|
111
|
+
"(resource class",
|
112
|
+
" ('cname1'",
|
113
|
+
" (x => 1))",
|
114
|
+
" ('cname2'",
|
115
|
+
" (y => 2)))",
|
116
|
+
].join("\n")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context "When transforming Relationships" do
|
121
|
+
it "File[a] -> File[b]" do
|
122
|
+
astdump(parse("File[a] -> File[b]")).should == "(-> (slice file a) (slice file b))"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "File[a] <- File[b]" do
|
126
|
+
astdump(parse("File[a] <- File[b]")).should == "(<- (slice file a) (slice file b))"
|
127
|
+
end
|
128
|
+
|
129
|
+
it "File[a] ~> File[b]" do
|
130
|
+
astdump(parse("File[a] ~> File[b]")).should == "(~> (slice file a) (slice file b))"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "File[a] <~ File[b]" do
|
134
|
+
astdump(parse("File[a] <~ File[b]")).should == "(<~ (slice file a) (slice file b))"
|
135
|
+
end
|
136
|
+
|
137
|
+
it "Should chain relationships" do
|
138
|
+
astdump(parse("a -> b -> c")).should ==
|
139
|
+
"(-> (-> a b) c)"
|
140
|
+
end
|
141
|
+
|
142
|
+
it "Should chain relationships" do
|
143
|
+
astdump(parse("File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]")).should ==
|
144
|
+
"(<~ (<- (~> (-> (slice file a) (slice file b)) (slice file c)) (slice file d)) (slice file e))"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context "When transforming collection" do
|
149
|
+
context "of virtual resources" do
|
150
|
+
it "File <| |>" do
|
151
|
+
astdump(parse("File <| |>")).should == "(collect file\n (<| |>))"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context "of exported resources" do
|
156
|
+
it "File <<| |>>" do
|
157
|
+
astdump(parse("File <<| |>>")).should == "(collect file\n (<<| |>>))"
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "queries are parsed with correct precedence" do
|
162
|
+
it "File <| tag == 'foo' |>" do
|
163
|
+
astdump(parse("File <| tag == 'foo' |>")).should == "(collect file\n (<| |> (== tag 'foo')))"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "File <| tag == 'foo' and mode != 0777 |>" do
|
167
|
+
astdump(parse("File <| tag == 'foo' and mode != 0777 |>")).should == "(collect file\n (<| |> (&& (== tag 'foo') (!= mode 0777))))"
|
168
|
+
end
|
169
|
+
|
170
|
+
it "File <| tag == 'foo' or mode != 0777 |>" do
|
171
|
+
astdump(parse("File <| tag == 'foo' or mode != 0777 |>")).should == "(collect file\n (<| |> (|| (== tag 'foo') (!= mode 0777))))"
|
172
|
+
end
|
173
|
+
|
174
|
+
it "File <| tag == 'foo' or tag == 'bar' and mode != 0777 |>" do
|
175
|
+
astdump(parse("File <| tag == 'foo' or tag == 'bar' and mode != 0777 |>")).should ==
|
176
|
+
"(collect file\n (<| |> (|| (== tag 'foo') (&& (== tag 'bar') (!= mode 0777)))))"
|
177
|
+
end
|
178
|
+
|
179
|
+
it "File <| (tag == 'foo' or tag == 'bar') and mode != 0777 |>" do
|
180
|
+
astdump(parse("File <| (tag == 'foo' or tag == 'bar') and mode != 0777 |>")).should ==
|
181
|
+
"(collect file\n (<| |> (&& (|| (== tag 'foo') (== tag 'bar')) (!= mode 0777))))"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'puppet/pops'
|
2
|
+
require 'puppet/parser/ast'
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '/../factory_rspec_helper')
|
5
|
+
|
6
|
+
module TransformerRspecHelper
|
7
|
+
include FactoryRspecHelper
|
8
|
+
# Dumps the AST to string form
|
9
|
+
#
|
10
|
+
def astdump(ast)
|
11
|
+
ast = transform(ast) unless ast.kind_of?(Puppet::Parser::AST)
|
12
|
+
Puppet::Pops::Model::AstTreeDumper.new.dump(ast)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Transforms the Pops model to an AST model
|
16
|
+
#
|
17
|
+
def transform(model)
|
18
|
+
Puppet::Pops::Model::AstTransformer.new.transform(model)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Parses the string code to a Pops model
|
22
|
+
#
|
23
|
+
def parse(code)
|
24
|
+
parser = Puppet::Pops::Parser::Parser.new()
|
25
|
+
parser.parse_string(code)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/pops'
|
4
|
+
|
5
|
+
describe Puppet::Pops::Visitor do
|
6
|
+
describe "A visitor and a visitable in a configuration with min and max args set to 0" do
|
7
|
+
class DuckProcessor
|
8
|
+
def initialize
|
9
|
+
@friend_visitor = Puppet::Pops::Visitor.new(self, "friend", 0, 0)
|
10
|
+
end
|
11
|
+
|
12
|
+
def hi(o, *args)
|
13
|
+
@friend_visitor.visit(o, *args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def friend_Duck(o)
|
17
|
+
"Hi #{o.class}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def friend_Numeric(o)
|
21
|
+
"Howdy #{o.class}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Duck
|
26
|
+
include Puppet::Pops::Visitable
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should select the expected method when there are no arguments" do
|
30
|
+
duck = Duck.new
|
31
|
+
duck_processor = DuckProcessor.new
|
32
|
+
duck_processor.hi(duck).should == "Hi Duck"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should fail if there are too many arguments" do
|
36
|
+
duck = Duck.new
|
37
|
+
duck_processor = DuckProcessor.new
|
38
|
+
expect { duck_processor.hi(duck, "how are you?") }.to raise_error(/^Visitor Error: Too many.*/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should select method for superclass" do
|
42
|
+
duck_processor = DuckProcessor.new
|
43
|
+
duck_processor.hi(42).should == "Howdy Fixnum"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should select method for superclass" do
|
47
|
+
duck_processor = DuckProcessor.new
|
48
|
+
duck_processor.hi(42.0).should == "Howdy Float"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should fail if class not handled" do
|
52
|
+
duck_processor = DuckProcessor.new
|
53
|
+
expect { duck_processor.hi("wassup?") }.to raise_error(/Visitor Error: the configured.*/)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "A visitor and a visitable in a configuration with min =1, and max args set to 2" do
|
58
|
+
class DuckProcessor2
|
59
|
+
def initialize
|
60
|
+
@friend_visitor = Puppet::Pops::Visitor.new(self, "friend", 1, 2)
|
61
|
+
end
|
62
|
+
|
63
|
+
def hi(o, *args)
|
64
|
+
@friend_visitor.visit(o, *args)
|
65
|
+
end
|
66
|
+
|
67
|
+
def friend_Duck(o, drink, eat="grain")
|
68
|
+
"Hi #{o.class}, drink=#{drink}, eat=#{eat}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class Duck
|
73
|
+
include Puppet::Pops::Visitable
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should select the expected method when there are is one arguments" do
|
77
|
+
duck = Duck.new
|
78
|
+
duck_processor = DuckProcessor2.new
|
79
|
+
duck_processor.hi(duck, "water").should == "Hi Duck, drink=water, eat=grain"
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should fail if there are too many arguments" do
|
83
|
+
duck = Duck.new
|
84
|
+
duck_processor = DuckProcessor2.new
|
85
|
+
expect { duck_processor.hi(duck, "scotch", "soda", "peanuts") }.to raise_error(/^Visitor Error: Too many.*/)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should fail if there are too few arguments" do
|
89
|
+
duck = Duck.new
|
90
|
+
duck_processor = DuckProcessor2.new
|
91
|
+
expect { duck_processor.hi(duck) }.to raise_error(/^Visitor Error: Too few.*/)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|