puppet 0.18.4 → 0.22.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +288 -0
- data/README +2 -2
- data/Rakefile +78 -5
- data/bin/puppet +28 -36
- data/bin/puppetca +81 -38
- data/bin/puppetd +65 -62
- data/bin/puppetdoc +409 -140
- data/bin/puppetmasterd +59 -47
- data/bin/puppetrun +38 -23
- data/conf/freebsd/puppetd +26 -0
- data/conf/freebsd/puppetmasterd +26 -0
- data/conf/gentoo/conf.d/puppet +5 -0
- data/conf/gentoo/conf.d/puppetmaster +12 -0
- data/conf/gentoo/init.d/puppet +38 -0
- data/conf/gentoo/init.d/puppetmaster +50 -0
- data/conf/gentoo/puppet/fileserver.conf +12 -0
- data/conf/gentoo/puppet/puppetca.conf +29 -0
- data/conf/gentoo/puppet/puppetd.conf +29 -0
- data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
- data/conf/redhat/client.init +10 -5
- data/conf/redhat/client.sysconfig +1 -1
- data/conf/redhat/fileserver.conf +2 -2
- data/conf/redhat/logrotate +1 -1
- data/conf/redhat/no-lockdir.patch +13 -0
- data/conf/redhat/puppet.spec +65 -8
- data/conf/redhat/puppetd.conf +0 -4
- data/conf/redhat/server.init +3 -6
- data/conf/solaris/pkginfo +1 -1
- data/conf/solaris/smf/svc-puppetd +2 -2
- data/conf/suse/client.init +142 -0
- data/conf/suse/puppet.spec +221 -0
- data/conf/suse/server.init +162 -0
- data/examples/code/mac_automount.pp +16 -0
- data/examples/root/bin/sleeper +3 -5
- data/examples/root/etc/init.d/sleeper +8 -2
- data/examples/root/etc/puppet/fileserver.conf +12 -2
- data/examples/root/etc/puppet/namespaceauth.conf +20 -0
- data/examples/root/etc/puppet/puppetd.conf +4 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
- data/examples/root/etc/puppet/tagmail.conf +1 -0
- data/ext/emacs/puppet-mode.el +46 -1
- data/ext/logcheck/puppet +15 -0
- data/ext/module_puppet +15 -23
- data/ext/vim/puppet.vim +4 -2
- data/install.rb +2 -1
- data/lib/puppet.rb +76 -207
- data/lib/puppet/configuration.rb +331 -0
- data/lib/puppet/daemon.rb +63 -246
- data/lib/puppet/dsl.rb +371 -0
- data/lib/puppet/element.rb +8 -26
- data/lib/puppet/error.rb +54 -0
- data/lib/puppet/event.rb +8 -243
- data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
- data/lib/puppet/external/event-loop.rb +1 -0
- data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
- data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
- data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
- data/lib/puppet/external/gratr.rb +33 -0
- data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
- data/lib/puppet/external/gratr/base.rb +34 -0
- data/lib/puppet/external/gratr/biconnected.rb +116 -0
- data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
- data/lib/puppet/external/gratr/common.rb +73 -0
- data/lib/puppet/external/gratr/comparability.rb +92 -0
- data/lib/puppet/external/gratr/digraph.rb +116 -0
- data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
- data/lib/puppet/external/gratr/dot.rb +90 -0
- data/lib/puppet/external/gratr/edge.rb +145 -0
- data/lib/puppet/external/gratr/graph.rb +303 -0
- data/lib/puppet/external/gratr/graph_api.rb +83 -0
- data/lib/puppet/external/gratr/import.rb +44 -0
- data/lib/puppet/external/gratr/labels.rb +90 -0
- data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
- data/lib/puppet/external/gratr/rdot.rb +327 -0
- data/lib/puppet/external/gratr/search.rb +409 -0
- data/lib/puppet/external/gratr/strong_components.rb +127 -0
- data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
- data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
- data/lib/puppet/feature/base.rb +20 -0
- data/lib/puppet/feature/rails.rb +52 -0
- data/lib/puppet/metatype/attributes.rb +719 -0
- data/lib/puppet/metatype/closure.rb +111 -0
- data/lib/puppet/metatype/container.rb +94 -0
- data/lib/puppet/metatype/evaluation.rb +118 -0
- data/lib/puppet/metatype/instances.rb +261 -0
- data/lib/puppet/metatype/manager.rb +169 -0
- data/lib/puppet/metatype/metaparams.rb +409 -0
- data/lib/puppet/metatype/providers.rb +260 -0
- data/lib/puppet/metatype/relationships.rb +116 -0
- data/lib/puppet/metatype/schedules.rb +39 -0
- data/lib/puppet/metatype/tags.rb +39 -0
- data/lib/puppet/modules.rb +113 -0
- data/lib/puppet/network/authconfig.rb +168 -0
- data/lib/puppet/network/authorization.rb +84 -0
- data/lib/puppet/network/authstore.rb +293 -0
- data/lib/puppet/network/client.rb +187 -0
- data/lib/puppet/network/client/ca.rb +56 -0
- data/lib/puppet/network/client/dipper.rb +81 -0
- data/lib/puppet/network/client/file.rb +7 -0
- data/lib/puppet/network/client/logger.rb +6 -0
- data/lib/puppet/network/client/master.rb +644 -0
- data/lib/puppet/{client → network/client}/proxy.rb +3 -3
- data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
- data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
- data/lib/puppet/network/client/runner.rb +13 -0
- data/lib/puppet/network/client/status.rb +5 -0
- data/lib/puppet/network/client_request.rb +32 -0
- data/lib/puppet/network/handler.rb +33 -0
- data/lib/puppet/{server → network/handler}/ca.rb +5 -6
- data/lib/puppet/network/handler/filebucket.rb +180 -0
- data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
- data/lib/puppet/{server → network/handler}/logger.rb +3 -5
- data/lib/puppet/{server → network/handler}/master.rb +42 -8
- data/lib/puppet/network/handler/report.rb +158 -0
- data/lib/puppet/network/handler/resource.rb +190 -0
- data/lib/puppet/{server → network/handler}/runner.rb +17 -18
- data/lib/puppet/network/handler/status.rb +13 -0
- data/lib/puppet/network/rights.rb +74 -0
- data/lib/puppet/network/server.rb +5 -0
- data/lib/puppet/network/server/mongrel.rb +138 -0
- data/lib/puppet/network/server/webrick.rb +153 -0
- data/lib/puppet/network/xmlrpc/client.rb +129 -0
- data/lib/puppet/network/xmlrpc/processor.rb +91 -0
- data/lib/puppet/network/xmlrpc/server.rb +20 -0
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
- data/lib/puppet/parameter.rb +390 -346
- data/lib/puppet/parser/ast.rb +116 -147
- data/lib/puppet/parser/ast/astarray.rb +17 -33
- data/lib/puppet/parser/ast/branch.rb +2 -0
- data/lib/puppet/parser/ast/caseopt.rb +7 -12
- data/lib/puppet/parser/ast/casestatement.rb +23 -32
- data/lib/puppet/parser/ast/collection.rb +19 -80
- data/lib/puppet/parser/ast/collexpr.rb +81 -0
- data/lib/puppet/parser/ast/component.rb +160 -89
- data/lib/puppet/parser/ast/else.rb +30 -0
- data/lib/puppet/parser/ast/function.rb +9 -2
- data/lib/puppet/parser/ast/hostclass.rb +47 -131
- data/lib/puppet/parser/ast/ifstatement.rb +43 -0
- data/lib/puppet/parser/ast/leaf.rb +10 -21
- data/lib/puppet/parser/ast/node.rb +32 -79
- data/lib/puppet/parser/ast/resourcedef.rb +222 -0
- data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
- data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
- data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
- data/lib/puppet/parser/ast/resourceref.rb +44 -0
- data/lib/puppet/parser/ast/selector.rb +16 -8
- data/lib/puppet/parser/ast/tag.rb +3 -1
- data/lib/puppet/parser/ast/vardef.rb +8 -12
- data/lib/puppet/parser/collector.rb +181 -0
- data/lib/puppet/parser/functions.rb +191 -36
- data/lib/puppet/parser/interpreter.rb +802 -380
- data/lib/puppet/parser/lexer.rb +86 -19
- data/lib/puppet/parser/parser.rb +1123 -960
- data/lib/puppet/parser/resource.rb +353 -0
- data/lib/puppet/parser/resource/param.rb +57 -0
- data/lib/puppet/parser/resource/reference.rb +71 -0
- data/lib/puppet/parser/scope.rb +573 -1000
- data/lib/puppet/parser/templatewrapper.rb +54 -0
- data/lib/puppet/pgraph.rb +208 -0
- data/lib/puppet/propertychange.rb +143 -0
- data/lib/puppet/provider.rb +302 -0
- data/lib/puppet/provider/cron/crontab.rb +187 -0
- data/lib/puppet/provider/group/groupadd.rb +29 -0
- data/lib/puppet/provider/group/netinfo.rb +12 -0
- data/lib/puppet/provider/group/pw.rb +31 -0
- data/lib/puppet/provider/host/netinfo.rb +18 -0
- data/lib/puppet/provider/host/parsed.rb +73 -0
- data/lib/puppet/provider/mount.rb +57 -0
- data/lib/puppet/provider/mount/netinfo.rb +38 -0
- data/lib/puppet/provider/mount/parsed.rb +37 -0
- data/lib/puppet/provider/nameservice.rb +344 -0
- data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
- data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
- data/lib/puppet/provider/nameservice/pw.rb +22 -0
- data/lib/puppet/provider/package/apple.rb +53 -0
- data/lib/puppet/provider/package/apt.rb +119 -0
- data/lib/puppet/provider/package/aptitude.rb +30 -0
- data/lib/puppet/provider/package/aptrpm.rb +79 -0
- data/lib/puppet/provider/package/blastwave.rb +114 -0
- data/lib/puppet/provider/package/darwinport.rb +88 -0
- data/lib/puppet/provider/package/dpkg.rb +109 -0
- data/lib/puppet/provider/package/freebsd.rb +43 -0
- data/lib/puppet/provider/package/gem.rb +104 -0
- data/lib/puppet/provider/package/openbsd.rb +93 -0
- data/lib/puppet/provider/package/pkgdmg.rb +119 -0
- data/lib/puppet/provider/package/portage.rb +112 -0
- data/lib/puppet/provider/package/ports.rb +94 -0
- data/lib/puppet/provider/package/rpm.rb +125 -0
- data/lib/puppet/provider/package/rug.rb +53 -0
- data/lib/puppet/provider/package/sun.rb +168 -0
- data/lib/puppet/provider/package/sunfreeware.rb +9 -0
- data/lib/puppet/provider/package/up2date.rb +45 -0
- data/lib/puppet/provider/package/yum.rb +54 -0
- data/lib/puppet/provider/parsedfile.rb +342 -0
- data/lib/puppet/provider/port/parsed.rb +174 -0
- data/lib/puppet/provider/service/base.rb +136 -0
- data/lib/puppet/provider/service/debian.rb +32 -0
- data/lib/puppet/provider/service/gentoo.rb +49 -0
- data/lib/puppet/{type → provider}/service/init.rb +42 -40
- data/lib/puppet/provider/service/redhat.rb +59 -0
- data/lib/puppet/{type → provider}/service/smf.rb +24 -13
- data/lib/puppet/provider/sshkey/parsed.rb +36 -0
- data/lib/puppet/provider/user/netinfo.rb +106 -0
- data/lib/puppet/provider/user/pw.rb +41 -0
- data/lib/puppet/provider/user/useradd.rb +67 -0
- data/lib/puppet/provider/zone/solaris.rb +208 -0
- data/lib/puppet/rails.rb +102 -66
- data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
- data/lib/puppet/rails/database/schema.rb +89 -0
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
- data/lib/puppet/rails/external/tagging/init.rb +5 -0
- data/lib/puppet/rails/external/tagging/tag.rb +50 -0
- data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
- data/lib/puppet/rails/fact_name.rb +7 -0
- data/lib/puppet/rails/fact_value.rb +5 -0
- data/lib/puppet/rails/host.rb +95 -46
- data/lib/puppet/rails/param_name.rb +28 -0
- data/lib/puppet/rails/param_value.rb +5 -0
- data/lib/puppet/rails/puppet_class.rb +9 -0
- data/lib/puppet/rails/resource.rb +95 -0
- data/lib/puppet/rails/source_file.rb +5 -0
- data/lib/puppet/relationship.rb +63 -0
- data/lib/puppet/reports/log.rb +14 -0
- data/lib/puppet/reports/rrdgraph.rb +114 -10
- data/lib/puppet/reports/store.rb +64 -0
- data/lib/puppet/reports/tagmail.rb +144 -71
- data/lib/puppet/sslcertificates.rb +38 -5
- data/lib/puppet/sslcertificates/ca.rb +142 -37
- data/lib/puppet/sslcertificates/certificate.rb +3 -3
- data/lib/puppet/sslcertificates/inventory.rb +53 -0
- data/lib/puppet/sslcertificates/support.rb +128 -0
- data/lib/puppet/transaction.rb +568 -189
- data/lib/puppet/transaction/report.rb +14 -3
- data/lib/puppet/transportable.rb +18 -10
- data/lib/puppet/type.rb +279 -2299
- data/lib/puppet/type/component.rb +63 -63
- data/lib/puppet/type/cron.rb +294 -710
- data/lib/puppet/type/exec.rb +185 -129
- data/lib/puppet/type/group.rb +38 -89
- data/lib/puppet/type/host.rb +110 -0
- data/lib/puppet/type/mount.rb +189 -0
- data/lib/puppet/type/notify.rb +47 -0
- data/lib/puppet/type/package.rb +129 -257
- data/lib/puppet/type/parsedtype.rb +172 -297
- data/lib/puppet/type/pfile.rb +540 -319
- data/lib/puppet/type/pfile/checksum.rb +103 -76
- data/lib/puppet/type/pfile/content.rb +16 -10
- data/lib/puppet/type/pfile/ensure.rb +52 -34
- data/lib/puppet/type/pfile/group.rb +25 -18
- data/lib/puppet/type/pfile/mode.rb +7 -4
- data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
- data/lib/puppet/type/pfile/source.rb +119 -124
- data/lib/puppet/type/pfile/target.rb +29 -45
- data/lib/puppet/type/pfile/type.rb +2 -2
- data/lib/puppet/type/pfilebucket.rb +18 -14
- data/lib/puppet/type/port.rb +121 -0
- data/lib/puppet/type/property.rb +530 -0
- data/lib/puppet/type/resources.rb +150 -0
- data/lib/puppet/type/schedule.rb +38 -22
- data/lib/puppet/type/service.rb +70 -326
- data/lib/puppet/type/sshkey.rb +76 -0
- data/lib/puppet/type/tidy.rb +197 -97
- data/lib/puppet/type/user.rb +107 -183
- data/lib/puppet/type/yumrepo.rb +53 -34
- data/lib/puppet/type/zone.rb +55 -208
- data/lib/puppet/util.rb +239 -201
- data/lib/puppet/util/autoload.rb +107 -0
- data/lib/puppet/util/classgen.rb +208 -0
- data/lib/puppet/{config.rb → util/config.rb} +102 -54
- data/lib/puppet/util/docs.rb +104 -0
- data/lib/puppet/util/errors.rb +55 -0
- data/lib/puppet/util/execution.rb +22 -0
- data/lib/puppet/util/feature.rb +76 -0
- data/lib/puppet/util/fileparsing.rb +380 -0
- data/lib/puppet/util/filetype.rb +300 -0
- data/lib/puppet/util/graph.rb +39 -0
- data/lib/puppet/util/inifile.rb +209 -0
- data/lib/puppet/util/loadedfile.rb +71 -0
- data/lib/puppet/util/log.rb +549 -0
- data/lib/puppet/util/logging.rb +20 -0
- data/lib/puppet/util/metaid.rb +22 -0
- data/lib/puppet/util/methodhelper.rb +37 -0
- data/lib/puppet/util/metric.rb +160 -0
- data/lib/puppet/util/package.rb +31 -0
- data/lib/puppet/util/pidlock.rb +68 -0
- data/lib/puppet/util/plist.rb +24 -0
- data/lib/puppet/util/plist/generator.rb +226 -0
- data/lib/puppet/util/plist/parser.rb +227 -0
- data/lib/puppet/util/posix.rb +87 -0
- data/lib/puppet/util/provider_features.rb +170 -0
- data/lib/puppet/util/rails/collection_merger.rb +42 -0
- data/lib/puppet/util/storage.rb +103 -0
- data/lib/puppet/util/subclass_loader.rb +83 -0
- data/lib/puppet/util/suidmanager.rb +86 -0
- data/lib/puppet/util/variables.rb +39 -0
- data/lib/puppet/util/warnings.rb +15 -0
- data/test/Rakefile +97 -0
- data/test/certmgr/ca.rb +81 -0
- data/test/certmgr/certmgr.rb +77 -50
- data/test/certmgr/inventory.rb +79 -0
- data/test/certmgr/support.rb +81 -0
- data/test/executables/filebucket.rb +49 -0
- data/test/executables/puppetbin.rb +28 -12
- data/test/executables/puppetca.rb +75 -54
- data/test/executables/puppetd.rb +10 -13
- data/test/executables/puppetmasterd.rb +12 -17
- data/test/executables/puppetmodule.rb +18 -17
- data/test/language/ast.rb +242 -798
- data/test/language/ast/casestatement.rb +104 -0
- data/test/language/ast/component.rb +133 -0
- data/test/language/ast/hostclass.rb +162 -0
- data/test/language/ast/selector.rb +62 -0
- data/test/language/ast/variable.rb +31 -0
- data/test/language/collector.rb +369 -0
- data/test/language/functions.rb +305 -18
- data/test/language/interpreter.rb +894 -125
- data/test/language/lexer.rb +98 -12
- data/test/language/node.rb +37 -53
- data/test/language/parser.rb +455 -148
- data/test/language/resource.rb +535 -0
- data/test/language/scope.rb +451 -561
- data/test/language/snippets.rb +101 -111
- data/test/language/transportable.rb +6 -8
- data/test/lib/mocha.rb +19 -0
- data/test/lib/mocha/any_instance_method.rb +35 -0
- data/test/lib/mocha/auto_verify.rb +113 -0
- data/test/lib/mocha/central.rb +35 -0
- data/test/lib/mocha/class_method.rb +62 -0
- data/test/lib/mocha/expectation.rb +295 -0
- data/test/lib/mocha/expectation_error.rb +6 -0
- data/test/lib/mocha/infinite_range.rb +27 -0
- data/test/lib/mocha/inspect.rb +37 -0
- data/test/lib/mocha/instance_method.rb +8 -0
- data/test/lib/mocha/metaclass.rb +7 -0
- data/test/lib/mocha/mock.rb +20 -0
- data/test/lib/mocha/mock_methods.rb +122 -0
- data/test/lib/mocha/object.rb +100 -0
- data/test/lib/mocha/pretty_parameters.rb +28 -0
- data/test/lib/mocha/setup_and_teardown.rb +23 -0
- data/test/lib/mocha/standalone.rb +30 -0
- data/test/lib/mocha/test_case_adapter.rb +49 -0
- data/test/lib/mocha_standalone.rb +2 -0
- data/test/lib/puppettest.rb +294 -0
- data/test/lib/puppettest/certificates.rb +61 -0
- data/test/lib/puppettest/exetest.rb +123 -0
- data/test/lib/puppettest/fakes.rb +194 -0
- data/test/lib/puppettest/fileparsing.rb +33 -0
- data/test/lib/puppettest/filetesting.rb +231 -0
- data/test/lib/puppettest/graph.rb +41 -0
- data/test/lib/puppettest/parsertesting.rb +392 -0
- data/test/lib/puppettest/railstesting.rb +56 -0
- data/test/lib/puppettest/reporttesting.rb +19 -0
- data/test/lib/puppettest/resourcetesting.rb +73 -0
- data/test/lib/puppettest/servertest.rb +72 -0
- data/test/lib/puppettest/support.rb +8 -0
- data/test/lib/puppettest/support/assertions.rb +101 -0
- data/test/lib/puppettest/support/helpers.rb +23 -0
- data/test/lib/puppettest/support/resources.rb +37 -0
- data/test/lib/puppettest/support/utils.rb +160 -0
- data/test/lib/puppettest/testcase.rb +48 -0
- data/test/lib/rake/puppet_test_loader.rb +17 -0
- data/test/lib/rake/puppet_testtask.rb +17 -0
- data/test/lib/spec.rb +8 -0
- data/test/lib/spec/callback.rb +11 -0
- data/test/lib/spec/callback/callback_container.rb +60 -0
- data/test/lib/spec/callback/extensions/module.rb +24 -0
- data/test/lib/spec/callback/extensions/object.rb +37 -0
- data/test/lib/spec/deprecated.rb +3 -0
- data/test/lib/spec/expectations.rb +59 -0
- data/test/lib/spec/expectations/differs/default.rb +62 -0
- data/test/lib/spec/expectations/errors.rb +6 -0
- data/test/lib/spec/expectations/extensions.rb +3 -0
- data/test/lib/spec/expectations/extensions/object.rb +109 -0
- data/test/lib/spec/expectations/extensions/proc.rb +57 -0
- data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/test/lib/spec/expectations/handler.rb +47 -0
- data/test/lib/spec/expectations/should.rb +5 -0
- data/test/lib/spec/expectations/should/base.rb +64 -0
- data/test/lib/spec/expectations/should/change.rb +69 -0
- data/test/lib/spec/expectations/should/have.rb +128 -0
- data/test/lib/spec/expectations/should/not.rb +74 -0
- data/test/lib/spec/expectations/should/should.rb +81 -0
- data/test/lib/spec/expectations/sugar.rb +47 -0
- data/test/lib/spec/matchers.rb +160 -0
- data/test/lib/spec/matchers/be.rb +161 -0
- data/test/lib/spec/matchers/be_close.rb +37 -0
- data/test/lib/spec/matchers/change.rb +120 -0
- data/test/lib/spec/matchers/eql.rb +43 -0
- data/test/lib/spec/matchers/equal.rb +43 -0
- data/test/lib/spec/matchers/has.rb +44 -0
- data/test/lib/spec/matchers/have.rb +140 -0
- data/test/lib/spec/matchers/include.rb +50 -0
- data/test/lib/spec/matchers/match.rb +41 -0
- data/test/lib/spec/matchers/raise_error.rb +100 -0
- data/test/lib/spec/matchers/respond_to.rb +35 -0
- data/test/lib/spec/matchers/satisfy.rb +47 -0
- data/test/lib/spec/matchers/throw_symbol.rb +75 -0
- data/test/lib/spec/mocks.rb +232 -0
- data/test/lib/spec/mocks/argument_expectation.rb +132 -0
- data/test/lib/spec/mocks/error_generator.rb +85 -0
- data/test/lib/spec/mocks/errors.rb +10 -0
- data/test/lib/spec/mocks/extensions/object.rb +3 -0
- data/test/lib/spec/mocks/message_expectation.rb +231 -0
- data/test/lib/spec/mocks/methods.rb +40 -0
- data/test/lib/spec/mocks/mock.rb +26 -0
- data/test/lib/spec/mocks/mock_handler.rb +166 -0
- data/test/lib/spec/mocks/order_group.rb +29 -0
- data/test/lib/spec/rake/spectask.rb +173 -0
- data/test/lib/spec/rake/verify_rcov.rb +47 -0
- data/test/lib/spec/runner.rb +132 -0
- data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
- data/test/lib/spec/runner/command_line.rb +34 -0
- data/test/lib/spec/runner/context.rb +154 -0
- data/test/lib/spec/runner/context_eval.rb +142 -0
- data/test/lib/spec/runner/context_runner.rb +55 -0
- data/test/lib/spec/runner/drb_command_line.rb +21 -0
- data/test/lib/spec/runner/execution_context.rb +17 -0
- data/test/lib/spec/runner/extensions/kernel.rb +17 -0
- data/test/lib/spec/runner/extensions/object.rb +32 -0
- data/test/lib/spec/runner/formatter.rb +5 -0
- data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
- data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
- data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
- data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
- data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
- data/test/lib/spec/runner/heckle_runner.rb +71 -0
- data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/test/lib/spec/runner/option_parser.rb +224 -0
- data/test/lib/spec/runner/reporter.rb +105 -0
- data/test/lib/spec/runner/spec_matcher.rb +25 -0
- data/test/lib/spec/runner/spec_parser.rb +41 -0
- data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
- data/test/lib/spec/runner/specification.rb +114 -0
- data/test/lib/spec/translator.rb +87 -0
- data/test/lib/spec/version.rb +30 -0
- data/test/lib/stubba.rb +2 -0
- data/test/network/authconfig.rb +72 -0
- data/test/network/authorization.rb +138 -0
- data/test/network/authstore.rb +450 -0
- data/test/network/client/ca.rb +38 -0
- data/test/{client → network/client}/client.rb +107 -24
- data/test/network/client/dipper.rb +35 -0
- data/test/network/client/master.rb +627 -0
- data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
- data/test/network/client_request.rb +39 -0
- data/test/network/daemon.rb +71 -0
- data/test/{server → network/handler}/bucket.rb +103 -27
- data/test/{server → network/handler}/ca.rb +14 -19
- data/test/{server → network/handler}/fileserver.rb +443 -68
- data/test/network/handler/handler.rb +64 -0
- data/test/{server → network/handler}/logger.rb +26 -26
- data/test/network/handler/master.rb +352 -0
- data/test/network/handler/report.rb +185 -0
- data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
- data/test/{server → network/handler}/runner.rb +17 -16
- data/test/network/rights.rb +38 -0
- data/test/network/server/webrick.rb +140 -0
- data/test/network/xmlrpc/client.rb +68 -0
- data/test/network/xmlrpc/processor.rb +80 -0
- data/test/network/xmlrpc/server.rb +28 -0
- data/test/network/xmlrpc/webrick_servlet.rb +26 -0
- data/test/other/dsl.rb +218 -0
- data/test/other/events.rb +22 -15
- data/test/other/overrides.rb +9 -14
- data/test/other/pgraph.rb +289 -0
- data/test/other/propertychange.rb +142 -0
- data/test/other/provider.rb +162 -0
- data/test/other/puppet.rb +63 -10
- data/test/other/relationship.rb +74 -0
- data/test/other/relationships.rb +199 -123
- data/test/other/report.rb +152 -23
- data/test/other/transactions.rb +824 -78
- data/test/puppet/conffiles.rb +16 -11
- data/test/puppet/defaults.rb +7 -10
- data/test/puppet/{error.rb → errortest.rb} +5 -8
- data/test/puppet/modules.rb +58 -0
- data/test/puppet/tc_suidmanager.rb +107 -0
- data/test/rails/host.rb +177 -0
- data/test/rails/rails.rb +27 -0
- data/test/rails/railsparameter.rb +62 -0
- data/test/rails/railsresource.rb +100 -0
- data/test/ral/manager/attributes.rb +296 -0
- data/test/ral/manager/manager.rb +55 -0
- data/test/ral/manager/provider.rb +54 -0
- data/test/ral/manager/type.rb +837 -0
- data/test/ral/providers/cron/crontab.rb +346 -0
- data/test/ral/providers/group.rb +252 -0
- data/test/ral/providers/host/netinfo.rb +58 -0
- data/test/ral/providers/host/parsed.rb +226 -0
- data/test/ral/providers/mount/netinfo.rb +80 -0
- data/test/ral/providers/mount/parsed.rb +223 -0
- data/test/ral/providers/nameservice.rb +33 -0
- data/test/ral/providers/package.rb +253 -0
- data/test/ral/providers/package/apt.rb +89 -0
- data/test/ral/providers/package/aptitude.rb +69 -0
- data/test/ral/providers/package/aptrpm.rb +89 -0
- data/test/ral/providers/package/dpkg.rb +64 -0
- data/test/ral/providers/parsedfile.rb +668 -0
- data/test/ral/providers/parsedport.rb +233 -0
- data/test/ral/providers/provider.rb +423 -0
- data/test/{types → ral/providers}/service.rb +20 -121
- data/test/ral/providers/service/base.rb +75 -0
- data/test/ral/providers/sshkey/parsed.rb +111 -0
- data/test/ral/providers/user.rb +567 -0
- data/test/ral/providers/user/useradd.rb +250 -0
- data/test/ral/types/basic.rb +90 -0
- data/test/ral/types/component.rb +113 -0
- data/test/ral/types/cron.rb +480 -0
- data/test/{types → ral/types}/exec.rb +278 -82
- data/test/ral/types/file.rb +1799 -0
- data/test/ral/types/file/target.rb +363 -0
- data/test/{types → ral/types}/filebucket.rb +15 -17
- data/test/{types → ral/types}/fileignoresource.rb +9 -15
- data/test/ral/types/filesources.rb +1046 -0
- data/test/ral/types/group.rb +169 -0
- data/test/ral/types/host.rb +155 -0
- data/test/ral/types/mount.rb +312 -0
- data/test/ral/types/package.rb +85 -0
- data/test/ral/types/parameter.rb +172 -0
- data/test/ral/types/port.rb +148 -0
- data/test/ral/types/property.rb +343 -0
- data/test/ral/types/resources.rb +221 -0
- data/test/{types → ral/types}/schedule.rb +34 -12
- data/test/ral/types/service.rb +37 -0
- data/test/{types → ral/types}/sshkey.rb +75 -65
- data/test/ral/types/tidy.rb +240 -0
- data/test/ral/types/user.rb +493 -0
- data/test/{types → ral/types}/yumrepo.rb +7 -11
- data/test/{types → ral/types}/zone.rb +45 -45
- data/test/tagging/tagging.rb +17 -26
- data/test/util/autoload.rb +130 -0
- data/test/util/classgen.rb +227 -0
- data/test/{other → util}/config.rb +373 -113
- data/test/util/execution.rb +34 -0
- data/test/util/features.rb +94 -0
- data/test/util/fileparsing.rb +677 -0
- data/test/{other → util}/filetype.rb +9 -12
- data/test/util/graph.rb +108 -0
- data/test/{other → util}/inifile.rb +24 -11
- data/test/util/loadedfile.rb +106 -0
- data/test/{other → util}/log.rb +96 -50
- data/test/{other → util}/metrics.rb +7 -17
- data/test/util/package.rb +27 -0
- data/test/util/pidlock.rb +126 -0
- data/test/util/posixtest.rb +173 -0
- data/test/util/storage.rb +123 -0
- data/test/util/subclass_loader.rb +100 -0
- data/test/util/utiltest.rb +368 -0
- metadata +449 -169
- data/examples/code/classing +0 -35
- data/examples/code/failers/badclassnoparam +0 -10
- data/examples/code/failers/badclassparam +0 -10
- data/examples/code/failers/badcompnoparam +0 -9
- data/examples/code/failers/badcompparam +0 -9
- data/examples/code/failers/badtypeparam +0 -3
- data/examples/code/failers/noobjectrvalue +0 -1
- data/examples/code/snippets/aliastest.pp +0 -16
- data/examples/code/snippets/argumentdefaults +0 -14
- data/examples/code/snippets/casestatement.pp +0 -58
- data/examples/code/snippets/classheirarchy.pp +0 -15
- data/examples/code/snippets/classincludes.pp +0 -17
- data/examples/code/snippets/classpathtest +0 -11
- data/examples/code/snippets/componentmetaparams.pp +0 -11
- data/examples/code/snippets/deepclassheirarchy.pp +0 -23
- data/examples/code/snippets/defineoverrides.pp +0 -17
- data/examples/code/snippets/dirchmod +0 -19
- data/examples/code/snippets/emptyclass.pp +0 -9
- data/examples/code/snippets/emptyexec.pp +0 -3
- data/examples/code/snippets/failmissingexecpath.pp +0 -13
- data/examples/code/snippets/falsevalues.pp +0 -3
- data/examples/code/snippets/filecreate +0 -11
- data/examples/code/snippets/implicititeration +0 -15
- data/examples/code/snippets/multipleinstances +0 -7
- data/examples/code/snippets/namevartest +0 -9
- data/examples/code/snippets/scopetest +0 -13
- data/examples/code/snippets/selectorvalues.pp +0 -42
- data/examples/code/snippets/simpledefaults +0 -5
- data/examples/code/snippets/simpleselector +0 -38
- data/examples/code/snippets/singleary.pp +0 -19
- data/examples/code/snippets/singlequote.pp +0 -11
- data/examples/code/snippets/singleselector.pp +0 -22
- data/examples/code/snippets/tag.pp +0 -9
- data/examples/code/snippets/tagged.pp +0 -35
- data/lib/puppet/client.rb +0 -177
- data/lib/puppet/client/ca.rb +0 -21
- data/lib/puppet/client/dipper.rb +0 -76
- data/lib/puppet/client/file.rb +0 -20
- data/lib/puppet/client/log.rb +0 -17
- data/lib/puppet/client/master.rb +0 -531
- data/lib/puppet/client/runner.rb +0 -17
- data/lib/puppet/client/status.rb +0 -7
- data/lib/puppet/event-loop.rb +0 -1
- data/lib/puppet/filetype.rb +0 -308
- data/lib/puppet/inifile.rb +0 -201
- data/lib/puppet/log.rb +0 -524
- data/lib/puppet/metric.rb +0 -132
- data/lib/puppet/networkclient.rb +0 -175
- data/lib/puppet/parsedfile.rb +0 -58
- data/lib/puppet/parser/ast/classdef.rb +0 -79
- data/lib/puppet/parser/ast/compdef.rb +0 -75
- data/lib/puppet/parser/ast/nodedef.rb +0 -73
- data/lib/puppet/parser/ast/objectdef.rb +0 -284
- data/lib/puppet/parser/ast/objectref.rb +0 -77
- data/lib/puppet/rails/database.rb +0 -40
- data/lib/puppet/rails/rails_object.rb +0 -42
- data/lib/puppet/rails/rails_parameter.rb +0 -5
- data/lib/puppet/server.rb +0 -196
- data/lib/puppet/server/authconfig.rb +0 -177
- data/lib/puppet/server/authstore.rb +0 -226
- data/lib/puppet/server/filebucket.rb +0 -155
- data/lib/puppet/server/pelement.rb +0 -188
- data/lib/puppet/server/report.rb +0 -184
- data/lib/puppet/server/rights.rb +0 -78
- data/lib/puppet/server/servlet.rb +0 -274
- data/lib/puppet/statechange.rb +0 -129
- data/lib/puppet/storage.rb +0 -98
- data/lib/puppet/type/nameservice.rb +0 -264
- data/lib/puppet/type/nameservice/netinfo.rb +0 -232
- data/lib/puppet/type/nameservice/objectadd.rb +0 -146
- data/lib/puppet/type/nameservice/posix.rb +0 -12
- data/lib/puppet/type/nameservice/pw.rb +0 -107
- data/lib/puppet/type/package/apple.rb +0 -41
- data/lib/puppet/type/package/apt.rb +0 -107
- data/lib/puppet/type/package/blastwave.rb +0 -136
- data/lib/puppet/type/package/darwinport.rb +0 -97
- data/lib/puppet/type/package/dpkg.rb +0 -113
- data/lib/puppet/type/package/freebsd.rb +0 -19
- data/lib/puppet/type/package/gem.rb +0 -119
- data/lib/puppet/type/package/openbsd.rb +0 -112
- data/lib/puppet/type/package/ports.rb +0 -103
- data/lib/puppet/type/package/rpm.rb +0 -121
- data/lib/puppet/type/package/sun.rb +0 -174
- data/lib/puppet/type/package/sunfreeware.rb +0 -7
- data/lib/puppet/type/package/yum.rb +0 -52
- data/lib/puppet/type/parsedtype/host.rb +0 -144
- data/lib/puppet/type/parsedtype/mount.rb +0 -271
- data/lib/puppet/type/parsedtype/port.rb +0 -261
- data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
- data/lib/puppet/type/service/base.rb +0 -12
- data/lib/puppet/type/service/debian.rb +0 -46
- data/lib/puppet/type/service/redhat.rb +0 -38
- data/lib/puppet/type/state.rb +0 -393
- data/lib/puppet/type/symlink.rb +0 -186
- data/test/client/master.rb +0 -207
- data/test/language/rails.rb +0 -105
- data/test/other/parsedfile.rb +0 -58
- data/test/other/storage.rb +0 -100
- data/test/puppet/utiltest.rb +0 -299
- data/test/puppettest.rb +0 -1170
- data/test/server/authconfig.rb +0 -56
- data/test/server/authstore.rb +0 -218
- data/test/server/master.rb +0 -201
- data/test/server/report.rb +0 -93
- data/test/server/rights.rb +0 -41
- data/test/server/server.rb +0 -152
- data/test/test +0 -61
- data/test/types/basic.rb +0 -117
- data/test/types/component.rb +0 -298
- data/test/types/cron.rb +0 -718
- data/test/types/file.rb +0 -1314
- data/test/types/filesources.rb +0 -590
- data/test/types/group.rb +0 -323
- data/test/types/host.rb +0 -186
- data/test/types/mount.rb +0 -294
- data/test/types/package.rb +0 -538
- data/test/types/parameter.rb +0 -107
- data/test/types/port.rb +0 -201
- data/test/types/query.rb +0 -101
- data/test/types/state.rb +0 -92
- data/test/types/symlink.rb +0 -120
- data/test/types/tidy.rb +0 -102
- data/test/types/type.rb +0 -469
- data/test/types/user.rb +0 -563
data/test/language/scope.rb
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
if __FILE__
|
|
4
|
-
$:.unshift '../../lib'
|
|
5
|
-
$:.unshift '..'
|
|
6
|
-
$puppetbase = "../.."
|
|
7
|
-
end
|
|
3
|
+
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
|
|
8
4
|
|
|
9
|
-
require '
|
|
10
|
-
require 'puppet/parser/interpreter'
|
|
11
|
-
require 'puppet/parser/parser'
|
|
12
|
-
require 'puppet/client'
|
|
13
|
-
require 'test/unit'
|
|
5
|
+
require 'mocha'
|
|
14
6
|
require 'puppettest'
|
|
7
|
+
require 'puppettest/parsertesting'
|
|
8
|
+
require 'puppettest/resourcetesting'
|
|
15
9
|
|
|
16
10
|
# so, what kind of things do we want to test?
|
|
17
11
|
|
|
@@ -23,7 +17,8 @@ require 'puppettest'
|
|
|
23
17
|
# and test whether we've got things in the right scopes
|
|
24
18
|
|
|
25
19
|
class TestScope < Test::Unit::TestCase
|
|
26
|
-
|
|
20
|
+
include PuppetTest::ParserTesting
|
|
21
|
+
include PuppetTest::ResourceTesting
|
|
27
22
|
|
|
28
23
|
def to_ary(hash)
|
|
29
24
|
hash.collect { |key,value|
|
|
@@ -42,7 +37,7 @@ class TestScope < Test::Unit::TestCase
|
|
|
42
37
|
|
|
43
38
|
10.times { |index|
|
|
44
39
|
# slap some recursion in there
|
|
45
|
-
scope =
|
|
40
|
+
scope = mkscope(:parent => scope)
|
|
46
41
|
scopes.push scope
|
|
47
42
|
|
|
48
43
|
var = "var%s" % index
|
|
@@ -102,10 +97,60 @@ class TestScope < Test::Unit::TestCase
|
|
|
102
97
|
}
|
|
103
98
|
end
|
|
104
99
|
|
|
100
|
+
def test_lookupvar
|
|
101
|
+
interp = mkinterp
|
|
102
|
+
scope = mkscope :interp => interp
|
|
103
|
+
|
|
104
|
+
# first do the plain lookups
|
|
105
|
+
assert_equal("", scope.lookupvar("var"), "scope did not default to string")
|
|
106
|
+
assert_equal("", scope.lookupvar("var", true), "scope ignored usestring setting")
|
|
107
|
+
assert_equal(:undefined, scope.lookupvar("var", false), "scope ignored usestring setting when false")
|
|
108
|
+
|
|
109
|
+
# Now set the var
|
|
110
|
+
scope.setvar("var", "yep")
|
|
111
|
+
assert_equal("yep", scope.lookupvar("var"), "did not retrieve value correctly")
|
|
112
|
+
|
|
113
|
+
# Now test the parent lookups
|
|
114
|
+
subscope = mkscope :interp => interp
|
|
115
|
+
subscope.parent = scope
|
|
116
|
+
assert_equal("", subscope.lookupvar("nope"), "scope did not default to string with parent")
|
|
117
|
+
assert_equal("", subscope.lookupvar("nope", true), "scope ignored usestring setting with parent")
|
|
118
|
+
assert_equal(:undefined, subscope.lookupvar("nope", false), "scope ignored usestring setting when false with parent")
|
|
119
|
+
|
|
120
|
+
assert_equal("yep", subscope.lookupvar("var"), "did not retrieve value correctly from parent")
|
|
121
|
+
|
|
122
|
+
# Now override the value in the subscope
|
|
123
|
+
subscope.setvar("var", "sub")
|
|
124
|
+
assert_equal("sub", subscope.lookupvar("var"), "did not retrieve overridden value correctly")
|
|
125
|
+
|
|
126
|
+
# Make sure we punt when the var is qualified. Specify the usestring value, so we know it propagates.
|
|
127
|
+
scope.expects(:lookup_qualified_var).with("one::two", false).returns(:punted)
|
|
128
|
+
assert_equal(:punted, scope.lookupvar("one::two", false), "did not return the value of lookup_qualified_var")
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_lookup_qualified_var
|
|
132
|
+
interp = mkinterp
|
|
133
|
+
scope = mkscope :interp => interp
|
|
134
|
+
|
|
135
|
+
scopes = {}
|
|
136
|
+
classes = ["", "one", "one::two", "one::two::three"].each do |name|
|
|
137
|
+
klass = interp.newclass(name)
|
|
138
|
+
klass.evaluate(:scope => scope)
|
|
139
|
+
scopes[name] = scope.class_scope(klass)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
classes.each do |name|
|
|
143
|
+
var = [name, "var"].join("::")
|
|
144
|
+
scopes[name].expects(:lookupvar).with("var", false).returns(name)
|
|
145
|
+
|
|
146
|
+
assert_equal(name, scope.send(:lookup_qualified_var, var, false), "did not get correct value from lookupvar")
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
105
150
|
def test_declarative
|
|
106
151
|
# set to declarative
|
|
107
|
-
top =
|
|
108
|
-
sub =
|
|
152
|
+
top = mkscope(:declarative => true)
|
|
153
|
+
sub = mkscope(:parent => top)
|
|
109
154
|
|
|
110
155
|
assert_nothing_raised {
|
|
111
156
|
top.setvar("test","value")
|
|
@@ -123,8 +168,8 @@ class TestScope < Test::Unit::TestCase
|
|
|
123
168
|
|
|
124
169
|
def test_notdeclarative
|
|
125
170
|
# set to not declarative
|
|
126
|
-
top =
|
|
127
|
-
sub =
|
|
171
|
+
top = mkscope(:declarative => false)
|
|
172
|
+
sub = mkscope(:parent => top)
|
|
128
173
|
|
|
129
174
|
assert_nothing_raised {
|
|
130
175
|
top.setvar("test","value")
|
|
@@ -140,444 +185,201 @@ class TestScope < Test::Unit::TestCase
|
|
|
140
185
|
}
|
|
141
186
|
end
|
|
142
187
|
|
|
143
|
-
def
|
|
144
|
-
scope =
|
|
145
|
-
over = "over"
|
|
188
|
+
def test_setdefaults
|
|
189
|
+
interp, scope, source = mkclassframing
|
|
146
190
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
values = {}
|
|
150
|
-
ovalues = []
|
|
191
|
+
# The setdefaults method doesn't really check what we're doing,
|
|
192
|
+
# so we're just going to use fake defaults here.
|
|
151
193
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
params = %w{a list of parameters that could be used for defaults}
|
|
194
|
+
# First do a simple local lookup
|
|
195
|
+
params = paramify(source, :one => "fun", :two => "shoe")
|
|
196
|
+
origshould = {}
|
|
197
|
+
params.each do |p| origshould[p.name] = p end
|
|
198
|
+
assert_nothing_raised do
|
|
199
|
+
scope.setdefaults(:file, params)
|
|
200
|
+
end
|
|
161
201
|
|
|
162
|
-
|
|
202
|
+
ret = nil
|
|
203
|
+
assert_nothing_raised do
|
|
204
|
+
ret = scope.lookupdefaults(:file)
|
|
205
|
+
end
|
|
163
206
|
|
|
164
|
-
|
|
165
|
-
scope = Puppet::Parser::Scope.new(:parent => scope)
|
|
166
|
-
scopes.push scope
|
|
207
|
+
assert_equal(origshould, ret)
|
|
167
208
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
# randomly create defaults for a random set of types
|
|
171
|
-
tnum = rand(5)
|
|
172
|
-
tnum.times { |t|
|
|
173
|
-
# pick a type
|
|
174
|
-
#Puppet.debug "Type length is %s" % types.length
|
|
175
|
-
#s = rand(types.length)
|
|
176
|
-
#Puppet.debug "Type num is %s" % s
|
|
177
|
-
#type = types[s]
|
|
178
|
-
#Puppet.debug "Type is %s" % s
|
|
179
|
-
type = types[rand(types.length)]
|
|
180
|
-
if tmptypes.include?(type)
|
|
181
|
-
Puppet.debug "Duplicate type %s" % type
|
|
182
|
-
redo
|
|
183
|
-
else
|
|
184
|
-
tmptypes.push type
|
|
185
|
-
end
|
|
209
|
+
# Now create a subscope and add some more params.
|
|
210
|
+
newscope = scope.newscope
|
|
186
211
|
|
|
187
|
-
|
|
212
|
+
newparams = paramify(source, :one => "shun", :three => "free")
|
|
213
|
+
assert_nothing_raised {
|
|
214
|
+
newscope.setdefaults(:file, newparams)
|
|
215
|
+
}
|
|
188
216
|
|
|
189
|
-
|
|
217
|
+
# And make sure we get the appropriate ones back
|
|
218
|
+
should = {}
|
|
219
|
+
params.each do |p| should[p.name] = p end
|
|
220
|
+
newparams.each do |p| should[p.name] = p end
|
|
190
221
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
param = params[rand(params.length)]
|
|
195
|
-
if d.include?(param)
|
|
196
|
-
Puppet.debug "Duplicate param %s" % param
|
|
197
|
-
redo
|
|
198
|
-
else
|
|
199
|
-
d[param] = rand(1000)
|
|
200
|
-
end
|
|
201
|
-
}
|
|
222
|
+
assert_nothing_raised do
|
|
223
|
+
ret = newscope.lookupdefaults(:file)
|
|
224
|
+
end
|
|
202
225
|
|
|
203
|
-
|
|
204
|
-
d["always"] = rand(1000)
|
|
226
|
+
assert_equal(should, ret)
|
|
205
227
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
228
|
+
# Make sure we still only get the originals from the top scope
|
|
229
|
+
assert_nothing_raised do
|
|
230
|
+
ret = scope.lookupdefaults(:file)
|
|
231
|
+
end
|
|
209
232
|
|
|
210
|
-
|
|
211
|
-
scope.setdefaults(type,to_ary(d))
|
|
212
|
-
}
|
|
213
|
-
fdefs = nil
|
|
214
|
-
assert_nothing_raised {
|
|
215
|
-
fdefs = scope.lookupdefaults(type)
|
|
216
|
-
}
|
|
233
|
+
assert_equal(origshould, ret)
|
|
217
234
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
scope.setdefaults(type,[%w{always funtest}])
|
|
222
|
-
}
|
|
235
|
+
# Now create another scope and make sure we only get the top defaults
|
|
236
|
+
otherscope = scope.newscope
|
|
237
|
+
assert_equal(origshould, otherscope.lookupdefaults(:file))
|
|
223
238
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
# it got last time
|
|
229
|
-
if parent = scope.parent
|
|
230
|
-
unless prevdefs[type].nil?
|
|
231
|
-
assert_equal(prevdefs[type],parent.lookupdefaults(type))
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
d.each { |var,val|
|
|
235
|
-
prevdefs[type][var] = val
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
+
# And make sure none of the scopes has defaults for other types
|
|
240
|
+
[scope, newscope, otherscope].each do |sc|
|
|
241
|
+
assert_equal({}, sc.lookupdefaults(:exec))
|
|
242
|
+
end
|
|
239
243
|
end
|
|
240
244
|
|
|
241
245
|
def test_strinterp
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
val = nil
|
|
248
|
-
assert_nothing_raised {
|
|
249
|
-
val = scope.strinterp("string ${test}")
|
|
250
|
-
}
|
|
251
|
-
assert_equal("string value", val)
|
|
246
|
+
# Make and evaluate our classes so the qualified lookups work
|
|
247
|
+
interp = mkinterp
|
|
248
|
+
klass = interp.newclass("")
|
|
249
|
+
scope = mkscope(:interp => interp)
|
|
250
|
+
klass.evaluate(:scope => scope)
|
|
252
251
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
assert_equal("string value value value", val)
|
|
252
|
+
klass = interp.newclass("one")
|
|
253
|
+
klass.evaluate(:scope => scope)
|
|
257
254
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
assert_equal("string value value value", val)
|
|
255
|
+
klass = interp.newclass("one::two")
|
|
256
|
+
klass.evaluate(:scope => scope)
|
|
262
257
|
|
|
263
|
-
assert_nothing_raised {
|
|
264
|
-
val = scope.strinterp("string \\$test")
|
|
265
|
-
}
|
|
266
|
-
assert_equal("string $test", val)
|
|
267
258
|
|
|
259
|
+
scope = scope.class_scope("")
|
|
268
260
|
assert_nothing_raised {
|
|
269
|
-
|
|
270
|
-
}
|
|
271
|
-
assert_equal("$test string", val)
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
# Test some of the host manipulations
|
|
275
|
-
def test_hostlookup
|
|
276
|
-
top = Puppet::Parser::Scope.new()
|
|
277
|
-
|
|
278
|
-
# Create a deep scope tree, so that we know we're doing a deeply recursive
|
|
279
|
-
# search.
|
|
280
|
-
mid1 = Puppet::Parser::Scope.new(:parent => top)
|
|
281
|
-
mid2 = Puppet::Parser::Scope.new(:parent => mid1)
|
|
282
|
-
mid3 = Puppet::Parser::Scope.new(:parent => mid2)
|
|
283
|
-
child1 = Puppet::Parser::Scope.new(:parent => mid3)
|
|
284
|
-
mida = Puppet::Parser::Scope.new(:parent => top)
|
|
285
|
-
midb = Puppet::Parser::Scope.new(:parent => mida)
|
|
286
|
-
midc = Puppet::Parser::Scope.new(:parent => midb)
|
|
287
|
-
child2 = Puppet::Parser::Scope.new(:parent => midc)
|
|
288
|
-
|
|
289
|
-
# verify we can set a host
|
|
290
|
-
assert_nothing_raised("Could not create host") {
|
|
291
|
-
child1.setnode("testing", AST::Node.new(
|
|
292
|
-
:type => "testing",
|
|
293
|
-
:code => :notused
|
|
294
|
-
)
|
|
295
|
-
)
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
# Verify we cannot redefine it
|
|
299
|
-
assert_raise(Puppet::ParseError, "Duplicate host creation succeeded") {
|
|
300
|
-
child2.setnode("testing", AST::Node.new(
|
|
301
|
-
:type => "testing",
|
|
302
|
-
:code => :notused
|
|
303
|
-
)
|
|
304
|
-
)
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
# Now verify we can find the host again
|
|
308
|
-
host = nil
|
|
309
|
-
assert_nothing_raised("Host lookup failed") {
|
|
310
|
-
hash = top.node("testing")
|
|
311
|
-
host = hash[:node]
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
assert(host, "Could not find host")
|
|
315
|
-
assert(host.code == :notused, "Host is not what we stored")
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
# Verify that two statements about a file within the same scope tree
|
|
319
|
-
# will cause a conflict.
|
|
320
|
-
def test_noconflicts
|
|
321
|
-
filename = tempfile()
|
|
322
|
-
children = []
|
|
323
|
-
|
|
324
|
-
# create the parent class
|
|
325
|
-
children << classobj("one", :code => AST::ASTArray.new(
|
|
326
|
-
:children => [
|
|
327
|
-
fileobj(filename, "owner" => "root")
|
|
328
|
-
]
|
|
329
|
-
))
|
|
330
|
-
|
|
331
|
-
# now create a child class with differ values
|
|
332
|
-
children << classobj("two",
|
|
333
|
-
:code => AST::ASTArray.new(
|
|
334
|
-
:children => [
|
|
335
|
-
fileobj(filename, "owner" => "bin")
|
|
336
|
-
]
|
|
337
|
-
))
|
|
338
|
-
|
|
339
|
-
# Now call the child class
|
|
340
|
-
assert_nothing_raised("Could not add AST nodes for calling") {
|
|
341
|
-
children << AST::ObjectDef.new(
|
|
342
|
-
:type => nameobj("two"),
|
|
343
|
-
:name => nameobj("yayness"),
|
|
344
|
-
:params => astarray()
|
|
345
|
-
) << AST::ObjectDef.new(
|
|
346
|
-
:type => nameobj("one"),
|
|
347
|
-
:name => nameobj("yayness"),
|
|
348
|
-
:params => astarray()
|
|
349
|
-
)
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
top = nil
|
|
353
|
-
assert_nothing_raised("Could not create top object") {
|
|
354
|
-
top = AST::ASTArray.new(
|
|
355
|
-
:children => children
|
|
356
|
-
)
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
objects = nil
|
|
360
|
-
scope = nil
|
|
361
|
-
|
|
362
|
-
# Here's where we should encounter the failure. It should find that
|
|
363
|
-
# it has already created an object with that name, and this should result
|
|
364
|
-
# in some pukey-pukeyness.
|
|
365
|
-
assert_raise(Puppet::ParseError) {
|
|
366
|
-
scope = Puppet::Parser::Scope.new()
|
|
367
|
-
objects = scope.evaluate(:ast => top)
|
|
368
|
-
}
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
# Verify that statements about the same element within the same scope
|
|
372
|
-
# cause a conflict.
|
|
373
|
-
def test_failonconflictinsamescope
|
|
374
|
-
filename = tempfile()
|
|
375
|
-
children = []
|
|
376
|
-
|
|
377
|
-
# Now call the child class
|
|
378
|
-
assert_nothing_raised("Could not add AST nodes for calling") {
|
|
379
|
-
children << fileobj(filename, "owner" => "root")
|
|
380
|
-
children << fileobj(filename, "owner" => "bin")
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
top = nil
|
|
384
|
-
assert_nothing_raised("Could not create top object") {
|
|
385
|
-
top = AST::ASTArray.new(
|
|
386
|
-
:children => children
|
|
387
|
-
)
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
objects = nil
|
|
391
|
-
scope = nil
|
|
392
|
-
|
|
393
|
-
# Here's where we should encounter the failure. It should find that
|
|
394
|
-
# it has already created an object with that name, and this should result
|
|
395
|
-
# in some pukey-pukeyness.
|
|
396
|
-
assert_raise(Puppet::ParseError) {
|
|
397
|
-
scope = Puppet::Parser::Scope.new()
|
|
398
|
-
scope.top = true
|
|
399
|
-
objects = scope.evaluate(:ast => top)
|
|
400
|
-
}
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
# Verify that we override statements that we find within our scope
|
|
404
|
-
def test_suboverrides
|
|
405
|
-
filename = tempfile()
|
|
406
|
-
children = []
|
|
407
|
-
|
|
408
|
-
# create the parent class
|
|
409
|
-
children << classobj("parent", :code => AST::ASTArray.new(
|
|
410
|
-
:children => [
|
|
411
|
-
fileobj(filename, "owner" => "root")
|
|
412
|
-
]
|
|
413
|
-
))
|
|
414
|
-
|
|
415
|
-
# now create a child class with differ values
|
|
416
|
-
children << classobj("child", :parentclass => nameobj("parent"),
|
|
417
|
-
:code => AST::ASTArray.new(
|
|
418
|
-
:children => [
|
|
419
|
-
fileobj(filename, "owner" => "bin")
|
|
420
|
-
]
|
|
421
|
-
))
|
|
422
|
-
|
|
423
|
-
# Now call the child class
|
|
424
|
-
assert_nothing_raised("Could not add AST nodes for calling") {
|
|
425
|
-
children << AST::ObjectDef.new(
|
|
426
|
-
:type => nameobj("child"),
|
|
427
|
-
:name => nameobj("yayness"),
|
|
428
|
-
:params => astarray()
|
|
429
|
-
)
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
top = nil
|
|
433
|
-
assert_nothing_raised("Could not create top object") {
|
|
434
|
-
top = AST::ASTArray.new(
|
|
435
|
-
:children => children
|
|
436
|
-
)
|
|
261
|
+
scope.setvar("test","value")
|
|
437
262
|
}
|
|
438
263
|
|
|
439
|
-
|
|
440
|
-
scope = nil
|
|
441
|
-
assert_nothing_raised("Could not evaluate") {
|
|
442
|
-
scope = Puppet::Parser::Scope.new()
|
|
443
|
-
objects = scope.evaluate(:ast => top)
|
|
444
|
-
}
|
|
264
|
+
scopes = {"" => scope}
|
|
445
265
|
|
|
446
|
-
|
|
447
|
-
|
|
266
|
+
%w{one one::two one::two::three}.each do |name|
|
|
267
|
+
klass = interp.newclass(name)
|
|
268
|
+
klass.evaluate(:scope => scope)
|
|
269
|
+
scopes[name] = scope.class_scope(klass)
|
|
270
|
+
scopes[name].setvar("test", "value-%s" % name.sub(/.+::/,''))
|
|
271
|
+
end
|
|
448
272
|
|
|
449
|
-
assert_equal(
|
|
450
|
-
|
|
273
|
+
assert_equal("value", scope.lookupvar("::test"), "did not look up qualified value correctly")
|
|
274
|
+
tests = {
|
|
275
|
+
"string ${test}" => "string value",
|
|
276
|
+
"string ${one::two::three::test}" => "string value-three",
|
|
277
|
+
"string $one::two::three::test" => "string value-three",
|
|
278
|
+
"string ${one::two::test}" => "string value-two",
|
|
279
|
+
"string $one::two::test" => "string value-two",
|
|
280
|
+
"string ${one::test}" => "string value-one",
|
|
281
|
+
"string $one::test" => "string value-one",
|
|
282
|
+
"string ${::test}" => "string value",
|
|
283
|
+
"string $::test" => "string value",
|
|
284
|
+
"string ${test} ${test} ${test}" => "string value value value",
|
|
285
|
+
"string $test ${test} $test" => "string value value value",
|
|
286
|
+
"string \\$test" => "string $test",
|
|
287
|
+
'\\$test string' => "$test string",
|
|
288
|
+
'$test string' => "value string",
|
|
289
|
+
'a testing $' => "a testing $",
|
|
290
|
+
'a testing \$' => "a testing $",
|
|
291
|
+
"an escaped \\\n carriage return" => "an escaped carriage return",
|
|
292
|
+
'\$' => "$",
|
|
293
|
+
'\s' => "\s",
|
|
294
|
+
'\t' => "\t",
|
|
295
|
+
'\n' => "\n"
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
tests.each do |input, output|
|
|
299
|
+
assert_nothing_raised("Failed to scan %s" % input.inspect) do
|
|
300
|
+
assert_equal(output, scope.strinterp(input),
|
|
301
|
+
'did not interpret %s correctly' % input.inspect)
|
|
302
|
+
end
|
|
303
|
+
end
|
|
451
304
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
}
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
def test_multipletypes
|
|
459
|
-
scope = Puppet::Parser::Scope.new()
|
|
460
|
-
children = []
|
|
305
|
+
logs = []
|
|
306
|
+
Puppet::Util::Log.close
|
|
307
|
+
Puppet::Util::Log.newdestination(logs)
|
|
461
308
|
|
|
462
|
-
#
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
)
|
|
470
|
-
}
|
|
309
|
+
# #523
|
|
310
|
+
%w{d f h l w z}.each do |l|
|
|
311
|
+
string = "\\" + l
|
|
312
|
+
assert_nothing_raised do
|
|
313
|
+
assert_equal(string, scope.strinterp(string),
|
|
314
|
+
'did not interpret %s correctly' % string)
|
|
315
|
+
end
|
|
471
316
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
}
|
|
317
|
+
assert(logs.detect { |m| m.message =~ /Unrecognised escape/ },
|
|
318
|
+
"Did not get warning about escape sequence with %s" % string)
|
|
319
|
+
logs.clear
|
|
320
|
+
end
|
|
477
321
|
end
|
|
478
322
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
filename = tempfile()
|
|
482
|
-
children = []
|
|
323
|
+
def test_setclass
|
|
324
|
+
interp, scope, source = mkclassframing
|
|
483
325
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
# Now create a class that modifies the same file and also
|
|
492
|
-
# calls the component
|
|
493
|
-
children << classobj("klass", :code => AST::ASTArray.new(
|
|
494
|
-
:children => [
|
|
495
|
-
fileobj(filename, "owner" => "bin" ),
|
|
496
|
-
AST::ObjectDef.new(
|
|
497
|
-
:type => nameobj("comp"),
|
|
498
|
-
:params => astarray()
|
|
499
|
-
)
|
|
500
|
-
]
|
|
501
|
-
))
|
|
502
|
-
|
|
503
|
-
# Now call the class
|
|
504
|
-
children << AST::ObjectDef.new(
|
|
505
|
-
:type => nameobj("klass"),
|
|
506
|
-
:params => astarray()
|
|
507
|
-
)
|
|
508
|
-
|
|
509
|
-
top = nil
|
|
510
|
-
assert_nothing_raised("Could not create top object") {
|
|
511
|
-
top = AST::ASTArray.new(
|
|
512
|
-
:children => children
|
|
513
|
-
)
|
|
514
|
-
}
|
|
326
|
+
base = scope.findclass("base")
|
|
327
|
+
assert(base, "Could not find base class")
|
|
328
|
+
assert(! scope.setclass?(base), "Class incorrectly set")
|
|
329
|
+
assert(! scope.classlist.include?("base"), "Class incorrectly in classlist")
|
|
330
|
+
assert_nothing_raised do
|
|
331
|
+
scope.setclass base
|
|
332
|
+
end
|
|
515
333
|
|
|
516
|
-
|
|
517
|
-
scope
|
|
518
|
-
#assert_nothing_raised {
|
|
519
|
-
assert_raise(Puppet::ParseError, "A conflict was allowed") {
|
|
520
|
-
scope = Puppet::Parser::Scope.new()
|
|
521
|
-
trans = scope.evaluate(:ast => top)
|
|
522
|
-
}
|
|
523
|
-
# scope = Puppet::Parser::Scope.new()
|
|
524
|
-
# trans = scope.evaluate(:ast => top)
|
|
525
|
-
#}
|
|
526
|
-
end
|
|
334
|
+
assert(scope.setclass?(base), "Class incorrectly unset")
|
|
335
|
+
assert(scope.classlist.include?("base"), "Class not in classlist")
|
|
527
336
|
|
|
528
|
-
|
|
529
|
-
|
|
337
|
+
# Make sure we can retrieve the scope.
|
|
338
|
+
assert_equal(scope, scope.class_scope(base),
|
|
339
|
+
"class scope was not set correctly")
|
|
530
340
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
341
|
+
# Now try it with a normal string
|
|
342
|
+
Puppet[:trace] = false
|
|
343
|
+
assert_raise(Puppet::DevError) do
|
|
344
|
+
scope.setclass "string"
|
|
345
|
+
end
|
|
535
346
|
|
|
536
|
-
|
|
537
|
-
:file => __FILE__,
|
|
538
|
-
:line => __LINE__,
|
|
539
|
-
:children => stats
|
|
540
|
-
)
|
|
541
|
-
scope = Puppet::Parser::Scope.new()
|
|
542
|
-
trans = nil
|
|
543
|
-
assert_nothing_raised {
|
|
544
|
-
trans = scope.evaluate(:ast => top)
|
|
545
|
-
}
|
|
347
|
+
assert(! scope.setclass?("string"), "string incorrectly set")
|
|
546
348
|
|
|
547
|
-
|
|
349
|
+
# Set "" in the class list, and make sure it doesn't show up in the return
|
|
350
|
+
top = scope.findclass("")
|
|
351
|
+
assert(top, "Could not find top class")
|
|
352
|
+
scope.setclass top
|
|
548
353
|
|
|
549
|
-
assert(
|
|
550
|
-
assert_equal("root", obj["group"], "Default did not take")
|
|
551
|
-
assert_equal("root", obj["owner"], "Owner did not take")
|
|
552
|
-
assert_equal("755", obj["mode"], "Mode did not take")
|
|
354
|
+
assert(! scope.classlist.include?(""), "Class list included empty")
|
|
553
355
|
end
|
|
554
356
|
|
|
555
|
-
def
|
|
556
|
-
scope =
|
|
357
|
+
def test_validtags
|
|
358
|
+
scope = mkscope()
|
|
557
359
|
|
|
558
|
-
["a class", "
|
|
360
|
+
["a class", "a.class"].each do |bad|
|
|
559
361
|
assert_raise(Puppet::ParseError, "Incorrectly allowed %s" % bad.inspect) do
|
|
560
|
-
scope.
|
|
362
|
+
scope.tag(bad)
|
|
561
363
|
end
|
|
562
364
|
end
|
|
563
365
|
|
|
564
|
-
["a-class", "a_class", "class", "yayNess"].each do |good|
|
|
366
|
+
["a-class", "a_class", "Class", "class", "yayNess"].each do |good|
|
|
565
367
|
assert_nothing_raised("Incorrectly banned %s" % good.inspect) do
|
|
566
|
-
scope.
|
|
368
|
+
scope.tag(good)
|
|
567
369
|
end
|
|
568
370
|
end
|
|
569
371
|
|
|
570
372
|
end
|
|
571
373
|
|
|
572
374
|
def test_tagfunction
|
|
573
|
-
scope =
|
|
375
|
+
scope = mkscope()
|
|
574
376
|
|
|
575
377
|
assert_nothing_raised {
|
|
576
378
|
scope.function_tag(["yayness", "booness"])
|
|
577
379
|
}
|
|
578
380
|
|
|
579
|
-
assert(scope.
|
|
580
|
-
assert(scope.
|
|
381
|
+
assert(scope.tags.include?("yayness"), "tag 'yayness' did not get set")
|
|
382
|
+
assert(scope.tags.include?("booness"), "tag 'booness' did not get set")
|
|
581
383
|
|
|
582
384
|
# Now verify that the 'tagged' function works correctly
|
|
583
385
|
assert(scope.function_tagged("yayness"),
|
|
@@ -590,77 +392,37 @@ class TestScope < Test::Unit::TestCase
|
|
|
590
392
|
end
|
|
591
393
|
|
|
592
394
|
def test_includefunction
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
one = tempfile()
|
|
596
|
-
two = tempfile()
|
|
597
|
-
|
|
598
|
-
children = []
|
|
599
|
-
|
|
600
|
-
children << classobj("one", :code => AST::ASTArray.new(
|
|
601
|
-
:children => [
|
|
602
|
-
fileobj(one, "owner" => "root")
|
|
603
|
-
]
|
|
604
|
-
))
|
|
395
|
+
interp = mkinterp
|
|
396
|
+
scope = mkscope :interp => interp
|
|
605
397
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
fileobj(two, "owner" => "root")
|
|
609
|
-
]
|
|
610
|
-
))
|
|
398
|
+
myclass = interp.newclass "myclass"
|
|
399
|
+
otherclass = interp.newclass "otherclass"
|
|
611
400
|
|
|
612
|
-
|
|
401
|
+
function = Puppet::Parser::AST::Function.new(
|
|
613
402
|
:name => "include",
|
|
614
403
|
:ftype => :statement,
|
|
615
404
|
:arguments => AST::ASTArray.new(
|
|
616
|
-
:children => [nameobj("
|
|
405
|
+
:children => [nameobj("myclass"), nameobj("otherclass")]
|
|
617
406
|
)
|
|
618
407
|
)
|
|
619
408
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
# scope.function_include(["one", "two"])
|
|
624
|
-
#}
|
|
625
|
-
|
|
626
|
-
assert_nothing_raised {
|
|
627
|
-
scope.evaluate(:ast => top)
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
assert(scope.classlist.include?("one"), "tag 'one' did not get set")
|
|
632
|
-
assert(scope.classlist.include?("two"), "tag 'two' did not get set")
|
|
409
|
+
assert_nothing_raised do
|
|
410
|
+
function.evaluate :scope => scope
|
|
411
|
+
end
|
|
633
412
|
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
"tagged function incorrectly returned false")
|
|
413
|
+
[myclass, otherclass].each do |klass|
|
|
414
|
+
assert(scope.setclass?(klass),
|
|
415
|
+
"%s was not set" % klass.fqname)
|
|
416
|
+
end
|
|
639
417
|
end
|
|
640
418
|
|
|
641
419
|
def test_definedfunction
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
children = []
|
|
648
|
-
|
|
649
|
-
children << classobj("one", :code => AST::ASTArray.new(
|
|
650
|
-
:children => [
|
|
651
|
-
fileobj(one, "owner" => "root")
|
|
652
|
-
]
|
|
653
|
-
))
|
|
654
|
-
|
|
655
|
-
children << classobj("two", :code => AST::ASTArray.new(
|
|
656
|
-
:children => [
|
|
657
|
-
fileobj(two, "owner" => "root")
|
|
658
|
-
]
|
|
659
|
-
))
|
|
660
|
-
|
|
661
|
-
top = AST::ASTArray.new(:children => children)
|
|
420
|
+
interp = mkinterp
|
|
421
|
+
%w{one two}.each do |name|
|
|
422
|
+
interp.newdefine name
|
|
423
|
+
end
|
|
662
424
|
|
|
663
|
-
|
|
425
|
+
scope = mkscope :interp => interp
|
|
664
426
|
|
|
665
427
|
assert_nothing_raised {
|
|
666
428
|
%w{one two file user}.each do |type|
|
|
@@ -671,46 +433,75 @@ class TestScope < Test::Unit::TestCase
|
|
|
671
433
|
assert(!scope.function_defined(["nopeness"]),
|
|
672
434
|
"Class 'nopeness' was incorrectly considered defined")
|
|
673
435
|
}
|
|
674
|
-
|
|
675
|
-
|
|
676
436
|
end
|
|
677
437
|
|
|
678
|
-
# Make sure
|
|
679
|
-
def
|
|
680
|
-
|
|
438
|
+
# Make sure we know what we consider to be truth.
|
|
439
|
+
def test_truth
|
|
440
|
+
assert_equal(true, Puppet::Parser::Scope.true?("a string"),
|
|
441
|
+
"Strings not considered true")
|
|
442
|
+
assert_equal(true, Puppet::Parser::Scope.true?(true),
|
|
443
|
+
"True considered true")
|
|
444
|
+
assert_equal(false, Puppet::Parser::Scope.true?(""),
|
|
445
|
+
"Empty strings considered true")
|
|
446
|
+
assert_equal(false, Puppet::Parser::Scope.true?(false),
|
|
447
|
+
"false considered true")
|
|
448
|
+
end
|
|
681
449
|
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
:file => tempfile(),
|
|
686
|
-
:line => rand(100),
|
|
687
|
-
:children => [nameobj("argument")]
|
|
688
|
-
)
|
|
689
|
-
children << compobj("comp", :args => args, :code => AST::ASTArray.new(
|
|
690
|
-
:children => [
|
|
691
|
-
fileobj(filename, "owner" => varref("argument") )
|
|
692
|
-
]
|
|
693
|
-
))
|
|
450
|
+
# Verify scope context is handled correctly.
|
|
451
|
+
def test_scopeinside
|
|
452
|
+
scope = mkscope()
|
|
694
453
|
|
|
695
|
-
|
|
696
|
-
|
|
454
|
+
one = :one
|
|
455
|
+
two = :two
|
|
697
456
|
|
|
698
|
-
#
|
|
699
|
-
|
|
457
|
+
# First just test the basic functionality.
|
|
458
|
+
assert_nothing_raised {
|
|
459
|
+
scope.inside :one do
|
|
460
|
+
assert_equal(:one, scope.inside, "Context did not get set")
|
|
461
|
+
end
|
|
462
|
+
assert_nil(scope.inside, "Context did not revert")
|
|
463
|
+
}
|
|
700
464
|
|
|
701
|
-
|
|
465
|
+
# Now make sure error settings work.
|
|
466
|
+
assert_raise(RuntimeError) {
|
|
467
|
+
scope.inside :one do
|
|
468
|
+
raise RuntimeError, "This is a failure, yo"
|
|
469
|
+
end
|
|
470
|
+
}
|
|
471
|
+
assert_nil(scope.inside, "Context did not revert")
|
|
702
472
|
|
|
703
|
-
|
|
473
|
+
# Now test it a bit deeper in.
|
|
474
|
+
assert_nothing_raised {
|
|
475
|
+
scope.inside :one do
|
|
476
|
+
scope.inside :two do
|
|
477
|
+
assert_equal(:two, scope.inside, "Context did not get set")
|
|
478
|
+
end
|
|
479
|
+
assert_equal(:one, scope.inside, "Context did not get set")
|
|
480
|
+
end
|
|
481
|
+
assert_nil(scope.inside, "Context did not revert")
|
|
482
|
+
}
|
|
704
483
|
|
|
705
|
-
|
|
484
|
+
# And lastly, check errors deeper in
|
|
485
|
+
assert_nothing_raised {
|
|
486
|
+
scope.inside :one do
|
|
487
|
+
begin
|
|
488
|
+
scope.inside :two do
|
|
489
|
+
raise "a failure"
|
|
490
|
+
end
|
|
491
|
+
rescue
|
|
492
|
+
end
|
|
493
|
+
assert_equal(:one, scope.inside, "Context did not get set")
|
|
494
|
+
end
|
|
495
|
+
assert_nil(scope.inside, "Context did not revert")
|
|
496
|
+
}
|
|
706
497
|
|
|
707
|
-
assert_equal("parentfoo", flat[0]["owner"], "default did not take")
|
|
708
498
|
end
|
|
709
499
|
|
|
710
500
|
if defined? ActiveRecord
|
|
711
|
-
# Verify that we recursively mark as
|
|
501
|
+
# Verify that we recursively mark as exported the results of collectable
|
|
712
502
|
# components.
|
|
713
|
-
def
|
|
503
|
+
def test_exportedcomponents
|
|
504
|
+
interp, scope, source = mkclassframing
|
|
714
505
|
children = []
|
|
715
506
|
|
|
716
507
|
args = AST::ASTArray.new(
|
|
@@ -718,47 +509,44 @@ class TestScope < Test::Unit::TestCase
|
|
|
718
509
|
:line => rand(100),
|
|
719
510
|
:children => [nameobj("arg")]
|
|
720
511
|
)
|
|
512
|
+
|
|
721
513
|
# Create a top-level component
|
|
722
|
-
|
|
514
|
+
interp.newdefine "one", :arguments => [%w{arg}],
|
|
515
|
+
:code => AST::ASTArray.new(
|
|
516
|
+
:children => [
|
|
517
|
+
resourcedef("file", "/tmp", {"owner" => varref("arg")})
|
|
518
|
+
]
|
|
519
|
+
)
|
|
723
520
|
|
|
724
521
|
# And a component that calls it
|
|
725
|
-
|
|
726
|
-
:
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
522
|
+
interp.newdefine "two", :arguments => [%w{arg}],
|
|
523
|
+
:code => AST::ASTArray.new(
|
|
524
|
+
:children => [
|
|
525
|
+
resourcedef("one", "ptest", {"arg" => varref("arg")})
|
|
526
|
+
]
|
|
527
|
+
)
|
|
730
528
|
|
|
731
529
|
# And then a third component that calls the second
|
|
732
|
-
|
|
733
|
-
:
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
530
|
+
interp.newdefine "three", :arguments => [%w{arg}],
|
|
531
|
+
:code => AST::ASTArray.new(
|
|
532
|
+
:children => [
|
|
533
|
+
resourcedef("two", "yay", {"arg" => varref("arg")})
|
|
534
|
+
]
|
|
535
|
+
)
|
|
737
536
|
|
|
738
537
|
# lastly, create an object that calls our third component
|
|
739
|
-
obj =
|
|
538
|
+
obj = resourcedef("three", "boo", {"arg" => "parentfoo"})
|
|
740
539
|
|
|
741
|
-
# And mark it as
|
|
742
|
-
obj.
|
|
540
|
+
# And mark it as exported
|
|
541
|
+
obj.exported = true
|
|
743
542
|
|
|
744
|
-
|
|
543
|
+
obj.evaluate :scope => scope
|
|
745
544
|
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
top = AST::ASTArray.new(
|
|
749
|
-
:children => children
|
|
750
|
-
)
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
trans = nil
|
|
754
|
-
scope = nil
|
|
755
|
-
assert_nothing_raised {
|
|
756
|
-
scope = Puppet::Parser::Scope.new()
|
|
757
|
-
trans = scope.evaluate(:ast => top)
|
|
758
|
-
}
|
|
545
|
+
# And then evaluate it
|
|
546
|
+
interp.evaliterate(scope)
|
|
759
547
|
|
|
760
548
|
%w{file}.each do |type|
|
|
761
|
-
objects = scope.
|
|
549
|
+
objects = scope.lookupexported(type)
|
|
762
550
|
|
|
763
551
|
assert(!objects.empty?, "Did not get an exported %s" % type)
|
|
764
552
|
end
|
|
@@ -769,7 +557,6 @@ class TestScope < Test::Unit::TestCase
|
|
|
769
557
|
# scope.
|
|
770
558
|
def test_storeandcollect
|
|
771
559
|
Puppet[:storeconfigs] = true
|
|
772
|
-
Puppet::Rails.clear
|
|
773
560
|
Puppet::Rails.init
|
|
774
561
|
sleep 1
|
|
775
562
|
children = []
|
|
@@ -777,11 +564,11 @@ class TestScope < Test::Unit::TestCase
|
|
|
777
564
|
File.open(file, "w") { |f|
|
|
778
565
|
f.puts "
|
|
779
566
|
class yay {
|
|
780
|
-
|
|
567
|
+
@@host { myhost: ip => \"192.168.0.2\" }
|
|
781
568
|
}
|
|
782
569
|
include yay
|
|
783
|
-
|
|
784
|
-
|
|
570
|
+
@@host { puppet: ip => \"192.168.0.3\" }
|
|
571
|
+
Host <<||>>"
|
|
785
572
|
}
|
|
786
573
|
|
|
787
574
|
interp = nil
|
|
@@ -798,7 +585,7 @@ host <||>"
|
|
|
798
585
|
# if we pull it up from the database.
|
|
799
586
|
2.times { |i|
|
|
800
587
|
assert_nothing_raised {
|
|
801
|
-
objects = interp.run("localhost", {})
|
|
588
|
+
objects = interp.run("localhost", {"hostname" => "localhost"})
|
|
802
589
|
}
|
|
803
590
|
|
|
804
591
|
flat = objects.flatten
|
|
@@ -808,53 +595,156 @@ host <||>"
|
|
|
808
595
|
end
|
|
809
596
|
}
|
|
810
597
|
end
|
|
598
|
+
else
|
|
599
|
+
$stderr.puts "No ActiveRecord -- skipping collection tests"
|
|
600
|
+
end
|
|
811
601
|
|
|
812
|
-
#
|
|
813
|
-
def
|
|
814
|
-
|
|
815
|
-
children = []
|
|
602
|
+
# Make sure tags behave appropriately.
|
|
603
|
+
def test_tags
|
|
604
|
+
interp, scope, source = mkclassframing
|
|
816
605
|
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
]
|
|
824
|
-
))
|
|
825
|
-
|
|
826
|
-
# now create a child class with differ values
|
|
827
|
-
children << classobj("child", :parentclass => nameobj("parent"),
|
|
828
|
-
:code => AST::ASTArray.new(
|
|
829
|
-
:children => [
|
|
830
|
-
fileobj(filename, "owner" => "bin")
|
|
831
|
-
]
|
|
832
|
-
))
|
|
833
|
-
|
|
834
|
-
# Now call the child class
|
|
835
|
-
assert_nothing_raised("Could not add AST nodes for calling") {
|
|
836
|
-
children << AST::ObjectDef.new(
|
|
837
|
-
:type => nameobj("child"),
|
|
838
|
-
:name => nameobj("yayness"),
|
|
839
|
-
:params => astarray()
|
|
840
|
-
)
|
|
841
|
-
}
|
|
606
|
+
# First make sure we can only set legal tags
|
|
607
|
+
["an invalid tag", "-anotherinvalid", "bad*tag"].each do |tag|
|
|
608
|
+
assert_raise(Puppet::ParseError, "Tag #{tag} was considered valid") do
|
|
609
|
+
scope.tag tag
|
|
610
|
+
end
|
|
611
|
+
end
|
|
842
612
|
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
613
|
+
# Now make sure good tags make it through.
|
|
614
|
+
tags = %w{good-tag yaytag GoodTag another_tag}
|
|
615
|
+
tags.each do |tag|
|
|
616
|
+
assert_nothing_raised("Tag #{tag} was considered invalid") do
|
|
617
|
+
scope.tag tag
|
|
618
|
+
end
|
|
619
|
+
end
|
|
849
620
|
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
621
|
+
# And make sure we get each of them.
|
|
622
|
+
ptags = scope.tags
|
|
623
|
+
tags.each do |tag|
|
|
624
|
+
assert(ptags.include?(tag), "missing #{tag}")
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
# Now create a subscope and set some tags there
|
|
629
|
+
newscope = scope.newscope(:type => 'subscope')
|
|
630
|
+
|
|
631
|
+
# set some tags
|
|
632
|
+
newscope.tag "onemore", "yaytag"
|
|
633
|
+
|
|
634
|
+
# And make sure we get them plus our parent tags
|
|
635
|
+
assert_equal((ptags + %w{onemore subscope}).sort, newscope.tags.sort)
|
|
856
636
|
end
|
|
857
|
-
|
|
858
|
-
|
|
637
|
+
|
|
638
|
+
# Make sure we successfully translate objects
|
|
639
|
+
def test_translate
|
|
640
|
+
interp, scope, source = mkclassframing
|
|
641
|
+
|
|
642
|
+
# Create a define that we'll be using
|
|
643
|
+
interp.newdefine("wrapper", :code => AST::ASTArray.new(:children => [
|
|
644
|
+
resourcedef("file", varref("name"), "owner" => "root")
|
|
645
|
+
]))
|
|
646
|
+
|
|
647
|
+
# Now create a resource that uses that define
|
|
648
|
+
define = mkresource(:type => "wrapper", :title => "/tmp/testing",
|
|
649
|
+
:scope => scope, :source => source, :params => :none)
|
|
650
|
+
|
|
651
|
+
scope.setresource define
|
|
652
|
+
|
|
653
|
+
# And a normal resource
|
|
654
|
+
scope.setresource mkresource(:type => "file", :title => "/tmp/rahness",
|
|
655
|
+
:scope => scope, :source => source,
|
|
656
|
+
:params => {:owner => "root"})
|
|
657
|
+
|
|
658
|
+
# Evaluate the the define thing.
|
|
659
|
+
define.evaluate
|
|
660
|
+
|
|
661
|
+
# Now the scope should have a resource and a subscope. Translate the
|
|
662
|
+
# whole thing.
|
|
663
|
+
ret = nil
|
|
664
|
+
assert_nothing_raised do
|
|
665
|
+
ret = scope.translate
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
assert_instance_of(Puppet::TransBucket, ret)
|
|
669
|
+
|
|
670
|
+
ret.each do |obj|
|
|
671
|
+
assert(obj.is_a?(Puppet::TransBucket) || obj.is_a?(Puppet::TransObject),
|
|
672
|
+
"Got a non-transportable object %s" % obj.class)
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
rahness = ret.find { |c| c.type == "file" and c.name == "/tmp/rahness" }
|
|
676
|
+
assert(rahness, "Could not find top-level file")
|
|
677
|
+
assert_equal("root", rahness["owner"])
|
|
678
|
+
|
|
679
|
+
bucket = ret.find { |c| c.class == Puppet::TransBucket and c.name == "/tmp/testing" }
|
|
680
|
+
assert(bucket, "Could not find define bucket")
|
|
681
|
+
|
|
682
|
+
testing = bucket.find { |c| c.type == "file" and c.name == "/tmp/testing" }
|
|
683
|
+
assert(testing, "Could not find define file")
|
|
684
|
+
assert_equal("root", testing["owner"])
|
|
685
|
+
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
def test_namespaces
|
|
689
|
+
interp, scope, source = mkclassframing
|
|
690
|
+
|
|
691
|
+
assert_equal([""], scope.namespaces,
|
|
692
|
+
"Started out with incorrect namespaces")
|
|
693
|
+
assert_nothing_raised { scope.add_namespace("fun::test") }
|
|
694
|
+
assert_equal(["fun::test"], scope.namespaces,
|
|
695
|
+
"Did not add namespace correctly")
|
|
696
|
+
assert_nothing_raised { scope.add_namespace("yay::test") }
|
|
697
|
+
assert_equal(["fun::test", "yay::test"], scope.namespaces,
|
|
698
|
+
"Did not add extra namespace correctly")
|
|
699
|
+
end
|
|
700
|
+
|
|
701
|
+
def test_findclass_and_finddefine
|
|
702
|
+
interp = mkinterp
|
|
703
|
+
|
|
704
|
+
# Make sure our scope calls the interp findclass method with
|
|
705
|
+
# the right namespaces
|
|
706
|
+
scope = mkscope :interp => interp
|
|
707
|
+
|
|
708
|
+
interp.metaclass.send(:attr_accessor, :last)
|
|
709
|
+
|
|
710
|
+
methods = [:findclass, :finddefine]
|
|
711
|
+
methods.each do |m|
|
|
712
|
+
interp.meta_def(m) do |namespace, name|
|
|
713
|
+
@checked ||= []
|
|
714
|
+
@checked << [namespace, name]
|
|
715
|
+
|
|
716
|
+
# Only return a value on the last call.
|
|
717
|
+
if @last == namespace
|
|
718
|
+
ret = @checked.dup
|
|
719
|
+
@checked.clear
|
|
720
|
+
return ret
|
|
721
|
+
else
|
|
722
|
+
return nil
|
|
723
|
+
end
|
|
724
|
+
end
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
test = proc do |should|
|
|
728
|
+
interp.last = scope.namespaces[-1]
|
|
729
|
+
methods.each do |method|
|
|
730
|
+
result = scope.send(method, "testing")
|
|
731
|
+
assert_equal(should, result,
|
|
732
|
+
"did not get correct value from %s with namespaces %s" %
|
|
733
|
+
[method, scope.namespaces.inspect])
|
|
734
|
+
end
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
# Start with the empty namespace
|
|
738
|
+
assert_nothing_raised { test.call([["", "testing"]]) }
|
|
739
|
+
|
|
740
|
+
# Now add a namespace
|
|
741
|
+
scope.add_namespace("a")
|
|
742
|
+
assert_nothing_raised { test.call([["a", "testing"]]) }
|
|
743
|
+
|
|
744
|
+
# And another
|
|
745
|
+
scope.add_namespace("b")
|
|
746
|
+
assert_nothing_raised { test.call([["a", "testing"], ["b", "testing"]]) }
|
|
859
747
|
end
|
|
860
748
|
end
|
|
749
|
+
|
|
750
|
+
# $Id: scope.rb 2418 2007-04-26 19:09:24Z luke $
|