1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../../../spec_helper'
require 'sqlite3' rescue nil
require 'tempfile'
require 'puppet/rails'
describe "Puppet::Node::Facts::InventoryActiveRecord", :if => (Puppet.features.rails? and defined? SQLite3) do
let(:terminus) { Puppet::Node::Facts::InventoryActiveRecord.new }
before :all do
require 'puppet/indirector/facts/inventory_active_record'
@dbfile = Tempfile.new("testdb")
@dbfile.close
end
after :all do
Puppet::Node::Facts.indirection.reset_terminus_class
@dbfile.unlink
end
before :each do
Puppet::Node::Facts.terminus_class = :inventory_active_record
Puppet[:dbadapter] = 'sqlite3'
Puppet[:dblocation] = @dbfile.path
Puppet[:railslog] = "/dev/null"
Puppet::Rails.init
end
after :each do
Puppet::Rails.teardown
end
describe "#save" do
it "should use an existing host if possible" do
host = Puppet::Rails::InventoryHost.new(:name => "foo", :timestamp => Time.now)
host.save
Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin").save
Puppet::Rails::InventoryHost.count.should == 1
Puppet::Rails::InventoryHost.first.should == host
end
it "should create a new host if one can't be found" do
# This test isn't valid if there are hosts to begin with
Puppet::Rails::InventoryHost.count.should == 0
Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin").save
Puppet::Rails::InventoryHost.count.should == 1
Puppet::Rails::InventoryHost.first.name.should == "foo"
end
it "should save the facts" do
Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin").save
Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should =~ [["uptime_days","60"],["kernel","Darwin"]]
end
it "should remove the previous facts for an existing host" do
Puppet::Node::Facts.new("foo", "uptime_days" => "30", "kernel" => "Darwin").save
bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "35", "kernel" => "Linux")
foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "is_virtual" => "false")
bar_facts.save
foo_facts.save
Puppet::Node::Facts.find("bar").should == bar_facts
Puppet::Node::Facts.find("foo").should == foo_facts
Puppet::Rails::InventoryFact.all.map{|f| [f.name,f.value]}.should_not include(["uptime_days", "30"], ["kernel", "Darwin"])
end
it "should not replace the node's facts if something goes wrong" do
end
end
describe "#find" do
before do
@foo_facts = Puppet::Node::Facts.new("foo", "uptime_days" => "60", "kernel" => "Darwin")
@bar_facts = Puppet::Node::Facts.new("bar", "uptime_days" => "30", "kernel" => "Linux")
@foo_facts.save
@bar_facts.save
end
it "should identify facts by host name" do
Puppet::Node::Facts.find("foo").should == @foo_facts
end
it "should return nil if no host instance can be found" do
Puppet::Node::Facts.find("non-existent host").should == nil
end
it "should convert all single-member arrays into non-arrays" do
Puppet::Node::Facts.new("array", "fact1" => ["value1"]).save
Puppet::Node::Facts.find("array").values["fact1"].should == "value1"
end
end
end
|