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
File without changes
|
@@ -0,0 +1,127 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Created by Rick Bradley on 2007-10-15.
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
7
|
+
require 'puppet/network/http'
|
8
|
+
require 'puppet/network/http/webrick'
|
9
|
+
|
10
|
+
describe Puppet::Network::HTTP::WEBrick, "after initializing" do
|
11
|
+
it "should not be listening" do
|
12
|
+
Puppet::Network::HTTP::WEBrick.new.should_not be_listening
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Puppet::Network::HTTP::WEBrick, "when turning on listening" do
|
17
|
+
before do
|
18
|
+
@mock_webrick = stub('webrick', :[] => {})
|
19
|
+
[:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
|
20
|
+
WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
|
21
|
+
@server = Puppet::Network::HTTP::WEBrick.new
|
22
|
+
@listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should fail if already listening" do
|
26
|
+
@server.listen(@listen_params)
|
27
|
+
Proc.new { @server.listen(@listen_params) }.should raise_error(RuntimeError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should require at least one handler" do
|
31
|
+
Proc.new { @server.listen(@listen_params.delete_if {|k,v| :handlers == k}) }.should raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should require at least one protocol" do
|
35
|
+
Proc.new { @server.listen(@listen_params.delete_if {|k,v| :protocols == k}) }.should raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should require a listening address to be specified" do
|
39
|
+
Proc.new { @server.listen(@listen_params.delete_if {|k,v| :address == k})}.should raise_error(ArgumentError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should require a listening port to be specified" do
|
43
|
+
Proc.new { @server.listen(@listen_params.delete_if {|k,v| :port == k})}.should raise_error(ArgumentError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should order a webrick server to start" do
|
47
|
+
@mock_webrick.expects(:start)
|
48
|
+
@server.listen(@listen_params)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should tell webrick to listen on the specified address and port" do
|
52
|
+
WEBrick::HTTPServer.expects(:new).with {|args|
|
53
|
+
args[:Port] == 31337 and args[:BindAddress] == "127.0.0.1"
|
54
|
+
}.returns(@mock_webrick)
|
55
|
+
@server.listen(@listen_params)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be listening" do
|
59
|
+
@server.listen(@listen_params)
|
60
|
+
@server.should be_listening
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should instantiate a handler for each protocol+handler pair to configure web server routing" do
|
64
|
+
@listen_params[:protocols].each do |protocol|
|
65
|
+
mock_handler = mock("handler instance for [#{protocol}]")
|
66
|
+
mock_handler_class = mock("handler class for [#{protocol}]")
|
67
|
+
@listen_params[:handlers].each do |handler|
|
68
|
+
@mock_webrick.expects(:mount)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
@server.listen(@listen_params)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should use a WEBrick + REST class to configure WEBrick when REST services are requested" do
|
75
|
+
Puppet::Network::HTTP::WEBrick.expects(:class_for_protocol).with(:rest).at_least_once
|
76
|
+
@server.listen(@listen_params.merge(:protocols => [:rest]))
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should fail if services from an unknown protocol are requested" do
|
80
|
+
Proc.new { @server.listen(@listen_params.merge(:protocols => [ :foo ]))}.should raise_error
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
describe Puppet::Network::HTTP::WEBrick, "when looking up the class to handle a protocol" do
|
86
|
+
it "should require a protocol" do
|
87
|
+
lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol }.should raise_error(ArgumentError)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should accept a protocol" do
|
91
|
+
lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("bob") }.should_not raise_error(ArgumentError)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should use a WEBrick + REST class when a REST protocol is specified" do
|
95
|
+
Puppet::Network::HTTP::WEBrick.class_for_protocol("rest").should == Puppet::Network::HTTP::WEBrickREST
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should fail when an unknown protocol is specified" do
|
99
|
+
lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("abcdefg") }.should raise_error
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe Puppet::Network::HTTP::WEBrick, "when turning off listening" do
|
104
|
+
before do
|
105
|
+
@mock_webrick = stub('webrick', :[] => {})
|
106
|
+
[:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
|
107
|
+
WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
|
108
|
+
@server = Puppet::Network::HTTP::WEBrick.new
|
109
|
+
@listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should fail unless listening" do
|
113
|
+
Proc.new { @server.unlisten }.should raise_error(RuntimeError)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should order webrick server to stop" do
|
117
|
+
@mock_webrick.expects(:shutdown)
|
118
|
+
@server.listen(@listen_params)
|
119
|
+
@server.unlisten
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should no longer be listening" do
|
123
|
+
@server.listen(@listen_params)
|
124
|
+
@server.unlisten
|
125
|
+
@server.should_not be_listening
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,323 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../../../spec_helper'
|
4
|
+
require 'puppet/network/http'
|
5
|
+
require 'puppet/network/http/webrick/rest'
|
6
|
+
|
7
|
+
describe Puppet::Network::HTTP::WEBrickREST, "when initializing" do
|
8
|
+
before do
|
9
|
+
@mock_webrick = stub('WEBrick server', :mount => true, :[] => {})
|
10
|
+
@mock_model = mock('indirected model')
|
11
|
+
Puppet::Indirector::Indirection.stubs(:model).returns(@mock_model)
|
12
|
+
@params = [ @mock_webrick, :foo ]
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should require access to a WEBrick server" do
|
16
|
+
Proc.new {
|
17
|
+
@params[0] = nil
|
18
|
+
Puppet::Network::HTTP::WEBrickREST.new(*@params)
|
19
|
+
}.should raise_error(ArgumentError)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should require an indirection name" do
|
23
|
+
Proc.new { Puppet::Network::HTTP::WEBrickREST.new(@params.first) }.should raise_error(ArgumentError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should look up the indirection model from the indirection name" do
|
27
|
+
Puppet::Indirector::Indirection.expects(:model).returns(@mock_model)
|
28
|
+
Puppet::Network::HTTP::WEBrickREST.new(*@params)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should fail if the indirection is not known" do
|
32
|
+
Puppet::Indirector::Indirection.expects(:model).returns(nil)
|
33
|
+
Proc.new { Puppet::Network::HTTP::WEBrickREST.new(*@params) }.should raise_error(ArgumentError)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe Puppet::Network::HTTP::WEBrickREST, "when receiving a request" do
|
38
|
+
before do
|
39
|
+
@mock_request = stub('webrick http request', :query => {}, :peeraddr => %w{eh boo host ip}, :client_cert => nil)
|
40
|
+
@mock_response = stub('webrick http response', :status= => true, :body= => true)
|
41
|
+
@mock_model_class = stub('indirected model class')
|
42
|
+
@mock_webrick = stub('webrick http server', :mount => true, :[] => {})
|
43
|
+
Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model_class)
|
44
|
+
@handler = Puppet::Network::HTTP::WEBrickREST.new(@mock_webrick, :foo)
|
45
|
+
end
|
46
|
+
|
47
|
+
def setup_find_request
|
48
|
+
@mock_request.stubs(:request_method).returns('GET')
|
49
|
+
@mock_request.stubs(:path).returns('/foo/key')
|
50
|
+
@mock_model_class.stubs(:find)
|
51
|
+
end
|
52
|
+
|
53
|
+
def setup_search_request
|
54
|
+
@mock_request.stubs(:request_method).returns('GET')
|
55
|
+
@mock_request.stubs(:path).returns('/foos')
|
56
|
+
@mock_model_class.stubs(:search).returns([])
|
57
|
+
end
|
58
|
+
|
59
|
+
def setup_destroy_request
|
60
|
+
@mock_request.stubs(:request_method).returns('DELETE')
|
61
|
+
@mock_request.stubs(:path).returns('/foo/key')
|
62
|
+
@mock_model_class.stubs(:destroy)
|
63
|
+
end
|
64
|
+
|
65
|
+
def setup_save_request
|
66
|
+
@mock_request.stubs(:request_method).returns('PUT')
|
67
|
+
@mock_request.stubs(:path).returns('/foo')
|
68
|
+
@mock_request.stubs(:body).returns('This is a fake request body')
|
69
|
+
@mock_model_instance = stub('indirected model instance', :save => true)
|
70
|
+
@mock_model_class.stubs(:from_yaml).returns(@mock_model_instance)
|
71
|
+
end
|
72
|
+
|
73
|
+
def setup_bad_request
|
74
|
+
@mock_request.stubs(:request_method).returns('POST')
|
75
|
+
@mock_request.stubs(:path).returns('/foos')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should delegate its :service method to its :process method" do
|
79
|
+
@handler.expects(:process).with(@mock_request, @mock_response).returns "stuff"
|
80
|
+
@handler.service(@mock_request, @mock_response).should == "stuff"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should call the model find method if the request represents a singular HTTP GET" do
|
84
|
+
setup_find_request
|
85
|
+
@mock_model_class.expects(:find).with { |key, args| key == 'key' }
|
86
|
+
@handler.process(@mock_request, @mock_response)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should call the model search method if the request represents a plural HTTP GET" do
|
90
|
+
setup_search_request
|
91
|
+
@mock_model_class.expects(:search).returns([])
|
92
|
+
@handler.process(@mock_request, @mock_response)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should call the model destroy method if the request represents an HTTP DELETE" do
|
96
|
+
setup_destroy_request
|
97
|
+
@mock_model_class.expects(:destroy).with { |key, args| key == 'key' }
|
98
|
+
@handler.process(@mock_request, @mock_response)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should call the model save method if the request represents an HTTP PUT" do
|
102
|
+
setup_save_request
|
103
|
+
@mock_model_instance.expects(:save)
|
104
|
+
@handler.process(@mock_request, @mock_response)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should fail if the HTTP method isn't supported" do
|
108
|
+
@mock_request.stubs(:request_method).returns('POST')
|
109
|
+
@mock_request.stubs(:path).returns('/foo')
|
110
|
+
@mock_response.expects(:status=).with(404)
|
111
|
+
@handler.process(@mock_request, @mock_response)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should fail if delete request's pluralization is wrong" do
|
115
|
+
@mock_request.stubs(:request_method).returns('DELETE')
|
116
|
+
@mock_request.stubs(:path).returns('/foos/key')
|
117
|
+
@mock_response.expects(:status=).with(404)
|
118
|
+
@handler.process(@mock_request, @mock_response)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should fail if put request's pluralization is wrong" do
|
122
|
+
@mock_request.stubs(:request_method).returns('PUT')
|
123
|
+
@mock_request.stubs(:path).returns('/foos/key')
|
124
|
+
@mock_response.expects(:status=).with(404)
|
125
|
+
@handler.process(@mock_request, @mock_response)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should fail if the request is for an unknown path" do
|
129
|
+
@mock_request.stubs(:request_method).returns('GET')
|
130
|
+
@mock_request.stubs(:path).returns('/bar/key')
|
131
|
+
@mock_response.expects(:status=).with(404)
|
132
|
+
@handler.process(@mock_request, @mock_response)
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "and determining the request parameters" do
|
136
|
+
it "should include the HTTP request parameters" do
|
137
|
+
@mock_request.stubs(:query).returns(:foo => :baz, :bar => :xyzzy)
|
138
|
+
result = @handler.params(@mock_request)
|
139
|
+
result[:foo].should == :baz
|
140
|
+
result[:bar].should == :xyzzy
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should pass the client's ip address to model find" do
|
144
|
+
@mock_request.stubs(:peeraddr).returns(%w{noidea dunno hostname ipaddress})
|
145
|
+
@handler.params(@mock_request)[:ip].should == "ipaddress"
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should set 'authenticated' to true if a certificate is present" do
|
149
|
+
cert = stub 'cert', :subject => [%w{CN host.domain.com}]
|
150
|
+
@mock_request.stubs(:client_cert).returns cert
|
151
|
+
@handler.params(@mock_request)[:authenticated].should be_true
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should set 'authenticated' to false if no certificate is present" do
|
155
|
+
@mock_request.stubs(:client_cert).returns nil
|
156
|
+
@handler.params(@mock_request)[:authenticated].should be_false
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should pass the client's certificate name to model method if a certificate is present" do
|
160
|
+
cert = stub 'cert', :subject => [%w{CN host.domain.com}]
|
161
|
+
@mock_request.stubs(:client_cert).returns cert
|
162
|
+
@handler.params(@mock_request)[:node].should == "host.domain.com"
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should not pass a node name to model method if no certificate is present" do
|
166
|
+
@mock_request.stubs(:client_cert).returns nil
|
167
|
+
@handler.params(@mock_request).should_not be_include(:node)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe "when finding a model instance" do |variable|
|
172
|
+
it "should fail to find model if key is not specified" do
|
173
|
+
@mock_request.stubs(:request_method).returns('GET')
|
174
|
+
@mock_request.stubs(:path).returns('/foo')
|
175
|
+
@mock_response.expects(:status=).with(404)
|
176
|
+
@handler.process(@mock_request, @mock_response)
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should use a common method for determining the request parameters" do
|
180
|
+
setup_find_request
|
181
|
+
@handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
|
182
|
+
@mock_model_class.expects(:find).with do |key, args|
|
183
|
+
args[:foo] == :baz and args[:bar] == :xyzzy
|
184
|
+
end
|
185
|
+
@handler.process(@mock_request, @mock_response)
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should generate a 200 response when a model find call succeeds" do
|
189
|
+
setup_find_request
|
190
|
+
@mock_response.expects(:status=).with(200)
|
191
|
+
@handler.process(@mock_request, @mock_response)
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should return a serialized object when a model find call succeeds" do
|
195
|
+
setup_find_request
|
196
|
+
@mock_model_instance = stub('model instance')
|
197
|
+
@mock_model_instance.expects(:to_yaml)
|
198
|
+
@mock_model_class.stubs(:find).returns(@mock_model_instance)
|
199
|
+
@handler.process(@mock_request, @mock_response)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should serialize a controller exception when an exception is thrown by find" do
|
203
|
+
setup_find_request
|
204
|
+
@mock_model_class.expects(:find).raises(ArgumentError)
|
205
|
+
@mock_response.expects(:status=).with(404)
|
206
|
+
@handler.process(@mock_request, @mock_response)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
describe "when destroying a model instance" do |variable|
|
211
|
+
it "should fail to destroy model if key is not specified" do
|
212
|
+
@mock_request.stubs(:request_method).returns('DELETE')
|
213
|
+
@mock_request.stubs(:path).returns('/foo')
|
214
|
+
@mock_response.expects(:status=).with(404)
|
215
|
+
@handler.process(@mock_request, @mock_response)
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should use a common method for determining the request parameters" do
|
219
|
+
setup_destroy_request
|
220
|
+
@handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
|
221
|
+
@mock_model_class.expects(:destroy).with do |key, args|
|
222
|
+
args[:foo] == :baz and args[:bar] == :xyzzy
|
223
|
+
end
|
224
|
+
@handler.process(@mock_request, @mock_response)
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should generate a 200 response when a model destroy call succeeds" do
|
228
|
+
setup_destroy_request
|
229
|
+
@mock_response.expects(:status=).with(200)
|
230
|
+
@handler.process(@mock_request, @mock_response)
|
231
|
+
end
|
232
|
+
|
233
|
+
it "should return a serialized success result when a model destroy call succeeds" do
|
234
|
+
setup_destroy_request
|
235
|
+
@mock_model_class.stubs(:destroy).returns(true)
|
236
|
+
@mock_response.expects(:body=).with("--- true\n")
|
237
|
+
@handler.process(@mock_request, @mock_response)
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should serialize a controller exception when an exception is thrown by destroy" do
|
241
|
+
setup_destroy_request
|
242
|
+
@mock_model_class.expects(:destroy).raises(ArgumentError)
|
243
|
+
@mock_response.expects(:status=).with(404)
|
244
|
+
@handler.process(@mock_request, @mock_response)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe "when saving a model instance" do
|
249
|
+
it "should fail to save model if data is not specified" do
|
250
|
+
@mock_request.stubs(:request_method).returns('PUT')
|
251
|
+
@mock_request.stubs(:path).returns('/foo')
|
252
|
+
@mock_request.stubs(:body).returns('')
|
253
|
+
@mock_response.expects(:status=).with(404)
|
254
|
+
@handler.process(@mock_request, @mock_response)
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should use a common method for determining the request parameters" do
|
258
|
+
setup_save_request
|
259
|
+
@handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
|
260
|
+
@mock_model_instance.expects(:save).with do |args|
|
261
|
+
args[:foo] == :baz and args[:bar] == :xyzzy
|
262
|
+
end
|
263
|
+
@handler.process(@mock_request, @mock_response)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should generate a 200 response when a model save call succeeds" do
|
267
|
+
setup_save_request
|
268
|
+
@mock_response.expects(:status=).with(200)
|
269
|
+
@handler.process(@mock_request, @mock_response)
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should return a serialized object when a model save call succeeds" do
|
273
|
+
setup_save_request
|
274
|
+
@mock_model_instance.stubs(:save).returns(@mock_model_instance)
|
275
|
+
@mock_model_instance.expects(:to_yaml).returns('foo')
|
276
|
+
@handler.process(@mock_request, @mock_response)
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should serialize a controller exception when an exception is thrown by save" do
|
280
|
+
setup_save_request
|
281
|
+
@mock_model_instance.expects(:save).raises(ArgumentError)
|
282
|
+
@mock_response.expects(:status=).with(404)
|
283
|
+
@handler.process(@mock_request, @mock_response)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
describe "when searching for model instances" do
|
288
|
+
it "should use a common method for determining the request parameters" do
|
289
|
+
setup_search_request
|
290
|
+
@handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
|
291
|
+
@mock_model_class.expects(:search).with do |args|
|
292
|
+
args[:foo] == :baz and args[:bar] == :xyzzy
|
293
|
+
end
|
294
|
+
@handler.process(@mock_request, @mock_response)
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should generate a 200 response when a model search call succeeds" do
|
298
|
+
setup_search_request
|
299
|
+
@mock_response.expects(:status=).with(200)
|
300
|
+
@handler.process(@mock_request, @mock_response)
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should return a list of serialized objects when a model search call succeeds" do
|
304
|
+
setup_search_request
|
305
|
+
mock_matches = [1..5].collect {|i| mock("model instance #{i}", :to_yaml => "model instance #{i}") }
|
306
|
+
@mock_model_class.stubs(:search).returns(mock_matches)
|
307
|
+
@handler.process(@mock_request, @mock_response)
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should serialize a controller exception when an exception is thrown by search" do
|
311
|
+
setup_search_request
|
312
|
+
@mock_model_class.expects(:search).raises(ArgumentError)
|
313
|
+
@mock_response.expects(:status=).with(404)
|
314
|
+
@handler.process(@mock_request, @mock_response)
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should serialize a controller exception if the request fails" do
|
319
|
+
setup_bad_request
|
320
|
+
@mock_response.expects(:status=).with(404)
|
321
|
+
@handler.process(@mock_request, @mock_response)
|
322
|
+
end
|
323
|
+
end
|