puppet 0.24.6 → 0.24.7
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/CHANGELOG +115 -0
- data/Rakefile +43 -14
- data/bin/puppetca +6 -5
- data/bin/puppetdoc +109 -15
- data/bin/ralsh +3 -1
- data/conf/redhat/puppet.spec +74 -48
- data/examples/mcx_dock_absent.pp +4 -0
- data/examples/mcx_dock_default.pp +118 -0
- data/examples/mcx_dock_full.pp +125 -0
- data/examples/mcx_dock_invalid.pp +9 -0
- data/examples/mcx_nogroup.pp +118 -0
- data/examples/mcx_notexists_absent.pp +4 -0
- data/ext/emacs/puppet-mode.el +1 -1
- data/lib/puppet.rb +1 -1
- data/lib/puppet/external/nagios/base.rb +114 -71
- data/lib/puppet/feature/base.rb +6 -0
- data/lib/puppet/indirector/yaml.rb +12 -3
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/network/client/master.rb +1 -1
- data/lib/puppet/network/xmlrpc/client.rb +3 -1
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +15 -0
- data/lib/puppet/parser/ast/astarray.rb +1 -2
- data/lib/puppet/parser/ast/casestatement.rb +2 -0
- data/lib/puppet/parser/ast/collection.rb +2 -0
- data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
- data/lib/puppet/parser/ast/definition.rb +2 -0
- data/lib/puppet/parser/ast/else.rb +3 -0
- data/lib/puppet/parser/ast/function.rb +19 -12
- data/lib/puppet/parser/ast/hostclass.rb +9 -1
- data/lib/puppet/parser/ast/ifstatement.rb +3 -0
- data/lib/puppet/parser/ast/node.rb +3 -0
- data/lib/puppet/parser/ast/resource.rb +3 -0
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
- data/lib/puppet/parser/ast/resource_override.rb +3 -0
- data/lib/puppet/parser/ast/vardef.rb +3 -0
- data/lib/puppet/parser/functions.rb +14 -0
- data/lib/puppet/parser/functions/inline_template.rb +21 -0
- data/lib/puppet/parser/functions/template.rb +3 -2
- data/lib/puppet/parser/lexer.rb +56 -7
- data/lib/puppet/parser/parser.rb +114 -98
- data/lib/puppet/parser/parser_support.rb +24 -4
- data/lib/puppet/parser/resource/reference.rb +4 -3
- data/lib/puppet/parser/templatewrapper.rb +30 -22
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/list.rb +7 -2
- data/lib/puppet/property/ordered_list.rb +22 -0
- data/lib/puppet/provider/augeas/augeas.rb +189 -0
- data/lib/puppet/provider/computer/computer.rb +22 -0
- data/lib/puppet/provider/confine.rb +4 -1
- data/lib/puppet/provider/confine/variable.rb +13 -2
- data/lib/puppet/provider/confine_collection.rb +4 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/group/directoryservice.rb +6 -3
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/group/ldap.rb +11 -9
- data/lib/puppet/provider/group/netinfo.rb +8 -4
- data/lib/puppet/provider/group/pw.rb +5 -1
- data/lib/puppet/provider/host/netinfo.rb +5 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
- data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
- data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
- data/lib/puppet/provider/package/appdmg.rb +0 -3
- data/lib/puppet/provider/package/apt.rb +6 -0
- data/lib/puppet/provider/package/rpm.rb +2 -0
- data/lib/puppet/provider/package/yum.rb +5 -1
- data/lib/puppet/provider/package/yumhelper.py +9 -0
- data/lib/puppet/provider/service/base.rb +9 -6
- data/lib/puppet/provider/service/daemontools.rb +25 -15
- data/lib/puppet/provider/service/debian.rb +6 -2
- data/lib/puppet/provider/service/freebsd.rb +5 -2
- data/lib/puppet/provider/service/gentoo.rb +6 -3
- data/lib/puppet/provider/service/init.rb +31 -21
- data/lib/puppet/provider/service/launchd.rb +195 -0
- data/lib/puppet/provider/service/redhat.rb +5 -2
- data/lib/puppet/provider/service/runit.rb +30 -20
- data/lib/puppet/provider/service/smf.rb +7 -4
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/netinfo.rb +9 -3
- data/lib/puppet/provider/user/user_role_add.rb +43 -6
- data/lib/puppet/provider/zfs/solaris.rb +45 -0
- data/lib/puppet/provider/zone/solaris.rb +8 -4
- data/lib/puppet/provider/zpool/solaris.rb +116 -0
- data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
- data/lib/puppet/rails/database/schema.rb +1 -0
- data/lib/puppet/rails/host.rb +4 -0
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +15 -6
- data/lib/puppet/transaction/change.rb +3 -5
- data/lib/puppet/transportable.rb +1 -0
- data/lib/puppet/type/augeas.rb +155 -0
- data/lib/puppet/type/computer.rb +62 -0
- data/lib/puppet/type/exec.rb +2 -1
- data/lib/puppet/type/file.rb +1 -1
- data/lib/puppet/type/file/ensure.rb +8 -5
- data/lib/puppet/type/file/mode.rb +0 -14
- data/lib/puppet/type/file/owner.rb +32 -64
- data/lib/puppet/type/file/selcontext.rb +3 -8
- data/lib/puppet/type/group.rb +27 -45
- data/lib/puppet/type/k5login.rb +1 -1
- data/lib/puppet/type/macauthorization.rb +141 -0
- data/lib/puppet/type/mcx.rb +115 -0
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/nagios_hostdependency.rb +3 -0
- data/lib/puppet/type/ssh_authorized_key.rb +16 -0
- data/lib/puppet/type/tidy.rb +43 -14
- data/lib/puppet/type/user.rb +25 -1
- data/lib/puppet/type/zfs.rb +51 -0
- data/lib/puppet/type/zone.rb +8 -0
- data/lib/puppet/type/zpool.rb +93 -0
- data/lib/puppet/util.rb +17 -38
- data/lib/puppet/util/file_locking.rb +44 -0
- data/lib/puppet/util/filetype.rb +3 -3
- data/lib/puppet/util/log.rb +1 -16
- data/lib/puppet/util/metric.rb +0 -5
- data/lib/puppet/util/rdoc.rb +85 -0
- data/lib/puppet/util/rdoc/code_objects.rb +219 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
- data/lib/puppet/util/rdoc/parser.rb +437 -0
- data/lib/puppet/util/selinux.rb +135 -63
- data/lib/puppet/util/settings.rb +136 -126
- data/lib/puppet/util/storage.rb +4 -2
- data/spec/Rakefile +91 -0
- data/spec/integration/checksum.rb +47 -0
- data/spec/integration/defaults.rb +47 -0
- data/spec/integration/file_serving/configuration.rb +43 -0
- data/spec/integration/file_serving/content.rb +18 -0
- data/spec/integration/file_serving/metadata.rb +18 -0
- data/spec/integration/indirector/direct_file_server.rb +80 -0
- data/spec/integration/indirector/file_content/file_server.rb +18 -0
- data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
- data/spec/integration/indirector/module_files.rb +57 -0
- data/spec/integration/indirector/node/ldap.rb +15 -0
- data/spec/integration/indirector/rest.rb +464 -0
- data/spec/integration/network/server/mongrel.rb +48 -0
- data/spec/integration/network/server/webrick.rb +48 -0
- data/spec/integration/node.rb +93 -0
- data/spec/integration/node/catalog.rb +54 -0
- data/spec/integration/node/facts.rb +45 -0
- data/spec/integration/provider/package.rb +26 -0
- data/spec/integration/provider/service/init.rb +32 -0
- data/spec/integration/reference/providers.rb +17 -0
- data/spec/integration/reports.rb +14 -0
- data/spec/integration/transaction/report.rb +26 -0
- data/spec/integration/type/package.rb +22 -0
- data/spec/integration/util/file_locking.rb +36 -0
- data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
- data/spec/monkey_patches/alias_should_to_must.rb +5 -0
- data/spec/shared_behaviours/file_server_terminus.rb +42 -0
- data/spec/shared_behaviours/file_serving.rb +64 -0
- data/spec/shared_behaviours/memory_terminus.rb +32 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/unit/executables/client/certhandler.rb +122 -0
- data/spec/unit/file_serving/configuration.rb +224 -0
- data/spec/unit/file_serving/configuration/parser.rb +135 -0
- data/spec/unit/file_serving/content.rb +71 -0
- data/spec/unit/file_serving/file_base.rb +124 -0
- data/spec/unit/file_serving/fileset.rb +239 -0
- data/spec/unit/file_serving/indirection_hooks.rb +124 -0
- data/spec/unit/file_serving/metadata.rb +187 -0
- data/spec/unit/file_serving/mount.rb +143 -0
- data/spec/unit/file_serving/terminus_helper.rb +76 -0
- data/spec/unit/indirector.rb +152 -0
- data/spec/unit/indirector/catalog/compiler.rb +156 -0
- data/spec/unit/indirector/catalog/yaml.rb +25 -0
- data/spec/unit/indirector/checksum/file.rb +139 -0
- data/spec/unit/indirector/code.rb +33 -0
- data/spec/unit/indirector/direct_file_server.rb +89 -0
- data/spec/unit/indirector/envelope.rb +47 -0
- data/spec/unit/indirector/exec.rb +51 -0
- data/spec/unit/indirector/facts/facter.rb +76 -0
- data/spec/unit/indirector/facts/yaml.rb +26 -0
- data/spec/unit/indirector/file.rb +154 -0
- data/spec/unit/indirector/file_content/file.rb +18 -0
- data/spec/unit/indirector/file_content/file_server.rb +18 -0
- data/spec/unit/indirector/file_content/modules.rb +18 -0
- data/spec/unit/indirector/file_content/rest.rb +11 -0
- data/spec/unit/indirector/file_metadata/file.rb +52 -0
- data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
- data/spec/unit/indirector/file_metadata/modules.rb +42 -0
- data/spec/unit/indirector/file_metadata/rest.rb +9 -0
- data/spec/unit/indirector/file_server.rb +184 -0
- data/spec/unit/indirector/indirection.rb +731 -0
- data/spec/unit/indirector/ldap.rb +143 -0
- data/spec/unit/indirector/memory.rb +29 -0
- data/spec/unit/indirector/module_files.rb +259 -0
- data/spec/unit/indirector/node/exec.rb +69 -0
- data/spec/unit/indirector/node/ldap.rb +424 -0
- data/spec/unit/indirector/node/memory.rb +19 -0
- data/spec/unit/indirector/node/plain.rb +19 -0
- data/spec/unit/indirector/node/rest.rb +13 -0
- data/spec/unit/indirector/node/yaml.rb +25 -0
- data/spec/unit/indirector/plain.rb +29 -0
- data/spec/unit/indirector/report/processor.rb +81 -0
- data/spec/unit/indirector/request.rb +87 -0
- data/spec/unit/indirector/rest.rb +372 -0
- data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
- data/spec/unit/indirector/terminus.rb +245 -0
- data/spec/unit/indirector/yaml.rb +145 -0
- data/spec/unit/module.rb +247 -0
- data/spec/unit/network/client.rb +45 -0
- data/spec/unit/network/client/master.rb +442 -0
- data/spec/unit/network/handler/fileserver.rb +179 -0
- data/spec/unit/network/http.rb +35 -0
- data/spec/unit/network/http/mongrel.rb +117 -0
- data/spec/unit/network/http/mongrel/rest.rb +377 -0
- data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
- data/spec/unit/network/http/webrick.rb +127 -0
- data/spec/unit/network/http/webrick/rest.rb +323 -0
- data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
- data/spec/unit/network/http_pool.rb +238 -0
- data/spec/unit/network/server.rb +316 -0
- data/spec/unit/network/xmlrpc/client.rb +13 -0
- data/spec/unit/node.rb +167 -0
- data/spec/unit/node/catalog.rb +864 -0
- data/spec/unit/node/environment.rb +37 -0
- data/spec/unit/node/facts.rb +44 -0
- data/spec/unit/other/checksum.rb +92 -0
- data/spec/unit/other/pgraph.rb +210 -0
- data/spec/unit/other/transaction.rb +33 -0
- data/spec/unit/other/transbucket.rb +172 -0
- data/spec/unit/other/transobject.rb +92 -0
- data/spec/unit/parameter.rb +24 -0
- data/spec/unit/parser/ast.rb +37 -0
- data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
- data/spec/unit/parser/ast/astarray.rb +66 -0
- data/spec/unit/parser/ast/boolean_operator.rb +53 -0
- data/spec/unit/parser/ast/collexpr.rb +92 -0
- data/spec/unit/parser/ast/comparison_operator.rb +92 -0
- data/spec/unit/parser/ast/definition.rb +195 -0
- data/spec/unit/parser/ast/function.rb +77 -0
- data/spec/unit/parser/ast/hostclass.rb +148 -0
- data/spec/unit/parser/ast/minus.rb +36 -0
- data/spec/unit/parser/ast/node.rb +125 -0
- data/spec/unit/parser/ast/nop.rb +20 -0
- data/spec/unit/parser/ast/not.rb +30 -0
- data/spec/unit/parser/ast/resource_override.rb +51 -0
- data/spec/unit/parser/ast/resource_reference.rb +63 -0
- data/spec/unit/parser/ast/vardef.rb +47 -0
- data/spec/unit/parser/collector.rb +426 -0
- data/spec/unit/parser/compiler.rb +561 -0
- data/spec/unit/parser/functions.rb +83 -0
- data/spec/unit/parser/functions/inline_template.rb +59 -0
- data/spec/unit/parser/functions/template.rb +62 -0
- data/spec/unit/parser/interpreter.rb +138 -0
- data/spec/unit/parser/lexer.rb +646 -0
- data/spec/unit/parser/parser.rb +228 -0
- data/spec/unit/parser/resource.rb +336 -0
- data/spec/unit/parser/resource/reference.rb +95 -0
- data/spec/unit/parser/scope.rb +87 -0
- data/spec/unit/parser/templatewrapper.rb +129 -0
- data/spec/unit/property.rb +35 -0
- data/spec/unit/property/keyvalue.rb +168 -0
- data/spec/unit/property/list.rb +156 -0
- data/spec/unit/property/ordered_list.rb +64 -0
- data/spec/unit/provider/augeas/augeas.rb +238 -0
- data/spec/unit/provider/confine.rb +78 -0
- data/spec/unit/provider/confine/exists.rb +81 -0
- data/spec/unit/provider/confine/false.rb +53 -0
- data/spec/unit/provider/confine/feature.rb +60 -0
- data/spec/unit/provider/confine/true.rb +53 -0
- data/spec/unit/provider/confine/variable.rb +107 -0
- data/spec/unit/provider/confine_collection.rb +134 -0
- data/spec/unit/provider/confiner.rb +63 -0
- data/spec/unit/provider/group/groupadd.rb +31 -0
- data/spec/unit/provider/group/ldap.rb +105 -0
- data/spec/unit/provider/ldap.rb +248 -0
- data/spec/unit/provider/macauthorization.rb +147 -0
- data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
- data/spec/unit/provider/mount.rb +130 -0
- data/spec/unit/provider/mount/parsed.rb +185 -0
- data/spec/unit/provider/package/apt.rb +138 -0
- data/spec/unit/provider/package/dpkg.rb +163 -0
- data/spec/unit/provider/package/gem.rb +87 -0
- data/spec/unit/provider/package/hpux.rb +52 -0
- data/spec/unit/provider/selboolean.rb +37 -0
- data/spec/unit/provider/selmodule-example.pp +0 -0
- data/spec/unit/provider/selmodule.rb +66 -0
- data/spec/unit/provider/service/daemontools.rb +124 -0
- data/spec/unit/provider/service/launchd.rb +134 -0
- data/spec/unit/provider/service/runit.rb +117 -0
- data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
- data/spec/unit/provider/user/hpux.rb +25 -0
- data/spec/unit/provider/user/ldap.rb +279 -0
- data/spec/unit/provider/user/user_role_add.rb +249 -0
- data/spec/unit/provider/user/useradd.rb +115 -0
- data/spec/unit/provider/zfs/solaris.rb +87 -0
- data/spec/unit/provider/zone/solaris.rb +42 -0
- data/spec/unit/provider/zpool/solaris.rb +179 -0
- data/spec/unit/rails.rb +125 -0
- data/spec/unit/relationship.rb +149 -0
- data/spec/unit/reports.rb +61 -0
- data/spec/unit/resource_reference.rb +73 -0
- data/spec/unit/simple_graph.rb +280 -0
- data/spec/unit/transaction/change.rb +187 -0
- data/spec/unit/transaction/event.rb +25 -0
- data/spec/unit/transaction/report.rb +40 -0
- data/spec/unit/type.rb +64 -0
- data/spec/unit/type/augeas.rb +113 -0
- data/spec/unit/type/computer.rb +82 -0
- data/spec/unit/type/exec.rb +91 -0
- data/spec/unit/type/file.rb +155 -0
- data/spec/unit/type/file/ensure.rb +21 -0
- data/spec/unit/type/file/group.rb +118 -0
- data/spec/unit/type/file/owner.rb +132 -0
- data/spec/unit/type/file/selinux.rb +82 -0
- data/spec/unit/type/group.rb +40 -0
- data/spec/unit/type/macauthorization.rb +78 -0
- data/spec/unit/type/mcx.rb +108 -0
- data/spec/unit/type/mount.rb +219 -0
- data/spec/unit/type/nagios.rb +63 -0
- data/spec/unit/type/noop_metaparam.rb +38 -0
- data/spec/unit/type/package.rb +246 -0
- data/spec/unit/type/resources.rb +27 -0
- data/spec/unit/type/schedule.rb +339 -0
- data/spec/unit/type/selboolean.rb +47 -0
- data/spec/unit/type/selmodule.rb +18 -0
- data/spec/unit/type/service.rb +254 -0
- data/spec/unit/type/ssh_authorized_key.rb +106 -0
- data/spec/unit/type/tidy.rb +68 -0
- data/spec/unit/type/user.rb +260 -0
- data/spec/unit/type/zfs.rb +45 -0
- data/spec/unit/type/zone.rb +20 -0
- data/spec/unit/type/zpool.rb +110 -0
- data/spec/unit/util/checksums.rb +99 -0
- data/spec/unit/util/constant_inflector.rb +70 -0
- data/spec/unit/util/file_locking.rb +115 -0
- data/spec/unit/util/ldap/connection.rb +169 -0
- data/spec/unit/util/ldap/generator.rb +54 -0
- data/spec/unit/util/ldap/manager.rb +654 -0
- data/spec/unit/util/loadedfile.rb +65 -0
- data/spec/unit/util/log.rb +107 -0
- data/spec/unit/util/metric.rb +95 -0
- data/spec/unit/util/nagios_maker.rb +128 -0
- data/spec/unit/util/posix.rb +256 -0
- data/spec/unit/util/resource_template.rb +58 -0
- data/spec/unit/util/selinux.rb +219 -0
- data/spec/unit/util/settings.rb +847 -0
- data/spec/unit/util/storage.rb +248 -0
- data/spec/unit/util/tagging.rb +92 -0
- data/spec/unit/util/uri_helper.rb +41 -0
- data/spec/unit/util/user_attr.rb +47 -0
- data/spec/unit/util/warnings.rb +35 -0
- data/test/certmgr/support.rb +0 -6
- data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
- data/test/data/snippets/multilinecomments.pp +6 -0
- data/test/data/snippets/multipleclass.pp +9 -0
- data/test/language/functions.rb +11 -1
- data/test/language/snippets.rb +16 -0
- data/test/lib/puppettest/runnable_test.rb +1 -1
- data/test/network/handler/fileserver.rb +5 -0
- data/test/other/report.rb +0 -4
- data/test/ral/type/resources.rb +2 -19
- data/test/util/settings.rb +4 -4
- data/test/util/storage.rb +0 -24
- data/test/util/utiltest.rb +0 -33
- metadata +319 -26
- data/conf/debian/README.source +0 -2
- data/conf/debian/TODO.Debian +0 -1
- data/conf/debian/changelog +0 -257
- data/conf/debian/compat +0 -1
- data/conf/debian/control +0 -45
- data/conf/debian/copyright +0 -17
- data/conf/debian/docs +0 -1
- data/conf/debian/fileserver.conf +0 -12
- data/conf/debian/puppet.NEWS +0 -63
- data/conf/debian/puppet.conf +0 -8
- data/conf/debian/puppet.dirs +0 -7
- data/conf/debian/puppet.files +0 -6
- data/conf/debian/puppet.init +0 -64
- data/conf/debian/puppet.logrotate +0 -11
- data/conf/debian/puppet.postinst +0 -9
- data/conf/debian/puppet.postrm +0 -21
- data/conf/debian/puppet.preinst +0 -25
- data/conf/debian/puppetmaster.files +0 -4
- data/conf/debian/puppetmaster.init +0 -58
- data/conf/debian/rules +0 -115
- data/conf/debian/watch +0 -2
- data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::Node do
|
6
|
+
before :each do
|
7
|
+
@node = Puppet::Node.new "testnode"
|
8
|
+
@parser = Puppet::Parser::Parser.new :environment => "development"
|
9
|
+
@scope_resource = stub 'scope_resource', :builtin? => true
|
10
|
+
@compiler = Puppet::Parser::Compiler.new(@node, @parser)
|
11
|
+
|
12
|
+
@scope = @compiler.topscope
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Puppet::Parser::AST::Node, "when evaluating" do
|
16
|
+
|
17
|
+
before do
|
18
|
+
@top = @parser.newnode("top").shift
|
19
|
+
@middle = @parser.newnode("middle", :parent => "top").shift
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create a resource that references itself" do
|
23
|
+
@top.evaluate(@scope)
|
24
|
+
|
25
|
+
@compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should evaluate the parent class if one exists" do
|
29
|
+
@middle.evaluate(@scope)
|
30
|
+
|
31
|
+
@compiler.catalog.resource(:node, "top").should be_an_instance_of(Puppet::Parser::Resource)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should fail to evaluate if a parent class is defined but cannot be found" do
|
35
|
+
othertop = @parser.newnode("something", :parent => "yay").shift
|
36
|
+
lambda { othertop.evaluate(@scope) }.should raise_error(Puppet::ParseError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should not create a new resource if one already exists" do
|
40
|
+
@compiler.catalog.expects(:resource).with(:node, "top").returns("something")
|
41
|
+
@compiler.catalog.expects(:add_resource).never
|
42
|
+
@top.evaluate(@scope)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not create a new parent resource if one already exists and it has a parent class" do
|
46
|
+
@top.evaluate(@scope)
|
47
|
+
|
48
|
+
top_resource = @compiler.catalog.resource(:node, "top")
|
49
|
+
|
50
|
+
@middle.evaluate(@scope)
|
51
|
+
|
52
|
+
@compiler.catalog.resource(:node, "top").should equal(top_resource)
|
53
|
+
end
|
54
|
+
|
55
|
+
# #795 - tag before evaluation.
|
56
|
+
it "should tag the catalog with the resource tags when it is evaluated" do
|
57
|
+
@middle.evaluate(@scope)
|
58
|
+
|
59
|
+
@compiler.catalog.should be_tagged("middle")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should tag the catalog with the parent class tags when it is evaluated" do
|
63
|
+
@middle.evaluate(@scope)
|
64
|
+
|
65
|
+
@compiler.catalog.should be_tagged("top")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe Puppet::Parser::AST::Node, "when evaluating code" do
|
70
|
+
|
71
|
+
before do
|
72
|
+
@top_resource = stub "top_resource"
|
73
|
+
@top = @parser.newnode("top", :code => @top_resource).shift
|
74
|
+
|
75
|
+
@middle_resource = stub "middle_resource"
|
76
|
+
@middle = @parser.newnode("middle", :parent => "top", :code => @middle_resource).shift
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should evaluate the code referred to by the class" do
|
80
|
+
@top_resource.expects(:safeevaluate)
|
81
|
+
|
82
|
+
resource = @top.evaluate(@scope)
|
83
|
+
|
84
|
+
@top.evaluate_code(resource)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should evaluate the parent class's code if it has a parent" do
|
88
|
+
@top_resource.expects(:safeevaluate)
|
89
|
+
@middle_resource.expects(:safeevaluate)
|
90
|
+
|
91
|
+
resource = @middle.evaluate(@scope)
|
92
|
+
|
93
|
+
@middle.evaluate_code(resource)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should not evaluate the parent class's code if the parent has already been evaluated" do
|
97
|
+
@top_resource.stubs(:safeevaluate)
|
98
|
+
resource = @top.evaluate(@scope)
|
99
|
+
@top.evaluate_code(resource)
|
100
|
+
|
101
|
+
@top_resource.expects(:safeevaluate).never
|
102
|
+
@middle_resource.stubs(:safeevaluate)
|
103
|
+
resource = @middle.evaluate(@scope)
|
104
|
+
@middle.evaluate_code(resource)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should use the parent class's scope as its parent scope" do
|
108
|
+
@top_resource.stubs(:safeevaluate)
|
109
|
+
@middle_resource.stubs(:safeevaluate)
|
110
|
+
resource = @middle.evaluate(@scope)
|
111
|
+
@middle.evaluate_code(resource)
|
112
|
+
|
113
|
+
@compiler.class_scope(@middle).parent.should equal(@compiler.class_scope(@top))
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should add the parent class's namespace to its namespace search path" do
|
117
|
+
@top_resource.stubs(:safeevaluate)
|
118
|
+
@middle_resource.stubs(:safeevaluate)
|
119
|
+
resource = @middle.evaluate(@scope)
|
120
|
+
@middle.evaluate_code(resource)
|
121
|
+
|
122
|
+
@compiler.class_scope(@middle).namespaces.should be_include(@top.namespace)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::Nop do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@scope = mock 'scope'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should do nothing on evaluation" do
|
12
|
+
Puppet::Parser::AST.expects(:safeevaluate).never
|
13
|
+
Puppet::Parser::AST::Nop.new({}).evaluate(@scope)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should not return anything" do
|
17
|
+
Puppet::Parser::AST::Nop.new({}).evaluate(@scope).should be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::Not do
|
6
|
+
before :each do
|
7
|
+
@scope = Puppet::Parser::Scope.new()
|
8
|
+
@true_ast = Puppet::Parser::AST::Boolean.new( :value => true)
|
9
|
+
@false_ast = Puppet::Parser::AST::Boolean.new( :value => false)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should evaluate its child expression" do
|
13
|
+
val = stub "val"
|
14
|
+
val.expects(:safeevaluate).with(@scope)
|
15
|
+
|
16
|
+
operator = Puppet::Parser::AST::Not.new :value => val
|
17
|
+
operator.evaluate(@scope)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return true for ! false" do
|
21
|
+
operator = Puppet::Parser::AST::Not.new :value => @false_ast
|
22
|
+
operator.evaluate(@scope).should == true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return false for ! true" do
|
26
|
+
operator = Puppet::Parser::AST::Not.new :value => @true_ast
|
27
|
+
operator.evaluate(@scope).should == false
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::ResourceOverride do
|
6
|
+
|
7
|
+
ast = Puppet::Parser::AST
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
@compiler = stub 'compiler'
|
11
|
+
@scope = Puppet::Parser::Scope.new(:compiler => @compiler)
|
12
|
+
@params = ast::ASTArray.new({})
|
13
|
+
@compiler.stubs(:add_override)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should evaluate the overriden object" do
|
17
|
+
klass = stub 'klass', :title => "title", :type => "type"
|
18
|
+
object = mock 'object'
|
19
|
+
object.expects(:safeevaluate).with(@scope).returns(klass)
|
20
|
+
ast::ResourceOverride.new(:object => object, :params => @params ).evaluate(@scope)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should tell the compiler to override the resource with our own" do
|
24
|
+
@compiler.expects(:add_override)
|
25
|
+
|
26
|
+
klass = stub 'klass', :title => "title", :type => "one"
|
27
|
+
object = mock 'object', :safeevaluate => klass
|
28
|
+
ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return the overriden resource directly when called with one item" do
|
32
|
+
klass = stub 'klass', :title => "title", :type => "one"
|
33
|
+
object = mock 'object', :safeevaluate => klass
|
34
|
+
override = ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
|
35
|
+
override.should be_an_instance_of(Puppet::Parser::Resource)
|
36
|
+
override.title.should == "title"
|
37
|
+
override.type.should == "One"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return an array of overriden resources when called with an array of titles" do
|
41
|
+
klass1 = stub 'klass1', :title => "title1", :type => "one"
|
42
|
+
klass2 = stub 'klass2', :title => "title2", :type => "one"
|
43
|
+
|
44
|
+
object = mock 'object', :safeevaluate => [klass1,klass2]
|
45
|
+
|
46
|
+
override = ast::ResourceOverride.new(:object => object , :params => @params).evaluate(@scope)
|
47
|
+
override.should have(2).elements
|
48
|
+
override.each {|o| o.should be_an_instance_of(Puppet::Parser::Resource) }
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::ResourceReference do
|
6
|
+
|
7
|
+
ast = Puppet::Parser::AST
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
@scope = Puppet::Parser::Scope.new()
|
11
|
+
end
|
12
|
+
|
13
|
+
def newref(title, type)
|
14
|
+
title = stub 'title', :safeevaluate => title
|
15
|
+
ref = Puppet::Parser::AST::ResourceReference.new(:type => type, :title => title)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should evaluate correctly reference to builtin types" do
|
19
|
+
newref("/tmp/yay", "File").evaluate(@scope).to_s.should == "File[/tmp/yay]"
|
20
|
+
end
|
21
|
+
|
22
|
+
%{ "one::two" "one-two"}.each do |type|
|
23
|
+
it "should evaluate correctly reference to define" do
|
24
|
+
klass = stub 'klass', :title => "three", :classname => type
|
25
|
+
@scope.stubs(:finddefine).returns(klass)
|
26
|
+
|
27
|
+
newref("three", type).evaluate(@scope).to_ref.should == Puppet::Parser::Resource::Reference.new( :type => type, :title => "three" ).to_ref
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to call qualified_class" do
|
32
|
+
klass = stub 'klass', :title => "three", :classname => "one"
|
33
|
+
@scope.expects(:findclass).with("one").returns(klass)
|
34
|
+
newref("three","class").qualified_class(@scope,"one").should == "one"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to find qualified classes when evaluating" do
|
38
|
+
klass = stub 'klass', :title => "one", :classname => "one"
|
39
|
+
@scope.stubs(:findclass).returns(klass)
|
40
|
+
|
41
|
+
evaled = newref("one", "class").evaluate(@scope)
|
42
|
+
evaled.type.should == "Class"
|
43
|
+
evaled.title.should == "one"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return an array of reference if given an array of titles" do
|
47
|
+
titles = mock 'titles', :safeevaluate => ["title1","title2"]
|
48
|
+
ref = ast::ResourceReference.new( :title => titles, :type => "Resource" )
|
49
|
+
ref.stubs(:qualified_type).with(@scope).returns("Resource")
|
50
|
+
|
51
|
+
ref.evaluate(@scope).should have(2).elements
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should qualify class of all titles for Class resource references" do
|
55
|
+
titles = mock 'titles', :safeevaluate => ["title1","title2"]
|
56
|
+
ref = ast::ResourceReference.new( :title => titles, :type => "Class" )
|
57
|
+
ref.expects(:qualified_class).with(@scope,"title1").returns("class")
|
58
|
+
ref.expects(:qualified_class).with(@scope,"title2").returns("class")
|
59
|
+
|
60
|
+
ref.evaluate(@scope)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Parser::AST::VarDef do
|
6
|
+
before :each do
|
7
|
+
@scope = Puppet::Parser::Scope.new()
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "when evaluating" do
|
11
|
+
|
12
|
+
it "should evaluate arguments" do
|
13
|
+
name = mock 'name'
|
14
|
+
value = mock 'value'
|
15
|
+
|
16
|
+
name.expects(:safeevaluate).with(@scope)
|
17
|
+
value.expects(:safeevaluate).with(@scope)
|
18
|
+
|
19
|
+
vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
|
20
|
+
:line => nil
|
21
|
+
vardef.evaluate(@scope)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be in append=false mode if called without append" do
|
25
|
+
name = stub 'name', :safeevaluate => "var"
|
26
|
+
value = stub 'value', :safeevaluate => "1"
|
27
|
+
|
28
|
+
@scope.expects(:setvar).with { |name,value,file,line,append| append == nil }
|
29
|
+
|
30
|
+
vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
|
31
|
+
:line => nil
|
32
|
+
vardef.evaluate(@scope)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should call scope in append mode if append is true" do
|
36
|
+
name = stub 'name', :safeevaluate => "var"
|
37
|
+
value = stub 'value', :safeevaluate => "1"
|
38
|
+
|
39
|
+
@scope.expects(:setvar).with { |name,value,file,line,append| append == true }
|
40
|
+
|
41
|
+
vardef = Puppet::Parser::AST::VarDef.new :name => name, :value => value, :file => nil,
|
42
|
+
:line => nil, :append => true
|
43
|
+
vardef.evaluate(@scope)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,426 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/parser/collector'
|
6
|
+
|
7
|
+
describe Puppet::Parser::Collector, "when initializing" do
|
8
|
+
before do
|
9
|
+
@scope = mock 'scope'
|
10
|
+
@resource_type = 'resource_type'
|
11
|
+
@form = :exported
|
12
|
+
@vquery = mock 'vquery'
|
13
|
+
@equery = mock 'equery'
|
14
|
+
|
15
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, @form)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should require a scope" do
|
19
|
+
@collector.scope.should equal(@scope)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should require a resource type" do
|
23
|
+
@collector.type.should == 'Resource_type'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should only accept :virtual or :exported as the collector form" do
|
27
|
+
proc { @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @vquery, @equery, :other) }.should raise_error(ArgumentError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should accept an optional virtual query" do
|
31
|
+
@collector.vquery.should equal(@vquery)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept an optional exported query" do
|
35
|
+
@collector.equery.should equal(@equery)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should canonize the type name" do
|
39
|
+
@collector = Puppet::Parser::Collector.new(@scope, "resource::type", @equery, @vquery, @form)
|
40
|
+
@collector.type.should == "Resource::Type"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe Puppet::Parser::Collector, "when collecting specific virtual resources" do
|
45
|
+
before do
|
46
|
+
@scope = mock 'scope'
|
47
|
+
@resource_type = mock 'resource_type'
|
48
|
+
@vquery = mock 'vquery'
|
49
|
+
@equery = mock 'equery'
|
50
|
+
|
51
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :virtual)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should not fail when it does not find any resources to collect" do
|
55
|
+
@collector.resources = ["File[virtual1]", "File[virtual2]"]
|
56
|
+
@scope.stubs(:findresource).returns(false)
|
57
|
+
proc { @collector.evaluate }.should_not raise_error
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should mark matched resources as non-virtual" do
|
61
|
+
@collector.resources = ["File[virtual1]", "File[virtual2]"]
|
62
|
+
one = mock 'one'
|
63
|
+
one.expects(:virtual=).with(false)
|
64
|
+
@scope.stubs(:findresource).with("File[virtual1]").returns(one)
|
65
|
+
@scope.stubs(:findresource).with("File[virtual2]").returns(nil)
|
66
|
+
@collector.evaluate
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return matched resources" do
|
70
|
+
@collector.resources = ["File[virtual1]", "File[virtual2]"]
|
71
|
+
one = mock 'one'
|
72
|
+
one.stubs(:virtual=)
|
73
|
+
@scope.stubs(:findresource).with("File[virtual1]").returns(one)
|
74
|
+
@scope.stubs(:findresource).with("File[virtual2]").returns(nil)
|
75
|
+
@collector.evaluate.should == [one]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should delete itself from the compile's collection list if it has found all of its resources" do
|
79
|
+
@collector.resources = ["File[virtual1]"]
|
80
|
+
one = mock 'one'
|
81
|
+
one.stubs(:virtual=)
|
82
|
+
@compiler.expects(:delete_collection).with(@collector)
|
83
|
+
@scope.expects(:compiler).returns(@compiler)
|
84
|
+
@scope.stubs(:findresource).with("File[virtual1]").returns(one)
|
85
|
+
@collector.evaluate
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should not delete itself from the compile's collection list if it has unfound resources" do
|
89
|
+
@collector.resources = ["File[virtual1]"]
|
90
|
+
one = mock 'one'
|
91
|
+
one.stubs(:virtual=)
|
92
|
+
@compiler.expects(:delete_collection).never
|
93
|
+
@scope.stubs(:findresource).with("File[virtual1]").returns(nil)
|
94
|
+
@collector.evaluate
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe Puppet::Parser::Collector, "when collecting virtual resources" do
|
99
|
+
before do
|
100
|
+
@scope = mock 'scope'
|
101
|
+
@compiler = mock 'compile'
|
102
|
+
@scope.stubs(:compiler).returns(@compiler)
|
103
|
+
@resource_type = "Mytype"
|
104
|
+
@vquery = proc { |res| true }
|
105
|
+
|
106
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, nil, @vquery, :virtual)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should find all resources matching the vquery" do
|
110
|
+
one = stub 'one', :type => "Mytype", :virtual? => true
|
111
|
+
two = stub 'two', :type => "Mytype", :virtual? => true
|
112
|
+
|
113
|
+
one.stubs(:virtual=)
|
114
|
+
two.stubs(:virtual=)
|
115
|
+
|
116
|
+
@compiler.expects(:resources).returns([one, two])
|
117
|
+
|
118
|
+
@collector.evaluate.should == [one, two]
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should mark all matched resources as non-virtual" do
|
122
|
+
one = stub 'one', :type => "Mytype", :virtual? => true
|
123
|
+
|
124
|
+
one.expects(:virtual=).with(false)
|
125
|
+
|
126
|
+
@compiler.expects(:resources).returns([one])
|
127
|
+
|
128
|
+
@collector.evaluate
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should return matched resources" do
|
132
|
+
one = stub 'one', :type => "Mytype", :virtual? => true
|
133
|
+
two = stub 'two', :type => "Mytype", :virtual? => true
|
134
|
+
|
135
|
+
one.stubs(:virtual=)
|
136
|
+
two.stubs(:virtual=)
|
137
|
+
|
138
|
+
@compiler.expects(:resources).returns([one, two])
|
139
|
+
|
140
|
+
@collector.evaluate.should == [one, two]
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should return all resources of the correct type if there is no virtual query" do
|
144
|
+
one = stub 'one', :type => "Mytype", :virtual? => true
|
145
|
+
two = stub 'two', :type => "Mytype", :virtual? => true
|
146
|
+
|
147
|
+
one.expects(:virtual=).with(false)
|
148
|
+
two.expects(:virtual=).with(false)
|
149
|
+
|
150
|
+
@compiler.expects(:resources).returns([one, two])
|
151
|
+
|
152
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, nil, nil, :virtual)
|
153
|
+
|
154
|
+
@collector.evaluate.should == [one, two]
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should not return or mark resources of a different type" do
|
158
|
+
one = stub 'one', :type => "Mytype", :virtual? => true
|
159
|
+
two = stub 'two', :type => :other, :virtual? => true
|
160
|
+
|
161
|
+
one.expects(:virtual=).with(false)
|
162
|
+
two.expects(:virtual=).never
|
163
|
+
|
164
|
+
@compiler.expects(:resources).returns([one, two])
|
165
|
+
|
166
|
+
@collector.evaluate.should == [one]
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should not return or mark non-virtual resources" do
|
170
|
+
one = stub 'one', :type => "Mytype", :virtual? => false
|
171
|
+
two = stub 'two', :type => :other, :virtual? => false
|
172
|
+
|
173
|
+
one.expects(:virtual=).never
|
174
|
+
two.expects(:virtual=).never
|
175
|
+
|
176
|
+
@compiler.expects(:resources).returns([one, two])
|
177
|
+
|
178
|
+
@collector.evaluate.should be_false
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should not return or mark non-matching resources" do
|
182
|
+
@collector.vquery = proc { |res| res.name == :one }
|
183
|
+
|
184
|
+
one = stub 'one', :name => :one, :type => "Mytype", :virtual? => true
|
185
|
+
two = stub 'two', :name => :two, :type => "Mytype", :virtual? => true
|
186
|
+
|
187
|
+
one.expects(:virtual=).with(false)
|
188
|
+
two.expects(:virtual=).never
|
189
|
+
|
190
|
+
@compiler.expects(:resources).returns([one, two])
|
191
|
+
|
192
|
+
@collector.evaluate.should == [one]
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe Puppet::Parser::Collector, "when collecting exported resources" do
|
197
|
+
confine Puppet.features.rails? => "Cannot test Rails integration without ActiveRecord"
|
198
|
+
|
199
|
+
before do
|
200
|
+
@scope = stub 'scope', :host => "myhost", :debug => nil
|
201
|
+
@compiler = mock 'compile'
|
202
|
+
@scope.stubs(:compiler).returns(@compiler)
|
203
|
+
@resource_type = "Mytype"
|
204
|
+
@equery = "test = true"
|
205
|
+
@vquery = proc { |r| true }
|
206
|
+
|
207
|
+
Puppet.settings.stubs(:value).with(:storeconfigs).returns true
|
208
|
+
|
209
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :exported)
|
210
|
+
end
|
211
|
+
|
212
|
+
# Stub most of our interface to Rails.
|
213
|
+
def stub_rails(everything = false)
|
214
|
+
ActiveRecord::Base.stubs(:connected?).returns(false)
|
215
|
+
Puppet::Rails.stubs(:init)
|
216
|
+
if everything
|
217
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
218
|
+
Puppet::Rails::Resource.stubs(:find).returns([])
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should just return false if :storeconfigs is not enabled" do
|
223
|
+
Puppet.settings.expects(:value).with(:storeconfigs).returns false
|
224
|
+
@collector.evaluate.should be_false
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should use initialize the Rails support if ActiveRecord is not connected" do
|
228
|
+
@compiler.stubs(:resources).returns([])
|
229
|
+
ActiveRecord::Base.expects(:connected?).returns(false)
|
230
|
+
Puppet::Rails.expects(:init)
|
231
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
232
|
+
Puppet::Rails::Resource.stubs(:find).returns([])
|
233
|
+
|
234
|
+
@collector.evaluate
|
235
|
+
end
|
236
|
+
|
237
|
+
it "should return all matching resources from the current compile and mark them non-virtual and non-exported" do
|
238
|
+
stub_rails(true)
|
239
|
+
|
240
|
+
one = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true
|
241
|
+
two = stub 'two', :type => "Mytype", :virtual? => true, :exported? => true
|
242
|
+
|
243
|
+
one.expects(:exported=).with(false)
|
244
|
+
one.expects(:virtual=).with(false)
|
245
|
+
two.expects(:exported=).with(false)
|
246
|
+
two.expects(:virtual=).with(false)
|
247
|
+
|
248
|
+
@compiler.expects(:resources).returns([one, two])
|
249
|
+
|
250
|
+
@collector.evaluate.should == [one, two]
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should mark all returned resources as not virtual" do
|
254
|
+
stub_rails(true)
|
255
|
+
|
256
|
+
one = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true
|
257
|
+
|
258
|
+
one.stubs(:exported=)
|
259
|
+
one.expects(:virtual=).with(false)
|
260
|
+
|
261
|
+
@compiler.expects(:resources).returns([one])
|
262
|
+
|
263
|
+
@collector.evaluate.should == [one]
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should convert all found resources into parser resources" do
|
267
|
+
stub_rails()
|
268
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
269
|
+
|
270
|
+
one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
|
271
|
+
Puppet::Rails::Resource.stubs(:find).returns([one])
|
272
|
+
|
273
|
+
resource = mock 'resource'
|
274
|
+
one.expects(:to_resource).with(@scope).returns(resource)
|
275
|
+
resource.stubs(:exported=)
|
276
|
+
resource.stubs(:virtual=)
|
277
|
+
|
278
|
+
@compiler.stubs(:resources).returns([])
|
279
|
+
@scope.stubs(:findresource).returns(nil)
|
280
|
+
|
281
|
+
@compiler.stubs(:add_resource)
|
282
|
+
|
283
|
+
@collector.evaluate.should == [resource]
|
284
|
+
end
|
285
|
+
|
286
|
+
it "should store converted resources in the compile's resource list" do
|
287
|
+
stub_rails()
|
288
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
289
|
+
|
290
|
+
one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
|
291
|
+
Puppet::Rails::Resource.stubs(:find).returns([one])
|
292
|
+
|
293
|
+
resource = mock 'resource'
|
294
|
+
one.expects(:to_resource).with(@scope).returns(resource)
|
295
|
+
resource.stubs(:exported=)
|
296
|
+
resource.stubs(:virtual=)
|
297
|
+
|
298
|
+
@compiler.stubs(:resources).returns([])
|
299
|
+
@scope.stubs(:findresource).returns(nil)
|
300
|
+
|
301
|
+
@compiler.expects(:add_resource).with(@scope, resource)
|
302
|
+
|
303
|
+
@collector.evaluate.should == [resource]
|
304
|
+
end
|
305
|
+
|
306
|
+
# This way one host doesn't store another host's resources as exported.
|
307
|
+
it "should mark resources collected from the database as not exported" do
|
308
|
+
stub_rails()
|
309
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
310
|
+
|
311
|
+
one = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true
|
312
|
+
Puppet::Rails::Resource.stubs(:find).returns([one])
|
313
|
+
|
314
|
+
resource = mock 'resource'
|
315
|
+
one.expects(:to_resource).with(@scope).returns(resource)
|
316
|
+
resource.expects(:exported=).with(false)
|
317
|
+
resource.stubs(:virtual=)
|
318
|
+
|
319
|
+
@compiler.stubs(:resources).returns([])
|
320
|
+
@scope.stubs(:findresource).returns(nil)
|
321
|
+
|
322
|
+
@compiler.stubs(:add_resource)
|
323
|
+
|
324
|
+
@collector.evaluate
|
325
|
+
end
|
326
|
+
|
327
|
+
it "should fail if an equivalent resource already exists in the compile" do
|
328
|
+
stub_rails()
|
329
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
330
|
+
|
331
|
+
rails = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true, :id => 1, :ref => "yay"
|
332
|
+
inmemory = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true, :rails_id => 2
|
333
|
+
|
334
|
+
Puppet::Rails::Resource.stubs(:find).returns([rails])
|
335
|
+
|
336
|
+
resource = mock 'resource'
|
337
|
+
|
338
|
+
@compiler.stubs(:resources).returns([])
|
339
|
+
@scope.stubs(:findresource).returns(inmemory)
|
340
|
+
|
341
|
+
@compiler.stubs(:add_resource)
|
342
|
+
|
343
|
+
proc { @collector.evaluate }.should raise_error(Puppet::ParseError)
|
344
|
+
end
|
345
|
+
|
346
|
+
it "should ignore exported resources that match already-collected resources" do
|
347
|
+
stub_rails()
|
348
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
349
|
+
|
350
|
+
rails = stub 'one', :restype => "Mytype", :title => "one", :virtual? => true, :exported? => true, :id => 1, :ref => "yay"
|
351
|
+
inmemory = stub 'one', :type => "Mytype", :virtual? => true, :exported? => true, :rails_id => 1
|
352
|
+
|
353
|
+
Puppet::Rails::Resource.stubs(:find).returns([rails])
|
354
|
+
|
355
|
+
resource = mock 'resource'
|
356
|
+
|
357
|
+
@compiler.stubs(:resources).returns([])
|
358
|
+
@scope.stubs(:findresource).returns(inmemory)
|
359
|
+
|
360
|
+
@compiler.stubs(:add_resource)
|
361
|
+
|
362
|
+
proc { @collector.evaluate }.should_not raise_error(Puppet::ParseError)
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
describe Puppet::Parser::Collector, "when building its ActiveRecord query for collecting exported resources" do
|
367
|
+
confine Puppet.features.rails? => "Cannot test Rails integration without ActiveRecord"
|
368
|
+
|
369
|
+
before do
|
370
|
+
@scope = stub 'scope', :host => "myhost", :debug => nil
|
371
|
+
@compiler = mock 'compile'
|
372
|
+
@scope.stubs(:compiler).returns(@compiler)
|
373
|
+
@resource_type = "Mytype"
|
374
|
+
@equery = nil
|
375
|
+
@vquery = proc { |r| true }
|
376
|
+
|
377
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, @equery, @vquery, :exported)
|
378
|
+
@compiler.stubs(:resources).returns([])
|
379
|
+
|
380
|
+
ActiveRecord::Base.stubs(:connected?).returns(false)
|
381
|
+
|
382
|
+
Puppet::Rails.stubs(:init)
|
383
|
+
Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
|
384
|
+
Puppet::Rails::Resource.stubs(:find).returns([])
|
385
|
+
|
386
|
+
Puppet.settings.stubs(:value).with(:storeconfigs).returns true
|
387
|
+
end
|
388
|
+
|
389
|
+
it "should exclude all resources from the host if ActiveRecord contains information for this host" do
|
390
|
+
@host = mock 'host'
|
391
|
+
@host.stubs(:id).returns 5
|
392
|
+
|
393
|
+
Puppet::Rails::Host.expects(:find_by_name).with(@scope.host).returns(@host)
|
394
|
+
|
395
|
+
Puppet::Rails::Resource.stubs(:find).with { |*arguments|
|
396
|
+
options = arguments[3]
|
397
|
+
options[:conditions][0] =~ /^host_id != \?/ and options[:conditions][1] == 5
|
398
|
+
}.returns([])
|
399
|
+
|
400
|
+
@collector.evaluate
|
401
|
+
end
|
402
|
+
|
403
|
+
it "should return parameter names and parameter values when querying ActiveRecord" do
|
404
|
+
Puppet::Rails::Resource.stubs(:find).with { |*arguments|
|
405
|
+
options = arguments[3]
|
406
|
+
options[:include] == {:param_values => :param_name}
|
407
|
+
}.returns([])
|
408
|
+
|
409
|
+
@collector.evaluate
|
410
|
+
end
|
411
|
+
|
412
|
+
it "should only search for exported resources with the matching type" do
|
413
|
+
Puppet::Rails::Resource.stubs(:find).with { |*arguments|
|
414
|
+
options = arguments[3]
|
415
|
+
options[:conditions][0].include?("(exported=? AND restype=?)") and options[:conditions][1] == true and options[:conditions][2] == "Mytype"
|
416
|
+
}.returns([])
|
417
|
+
end
|
418
|
+
|
419
|
+
it "should include the export query if one is provided" do
|
420
|
+
@collector = Puppet::Parser::Collector.new(@scope, @resource_type, "test = true", @vquery, :exported)
|
421
|
+
Puppet::Rails::Resource.stubs(:find).with { |*arguments|
|
422
|
+
options = arguments[3]
|
423
|
+
options[:conditions][0].include?("test = true")
|
424
|
+
}.returns([])
|
425
|
+
end
|
426
|
+
end
|