summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2009-04-06 19:10:59 -0500
committerJames Turnbull <james@lovedthanlost.net>2009-04-22 14:39:35 +1000
commita137146562fecc909afe7fc81f0033fccbb36393 (patch)
tree1e140829efe5addd07a1a0ce20b8e9905cbd8bf5 /spec/unit
parentb9c95ebf81eeb78297003de2d0ed4ca048412393 (diff)
downloadpuppet-a137146562fecc909afe7fc81f0033fccbb36393.tar.gz
puppet-a137146562fecc909afe7fc81f0033fccbb36393.tar.xz
puppet-a137146562fecc909afe7fc81f0033fccbb36393.zip
Adding ActiveRecord terminus classes for Catalog
This provides the last piece of ActiveRecord integration. It's pretty much just pass-through and *only* works if you're storing Parser resources to the db. Signed-off-by: Luke Kanies <luke@madstop.com>
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/indirector/catalog/active_record.rb119
1 files changed, 119 insertions, 0 deletions
diff --git a/spec/unit/indirector/catalog/active_record.rb b/spec/unit/indirector/catalog/active_record.rb
new file mode 100755
index 000000000..b8571e5b8
--- /dev/null
+++ b/spec/unit/indirector/catalog/active_record.rb
@@ -0,0 +1,119 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+require 'puppet/indirector/catalog/active_record'
+
+describe Puppet::Node::Catalog::ActiveRecord do
+ confine "Missing Rails" => Puppet.features.rails?
+
+ before do
+ Puppet.features.stubs(:rails?).returns true
+ @terminus = Puppet::Node::Catalog::ActiveRecord.new
+ end
+
+ it "should be a subclass of the ActiveRecord terminus class" do
+ Puppet::Node::Catalog::ActiveRecord.ancestors.should be_include(Puppet::Indirector::ActiveRecord)
+ end
+
+ it "should use Puppet::Rails::Host as its ActiveRecord model" do
+ Puppet::Node::Catalog::ActiveRecord.ar_model.should equal(Puppet::Rails::Host)
+ end
+
+ describe "when finding an instance" do
+ before do
+ @request = stub 'request', :key => "foo", :options => {:cache_integration_hack => true}
+ end
+
+ # This hack is here because we don't want to look in the db unless we actually want
+ # to look in the db, but our indirection architecture in 0.24.x isn't flexible
+ # enough to tune that via configuration.
+ it "should return nil unless ':cache_integration_hack' is set to true" do
+ @request.options[:cache_integration_hack] = false
+ Puppet::Rails::Host.expects(:find_by_name).never
+ @terminus.find(@request).should be_nil
+ end
+
+ it "should use the Hosts ActiveRecord class to find the host" do
+ Puppet::Rails::Host.expects(:find_by_name).with { |key, args| key == "foo" }
+ @terminus.find(@request)
+ end
+
+ it "should return nil if no host instance can be found" do
+ Puppet::Rails::Host.expects(:find_by_name).returns nil
+
+ @terminus.find(@request).should be_nil
+ end
+
+ it "should return a catalog with the same name as the host if the host can be found" do
+ host = stub 'host', :name => "foo", :resources => []
+ Puppet::Rails::Host.expects(:find_by_name).returns host
+
+ result = @terminus.find(@request)
+ result.should be_instance_of(Puppet::Node::Catalog)
+ result.name.should == "foo"
+ end
+
+ it "should set each of the host's resources as a transportable resource within the catalog" do
+ host = stub 'host', :name => "foo"
+ Puppet::Rails::Host.expects(:find_by_name).returns host
+
+ res1 = mock 'res1', :to_transportable => "trans_res1"
+ res2 = mock 'res2', :to_transportable => "trans_res2"
+
+ host.expects(:resources).returns [res1, res2]
+
+ catalog = stub 'catalog'
+ Puppet::Node::Catalog.expects(:new).returns catalog
+
+ catalog.expects(:add_resource).with "trans_res1"
+ catalog.expects(:add_resource).with "trans_res2"
+
+ @terminus.find(@request)
+ end
+ end
+
+ describe "when saving an instance" do
+ before do
+ @host = stub 'host', :name => "foo", :save => nil, :setresources => nil, :last_compile= => nil
+ Puppet::Rails::Host.stubs(:find_by_name).returns @host
+ @catalog = Puppet::Node::Catalog.new("foo")
+ @request = stub 'request', :key => "foo", :instance => @catalog
+ end
+
+ it "should find the Rails host with the same name" do
+ Puppet::Rails::Host.expects(:find_by_name).with("foo").returns @host
+
+ @terminus.save(@request)
+ end
+
+ it "should create a new Rails host if none can be found" do
+ Puppet::Rails::Host.expects(:find_by_name).with("foo").returns nil
+
+ Puppet::Rails::Host.expects(:create).with(:name => "foo").returns @host
+
+ @terminus.save(@request)
+ end
+
+ it "should set the catalog vertices as resources on the Rails host instance" do
+ @catalog.expects(:vertices).returns "foo"
+ @host.expects(:setresources).with("foo")
+
+ @terminus.save(@request)
+ end
+
+ it "should set the last compile time on the host" do
+ now = Time.now
+ Time.expects(:now).returns now
+ @host.expects(:last_compile=).with now
+
+ @terminus.save(@request)
+ end
+
+ it "should save the Rails host instance" do
+ @host.expects(:save)
+
+ @terminus.save(@request)
+ end
+ end
+end