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
data/CONTRIBUTING.md
CHANGED
@@ -49,7 +49,7 @@ top of things.
|
|
49
49
|
|
50
50
|
## Submitting Changes
|
51
51
|
|
52
|
-
* Sign the [Contributor License Agreement](
|
52
|
+
* Sign the [Contributor License Agreement](http://links.puppetlabs.com/cla).
|
53
53
|
* Push your changes to a topic branch in your fork of the repository.
|
54
54
|
* Submit a pull request to the repository in the puppetlabs organization.
|
55
55
|
* Update your Redmine ticket to mark that you have submitted code and are ready for it to be reviewed.
|
@@ -59,7 +59,7 @@ top of things.
|
|
59
59
|
|
60
60
|
* [More information on contributing](http://links.puppetlabs.com/contribute-to-puppet)
|
61
61
|
* [Bug tracker (Redmine)](http://projects.puppetlabs.com)
|
62
|
-
* [Contributor License Agreement](
|
62
|
+
* [Contributor License Agreement](http://links.puppetlabs.com/cla)
|
63
63
|
* [General GitHub documentation](http://help.github.com/)
|
64
64
|
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
65
65
|
* #puppet-dev IRC channel on freenode.org
|
data/Gemfile
CHANGED
@@ -1,30 +1,42 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
|
-
def location_for(place)
|
3
|
+
def location_for(place, fake_version = nil)
|
4
4
|
if place =~ /^(git:[^#]*)#(.*)/
|
5
|
-
[{ :git => $1, :branch => $2, :require => false }]
|
5
|
+
[fake_version, { :git => $1, :branch => $2, :require => false }].compact
|
6
6
|
elsif place =~ /^file:\/\/(.*)/
|
7
|
-
[
|
7
|
+
[fake_version, { :path => File.expand_path($1), :require => false }].compact
|
8
8
|
else
|
9
9
|
[place, { :require => false }]
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
gem
|
16
|
-
gem
|
13
|
+
# C Ruby (MRI) or Rubinius, but NOT Windows
|
14
|
+
platforms :ruby do
|
15
|
+
gem 'pry', :group => :development
|
16
|
+
gem 'yard', :group => :development
|
17
|
+
gem 'redcarpet', :group => :development
|
18
|
+
gem "racc", "~> 1.4", :group => :development
|
19
|
+
end
|
20
|
+
|
21
|
+
gem "puppet", *location_for("file://#{File.dirname(__FILE__)}", '99.0.0')
|
22
|
+
gem "facter", *location_for(ENV['FACTER_LOCATION'] || '~> 1.6')
|
23
|
+
gem "hiera", *location_for(ENV['HIERA_LOCATION'] || '~> 1.0', '99.0.0')
|
24
|
+
gem "rake", :require => false
|
25
|
+
gem "rspec", "~> 2.11.0", :require => false
|
26
|
+
gem "mocha", "~> 0.10.5", :require => false
|
27
|
+
gem "rgen", "0.6.1", :require => false
|
28
|
+
|
29
|
+
gem "yarjuf", "~> 1.0"
|
30
|
+
|
31
|
+
group(:extra) do
|
17
32
|
gem "rack", "~> 1.4", :require => false
|
18
|
-
gem "
|
19
|
-
gem "
|
20
|
-
gem "
|
21
|
-
gem "
|
22
|
-
gem "
|
23
|
-
gem "
|
24
|
-
gem "
|
25
|
-
gem "sqlite3"
|
26
|
-
gem "stomp"
|
27
|
-
gem "tzinfo"
|
33
|
+
gem "activerecord", '~> 3.0.7', :require => false
|
34
|
+
gem "couchrest", '~> 1.0', :require => false
|
35
|
+
gem "net-ssh", '~> 2.1', :require => false
|
36
|
+
gem "puppetlabs_spec_helper", :require => false
|
37
|
+
gem "sqlite3", :require => false
|
38
|
+
gem "stomp", :require => false
|
39
|
+
gem "tzinfo", :require => false
|
28
40
|
end
|
29
41
|
|
30
42
|
platforms :mswin, :mingw do
|
@@ -37,8 +49,9 @@ platforms :mswin, :mingw do
|
|
37
49
|
gem "win32-service", "~> 0.7.2", :require => false
|
38
50
|
gem "win32-taskscheduler", "~> 0.2.2", :require => false
|
39
51
|
gem "win32console", "~> 1.3.2", :require => false
|
40
|
-
gem "windows-api", "~> 0.4.
|
52
|
+
gem "windows-api", "~> 0.4.2", :require => false
|
41
53
|
gem "windows-pr", "~> 1.2.1", :require => false
|
54
|
+
gem "minitar", "~> 0.5.4", :require => false
|
42
55
|
end
|
43
56
|
|
44
57
|
if File.exists? "#{__FILE__}.local"
|
data/README_DEVELOPER.md
CHANGED
@@ -149,7 +149,7 @@ with the following actions. The trick is to symlink `gems` to `src`.
|
|
149
149
|
$ cd /workspace
|
150
150
|
$ ln -s src gems
|
151
151
|
$ mkdir specifications
|
152
|
-
$ pushd specifications; ln -s ../gems/puppet/puppet.gemspec; popd
|
152
|
+
$ pushd specifications; ln -s ../gems/puppet/puppet.gemspec; ln -s ../gems/puppet/lib; popd
|
153
153
|
$ export GEM_PATH="/workspace:${GEM_PATH}"
|
154
154
|
$ gem list puppet
|
155
155
|
|
@@ -157,6 +157,13 @@ This should list out
|
|
157
157
|
|
158
158
|
puppet (2.7.19)
|
159
159
|
|
160
|
+
The final directory structure should look like this:
|
161
|
+
|
162
|
+
/workspace/src --- git working directory
|
163
|
+
/gems -> src
|
164
|
+
/specifications/puppet.gemspec -> ../gems/puppet/puppet.gemspec
|
165
|
+
/lib -> ../gems/puppet/lib
|
166
|
+
|
160
167
|
## Bundler ##
|
161
168
|
|
162
169
|
With a source checkout of Puppet properly setup as a gem, dependencies can be
|
@@ -177,6 +184,308 @@ installed using [Bundler](http://gembundler.com/)
|
|
177
184
|
Using bundler (1.1.5)
|
178
185
|
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
|
179
186
|
|
187
|
+
# Running Tests #
|
188
|
+
|
189
|
+
Puppet Labs projects use a common convention of using Rake to run unit tests.
|
190
|
+
The tests can be run with the following rake task:
|
191
|
+
|
192
|
+
rake spec
|
193
|
+
# Or if using Bundler
|
194
|
+
bundle exec rake spec
|
195
|
+
|
196
|
+
This allows the Rakefile to set up the environment beforehand if needed. This
|
197
|
+
method is how the unit tests are run in [Jenkins](https://jenkins.puppetlabs.com).
|
198
|
+
|
199
|
+
Under the hood Puppet's tests use `rspec`. To run all of them, you can directly
|
200
|
+
use 'rspec':
|
201
|
+
|
202
|
+
rspec
|
203
|
+
# Or if using Bundler
|
204
|
+
bundle exec rspec
|
205
|
+
|
206
|
+
To run a single file's worth of tests (much faster!), give the filename, and use
|
207
|
+
the nested format to see the descriptions:
|
208
|
+
|
209
|
+
rspec spec/unit/ssl/host_spec.rb --format nested
|
210
|
+
|
211
|
+
# A brief introduction to testing in Puppet
|
212
|
+
|
213
|
+
Puppet relies heavily on automated testing to ensure that Puppet behaves as
|
214
|
+
expected and that new features don't interfere with existing behavior. There are
|
215
|
+
three primary sets of tests that Puppet uses: _unit tests_, _integration tests_,
|
216
|
+
and _acceptance tests_.
|
217
|
+
|
218
|
+
- - -
|
219
|
+
|
220
|
+
Unit tests are used to test the individual components of Puppet to ensure that
|
221
|
+
they function as expected in isolation. Unit tests are designed to hide the
|
222
|
+
actual system implementations and provide canned information so that only the
|
223
|
+
intended behavior is tested, rather than the targeted code and everything else
|
224
|
+
connected to it. Unit tests should never affect the state of the system that's
|
225
|
+
running the test.
|
226
|
+
|
227
|
+
- - -
|
228
|
+
|
229
|
+
Integration tests serve to test different units of code together to ensure that
|
230
|
+
they interact correctly. While individual methods might perform correctly, when
|
231
|
+
used with the rest of the system they might fail, so integration tests are a
|
232
|
+
higher level version of unit tests that serve to check the behavior of
|
233
|
+
individual subsystems.
|
234
|
+
|
235
|
+
All of the unit and integration tests for Puppet are kept in the spec/ directory.
|
236
|
+
|
237
|
+
- - -
|
238
|
+
|
239
|
+
Acceptance tests are used to test high level behaviors of Puppet that deal with
|
240
|
+
a number of concerns and aren't easily tested with normal unit tests. Acceptance
|
241
|
+
tests function by changing system state and checking the system after
|
242
|
+
the fact to make sure that the intended behavior occurred. Because of this
|
243
|
+
acceptance tests can be destructive, so the systems being tested should be
|
244
|
+
throwaway systems.
|
245
|
+
|
246
|
+
All of the acceptance tests for Puppet are kept in the acceptance/tests/
|
247
|
+
directory.
|
248
|
+
|
249
|
+
## Puppet Continuous integration
|
250
|
+
|
251
|
+
* Travis-ci (unit tests only): https://travis-ci.org/puppetlabs/puppet/
|
252
|
+
* Jenkins (unit and acceptance tests): https://jenkins.puppetlabs.com/view/Puppet%20FOSS/
|
253
|
+
|
254
|
+
## RSpec
|
255
|
+
|
256
|
+
Puppet uses RSpec to perform unit and integration tests. RSpec handles a number
|
257
|
+
of concerns to make testing easier:
|
258
|
+
|
259
|
+
* Executing examples and ensuring the actual behavior matches the expected behavior (examples)
|
260
|
+
* Grouping tests (describe and contexts)
|
261
|
+
* Setting up test environments and cleaning up afterwards (before and after blocks)
|
262
|
+
* Isolating tests (mocks and stubs)
|
263
|
+
|
264
|
+
#### Examples and expectations
|
265
|
+
|
266
|
+
At the most basic level, RSpec provides a framework for executing tests (which
|
267
|
+
are called examples) and ensuring that the actual behavior matches the expected
|
268
|
+
behavior (which are done with expectations)
|
269
|
+
|
270
|
+
```ruby
|
271
|
+
# This is an example; it sets the test name and defines the test to run
|
272
|
+
specify "one equals one" do
|
273
|
+
# 'should' is an expectation; it adds a check to make sure that the left argument
|
274
|
+
# matches the right argument
|
275
|
+
1.should == 1
|
276
|
+
end
|
277
|
+
|
278
|
+
# Examples can be declared with either 'it' or 'specify'
|
279
|
+
it "one doesn't equal two" do
|
280
|
+
1.should_not == 2
|
281
|
+
end
|
282
|
+
```
|
283
|
+
|
284
|
+
Good examples generally do as little setup as possible and only test one or two
|
285
|
+
things; it makes tests easier to understand and easier to debug.
|
286
|
+
|
287
|
+
More complete documentation on expectations is available at https://www.relishapp.com/rspec/rspec-expectations/docs
|
288
|
+
|
289
|
+
### Example groups
|
290
|
+
|
291
|
+
Example groups are fairly self explanatory; they group similar examples into a
|
292
|
+
set.
|
293
|
+
|
294
|
+
```ruby
|
295
|
+
describe "the number one" do
|
296
|
+
|
297
|
+
it "is larger than zero" do
|
298
|
+
1.should be > 0
|
299
|
+
end
|
300
|
+
|
301
|
+
it "is an odd number" do
|
302
|
+
1.odd?.should be true
|
303
|
+
end
|
304
|
+
|
305
|
+
it "is not nil" do
|
306
|
+
1.should_not be_nil
|
307
|
+
end
|
308
|
+
end
|
309
|
+
```
|
310
|
+
|
311
|
+
Example groups have a number of uses that we'll get into later, but one of the
|
312
|
+
simplest demonstrations of what they do is how they help to format
|
313
|
+
documentation:
|
314
|
+
|
315
|
+
```
|
316
|
+
rspec ex.rb --format documentation
|
317
|
+
|
318
|
+
the number one
|
319
|
+
is larger than zero
|
320
|
+
is an odd number
|
321
|
+
is not nil
|
322
|
+
|
323
|
+
Finished in 0.00516 seconds
|
324
|
+
3 examples, 0 failures
|
325
|
+
```
|
326
|
+
|
327
|
+
### Setting up and tearing down tests
|
328
|
+
|
329
|
+
Examples may require some setup before they can run, and might need to clean up
|
330
|
+
afterwards. `before` and `after` blocks can be used before this, and can be
|
331
|
+
used inside of example groups to limit how many examples they affect.
|
332
|
+
|
333
|
+
```ruby
|
334
|
+
|
335
|
+
describe "something that could warn" do
|
336
|
+
before :each do
|
337
|
+
# Disable warnings for this test
|
338
|
+
$VERBOSE = nil
|
339
|
+
end
|
340
|
+
|
341
|
+
after do
|
342
|
+
# Enable warnings afterwards
|
343
|
+
$VERBOSE = true
|
344
|
+
end
|
345
|
+
|
346
|
+
it "doesn't generate a warning" do
|
347
|
+
MY_CONSTANT = 1
|
348
|
+
# reassigning a normally prints out 'warning: already initialized constant FOO'
|
349
|
+
MY_CONSTANT = 2
|
350
|
+
end
|
351
|
+
end
|
352
|
+
```
|
353
|
+
|
354
|
+
### Setting up helper data
|
355
|
+
|
356
|
+
Some examples may require setting up data before hand and making it available to
|
357
|
+
tests. RSpec provides helper methods with the `let` method call that can be used
|
358
|
+
inside of tests.
|
359
|
+
|
360
|
+
```ruby
|
361
|
+
describe "a helper object" do
|
362
|
+
# This creates an array with three elements that we can retrieve in tests. A
|
363
|
+
# new copy will be made for each test.
|
364
|
+
let(:my_helper) do
|
365
|
+
['foo', 'bar', 'baz']
|
366
|
+
end
|
367
|
+
|
368
|
+
it "should be an array" do
|
369
|
+
my_helper.should be_a_kind_of Array
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should have three elements" do
|
373
|
+
my_helper.should have(3).items
|
374
|
+
end
|
375
|
+
end
|
376
|
+
```
|
377
|
+
|
378
|
+
Like `before` blocks, helper objects like this are used to avoid doing a lot of
|
379
|
+
setup in individual examples and share setup between similar tests.
|
380
|
+
|
381
|
+
### Isolating tests with stubs
|
382
|
+
|
383
|
+
RSpec allows you to provide fake data during testing to make sure that
|
384
|
+
individual tests are only running the code being tested. You can stub out entire
|
385
|
+
objects, or just stub out individual methods on an object. When a method is
|
386
|
+
stubbed the method itself will never be called.
|
387
|
+
|
388
|
+
While RSpec comes with its own stubbing framework, Puppet uses the Mocha
|
389
|
+
framework.
|
390
|
+
|
391
|
+
A brief usage guide for Mocha is available at http://gofreerange.com/mocha/docs/#Usage,
|
392
|
+
and an overview of Mocha expectations is available at http://gofreerange.com/mocha/docs/Mocha/Expectation.html
|
393
|
+
|
394
|
+
```ruby
|
395
|
+
describe "stubbing a method on an object" do
|
396
|
+
let(:my_helper) do
|
397
|
+
['foo', 'bar', 'baz']
|
398
|
+
end
|
399
|
+
|
400
|
+
it 'should have three items before being stubbed' do
|
401
|
+
my_helper.size.should == 3
|
402
|
+
end
|
403
|
+
|
404
|
+
describe 'when stubbing the size' do
|
405
|
+
before do
|
406
|
+
my_helper.stubs(:size).returns 10
|
407
|
+
end
|
408
|
+
|
409
|
+
it 'should have the stubbed value for size' do
|
410
|
+
my_helper.size.should == 10
|
411
|
+
end
|
412
|
+
end
|
413
|
+
end
|
414
|
+
```
|
415
|
+
|
416
|
+
Entire objects can be stubbed as well.
|
417
|
+
|
418
|
+
```ruby
|
419
|
+
describe "stubbing an object" do
|
420
|
+
let(:my_helper) do
|
421
|
+
stub(:not_an_array, :size => 10)
|
422
|
+
end
|
423
|
+
|
424
|
+
it 'should have the stubbed size'
|
425
|
+
my_helper.size.should == 10
|
426
|
+
end
|
427
|
+
end
|
428
|
+
```
|
429
|
+
|
430
|
+
### Adding expectations with mocks
|
431
|
+
|
432
|
+
It's possible to combine the concepts of stubbing and expectations so that a
|
433
|
+
method has to be called for the test to pass (like an expectation), and can
|
434
|
+
return a fixed value (like a stub).
|
435
|
+
|
436
|
+
```ruby
|
437
|
+
describe "mocking a method on an object" do
|
438
|
+
let(:my_helper) do
|
439
|
+
['foo', 'bar', 'baz']
|
440
|
+
end
|
441
|
+
|
442
|
+
describe "when mocking the size" do
|
443
|
+
before do
|
444
|
+
my_helper.expects(:size).returns 10
|
445
|
+
end
|
446
|
+
|
447
|
+
it "adds an expectation that a method was called" do
|
448
|
+
my_helper.size
|
449
|
+
end
|
450
|
+
end
|
451
|
+
end
|
452
|
+
```
|
453
|
+
|
454
|
+
Like stubs, entire objects can be mocked.
|
455
|
+
|
456
|
+
```ruby
|
457
|
+
describe "mocking an object" do
|
458
|
+
let(:my_helper) do
|
459
|
+
mock(:not_an_array)
|
460
|
+
end
|
461
|
+
|
462
|
+
before do
|
463
|
+
not_an_array.expects(:size).returns 10
|
464
|
+
end
|
465
|
+
|
466
|
+
it "adds an expectation that the method was called" do
|
467
|
+
not_an_array.size
|
468
|
+
end
|
469
|
+
end
|
470
|
+
```
|
471
|
+
|
472
|
+
### RSpec references
|
473
|
+
|
474
|
+
* RSpec core docs: https://www.relishapp.com/rspec/rspec-core/docs
|
475
|
+
* RSpec guidelines with Ruby: http://betterspecs.org/
|
476
|
+
|
477
|
+
### Puppet-acceptance
|
478
|
+
|
479
|
+
[puppet-acceptance]: https://github.com/puppetlabs/puppet-acceptance
|
480
|
+
[test::unit]: http://test-unit.rubyforge.org/
|
481
|
+
|
482
|
+
Puppet has a custom acceptance testing framework called
|
483
|
+
[puppet-acceptance][puppet-acceptance] for running acceptance tests.
|
484
|
+
Puppet-acceptance runs the tests by configuring one or more VMs, copying the
|
485
|
+
test cases onto the VMs, performing the tests and collecting the results, and
|
486
|
+
ensuring that the results match the intended behavior. It uses
|
487
|
+
[test::unit][test::unit] to perform the actual assertions.
|
488
|
+
|
180
489
|
# UTF-8 Handling #
|
181
490
|
|
182
491
|
As Ruby 1.9 becomes more commonly used with Puppet, developers should be aware
|
@@ -242,23 +551,32 @@ include `ext/envpuppet.bat` will help.
|
|
242
551
|
To quickly run Puppet from source, assuming you already have Ruby installed
|
243
552
|
from [rubyinstaller.org](http://rubyinstaller.org).
|
244
553
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
cd <path_to_puppet>
|
250
|
-
set PATH=%PATH%;Z:\<path_to_puppet>\ext
|
251
|
-
envpuppet puppet --version
|
554
|
+
C:\> cd C:\work\puppet
|
555
|
+
C:\work\puppet> set PATH=%PATH%;C:\work\puppet\ext
|
556
|
+
C:\work\puppet> envpuppet bundle install
|
557
|
+
C:\work\puppet> envpuppet puppet --version
|
252
558
|
2.7.9
|
253
559
|
|
254
|
-
|
255
|
-
on
|
560
|
+
When writing a test that cannot possibly run on Windows, e.g. there is
|
561
|
+
no mount type on windows, do the following:
|
562
|
+
|
563
|
+
describe Puppet::MyClass, :unless => Puppet.features.microsoft_windows? do
|
564
|
+
..
|
565
|
+
end
|
566
|
+
|
567
|
+
If the test doesn't currently pass on Windows, e.g. due to on going porting, then use an rspec conditional pending block:
|
568
|
+
|
569
|
+
pending("porting to Windows", :if => Puppet.features.microsoft_windows?) do
|
570
|
+
<example1>
|
571
|
+
end
|
572
|
+
|
573
|
+
pending("porting to Windows", :if => Puppet.features.microsoft_windows?) do
|
574
|
+
<example2>
|
575
|
+
end
|
256
576
|
|
257
|
-
|
258
|
-
envpuppet rspec --tag ~fails_on_windows spec
|
577
|
+
Then run the test as:
|
259
578
|
|
260
|
-
|
261
|
-
Puppet directly from source without using install.rb or copying files around.
|
579
|
+
C:\work\puppet> envpuppet bundle exec rspec spec
|
262
580
|
|
263
581
|
## Common Issues ##
|
264
582
|
|