Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / spec / unit / data / base_spec.rb
diff --git a/spec/unit/data/base_spec.rb b/spec/unit/data/base_spec.rb
new file mode 100644 (file)
index 0000000..51ffa6c
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/env rspec
+
+require 'spec_helper'
+
+module MCollective
+  module Data
+    describe Base do
+      before do
+        @ddl = mock
+        @ddl.stubs(:meta).returns({:timeout => 1})
+      end
+
+      describe "#initialize" do
+        it "should set the plugin name, ddl and timeout and call the startup hook" do
+          DDL.stubs(:new).returns(@ddl)
+          Base.any_instance.expects(:startup_hook).once
+          plugin = Base.new
+          plugin.name.should == "base"
+          plugin.timeout.should == 1
+          plugin.result.class.should == Result
+        end
+      end
+
+      describe "#lookup" do
+        before do
+          DDL.stubs(:new).returns(@ddl)
+          @plugin = Base.new
+        end
+
+        it "should validate the request" do
+          @plugin.expects(:ddl_validate).with("hello world").returns(true)
+          @plugin.stubs(:query_data)
+          @plugin.lookup("hello world")
+        end
+
+        it "should query the plugin" do
+          @plugin.stubs(:ddl_validate)
+          @plugin.expects(:query_data).with("hello world")
+          @plugin.lookup("hello world").class.should == Result
+        end
+
+        it "should raise MsgTTLExpired errors for Timeout errors" do
+          @plugin.stubs(:ddl_validate)
+          @plugin.expects(:query_data).raises(Timeout::Error)
+
+          msg = "Data plugin base timed out on query 'hello world'"
+          Log.expects(:error).with(msg)
+          expect { @plugin.lookup("hello world") }.to raise_error(msg)
+        end
+      end
+
+      describe "#query" do
+        it "should create a new method" do
+          class Rspec_data<Base; end
+          Rspec_data.query { "rspec test" }
+
+          DDL.stubs(:new).returns(@ddl)
+
+          data = Rspec_data.new
+          data.query_data.should == "rspec test"
+        end
+      end
+
+      describe "#ddl_validate" do
+        it "should validate the request using the Data class" do
+          DDL.stubs(:new).returns(@ddl)
+          plugin = Base.new
+          Data.expects(:ddl_validate).with(@ddl, "rspec")
+          plugin.ddl_validate("rspec")
+        end
+      end
+
+      describe "#activate_when" do
+        it "should create a new activate? method" do
+          class Rspec_data<Base;end
+
+          Rspec_data.activate_when { raise "rspec" }
+          DDL.stubs(:new).returns(@ddl)
+          expect { Rspec_data.activate? }.to raise_error("rspec")
+        end
+      end
+
+      describe "#activate?" do
+        it "should default to true" do
+          Base.activate?.should == true
+        end
+      end
+    end
+  end
+end