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,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/node'
|
6
|
+
require 'puppet/indirector/node/yaml'
|
7
|
+
|
8
|
+
describe Puppet::Node::Yaml do
|
9
|
+
it "should be a subclass of the Yaml terminus" do
|
10
|
+
Puppet::Node::Yaml.superclass.should equal(Puppet::Indirector::Yaml)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have documentation" do
|
14
|
+
Puppet::Node::Yaml.doc.should_not be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be registered with the configuration store indirection" do
|
18
|
+
indirection = Puppet::Indirector::Indirection.instance(:node)
|
19
|
+
Puppet::Node::Yaml.indirection.should equal(indirection)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have its name set to :node" do
|
23
|
+
Puppet::Node::Yaml.name.should == :yaml
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
require 'puppet/indirector/plain'
|
5
|
+
|
6
|
+
describe Puppet::Indirector::Plain do
|
7
|
+
before do
|
8
|
+
Puppet::Indirector::Terminus.stubs(:register_terminus_class)
|
9
|
+
@model = mock 'model'
|
10
|
+
@indirection = stub 'indirection', :name => :mystuff, :register_terminus_type => nil, :model => @model
|
11
|
+
Puppet::Indirector::Indirection.stubs(:instance).returns(@indirection)
|
12
|
+
|
13
|
+
@plain_class = Class.new(Puppet::Indirector::Plain) do
|
14
|
+
def self.to_s
|
15
|
+
"Mystuff::Testing"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
@searcher = @plain_class.new
|
20
|
+
|
21
|
+
@request = stub 'request', :key => "yay"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return return an instance of the indirected model" do
|
25
|
+
object = mock 'object'
|
26
|
+
@model.expects(:new).with(@request.key).returns object
|
27
|
+
@searcher.find(@request).should equal(object)
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Luke Kanies on 2007-9-23.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
|
8
|
+
require 'puppet/indirector/report/processor'
|
9
|
+
|
10
|
+
describe Puppet::Transaction::Report::Processor do
|
11
|
+
before do
|
12
|
+
Puppet.settings.stubs(:use).returns(true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should provide a method for saving reports" do
|
16
|
+
Puppet::Transaction::Report::Processor.new.should respond_to(:save)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Puppet::Transaction::Report::Processor, " when saving a report" do
|
21
|
+
before do
|
22
|
+
Puppet.settings.stubs(:use)
|
23
|
+
@reporter = Puppet::Transaction::Report::Processor.new
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not process the report if reports are set to 'none'" do
|
27
|
+
Puppet::Reports.expects(:report).never
|
28
|
+
Puppet.settings.expects(:value).with(:reports).returns("none")
|
29
|
+
|
30
|
+
request = stub 'request', :instance => mock("report")
|
31
|
+
|
32
|
+
@reporter.save(request)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should process the report with each configured report type" do
|
36
|
+
Puppet.settings.stubs(:value).with(:reports).returns("one,two")
|
37
|
+
@reporter.send(:reports).should == %w{one two}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe Puppet::Transaction::Report::Processor, " when processing a report" do
|
42
|
+
before do
|
43
|
+
Puppet.settings.stubs(:value).with(:reports).returns("one")
|
44
|
+
Puppet.settings.stubs(:use)
|
45
|
+
@reporter = Puppet::Transaction::Report::Processor.new
|
46
|
+
|
47
|
+
@report_type = mock 'one'
|
48
|
+
@dup_report = mock 'dupe report'
|
49
|
+
@dup_report.stubs(:process)
|
50
|
+
@report = mock 'report'
|
51
|
+
@report.expects(:dup).returns(@dup_report)
|
52
|
+
|
53
|
+
@request = stub 'request', :instance => @report
|
54
|
+
|
55
|
+
Puppet::Reports.expects(:report).with("one").returns(@report_type)
|
56
|
+
|
57
|
+
@dup_report.expects(:extend).with(@report_type)
|
58
|
+
end
|
59
|
+
|
60
|
+
# LAK:NOTE This is stupid, because the code is so short it doesn't
|
61
|
+
# make sense to split it out, which means I just do the same test
|
62
|
+
# three times so the spec looks right.
|
63
|
+
it "should process a duplicate of the report, not the original" do
|
64
|
+
@reporter.save(@request)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should extend the report with the report type's module" do
|
68
|
+
@reporter.save(@request)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should call the report type's :process method" do
|
72
|
+
@dup_report.expects(:process)
|
73
|
+
@reporter.save(@request)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should not raise exceptions" do
|
77
|
+
Puppet.settings.stubs(:value).with(:trace).returns(false)
|
78
|
+
@dup_report.expects(:process).raises(ArgumentError)
|
79
|
+
proc { @reporter.save(@request) }.should_not raise_error
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
require 'puppet/indirector/request'
|
5
|
+
|
6
|
+
describe Puppet::Indirector::Request do
|
7
|
+
describe "when initializing" do
|
8
|
+
it "should require an indirection name, a key, and a method" do
|
9
|
+
lambda { Puppet::Indirector::Request.new }.should raise_error(ArgumentError)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should use provided value as the key if it is a string" do
|
13
|
+
Puppet::Indirector::Request.new(:ind, :method, "mykey").key.should == "mykey"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should use provided value as the key if it is a symbol" do
|
17
|
+
Puppet::Indirector::Request.new(:ind, :method, :mykey).key.should == :mykey
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should use the name of the provided instance as its key if an instance is provided as the key instead of a string" do
|
21
|
+
instance = mock 'instance', :name => "mykey"
|
22
|
+
request = Puppet::Indirector::Request.new(:ind, :method, instance)
|
23
|
+
request.key.should == "mykey"
|
24
|
+
request.instance.should equal(instance)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should support options specified as a hash" do
|
28
|
+
lambda { Puppet::Indirector::Request.new(:ind, :method, :key, :one => :two) }.should_not raise_error(ArgumentError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should support nil options" do
|
32
|
+
lambda { Puppet::Indirector::Request.new(:ind, :method, :key, nil) }.should_not raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should support unspecified options" do
|
36
|
+
lambda { Puppet::Indirector::Request.new(:ind, :method, :key) }.should_not raise_error(ArgumentError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should fail if options are specified as anything other than nil or a hash" do
|
40
|
+
lambda { Puppet::Indirector::Request.new(:ind, :method, :key, [:one, :two]) }.should raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should use an empty options hash if nil was provided" do
|
44
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, nil).options.should == {}
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should default to a nil node" do
|
48
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, nil).node.should be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should set its node attribute if provided in the options" do
|
52
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, :node => "foo.com").node.should == "foo.com"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should default to a nil ip" do
|
56
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, nil).ip.should be_nil
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should set its ip attribute if provided in the options" do
|
60
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, :ip => "192.168.0.1").ip.should == "192.168.0.1"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should default to being unauthenticated" do
|
64
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, nil).should_not be_authenticated
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should set be marked authenticated if configured in the options" do
|
68
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, :authenticated => "eh").should be_authenticated
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should keep its options as a hash even if a node is specified" do
|
72
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, :node => "eh").options.should be_instance_of(Hash)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should keep its options as a hash even if another option is specified" do
|
76
|
+
Puppet::Indirector::Request.new(:ind, :method, :key, :foo => "bar").options.should be_instance_of(Hash)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should look use the Indirection class to return the appropriate indirection" do
|
81
|
+
ind = mock 'indirection'
|
82
|
+
Puppet::Indirector::Indirection.expects(:instance).with(:myind).returns ind
|
83
|
+
request = Puppet::Indirector::Request.new(:myind, :method, :key)
|
84
|
+
|
85
|
+
request.indirection.should equal(ind)
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,372 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
4
|
+
require 'puppet/indirector/rest'
|
5
|
+
|
6
|
+
describe Puppet::Indirector::REST do
|
7
|
+
before do
|
8
|
+
Puppet::Indirector::Terminus.stubs(:register_terminus_class)
|
9
|
+
@model = stub('model')
|
10
|
+
@instance = stub('model instance')
|
11
|
+
@indirection = stub('indirection', :name => :mystuff, :register_terminus_type => nil, :model => @model)
|
12
|
+
Puppet::Indirector::Indirection.stubs(:instance).returns(@indirection)
|
13
|
+
|
14
|
+
@rest_class = Class.new(Puppet::Indirector::REST) do
|
15
|
+
def self.to_s
|
16
|
+
"This::Is::A::Test::Class"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
@searcher = @rest_class.new
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when locating the REST connection" do
|
24
|
+
before do
|
25
|
+
Puppet.settings.stubs(:value).returns("whatever")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return the :server setting as the host" do
|
29
|
+
Puppet.settings.expects(:value).with(:server).returns "myserver"
|
30
|
+
@searcher.rest_connection_details[:host].should == "myserver"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the :masterport (as an Integer) as the port" do
|
34
|
+
Puppet.settings.expects(:value).with(:masterport).returns "1234"
|
35
|
+
@searcher.rest_connection_details[:port].should == 1234
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "when doing a network fetch" do
|
40
|
+
before :each do
|
41
|
+
Net::HTTP.stubs(:start).returns('result')
|
42
|
+
@details = { :host => '127.0.0.1', :port => 34343 }
|
43
|
+
@searcher.stubs(:rest_connection_details).returns(@details)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should accept a path" do
|
47
|
+
lambda { @search.network_fetch('foo') }.should_not raise_error(ArgumentError)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should require a path" do
|
51
|
+
lambda { @searcher.network_fetch }.should raise_error(ArgumentError)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should look up connection details" do
|
55
|
+
@searcher.expects(:rest_connection_details).returns(@details)
|
56
|
+
@searcher.network_fetch('foo')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should use the GET http method" do
|
60
|
+
@mock_result = stub('mock result', :body => 'result')
|
61
|
+
@mock_connection = mock('mock http connection', :get => @mock_result)
|
62
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
63
|
+
@searcher.network_fetch('foo')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should use the appropriate remote server" do
|
67
|
+
Net::HTTP.expects(:start).with {|host, port| host == @details[:host] }
|
68
|
+
@searcher.network_fetch('foo')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should use the appropriate remote port" do
|
72
|
+
Net::HTTP.expects(:start).with {|host, port| port == @details[:port] }
|
73
|
+
@searcher.network_fetch('foo')
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should use the provided path" do
|
77
|
+
@mock_result = stub('mock result', :body => 'result')
|
78
|
+
@mock_connection = stub('mock http connection')
|
79
|
+
@mock_connection.expects(:get).with('/foo').returns(@mock_result)
|
80
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
81
|
+
@searcher.network_fetch('foo')
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return the results of the GET request" do
|
85
|
+
@searcher.network_fetch('foo').should == 'result'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "when doing a network delete" do
|
90
|
+
before :each do
|
91
|
+
Net::HTTP.stubs(:start).returns('result')
|
92
|
+
@details = { :host => '127.0.0.1', :port => 34343 }
|
93
|
+
@searcher.stubs(:rest_connection_details).returns(@details)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should accept a path" do
|
97
|
+
lambda { @search.network_delete('foo') }.should_not raise_error(ArgumentError)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should require a path" do
|
101
|
+
lambda { @searcher.network_delete }.should raise_error(ArgumentError)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should look up connection details" do
|
105
|
+
@searcher.expects(:rest_connection_details).returns(@details)
|
106
|
+
@searcher.network_delete('foo')
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should use the DELETE http method" do
|
110
|
+
@mock_result = stub('mock result', :body => 'result')
|
111
|
+
@mock_connection = mock('mock http connection', :delete => @mock_result)
|
112
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
113
|
+
@searcher.network_delete('foo')
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should use the appropriate remote server" do
|
117
|
+
Net::HTTP.expects(:start).with {|host, port| host == @details[:host] }
|
118
|
+
@searcher.network_delete('foo')
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should use the appropriate remote port" do
|
122
|
+
Net::HTTP.expects(:start).with {|host, port| port == @details[:port] }
|
123
|
+
@searcher.network_delete('foo')
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should use the provided path" do
|
127
|
+
@mock_result = stub('mock result', :body => 'result')
|
128
|
+
@mock_connection = stub('mock http connection')
|
129
|
+
@mock_connection.expects(:delete).with('/foo').returns(@mock_result)
|
130
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
131
|
+
@searcher.network_delete('foo')
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should return the results of the DELETE request" do
|
135
|
+
@searcher.network_delete('foo').should == 'result'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "when doing a network put" do
|
140
|
+
before :each do
|
141
|
+
Net::HTTP.stubs(:start).returns('result')
|
142
|
+
@details = { :host => '127.0.0.1', :port => 34343 }
|
143
|
+
@data = { :foo => 'bar' }
|
144
|
+
@searcher.stubs(:rest_connection_details).returns(@details)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should accept a path and data" do
|
148
|
+
lambda { @search.network_put('foo', @data) }.should_not raise_error(ArgumentError)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should require a path and data" do
|
152
|
+
lambda { @searcher.network_put('foo') }.should raise_error(ArgumentError)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should look up connection details" do
|
156
|
+
@searcher.expects(:rest_connection_details).returns(@details)
|
157
|
+
@searcher.network_put('foo', @data)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should use the appropriate remote server" do
|
161
|
+
Net::HTTP.expects(:start).with {|host, port| host == @details[:host] }
|
162
|
+
@searcher.network_put('foo', @data)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should use the appropriate remote port" do
|
166
|
+
Net::HTTP.expects(:start).with {|host, port| port == @details[:port] }
|
167
|
+
@searcher.network_put('foo', @data)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should use the PUT http method" do
|
171
|
+
@mock_result = stub('mock result', :body => 'result')
|
172
|
+
@mock_connection = mock('mock http connection', :put => @mock_result)
|
173
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
174
|
+
@searcher.network_put('foo', @data)
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should use the provided path" do
|
178
|
+
@mock_result = stub('mock result', :body => 'result')
|
179
|
+
@mock_connection = stub('mock http connection')
|
180
|
+
@mock_connection.expects(:put).with {|path, data| path == '/foo' }.returns(@mock_result)
|
181
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
182
|
+
@searcher.network_put('foo', @data)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should use the provided data" do
|
186
|
+
@mock_result = stub('mock result', :body => 'result')
|
187
|
+
@mock_connection = stub('mock http connection')
|
188
|
+
@mock_connection.expects(:put).with {|path, data| data == @data }.returns(@mock_result)
|
189
|
+
@searcher.stubs(:network).yields(@mock_connection)
|
190
|
+
@searcher.network_put('foo', @data)
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should return the results of the PUT request" do
|
194
|
+
@searcher.network_put('foo', @data).should == 'result'
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe "when doing a find" do
|
199
|
+
before :each do
|
200
|
+
@result = { :foo => 'bar'}.to_yaml
|
201
|
+
@searcher.stubs(:network_fetch).returns(@result) # neuter the network connection
|
202
|
+
@model.stubs(:from_yaml).returns(@instance)
|
203
|
+
|
204
|
+
@request = stub 'request', :key => 'foo'
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should look up the model instance over the network" do
|
208
|
+
@searcher.expects(:network_fetch).returns(@result)
|
209
|
+
@searcher.find(@request)
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should look up the model instance using the named indirection" do
|
213
|
+
@searcher.expects(:network_fetch).with {|path| path =~ %r{^#{@indirection.name.to_s}/} }.returns(@result)
|
214
|
+
@searcher.find(@request)
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should look up the model instance using the provided key" do
|
218
|
+
@searcher.expects(:network_fetch).with {|path| path =~ %r{/foo$} }.returns(@result)
|
219
|
+
@searcher.find(@request)
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should deserialize result data to a Model instance" do
|
223
|
+
@model.expects(:from_yaml)
|
224
|
+
@searcher.find(@request)
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should return the deserialized Model instance" do
|
228
|
+
@searcher.find(@request).should == @instance
|
229
|
+
end
|
230
|
+
|
231
|
+
it "should return nil when deserialized model instance is nil" do
|
232
|
+
@model.stubs(:from_yaml).returns(nil)
|
233
|
+
@searcher.find(@request).should be_nil
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should generate an error when result data deserializes improperly" do
|
237
|
+
@model.stubs(:from_yaml).raises(ArgumentError)
|
238
|
+
lambda { @searcher.find(@request) }.should raise_error(ArgumentError)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should generate an error when result data specifies an error" do
|
242
|
+
@searcher.stubs(:network_fetch).returns(RuntimeError.new("bogus").to_yaml)
|
243
|
+
lambda { @searcher.find(@request) }.should raise_error(RuntimeError)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
describe "when doing a search" do
|
248
|
+
before :each do
|
249
|
+
@result = [1, 2].to_yaml
|
250
|
+
@searcher.stubs(:network_fetch).returns(@result)
|
251
|
+
@model.stubs(:from_yaml).returns(@instance)
|
252
|
+
|
253
|
+
@request = stub 'request', :key => 'foo'
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should look up the model data over the network" do
|
257
|
+
@searcher.expects(:network_fetch).returns(@result)
|
258
|
+
@searcher.search(@request)
|
259
|
+
end
|
260
|
+
|
261
|
+
it "should look up the model instance using the named indirection" do
|
262
|
+
@searcher.expects(:network_fetch).with {|path| path =~ %r{^#{@indirection.name.to_s}s/} }.returns(@result)
|
263
|
+
@searcher.search(@request)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should look up the model instance using the provided key" do
|
267
|
+
@searcher.expects(:network_fetch).with {|path| path =~ %r{/foo$} }.returns(@result)
|
268
|
+
@searcher.search(@request)
|
269
|
+
end
|
270
|
+
|
271
|
+
it "should deserialize result data into a list of Model instances" do
|
272
|
+
@model.expects(:from_yaml).at_least(2)
|
273
|
+
@searcher.search(@request)
|
274
|
+
end
|
275
|
+
|
276
|
+
it "should generate an error when result data deserializes improperly" do
|
277
|
+
@model.stubs(:from_yaml).raises(ArgumentError)
|
278
|
+
lambda { @searcher.search(@request) }.should raise_error(ArgumentError)
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should generate an error when result data specifies an error" do
|
282
|
+
@searcher.stubs(:network_fetch).returns(RuntimeError.new("bogus").to_yaml)
|
283
|
+
lambda { @searcher.search(@request) }.should raise_error(RuntimeError)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
describe "when doing a destroy" do
|
288
|
+
before :each do
|
289
|
+
@result = true.to_yaml
|
290
|
+
@searcher.stubs(:network_delete).returns(@result) # neuter the network connection
|
291
|
+
@model.stubs(:from_yaml).returns(@instance)
|
292
|
+
|
293
|
+
@request = stub 'request', :key => 'foo'
|
294
|
+
end
|
295
|
+
|
296
|
+
it "should look up the model instance over the network" do
|
297
|
+
@searcher.expects(:network_delete).returns(@result)
|
298
|
+
@searcher.destroy(@request)
|
299
|
+
end
|
300
|
+
|
301
|
+
it "should look up the model instance using the named indirection" do
|
302
|
+
@searcher.expects(:network_delete).with {|path| path =~ %r{^#{@indirection.name.to_s}/} }.returns(@result)
|
303
|
+
@searcher.destroy(@request)
|
304
|
+
end
|
305
|
+
|
306
|
+
it "should look up the model instance using the provided key" do
|
307
|
+
@searcher.expects(:network_delete).with {|path| path =~ %r{/foo$} }.returns(@result)
|
308
|
+
@searcher.destroy(@request)
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should deserialize result data" do
|
312
|
+
YAML.expects(:load).with(@result)
|
313
|
+
@searcher.destroy(@request)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "should return deserialized result data" do
|
317
|
+
@searcher.destroy(@request).should == true
|
318
|
+
end
|
319
|
+
|
320
|
+
it "should generate an error when result data specifies an error" do
|
321
|
+
@searcher.stubs(:network_delete).returns(RuntimeError.new("bogus").to_yaml)
|
322
|
+
lambda { @searcher.destroy(@request) }.should raise_error(RuntimeError)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe "when doing a save" do
|
327
|
+
before :each do
|
328
|
+
@result = { :foo => 'bar'}.to_yaml
|
329
|
+
@searcher.stubs(:network_put).returns(@result) # neuter the network connection
|
330
|
+
@model.stubs(:from_yaml).returns(@instance)
|
331
|
+
|
332
|
+
@request = stub 'request', :instance => @instance
|
333
|
+
end
|
334
|
+
|
335
|
+
it "should save the model instance over the network" do
|
336
|
+
@searcher.expects(:network_put).returns(@result)
|
337
|
+
@searcher.save(@request)
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should save the model instance using the named indirection" do
|
341
|
+
@searcher.expects(:network_put).with do |path, data|
|
342
|
+
path =~ %r{^#{@indirection.name.to_s}/} and
|
343
|
+
data == @instance.to_yaml
|
344
|
+
end.returns(@result)
|
345
|
+
@searcher.save(@request)
|
346
|
+
end
|
347
|
+
|
348
|
+
it "should deserialize result data to a Model instance" do
|
349
|
+
@model.expects(:from_yaml)
|
350
|
+
@searcher.save(@request)
|
351
|
+
end
|
352
|
+
|
353
|
+
it "should return the resulting deserialized Model instance" do
|
354
|
+
@searcher.save(@request).should == @instance
|
355
|
+
end
|
356
|
+
|
357
|
+
it "should return nil when deserialized model instance is nil" do
|
358
|
+
@model.stubs(:from_yaml).returns(nil)
|
359
|
+
@searcher.save(@request).should be_nil
|
360
|
+
end
|
361
|
+
|
362
|
+
it "should generate an error when result data deserializes improperly" do
|
363
|
+
@model.stubs(:from_yaml).raises(ArgumentError)
|
364
|
+
lambda { @searcher.save(@request) }.should raise_error(ArgumentError)
|
365
|
+
end
|
366
|
+
|
367
|
+
it "should generate an error when result data specifies an error" do
|
368
|
+
@searcher.stubs(:network_put).returns(RuntimeError.new("bogus").to_yaml)
|
369
|
+
lambda { @searcher.save(@request) }.should raise_error(RuntimeError)
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|