7 describe "#load_data_sources" do
8 it "should use the pluginmanager to load data sources" do
9 PluginManager.expects(:find_and_load).with("data").returns([])
10 Data.load_data_sources
13 it "should remove plugins that should not be active on this node" do
14 PluginManager.expects(:find_and_load).with("data").returns(["rspec_data"])
15 PluginManager.expects(:grep).returns(["rspec_data"])
16 PluginManager.expects(:delete).with("rspec_data")
19 ddl.stubs(:meta).returns({:timeout => 1})
20 ddl.stubs(:dataquery_interface).returns({:rspec => nil})
21 ddl.stubs(:dataquery_interface).returns({:output => {}})
22 DDL.stubs(:new).returns(ddl)
23 Data::Base.expects(:activate?).returns(false)
24 PluginManager.expects("[]").with("rspec_data").returns(Data::Base.new)
25 Data.load_data_sources
28 it "should handle exceptions and delete broken plugins" do
29 PluginManager.expects(:find_and_load).with("data").returns(["rspec_data"])
30 PluginManager.expects(:grep).returns(["rspec_data"])
31 PluginManager.expects(:delete).with("rspec_data")
34 ddl.stubs(:meta).returns({:timeout => 1})
35 ddl.stubs(:dataquery_interface).returns({:output => {}})
36 DDL.stubs(:new).returns(ddl)
37 Data::Base.expects(:activate?).raises("rspec failure")
38 Log.expects(:debug).once.with("Disabling data plugin rspec_data due to exception RuntimeError: rspec failure")
39 PluginManager.expects("[]").with("rspec_data").returns(Data::Base.new)
40 Data.load_data_sources
45 it "should load the right data ddl" do
46 DDL.expects(:new).with("fstat_data", :data).times(3)
48 Data.ddl("fstat_data")
53 describe "#pluginname" do
54 it "should return the correct plugin name" do
55 Data.pluginname("Rspec").should == "rspec_data"
56 Data.pluginname("Rspec_data").should == "rspec_data"
61 it "should return the correct plugin" do
62 PluginManager.expects("[]").with("rspec_data").times(4)
70 describe "#method_missing" do
71 it "should raise errors for unknown plugins" do
72 PluginManager.expects("include?").with("rspec_data").returns(false)
73 expect { Data.rspec_data }.to raise_error(NoMethodError)
76 it "should do a lookup on the right plugin" do
78 rspec_data.expects(:lookup).returns("rspec")
80 PluginManager.expects("include?").with("rspec_data").returns(true)
81 PluginManager.expects("[]").with("rspec_data").returns(rspec_data)
83 Data.rspec_data("rspec").should == "rspec"
87 describe "#ddl_transform_intput" do
88 it "should convert boolean data" do
90 ddl.stubs(:entities).returns({:data => {:input => {:query => {:type => :boolean}}}})
91 Data.ddl_transform_input(ddl, "1").should == true
92 Data.ddl_transform_input(ddl, "0").should == false
95 it "should conver numeric data" do
97 ddl.stubs(:entities).returns({:data => {:input => {:query => {:type => :number}}}})
98 Data.ddl_transform_input(ddl, "1").should == 1
99 Data.ddl_transform_input(ddl, "0").should == 0
100 Data.ddl_transform_input(ddl, "1.1").should == 1.1
103 it "should return the original input on any failure" do
105 ddl.expects(:entities).raises("rspec failure")
106 Data.ddl_transform_input(ddl, 1).should == 1
110 describe "#ddl_has_output?" do
111 it "should correctly verify output keys" do
113 ddl.stubs(:entities).returns({:data => {:output => {:rspec => {}}}})
114 Data.ddl_has_output?(ddl, "rspec").should == true
115 Data.ddl_has_output?(ddl, :rspec).should == true
116 Data.ddl_has_output?(ddl, :foo).should == false
117 Data.ddl_has_output?(ddl, "foo").should == false
120 it "should return false for any exception" do
122 ddl.stubs(:entities).returns(nil)
123 Data.ddl_has_output?(ddl, "rspec").should == false
127 describe "#ddl_validate" do
130 @ddl.expects(:meta).returns({:name => "rspec test"})
133 it "should ensure the ddl has a dataquery" do
134 @ddl.expects(:entities).returns({})
135 expect { Data.ddl_validate(@ddl, "rspec") }.to raise_code(:PLMC31, :plugin => "rspec test")
138 it "should allow ddls without any input defined" do
139 @ddl.expects(:entities).returns({:data => {:input => {}, :output => {:x => {}}}})
140 Data.ddl_validate(@ddl, nil)
143 it "should not allow input arguments when no query were defined" do
144 @ddl.expects(:entities).returns({:data => {:input => {}, :output => {:x => {}}}})
145 expect { Data.ddl_validate(@ddl, "rspec") }.to raise_code(:PLMC33, :plugin => "rspec test")
148 it "should ensure the ddl has output" do
149 @ddl.expects(:entities).returns({:data => {:input => {:query => {}}, :output => {}}})
150 expect { Data.ddl_validate(@ddl, "rspec") }.to raise_code(:PLMC32, :plugin => "rspec test")
153 it "should skip optional arguments that were not supplied" do
154 @ddl.expects(:entities).returns({:data => {:input => {:query => {:optional => true}}, :output => {:test => {}}}})
155 @ddl.expects(:validate_input_argument).never
156 Data.ddl_validate(@ddl, nil).should == true
159 it "should validate the argument" do
160 @ddl.expects(:entities).returns({:data => {:input => {:query => {}}, :output => {:test => {}}}})
161 @ddl.expects(:validate_input_argument).returns("rspec validated")
162 Data.ddl_validate(@ddl, "rspec").should == "rspec validated"