spec/rubix/monitors/chef_monitor_spec.rb in rubix-0.3.1 vs spec/rubix/monitors/chef_monitor_spec.rb in rubix-0.4.0
- old
+ new
@@ -1,11 +1,60 @@
require 'spec_helper'
describe Rubix::ChefMonitor do
- before do
- @wrapper = Class.new(Rubix::ChefMonitor)
+ def mock_query query, nodes=[]
+ require 'chef'
+ chef_query = mock("Chef::Search::Query")
+ ::Chef::Search::Query.should_receive(:new).and_return(chef_query)
+ chef_query.should_receive(:search).with('node', query).and_return([nodes, nodes.length])
end
+ before do
+ @wrapper = Class.new(Rubix::Monitor)
+ @wrapper.send(:include, Rubix::ChefMonitor)
+ end
+ it "has options for talking to Chef" do
+ @wrapper.default_settings.should include(:chef_server_url)
+ @wrapper.default_settings.should include(:chef_node_name)
+ @wrapper.default_settings.should include(:chef_client_key)
+ end
+
+ describe "finding nodes in Chef" do
+
+ describe 'when a node exists' do
+ before do
+ @node = { 'node_name' => 'foobar', 'ipaddress' => '123', 'fdqn' => '456' }
+ end
+
+ it "can find it based on its node name" do
+ mock_query('name:foobar', [@node])
+ @wrapper.new(@wrapper.default_settings).chef_node_from_node_name('foobar').should == @node
+ end
+
+ it "can find it based on its IP" do
+ mock_query('ipaddress:123 OR fqdn:123', [@node])
+ @wrapper.new(@wrapper.default_settings).chef_node_from_ip('123').should == @node
+ end
+
+ it "can find it based on its FQDN" do
+ mock_query('ipaddress:456 OR fqdn:456', [@node])
+ @wrapper.new(@wrapper.default_settings).chef_node_from_ip('456').should == @node
+ end
+ end
+
+ describe "when a node doesn't exist" do
+
+ it "returns nil when searching by node name" do
+ mock_query('name:foobar')
+ @wrapper.new(@wrapper.default_settings).chef_node_from_node_name('foobar').should be_nil
+ end
+
+ it "returns nil when searching by IP" do
+ mock_query('ipaddress:123 OR fqdn:123')
+ @wrapper.new(@wrapper.default_settings).chef_node_from_ip('123').should be_nil
+ end
+ end
+ end
end