blob: 3e3c033ae5bb9f0b4fef93991bda1e0350f6077f (
plain)
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
|
#! /usr/bin/env ruby
require 'spec_helper'
require 'puppet/configurer'
require 'puppet/configurer/fact_handler'
require 'matchers/json'
class FactHandlerTester
include Puppet::Configurer::FactHandler
def reload_facter
# don't want to do this in tests
end
end
describe Puppet::Configurer::FactHandler do
include JSONMatchers
before :each do
@facthandler = FactHandlerTester.new
Puppet::Node::Facts.indirection.terminus_class = :memory
end
describe "when finding facts" do
it "should use the node name value to retrieve the facts" do
foo_facts = Puppet::Node::Facts.new('foo')
bar_facts = Puppet::Node::Facts.new('bar')
Puppet::Node::Facts.indirection.save(foo_facts)
Puppet::Node::Facts.indirection.save(bar_facts)
Puppet[:certname] = 'foo'
Puppet[:node_name_value] = 'bar'
@facthandler.find_facts.should == bar_facts
end
it "should set the facts name based on the node_name_fact" do
facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
Puppet::Node::Facts.indirection.save(facts)
Puppet[:node_name_fact] = 'my_name_fact'
@facthandler.find_facts.name.should == 'other_node_name'
end
it "should set the node_name_value based on the node_name_fact" do
facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
Puppet::Node::Facts.indirection.save(facts)
Puppet[:node_name_fact] = 'my_name_fact'
@facthandler.find_facts
Puppet[:node_name_value].should == 'other_node_name'
end
it "should fail if finding facts fails" do
Puppet::Node::Facts.indirection.expects(:find).raises RuntimeError
expect { @facthandler.find_facts }.to raise_error(Puppet::Error, /Could not retrieve local facts/)
end
it "should only load fact plugins once" do
Puppet::Node::Facts.indirection.expects(:find).once
@facthandler.find_facts
end
end
it "should serialize and CGI escape the fact values for uploading" do
facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
Puppet::Node::Facts.indirection.save(facts)
text = CGI.escape(@facthandler.find_facts.render(:pson))
@facthandler.facts_for_uploading.should == {:facts_format => :pson, :facts => text}
end
it "should properly accept facts containing a '+'" do
facts = Puppet::Node::Facts.new('foo', 'afact' => 'a+b')
Puppet::Node::Facts.indirection.save(facts)
text = CGI.escape(@facthandler.find_facts.render(:pson))
@facthandler.facts_for_uploading.should == {:facts_format => :pson, :facts => text}
end
it "should generate valid facts data against the facts schema" do
facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
Puppet::Node::Facts.indirection.save(facts)
expect(CGI.unescape(@facthandler.facts_for_uploading[:facts])).to validate_against('api/schemas/facts.json')
end
end
|