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,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_content/file'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileContent::File do
|
11
|
+
it "should be registered with the file_content indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_content, :file).should equal(Puppet::Indirector::FileContent::File)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the DirectFileServer terminus" do
|
16
|
+
Puppet::Indirector::FileContent::File.superclass.should equal(Puppet::Indirector::DirectFileServer)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_content/file_server'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileContent::FileServer do
|
11
|
+
it "should be registered with the file_content indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_content, :file_server).should equal(Puppet::Indirector::FileContent::FileServer)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the FileServer terminus" do
|
16
|
+
Puppet::Indirector::FileContent::FileServer.superclass.should equal(Puppet::Indirector::FileServer)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_content/modules'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileContent::Modules do
|
11
|
+
it "should be registered with the file_content indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_content, :modules).should equal(Puppet::Indirector::FileContent::Modules)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the ModuleFiles terminus" do
|
16
|
+
Puppet::Indirector::FileContent::Modules.superclass.should equal(Puppet::Indirector::ModuleFiles)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/indirector/file_content'
|
6
|
+
|
7
|
+
describe "Puppet::Indirector::Content::Rest" do
|
8
|
+
it "should add the node's cert name to the arguments"
|
9
|
+
|
10
|
+
it "should set the content type to text/plain"
|
11
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_metadata/file'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileMetadata::File do
|
11
|
+
it "should be registered with the file_metadata indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_metadata, :file).should equal(Puppet::Indirector::FileMetadata::File)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the DirectFileServer terminus" do
|
16
|
+
Puppet::Indirector::FileMetadata::File.superclass.should equal(Puppet::Indirector::DirectFileServer)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "when creating the instance for a single found file" do
|
20
|
+
before do
|
21
|
+
@metadata = Puppet::Indirector::FileMetadata::File.new
|
22
|
+
@uri = "file:///my/local"
|
23
|
+
@data = mock 'metadata'
|
24
|
+
@data.stubs(:collect_attributes)
|
25
|
+
FileTest.expects(:exists?).with("/my/local").returns true
|
26
|
+
|
27
|
+
@request = stub 'request', :key => @uri, :options => {}
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should collect its attributes when a file is found" do
|
31
|
+
@data.expects(:collect_attributes)
|
32
|
+
|
33
|
+
Puppet::FileServing::Metadata.expects(:new).returns(@data)
|
34
|
+
@metadata.find(@request).should == @data
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when searching for multiple files" do
|
39
|
+
before do
|
40
|
+
@metadata = Puppet::Indirector::FileMetadata::File.new
|
41
|
+
@uri = "file:///my/local"
|
42
|
+
|
43
|
+
@request = stub 'request', :key => @uri, :options => {}
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should collect the attributes of the instances returned" do
|
47
|
+
FileTest.expects(:exists?).with("/my/local").returns true
|
48
|
+
@metadata.expects(:path2instances).returns( [mock("one", :collect_attributes => nil), mock("two", :collect_attributes => nil)] )
|
49
|
+
@metadata.search(@request)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_metadata/file_server'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileMetadata::FileServer do
|
11
|
+
it "should be registered with the file_metadata indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_metadata, :file_server).should equal(Puppet::Indirector::FileMetadata::FileServer)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the FileServer terminus" do
|
16
|
+
Puppet::Indirector::FileMetadata::FileServer.superclass.should equal(Puppet::Indirector::FileServer)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-18.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_metadata/modules'
|
9
|
+
|
10
|
+
describe Puppet::Indirector::FileMetadata::Modules do
|
11
|
+
it "should be registered with the file_metadata indirection" do
|
12
|
+
Puppet::Indirector::Terminus.terminus_class(:file_metadata, :modules).should equal(Puppet::Indirector::FileMetadata::Modules)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be a subclass of the ModuleFiles terminus" do
|
16
|
+
Puppet::Indirector::FileMetadata::Modules.superclass.should equal(Puppet::Indirector::ModuleFiles)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Puppet::Indirector::FileMetadata::Modules, " when finding metadata" do
|
21
|
+
before do
|
22
|
+
@finder = Puppet::Indirector::FileMetadata::Modules.new
|
23
|
+
@finder.stubs(:environment).returns(nil)
|
24
|
+
@module = Puppet::Module.new("mymod", "/path/to")
|
25
|
+
@finder.stubs(:find_module).returns(@module)
|
26
|
+
|
27
|
+
@request = Puppet::Indirector::Request.new(:metadata, :find, "puppetmounts://hostname/modules/mymod/my/file")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return nil if the file is not found" do
|
31
|
+
FileTest.expects(:exists?).with("/path/to/files/my/file").returns false
|
32
|
+
@finder.find(@request).should be_nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should retrieve the instance's attributes if the file is found" do
|
36
|
+
FileTest.expects(:exists?).with("/path/to/files/my/file").returns true
|
37
|
+
instance = mock 'metadta'
|
38
|
+
Puppet::FileServing::Metadata.expects(:new).returns instance
|
39
|
+
instance.expects :collect_attributes
|
40
|
+
@finder.find(@request)
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-10-19.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/file_server'
|
9
|
+
require 'puppet/file_serving/configuration'
|
10
|
+
|
11
|
+
describe Puppet::Indirector::FileServer do
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
Puppet::Indirector::Terminus.stubs(:register_terminus_class)
|
15
|
+
@model = mock 'model'
|
16
|
+
@indirection = stub 'indirection', :name => :mystuff, :register_terminus_type => nil, :model => @model
|
17
|
+
Puppet::Indirector::Indirection.stubs(:instance).returns(@indirection)
|
18
|
+
|
19
|
+
@file_server_class = Class.new(Puppet::Indirector::FileServer) do
|
20
|
+
def self.to_s
|
21
|
+
"Testing::Mytype"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
@file_server = @file_server_class.new
|
26
|
+
|
27
|
+
@uri = "puppetmounts://host/my/local/file"
|
28
|
+
@configuration = mock 'configuration'
|
29
|
+
Puppet::FileServing::Configuration.stubs(:create).returns(@configuration)
|
30
|
+
|
31
|
+
@request = Puppet::Indirector::Request.new(:myind, :mymethod, @uri)
|
32
|
+
end
|
33
|
+
|
34
|
+
describe Puppet::Indirector::FileServer, " when finding files" do
|
35
|
+
|
36
|
+
it "should use the path portion of the URI as the file name" do
|
37
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil)
|
38
|
+
@file_server.find(@request)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should use the FileServing configuration to convert the file name to a fully qualified path" do
|
42
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil)
|
43
|
+
@file_server.find(@request)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should pass the node name to the FileServing configuration if one is provided" do
|
47
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => "testing")
|
48
|
+
@request.node = "testing"
|
49
|
+
@file_server.find(@request)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return nil if no fully qualified path is found" do
|
53
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns(nil)
|
54
|
+
@file_server.find(@request).should be_nil
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return an instance of the model created with the full path if a file is found" do
|
58
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns("/some/file")
|
59
|
+
@model.expects(:new).returns(:myinstance)
|
60
|
+
@file_server.find(@request).should == :myinstance
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe Puppet::Indirector::FileServer, " when returning instances" do
|
65
|
+
before :each do
|
66
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns("/some/file")
|
67
|
+
@instance = mock 'instance'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should create the instance with the key used to find the instance" do
|
71
|
+
@model.expects(:new).with { |key, *options| key == @uri }
|
72
|
+
@file_server.find(@request)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should create the instance with the path at which the instance was found" do
|
76
|
+
@model.expects(:new).with { |key, options| options[:path] == "/some/file" }
|
77
|
+
@file_server.find(@request)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should set the provided :links setting on to the instance if one is provided" do
|
81
|
+
@model.expects(:new).returns(@instance)
|
82
|
+
@instance.expects(:links=).with(:mytest)
|
83
|
+
@request.options[:links] = :mytest
|
84
|
+
@file_server.find(@request)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should not set a :links value if no :links parameter is provided" do
|
88
|
+
@model.expects(:new).returns(@instance)
|
89
|
+
@file_server.find(@request)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe Puppet::Indirector::FileServer, " when checking authorization" do
|
94
|
+
|
95
|
+
it "should have an authorization hook" do
|
96
|
+
@file_server.should respond_to(:authorized?)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should deny the :destroy method" do
|
100
|
+
@request.method = :destroy
|
101
|
+
@file_server.authorized?(@request).should be_false
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should deny the :save method" do
|
105
|
+
@request.method = :save
|
106
|
+
@file_server.authorized?(@request).should be_false
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "and finding file information" do
|
110
|
+
before do
|
111
|
+
@request.key = "puppetmounts://host/my/file"
|
112
|
+
@request.method = :find
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should use the file server configuration to determine authorization" do
|
116
|
+
@configuration.expects(:authorized?)
|
117
|
+
@file_server.authorized?(@request)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should pass the file path from the URI to the file server configuration" do
|
121
|
+
@configuration.expects(:authorized?).with { |uri, *args| uri == "/my/file" }
|
122
|
+
@file_server.authorized?(@request)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should pass the node name to the file server configuration" do
|
126
|
+
@configuration.expects(:authorized?).with { |key, options| options[:node] == "mynode" }
|
127
|
+
@request.node = "mynode"
|
128
|
+
@file_server.authorized?(@request)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should pass the IP address to the file server configuration" do
|
132
|
+
@configuration.expects(:authorized?).with { |key, options| options[:ipaddress] == "myip" }
|
133
|
+
@request.ip = "myip"
|
134
|
+
@file_server.authorized?(@request)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should return false if the file server configuration denies authorization" do
|
138
|
+
@configuration.expects(:authorized?).returns(false)
|
139
|
+
@file_server.authorized?(@request)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should return true if the file server configuration approves authorization" do
|
143
|
+
@configuration.expects(:authorized?).returns(true)
|
144
|
+
@file_server.authorized?(@request)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe Puppet::Indirector::FileServer, " when searching for files" do
|
150
|
+
|
151
|
+
it "should use the path portion of the URI as the file name" do
|
152
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil)
|
153
|
+
@file_server.search(@request)
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should use the FileServing configuration to convert the file name to a fully qualified path" do
|
157
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil)
|
158
|
+
@file_server.search(@request)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should pass the node name to the FileServing configuration if one is provided" do
|
162
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => "testing")
|
163
|
+
@request.node = "testing"
|
164
|
+
@file_server.search(@request)
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should return nil if no fully qualified path is found" do
|
168
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns(nil)
|
169
|
+
@file_server.search(@request).should be_nil
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should use :path2instances from the terminus_helper to return instances if a module is found and the file exists" do
|
173
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns("/my/file")
|
174
|
+
@file_server.expects(:path2instances)
|
175
|
+
@file_server.search(@request)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should pass the request on to :path2instances" do
|
179
|
+
@configuration.expects(:file_path).with("/my/local/file", :node => nil).returns("/my/file")
|
180
|
+
@file_server.expects(:path2instances).with(@request, "/my/file")
|
181
|
+
@file_server.search(@request)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,731 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/indirector/indirection'
|
6
|
+
|
7
|
+
describe "Indirection Delegator", :shared => true do
|
8
|
+
it "should create a request object with the appropriate method name and all of the passed arguments" do
|
9
|
+
request = stub 'request', :node => nil
|
10
|
+
|
11
|
+
@indirection.expects(:request).with(@method, "mystuff", :one => :two).returns request
|
12
|
+
|
13
|
+
@terminus.stubs(@method)
|
14
|
+
|
15
|
+
@indirection.send(@method, "mystuff", :one => :two)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should let the :select_terminus method choose the terminus using the created request if the :select_terminus method is available" do
|
19
|
+
# Define the method, so our respond_to? hook matches.
|
20
|
+
class << @indirection
|
21
|
+
def select_terminus(request)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
request = stub 'request', :key => "me", :options => {}
|
26
|
+
|
27
|
+
@indirection.stubs(:request).returns request
|
28
|
+
|
29
|
+
@indirection.expects(:select_terminus).with(request).returns :test_terminus
|
30
|
+
|
31
|
+
@indirection.stubs(:check_authorization)
|
32
|
+
@terminus.expects(@method)
|
33
|
+
|
34
|
+
@indirection.send(@method, "me")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should choose the terminus returned by the :terminus_class method if no :select_terminus method is available" do
|
38
|
+
@indirection.expects(:terminus_class).returns :test_terminus
|
39
|
+
|
40
|
+
@terminus.expects(@method)
|
41
|
+
|
42
|
+
@indirection.send(@method, "me")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should let the appropriate terminus perform the lookup" do
|
46
|
+
@terminus.expects(@method).with { |r| r.is_a?(Puppet::Indirector::Request) }
|
47
|
+
@indirection.send(@method, "me")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "Delegation Authorizer", :shared => true do
|
52
|
+
before do
|
53
|
+
# So the :respond_to? turns out correctly.
|
54
|
+
class << @terminus
|
55
|
+
def authorized?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should not check authorization if a node name is not provided" do
|
61
|
+
@terminus.expects(:authorized?).never
|
62
|
+
@terminus.stubs(@method)
|
63
|
+
|
64
|
+
# The quotes are necessary here, else it looks like a block.
|
65
|
+
@request.stubs(:options).returns({})
|
66
|
+
@indirection.send(@method, "/my/key")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should pass the request to the terminus's authorization method" do
|
70
|
+
@terminus.expects(:authorized?).with { |r| r.is_a?(Puppet::Indirector::Request) }.returns(true)
|
71
|
+
@terminus.stubs(@method)
|
72
|
+
|
73
|
+
@indirection.send(@method, "/my/key", :node => "mynode")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should fail if authorization returns false" do
|
77
|
+
@terminus.expects(:authorized?).returns(false)
|
78
|
+
@terminus.stubs(@method)
|
79
|
+
proc { @indirection.send(@method, "/my/key", :node => "mynode") }.should raise_error(ArgumentError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should continue if authorization returns true" do
|
83
|
+
@terminus.expects(:authorized?).returns(true)
|
84
|
+
@terminus.stubs(@method)
|
85
|
+
@indirection.send(@method, "/my/key", :node => "mynode")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe Puppet::Indirector::Indirection do
|
90
|
+
describe "when initializing" do
|
91
|
+
# (LAK) I've no idea how to test this, really.
|
92
|
+
it "should store a reference to itself before it consumes its options" do
|
93
|
+
proc { @indirection = Puppet::Indirector::Indirection.new(Object.new, :testingness, :not_valid_option) }.should raise_error
|
94
|
+
Puppet::Indirector::Indirection.instance(:testingness).should be_instance_of(Puppet::Indirector::Indirection)
|
95
|
+
Puppet::Indirector::Indirection.instance(:testingness).delete
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should keep a reference to the indirecting model" do
|
99
|
+
model = mock 'model'
|
100
|
+
@indirection = Puppet::Indirector::Indirection.new(model, :myind)
|
101
|
+
@indirection.model.should equal(model)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should set the name" do
|
105
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :myind)
|
106
|
+
@indirection.name.should == :myind
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should require indirections to have unique names" do
|
110
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
111
|
+
proc { Puppet::Indirector::Indirection.new(:test) }.should raise_error(ArgumentError)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should extend itself with any specified module" do
|
115
|
+
mod = Module.new
|
116
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test, :extend => mod)
|
117
|
+
@indirection.metaclass.included_modules.should include(mod)
|
118
|
+
end
|
119
|
+
|
120
|
+
after do
|
121
|
+
@indirection.delete if defined? @indirection
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "when an instance" do
|
126
|
+
before :each do
|
127
|
+
@terminus_class = mock 'terminus_class'
|
128
|
+
@terminus = mock 'terminus'
|
129
|
+
@terminus_class.stubs(:new).returns(@terminus)
|
130
|
+
@cache = mock 'cache'
|
131
|
+
@cache_class = mock 'cache_class'
|
132
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :cache_terminus).returns(@cache_class)
|
133
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :test_terminus).returns(@terminus_class)
|
134
|
+
|
135
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
136
|
+
@indirection.terminus_class = :test_terminus
|
137
|
+
|
138
|
+
@instance = stub 'instance', :expiration => nil, :expiration= => nil, :name => "whatever"
|
139
|
+
@name = :mything
|
140
|
+
|
141
|
+
#@request = stub 'instance', :key => "/my/key", :instance => @instance, :options => {}
|
142
|
+
@request = mock 'instance'
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should allow setting the ttl" do
|
146
|
+
@indirection.ttl = 300
|
147
|
+
@indirection.ttl.should == 300
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should default to the :runinterval setting, converted to an integer, for its ttl" do
|
151
|
+
Puppet.settings.expects(:value).returns "1800"
|
152
|
+
@indirection.ttl.should == 1800
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should calculate the current expiration by adding the TTL to the current time" do
|
156
|
+
@indirection.stubs(:ttl).returns(100)
|
157
|
+
now = Time.now
|
158
|
+
Time.stubs(:now).returns now
|
159
|
+
@indirection.expiration.should == (Time.now + 100)
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should have a method for creating an indirection request instance" do
|
163
|
+
@indirection.should respond_to(:request)
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "creates a request" do
|
167
|
+
it "should create it with its name as the request's indirection name" do
|
168
|
+
Puppet::Indirector::Request.expects(:new).with { |name, *other| @indirection.name == name }
|
169
|
+
@indirection.request(:funtest, "yayness")
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should require a method and key" do
|
173
|
+
Puppet::Indirector::Request.expects(:new).with { |name, method, key, *other| method == :funtest and key == "yayness" }
|
174
|
+
@indirection.request(:funtest, "yayness")
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should support optional arguments" do
|
178
|
+
Puppet::Indirector::Request.expects(:new).with { |name, method, key, other| other == {:one => :two} }
|
179
|
+
@indirection.request(:funtest, "yayness", :one => :two)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should default to the arguments being nil" do
|
183
|
+
Puppet::Indirector::Request.expects(:new).with { |name, method, key, args| args.nil? }
|
184
|
+
@indirection.request(:funtest, "yayness")
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should return the request" do
|
188
|
+
request = mock 'request'
|
189
|
+
Puppet::Indirector::Request.expects(:new).returns request
|
190
|
+
@indirection.request(:funtest, "yayness").should equal(request)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
describe "and looking for a model instance" do
|
195
|
+
before { @method = :find }
|
196
|
+
|
197
|
+
it_should_behave_like "Indirection Delegator"
|
198
|
+
it_should_behave_like "Delegation Authorizer"
|
199
|
+
|
200
|
+
it "should return the results of the delegation" do
|
201
|
+
@terminus.expects(:find).returns(@instance)
|
202
|
+
@indirection.find("me").should equal(@instance)
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should set the expiration date on any instances without one set" do
|
206
|
+
@terminus.stubs(:find).returns(@instance)
|
207
|
+
|
208
|
+
@indirection.expects(:expiration).returns :yay
|
209
|
+
|
210
|
+
@instance.expects(:expiration).returns(nil)
|
211
|
+
@instance.expects(:expiration=).with(:yay)
|
212
|
+
|
213
|
+
@indirection.find("/my/key")
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should not override an already-set expiration date on returned instances" do
|
217
|
+
@terminus.stubs(:find).returns(@instance)
|
218
|
+
|
219
|
+
@indirection.expects(:expiration).never
|
220
|
+
|
221
|
+
@instance.expects(:expiration).returns(:yay)
|
222
|
+
@instance.expects(:expiration=).never
|
223
|
+
|
224
|
+
@indirection.find("/my/key")
|
225
|
+
end
|
226
|
+
|
227
|
+
describe "when caching is enabled" do
|
228
|
+
before do
|
229
|
+
@indirection.cache_class = :cache_terminus
|
230
|
+
@cache_class.expects(:new).returns(@cache)
|
231
|
+
|
232
|
+
@instance.stubs(:expired?).returns false
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should first look in the cache for an instance" do
|
236
|
+
@terminus.stubs(:find).never
|
237
|
+
@cache.expects(:find).returns @instance
|
238
|
+
|
239
|
+
@indirection.find("/my/key")
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should use a request to look in the cache for cached objects" do
|
243
|
+
@cache.expects(:find).with { |r| r.method == :find and r.key == "/my/key" }.returns @instance
|
244
|
+
|
245
|
+
@cache.stubs(:save)
|
246
|
+
|
247
|
+
@indirection.find("/my/key")
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should return the cached object if it is not expired" do
|
251
|
+
@instance.stubs(:expired?).returns false
|
252
|
+
|
253
|
+
@cache.stubs(:find).returns @instance
|
254
|
+
@indirection.find("/my/key").should equal(@instance)
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should send a debug log if it is using the cached object" do
|
258
|
+
Puppet.expects(:debug)
|
259
|
+
@cache.stubs(:find).returns @instance
|
260
|
+
|
261
|
+
@indirection.find("/my/key")
|
262
|
+
end
|
263
|
+
|
264
|
+
it "should not return the cached object if it is expired" do
|
265
|
+
@instance.stubs(:expired?).returns true
|
266
|
+
|
267
|
+
@cache.stubs(:find).returns @instance
|
268
|
+
@terminus.stubs(:find).returns nil
|
269
|
+
@indirection.find("/my/key").should be_nil
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should send an info log if it is using the cached object" do
|
273
|
+
Puppet.expects(:info)
|
274
|
+
@instance.stubs(:expired?).returns true
|
275
|
+
|
276
|
+
@cache.stubs(:find).returns @instance
|
277
|
+
@terminus.stubs(:find).returns nil
|
278
|
+
@indirection.find("/my/key")
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should cache any objects not retrieved from the cache" do
|
282
|
+
@cache.expects(:find).returns nil
|
283
|
+
|
284
|
+
@terminus.expects(:find).returns(@instance)
|
285
|
+
@cache.expects(:save)
|
286
|
+
|
287
|
+
@indirection.find("/my/key")
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should use a request to look in the cache for cached objects" do
|
291
|
+
@cache.expects(:find).with { |r| r.method == :find and r.key == "/my/key" }.returns nil
|
292
|
+
|
293
|
+
@terminus.stubs(:find).returns(@instance)
|
294
|
+
@cache.stubs(:save)
|
295
|
+
|
296
|
+
@indirection.find("/my/key")
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should cache the instance using a request with the instance set to the cached object" do
|
300
|
+
@cache.stubs(:find).returns nil
|
301
|
+
|
302
|
+
@terminus.stubs(:find).returns(@instance)
|
303
|
+
|
304
|
+
@cache.expects(:save).with { |r| r.method == :save and r.instance == @instance }
|
305
|
+
|
306
|
+
@indirection.find("/my/key")
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should send an info log that the object is being cached" do
|
310
|
+
@cache.stubs(:find).returns nil
|
311
|
+
|
312
|
+
@terminus.stubs(:find).returns(@instance)
|
313
|
+
@cache.stubs(:save)
|
314
|
+
|
315
|
+
Puppet.expects(:info)
|
316
|
+
|
317
|
+
@indirection.find("/my/key")
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
describe "and storing a model instance" do
|
323
|
+
before { @method = :save }
|
324
|
+
|
325
|
+
it_should_behave_like "Indirection Delegator"
|
326
|
+
it_should_behave_like "Delegation Authorizer"
|
327
|
+
|
328
|
+
it "should return nil" do
|
329
|
+
@terminus.stubs(:save)
|
330
|
+
@indirection.save(@instance).should be_nil
|
331
|
+
end
|
332
|
+
|
333
|
+
describe "when caching is enabled" do
|
334
|
+
before do
|
335
|
+
@indirection.cache_class = :cache_terminus
|
336
|
+
@cache_class.expects(:new).returns(@cache)
|
337
|
+
|
338
|
+
@instance.stubs(:expired?).returns false
|
339
|
+
end
|
340
|
+
|
341
|
+
it "should use a request to save the object to the cache" do
|
342
|
+
request = stub 'request', :instance => @instance, :node => nil
|
343
|
+
|
344
|
+
@indirection.expects(:request).returns request
|
345
|
+
|
346
|
+
@cache.expects(:save).with(request)
|
347
|
+
@terminus.stubs(:save)
|
348
|
+
@indirection.save(@instance)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
describe "and removing a model instance" do
|
354
|
+
before { @method = :destroy }
|
355
|
+
|
356
|
+
it_should_behave_like "Indirection Delegator"
|
357
|
+
it_should_behave_like "Delegation Authorizer"
|
358
|
+
|
359
|
+
it "should return the result of removing the instance" do
|
360
|
+
@terminus.stubs(:destroy).returns "yayness"
|
361
|
+
@indirection.destroy("/my/key").should == "yayness"
|
362
|
+
end
|
363
|
+
|
364
|
+
describe "when caching is enabled" do
|
365
|
+
before do
|
366
|
+
@indirection.cache_class = :cache_terminus
|
367
|
+
@cache_class.expects(:new).returns(@cache)
|
368
|
+
|
369
|
+
@instance.stubs(:expired?).returns false
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should use a request instance to search in and remove objects from the cache" do
|
373
|
+
destroy = stub 'destroy_request', :key => "/my/key", :node => nil
|
374
|
+
find = stub 'destroy_request', :key => "/my/key", :node => nil
|
375
|
+
|
376
|
+
@indirection.expects(:request).with(:destroy, "/my/key").returns destroy
|
377
|
+
@indirection.expects(:request).with(:find, "/my/key").returns find
|
378
|
+
|
379
|
+
cached = mock 'cache'
|
380
|
+
|
381
|
+
@cache.expects(:find).with(find).returns cached
|
382
|
+
@cache.expects(:destroy).with(destroy)
|
383
|
+
|
384
|
+
@terminus.stubs(:destroy)
|
385
|
+
|
386
|
+
@indirection.destroy("/my/key")
|
387
|
+
end
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe "and searching for multiple model instances" do
|
392
|
+
before { @method = :search }
|
393
|
+
|
394
|
+
it_should_behave_like "Indirection Delegator"
|
395
|
+
it_should_behave_like "Delegation Authorizer"
|
396
|
+
|
397
|
+
it "should set the expiration date on any instances without one set" do
|
398
|
+
@terminus.stubs(:search).returns([@instance])
|
399
|
+
|
400
|
+
@indirection.expects(:expiration).returns :yay
|
401
|
+
|
402
|
+
@instance.expects(:expiration).returns(nil)
|
403
|
+
@instance.expects(:expiration=).with(:yay)
|
404
|
+
|
405
|
+
@indirection.search("/my/key")
|
406
|
+
end
|
407
|
+
|
408
|
+
it "should not override an already-set expiration date on returned instances" do
|
409
|
+
@terminus.stubs(:search).returns([@instance])
|
410
|
+
|
411
|
+
@indirection.expects(:expiration).never
|
412
|
+
|
413
|
+
@instance.expects(:expiration).returns(:yay)
|
414
|
+
@instance.expects(:expiration=).never
|
415
|
+
|
416
|
+
@indirection.search("/my/key")
|
417
|
+
end
|
418
|
+
|
419
|
+
it "should return the results of searching in the terminus" do
|
420
|
+
@terminus.expects(:search).returns([@instance])
|
421
|
+
@indirection.search("/my/key").should == [@instance]
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
describe "and expiring a model instance" do
|
426
|
+
describe "when caching is not enabled" do
|
427
|
+
it "should do nothing" do
|
428
|
+
@cache_class.expects(:new).never
|
429
|
+
|
430
|
+
@indirection.expire("/my/key")
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
describe "when caching is enabled" do
|
435
|
+
before do
|
436
|
+
@indirection.cache_class = :cache_terminus
|
437
|
+
@cache_class.expects(:new).returns(@cache)
|
438
|
+
|
439
|
+
@instance.stubs(:expired?).returns false
|
440
|
+
|
441
|
+
@cached = stub 'cached', :expiration= => nil, :name => "/my/key"
|
442
|
+
end
|
443
|
+
|
444
|
+
it "should use a request to find within the cache" do
|
445
|
+
@cache.expects(:find).with { |r| r.is_a?(Puppet::Indirector::Request) and r.method == :find }
|
446
|
+
@indirection.expire("/my/key")
|
447
|
+
end
|
448
|
+
|
449
|
+
it "should do nothing if no such instance is cached" do
|
450
|
+
@cache.expects(:find).returns nil
|
451
|
+
|
452
|
+
@indirection.expire("/my/key")
|
453
|
+
end
|
454
|
+
|
455
|
+
it "should log that it is expiring any found instance" do
|
456
|
+
@cache.expects(:find).returns @cached
|
457
|
+
@cache.stubs(:save)
|
458
|
+
|
459
|
+
Puppet.expects(:info)
|
460
|
+
|
461
|
+
@indirection.expire("/my/key")
|
462
|
+
end
|
463
|
+
|
464
|
+
it "should set the cached instance's expiration to a time in the past" do
|
465
|
+
@cache.expects(:find).returns @cached
|
466
|
+
@cache.stubs(:save)
|
467
|
+
|
468
|
+
@cached.expects(:expiration=).with { |t| t < Time.now }
|
469
|
+
|
470
|
+
@indirection.expire("/my/key")
|
471
|
+
end
|
472
|
+
|
473
|
+
it "should save the now expired instance back into the cache" do
|
474
|
+
@cache.expects(:find).returns @cached
|
475
|
+
|
476
|
+
@cached.expects(:expiration=).with { |t| t < Time.now }
|
477
|
+
|
478
|
+
@cache.expects(:save)
|
479
|
+
|
480
|
+
@indirection.expire("/my/key")
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should use a request to save the expired resource to the cache" do
|
484
|
+
@cache.expects(:find).returns @cached
|
485
|
+
|
486
|
+
@cached.expects(:expiration=).with { |t| t < Time.now }
|
487
|
+
|
488
|
+
@cache.expects(:save).with { |r| r.is_a?(Puppet::Indirector::Request) and r.instance == @cached and r.method == :save }.returns(@cached)
|
489
|
+
|
490
|
+
@indirection.expire("/my/key")
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
after :each do
|
496
|
+
@indirection.delete
|
497
|
+
Puppet::Indirector::Indirection.clear_cache
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
|
502
|
+
describe "when managing indirection instances" do
|
503
|
+
it "should allow an indirection to be retrieved by name" do
|
504
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
505
|
+
Puppet::Indirector::Indirection.instance(:test).should equal(@indirection)
|
506
|
+
end
|
507
|
+
|
508
|
+
it "should return nil when the named indirection has not been created" do
|
509
|
+
Puppet::Indirector::Indirection.instance(:test).should be_nil
|
510
|
+
end
|
511
|
+
|
512
|
+
it "should allow an indirection's model to be retrieved by name" do
|
513
|
+
mock_model = mock('model')
|
514
|
+
@indirection = Puppet::Indirector::Indirection.new(mock_model, :test)
|
515
|
+
Puppet::Indirector::Indirection.model(:test).should equal(mock_model)
|
516
|
+
end
|
517
|
+
|
518
|
+
it "should return nil when no model matches the requested name" do
|
519
|
+
Puppet::Indirector::Indirection.model(:test).should be_nil
|
520
|
+
end
|
521
|
+
|
522
|
+
after do
|
523
|
+
@indirection.delete if defined? @indirection
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
527
|
+
describe "when routing to the correct the terminus class" do
|
528
|
+
before do
|
529
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
530
|
+
@terminus = mock 'terminus'
|
531
|
+
@terminus_class = stub 'terminus class', :new => @terminus
|
532
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :default).returns(@terminus_class)
|
533
|
+
end
|
534
|
+
|
535
|
+
it "should fail if no terminus class can be picked" do
|
536
|
+
proc { @indirection.terminus_class }.should raise_error(Puppet::DevError)
|
537
|
+
end
|
538
|
+
|
539
|
+
it "should choose the default terminus class if one is specified" do
|
540
|
+
@indirection.terminus_class = :default
|
541
|
+
@indirection.terminus_class.should equal(:default)
|
542
|
+
end
|
543
|
+
|
544
|
+
it "should use the provided Puppet setting if told to do so" do
|
545
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :my_terminus).returns(mock("terminus_class2"))
|
546
|
+
Puppet.settings.expects(:value).with(:my_setting).returns("my_terminus")
|
547
|
+
@indirection.terminus_setting = :my_setting
|
548
|
+
@indirection.terminus_class.should equal(:my_terminus)
|
549
|
+
end
|
550
|
+
|
551
|
+
it "should fail if the provided terminus class is not valid" do
|
552
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :nosuchclass).returns(nil)
|
553
|
+
proc { @indirection.terminus_class = :nosuchclass }.should raise_error(ArgumentError)
|
554
|
+
end
|
555
|
+
|
556
|
+
after do
|
557
|
+
@indirection.delete if defined? @indirection
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
561
|
+
describe "when specifying the terminus class to use" do
|
562
|
+
before do
|
563
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
564
|
+
@terminus = mock 'terminus'
|
565
|
+
@terminus_class = stub 'terminus class', :new => @terminus
|
566
|
+
end
|
567
|
+
|
568
|
+
it "should allow specification of a terminus type" do
|
569
|
+
@indirection.should respond_to(:terminus_class=)
|
570
|
+
end
|
571
|
+
|
572
|
+
it "should fail to redirect if no terminus type has been specified" do
|
573
|
+
proc { @indirection.find("blah") }.should raise_error(Puppet::DevError)
|
574
|
+
end
|
575
|
+
|
576
|
+
it "should fail when the terminus class name is an empty string" do
|
577
|
+
proc { @indirection.terminus_class = "" }.should raise_error(ArgumentError)
|
578
|
+
end
|
579
|
+
|
580
|
+
it "should fail when the terminus class name is nil" do
|
581
|
+
proc { @indirection.terminus_class = nil }.should raise_error(ArgumentError)
|
582
|
+
end
|
583
|
+
|
584
|
+
it "should fail when the specified terminus class cannot be found" do
|
585
|
+
Puppet::Indirector::Terminus.expects(:terminus_class).with(:test, :foo).returns(nil)
|
586
|
+
proc { @indirection.terminus_class = :foo }.should raise_error(ArgumentError)
|
587
|
+
end
|
588
|
+
|
589
|
+
it "should select the specified terminus class if a terminus class name is provided" do
|
590
|
+
Puppet::Indirector::Terminus.expects(:terminus_class).with(:test, :foo).returns(@terminus_class)
|
591
|
+
@indirection.terminus(:foo).should equal(@terminus)
|
592
|
+
end
|
593
|
+
|
594
|
+
it "should use the configured terminus class if no terminus name is specified" do
|
595
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :foo).returns(@terminus_class)
|
596
|
+
@indirection.terminus_class = :foo
|
597
|
+
@indirection.terminus().should equal(@terminus)
|
598
|
+
end
|
599
|
+
|
600
|
+
after do
|
601
|
+
@indirection.delete if defined? @indirection
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
605
|
+
describe "when managing terminus instances" do
|
606
|
+
before do
|
607
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
608
|
+
@terminus = mock 'terminus'
|
609
|
+
@terminus_class = mock 'terminus class'
|
610
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :foo).returns(@terminus_class)
|
611
|
+
end
|
612
|
+
|
613
|
+
it "should create an instance of the chosen terminus class" do
|
614
|
+
@terminus_class.stubs(:new).returns(@terminus)
|
615
|
+
@indirection.terminus(:foo).should equal(@terminus)
|
616
|
+
end
|
617
|
+
|
618
|
+
it "should allow the clearance of cached terminus instances" do
|
619
|
+
terminus1 = mock 'terminus1'
|
620
|
+
terminus2 = mock 'terminus2'
|
621
|
+
@terminus_class.stubs(:new).returns(terminus1, terminus2, ArgumentError)
|
622
|
+
@indirection.terminus(:foo).should equal(terminus1)
|
623
|
+
@indirection.class.clear_cache
|
624
|
+
@indirection.terminus(:foo).should equal(terminus2)
|
625
|
+
end
|
626
|
+
|
627
|
+
# Make sure it caches the terminus.
|
628
|
+
it "should return the same terminus instance each time for a given name" do
|
629
|
+
@terminus_class.stubs(:new).returns(@terminus)
|
630
|
+
@indirection.terminus(:foo).should equal(@terminus)
|
631
|
+
@indirection.terminus(:foo).should equal(@terminus)
|
632
|
+
end
|
633
|
+
|
634
|
+
it "should not create a terminus instance until one is actually needed" do
|
635
|
+
Puppet::Indirector.expects(:terminus).never
|
636
|
+
indirection = Puppet::Indirector::Indirection.new(mock('model'), :lazytest)
|
637
|
+
end
|
638
|
+
|
639
|
+
after do
|
640
|
+
@indirection.delete
|
641
|
+
Puppet::Indirector::Indirection.clear_cache
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
describe "when deciding whether to cache" do
|
646
|
+
before do
|
647
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
648
|
+
@terminus = mock 'terminus'
|
649
|
+
@terminus_class = mock 'terminus class'
|
650
|
+
@terminus_class.stubs(:new).returns(@terminus)
|
651
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :foo).returns(@terminus_class)
|
652
|
+
@indirection.terminus_class = :foo
|
653
|
+
end
|
654
|
+
|
655
|
+
it "should provide a method for setting the cache terminus class" do
|
656
|
+
@indirection.should respond_to(:cache_class=)
|
657
|
+
end
|
658
|
+
|
659
|
+
it "should fail to cache if no cache type has been specified" do
|
660
|
+
proc { @indirection.cache }.should raise_error(Puppet::DevError)
|
661
|
+
end
|
662
|
+
|
663
|
+
it "should fail to set the cache class when the cache class name is an empty string" do
|
664
|
+
proc { @indirection.cache_class = "" }.should raise_error(ArgumentError)
|
665
|
+
end
|
666
|
+
|
667
|
+
it "should fail to set the cache class when the cache class name is nil" do
|
668
|
+
proc { @indirection.cache_class = nil }.should raise_error(ArgumentError)
|
669
|
+
end
|
670
|
+
|
671
|
+
it "should fail to set the cache class when the specified cache class cannot be found" do
|
672
|
+
Puppet::Indirector::Terminus.expects(:terminus_class).with(:test, :foo).returns(nil)
|
673
|
+
proc { @indirection.cache_class = :foo }.should raise_error(ArgumentError)
|
674
|
+
end
|
675
|
+
|
676
|
+
after do
|
677
|
+
@indirection.delete
|
678
|
+
Puppet::Indirector::Indirection.clear_cache
|
679
|
+
end
|
680
|
+
end
|
681
|
+
|
682
|
+
describe "when using a cache" do
|
683
|
+
before :each do
|
684
|
+
Puppet.settings.stubs(:value).with("test_terminus").returns("test_terminus")
|
685
|
+
@terminus_class = mock 'terminus_class'
|
686
|
+
@terminus = mock 'terminus'
|
687
|
+
@terminus_class.stubs(:new).returns(@terminus)
|
688
|
+
@cache = mock 'cache'
|
689
|
+
@cache_class = mock 'cache_class'
|
690
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :cache_terminus).returns(@cache_class)
|
691
|
+
Puppet::Indirector::Terminus.stubs(:terminus_class).with(:test, :test_terminus).returns(@terminus_class)
|
692
|
+
@indirection = Puppet::Indirector::Indirection.new(mock('model'), :test)
|
693
|
+
@indirection.terminus_class = :test_terminus
|
694
|
+
end
|
695
|
+
|
696
|
+
describe "and managing the cache terminus" do
|
697
|
+
it "should not create a cache terminus at initialization" do
|
698
|
+
# This is weird, because all of the code is in the setup. If we got
|
699
|
+
# new() called on the cache class, we'd get an exception here.
|
700
|
+
end
|
701
|
+
|
702
|
+
it "should reuse the cache terminus" do
|
703
|
+
@cache_class.expects(:new).returns(@cache)
|
704
|
+
Puppet.settings.stubs(:value).with("test_cache").returns("cache_terminus")
|
705
|
+
@indirection.cache_class = :cache_terminus
|
706
|
+
@indirection.cache.should equal(@cache)
|
707
|
+
@indirection.cache.should equal(@cache)
|
708
|
+
end
|
709
|
+
|
710
|
+
it "should remove the cache terminus when all other terminus instances are cleared" do
|
711
|
+
cache2 = mock 'cache2'
|
712
|
+
@cache_class.stubs(:new).returns(@cache, cache2)
|
713
|
+
@indirection.cache_class = :cache_terminus
|
714
|
+
@indirection.cache.should equal(@cache)
|
715
|
+
@indirection.clear_cache
|
716
|
+
@indirection.cache.should equal(cache2)
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
describe "and saving" do
|
721
|
+
end
|
722
|
+
|
723
|
+
describe "and finding" do
|
724
|
+
end
|
725
|
+
|
726
|
+
after :each do
|
727
|
+
@indirection.delete
|
728
|
+
Puppet::Indirector::Indirection.clear_cache
|
729
|
+
end
|
730
|
+
end
|
731
|
+
end
|