forked from puppetlabs/puppet
-
Notifications
You must be signed in to change notification settings - Fork 2
/
facts_spec.rb
139 lines (118 loc) · 3.83 KB
/
facts_spec.rb
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require 'spec_helper'
require 'puppet/application/facts'
describe Puppet::Application::Facts do
let(:app) { Puppet::Application[:facts] }
let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:25"} }
before :each do
Puppet::Node::Facts.indirection.terminus_class = :memory
end
it "returns facts for a given node" do
facts = Puppet::Node::Facts.new('whatever', values)
Puppet::Node::Facts.indirection.save(facts)
app.command_line.args = %w{find whatever --render-as yaml}
# due to PUP-10105 we emit the class tag when we shouldn't
expected = Regexp.new(<<~END)
--- !ruby/object:Puppet::Node::Facts
name: whatever
values:
filesystems: apfs,autofs,devfs
macaddress: "64:52:11:22:03:25"
END
expect {
app.run
}.to exit_with(0)
.and output(expected).to_stdout
end
it "returns facts for the current node when the name is omitted" do
facts = Puppet::Node::Facts.new(Puppet[:certname], values)
Puppet::Node::Facts.indirection.save(facts)
app.command_line.args = %w{find --render-as yaml}
# due to PUP-10105 we emit the class tag when we shouldn't
expected = Regexp.new(<<~END)
--- !ruby/object:Puppet::Node::Facts
name: #{Puppet[:certname]}
values:
filesystems: apfs,autofs,devfs
macaddress: "64:52:11:22:03:25"
END
expect {
app.run
}.to exit_with(0)
.and output(expected).to_stdout
end
context 'when show action is called' do
let(:expected) { <<~END }
{
"filesystems": "apfs,autofs,devfs",
"macaddress": "64:52:11:22:03:25"
}
END
before :each do
Puppet::Node::Facts.indirection.terminus_class = :facter
allow(Facter).to receive(:resolve).and_return(values)
app.command_line.args = %w{show}
end
it 'correctly displays facts with default formatting' do
expect {
app.run
}.to exit_with(0)
.and output(expected).to_stdout
end
it 'displays a single fact value' do
app.command_line.args << 'filesystems' << '--value-only'
expect {
app.run
}.to exit_with(0)
.and output("apfs,autofs,devfs\n").to_stdout
end
it "warns and ignores value-only when multiple fact names are specified" do
app.command_line.args << 'filesystems' << 'macaddress' << '--value-only'
expect {
app.run
}.to exit_with(0)
.and output(expected).to_stdout
.and output(/it can only be used when querying for a single fact/).to_stderr
end
{
"type_hash" => [{'a' => 2}, "{\n \"a\": 2\n}"],
"type_array" => [[], "[\n\n]"],
"type_string" => ["str", "str"],
"type_int" => [1, "1"],
"type_float" => [1.0, "1.0"],
"type_true" => [true, "true"],
"type_false" => [false, "false"],
"type_nil" => [nil, ""],
"type_sym" => [:sym, "sym"]
}.each_pair do |name, values|
it "renders '#{name}' as '#{values.last}'" do
fact_value = values.first
fact_output = values.last
allow(Facter).to receive(:resolve).and_return({name => fact_value})
app.command_line.args << name << '--value-only'
expect {
app.run
}.to exit_with(0)
.and output("#{fact_output}\n").to_stdout
end
end
end
context 'when default action is called' do
let(:expected) { <<~END }
---
filesystems: apfs,autofs,devfs
macaddress: 64:52:11:22:03:25
END
before :each do
Puppet::Node::Facts.indirection.terminus_class = :facter
allow(Facter).to receive(:resolve).and_return(values)
app.command_line.args = %w{--render-as yaml}
end
it 'calls show action' do
expect {
app.run
}.to exit_with(0)
.and output(expected).to_stdout
expect(app.action.name).to eq(:show)
end
end
end