facter 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of facter might be problematic. Click here for more details.

Files changed (139) hide show
  1. data/COMMITTERS.md +25 -34
  2. data/CONTRIBUTING.md +27 -5
  3. data/README.md +32 -0
  4. data/ext/build_defaults.yaml +1 -1
  5. data/ext/debian/control +3 -2
  6. data/ext/osx/file_mapping.yaml +5 -0
  7. data/ext/redhat/facter.spec.erb +4 -1
  8. data/lib/facter/Cfkey.rb +2 -2
  9. data/lib/facter/architecture.rb +2 -2
  10. data/lib/facter/augeasversion.rb +2 -2
  11. data/lib/facter/blockdevices.rb +12 -12
  12. data/lib/facter/dhcp_servers.rb +4 -4
  13. data/lib/facter/domain.rb +4 -4
  14. data/lib/facter/ec2.rb +17 -0
  15. data/lib/facter/ec2/rest.rb +2 -2
  16. data/lib/facter/facterversion.rb +2 -2
  17. data/lib/facter/filesystems.rb +10 -3
  18. data/lib/facter/fqdn.rb +1 -1
  19. data/lib/facter/gid.rb +16 -0
  20. data/lib/facter/hardwareisa.rb +3 -3
  21. data/lib/facter/hardwaremodel.rb +3 -3
  22. data/lib/facter/hostname.rb +1 -1
  23. data/lib/facter/id.rb +4 -4
  24. data/lib/facter/interfaces.rb +3 -0
  25. data/lib/facter/ipaddress6.rb +9 -9
  26. data/lib/facter/kernel.rb +2 -2
  27. data/lib/facter/kernelmajversion.rb +2 -2
  28. data/lib/facter/kernelrelease.rb +4 -4
  29. data/lib/facter/kernelversion.rb +3 -3
  30. data/lib/facter/ldom.rb +11 -0
  31. data/lib/facter/lsbdistcodename.rb +8 -4
  32. data/lib/facter/lsbdistdescription.rb +6 -10
  33. data/lib/facter/lsbdistid.rb +8 -4
  34. data/lib/facter/lsbdistrelease.rb +8 -4
  35. data/lib/facter/lsbmajdistrelease.rb +7 -12
  36. data/lib/facter/lsbminordistrelease.rb +22 -0
  37. data/lib/facter/lsbrelease.rb +8 -4
  38. data/lib/facter/macaddress.rb +1 -0
  39. data/lib/facter/macosx.rb +1 -1
  40. data/lib/facter/manufacturer.rb +3 -3
  41. data/lib/facter/memory.rb +8 -8
  42. data/lib/facter/netmask.rb +2 -1
  43. data/lib/facter/network.rb +3 -3
  44. data/lib/facter/operatingsystem.rb +9 -126
  45. data/lib/facter/operatingsystem/base.rb +61 -0
  46. data/lib/facter/operatingsystem/cumuluslinux.rb +27 -0
  47. data/lib/facter/operatingsystem/implementation.rb +30 -0
  48. data/lib/facter/operatingsystem/linux.rb +467 -0
  49. data/lib/facter/operatingsystem/sunos.rb +54 -0
  50. data/lib/facter/operatingsystem/vmkernel.rb +11 -0
  51. data/lib/facter/operatingsystem/windows.rb +37 -0
  52. data/lib/facter/operatingsystemmajrelease.rb +14 -33
  53. data/lib/facter/operatingsystemrelease.rb +14 -235
  54. data/lib/facter/os.rb +69 -0
  55. data/lib/facter/osfamily.rb +4 -23
  56. data/lib/facter/partitions.rb +4 -3
  57. data/lib/facter/path.rb +2 -2
  58. data/lib/facter/physicalprocessorcount.rb +10 -74
  59. data/lib/facter/processor.rb +13 -129
  60. data/lib/facter/processors.rb +60 -0
  61. data/lib/facter/processors/os.rb +234 -0
  62. data/lib/facter/ps.rb +5 -4
  63. data/lib/facter/puppetversion.rb +1 -1
  64. data/lib/facter/rackspace.rb +34 -0
  65. data/lib/facter/rubysitedir.rb +3 -0
  66. data/lib/facter/rubyversion.rb +2 -2
  67. data/lib/facter/selinux.rb +57 -2
  68. data/lib/facter/ssh.rb +1 -0
  69. data/lib/facter/system_uptime.rb +42 -0
  70. data/lib/facter/timezone.rb +1 -1
  71. data/lib/facter/uptime.rb +5 -23
  72. data/lib/facter/uptime_days.rb +4 -6
  73. data/lib/facter/uptime_hours.rb +4 -6
  74. data/lib/facter/uptime_seconds.rb +5 -9
  75. data/lib/facter/util/formatter.rb +1 -1
  76. data/lib/facter/util/manufacturer.rb +1 -1
  77. data/lib/facter/util/partitions.rb +3 -1
  78. data/lib/facter/util/partitions/linux.rb +1 -1
  79. data/lib/facter/util/partitions/openbsd.rb +35 -0
  80. data/lib/facter/util/uptime.rb +4 -3
  81. data/lib/facter/util/virtual.rb +3 -1
  82. data/lib/facter/util/xendomains.rb +12 -3
  83. data/lib/facter/version.rb +1 -1
  84. data/lib/facter/virtual.rb +24 -23
  85. data/lib/facter/vlans.rb +1 -1
  86. data/lib/facter/xendomains.rb +1 -1
  87. data/lib/facter/zfs_version.rb +6 -2
  88. data/lib/facter/zones.rb +6 -5
  89. data/lib/facter/zpool_version.rb +1 -1
  90. data/spec/fixtures/cpuinfo/amd64dual-grep +2 -0
  91. data/spec/fixtures/cpuinfo/amd64twentyfour-grep +24 -0
  92. data/spec/fixtures/cpuinfo/two_multicore-grep +4 -0
  93. data/spec/fixtures/cpuinfo/two_singlecore-grep +2 -0
  94. data/spec/fixtures/unit/processors/os/darwin-system-profiler +287 -0
  95. data/spec/fixtures/unit/zfs_version/zfs_new +61 -0
  96. data/spec/fixtures/unit/zfs_version/zfs_old +43 -0
  97. data/spec/fixtures/unit/zfs_version/zfsonlinux_0.6.1 +13 -0
  98. data/spec/fixtures/unit/zpool_version/zfsonlinux_0.6.1 +48 -0
  99. data/spec/unit/ec2/rest_spec.rb +6 -6
  100. data/spec/unit/gid_spec.rb +22 -0
  101. data/spec/unit/hardwaremodel_spec.rb +2 -0
  102. data/spec/unit/lsbdistcodename_spec.rb +22 -17
  103. data/spec/unit/lsbdistdescription_spec.rb +22 -17
  104. data/spec/unit/lsbdistid_spec.rb +23 -18
  105. data/spec/unit/lsbdistrelease_spec.rb +22 -17
  106. data/spec/unit/lsbmajdistrelease_spec.rb +23 -6
  107. data/spec/unit/lsbminordistrelease_spec.rb +31 -0
  108. data/spec/unit/lsbrelease_spec.rb +22 -17
  109. data/spec/unit/macaddress_spec.rb +3 -0
  110. data/spec/unit/operatingsystem/base_spec.rb +76 -0
  111. data/spec/unit/operatingsystem/cumuluslinux_spec.rb +40 -0
  112. data/spec/unit/operatingsystem/implementation_spec.rb +49 -0
  113. data/spec/unit/operatingsystem/linux_spec.rb +538 -0
  114. data/spec/unit/operatingsystem/sunos_spec.rb +144 -0
  115. data/spec/unit/operatingsystem/vmkernel_spec.rb +13 -0
  116. data/spec/unit/operatingsystem/windows_spec.rb +68 -0
  117. data/spec/unit/operatingsystem_spec.rb +10 -153
  118. data/spec/unit/operatingsystemmajrelease_spec.rb +14 -31
  119. data/spec/unit/operatingsystemrelease_spec.rb +13 -229
  120. data/spec/unit/os_spec.rb +131 -0
  121. data/spec/unit/osfamily_spec.rb +9 -54
  122. data/spec/unit/partitions_spec.rb +41 -3
  123. data/spec/unit/physicalprocessorcount_spec.rb +6 -78
  124. data/spec/unit/processor_spec.rb +18 -381
  125. data/spec/unit/processors/os_spec.rb +446 -0
  126. data/spec/unit/processors_spec.rb +203 -0
  127. data/spec/unit/rackspace_spec.rb +40 -0
  128. data/spec/unit/system_uptime_spec.rb +80 -0
  129. data/spec/unit/util/formatter_spec.rb +5 -0
  130. data/spec/unit/util/macaddress_spec.rb +2 -0
  131. data/spec/unit/util/processor_spec.rb +120 -0
  132. data/spec/unit/util/uptime_spec.rb +3 -4
  133. data/spec/unit/util/virtual_spec.rb +8 -0
  134. data/spec/unit/util/xendomains_spec.rb +54 -9
  135. data/spec/unit/virtual_spec.rb +8 -1
  136. data/spec/unit/zfs_version_spec.rb +20 -8
  137. data/spec/unit/zpool_version_spec.rb +5 -0
  138. metadata +652 -589
  139. checksums.yaml +0 -7
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter'
5
+
6
+ describe "rackspace facts" do
7
+ describe "on Rackspace Cloud" do
8
+ before :each do
9
+ Facter.collection.internal_loader.load(:rackspace)
10
+ end
11
+
12
+ it "should set is_rsc to true" do
13
+ Facter::Util::Resolution.stubs(:exec).with("/usr/bin/xenstore-read vm-data/provider_data/provider").returns("Rackspace")
14
+ Facter.fact(:is_rsc).value.should == "true"
15
+ end
16
+
17
+ it "should set the region to dfw" do
18
+ Facter.fact(:is_rsc).stubs(:value).returns("true")
19
+ Facter::Util::Resolution.stubs(:exec).with("/usr/bin/xenstore-read vm-data/provider_data/region").returns("dfw")
20
+ Facter.fact(:rsc_region).value.should == "dfw"
21
+ end
22
+
23
+ it "should get the instance id" do
24
+ Facter.fact(:is_rsc).stubs(:value).returns("true")
25
+ Facter::Util::Resolution.stubs(:exec).with("/usr/bin/xenstore-read name").returns("instance-75a96685-85d6-44c6-aed8-41ef0fb2cfcc")
26
+ Facter.fact(:rsc_instance_id).value.should == "75a96685-85d6-44c6-aed8-41ef0fb2cfcc"
27
+ end
28
+ end
29
+
30
+ describe "not on Rackspace Cloud" do
31
+ before do
32
+ Facter.collection.internal_loader.load(:rackspace)
33
+ end
34
+
35
+ it "shouldn't set is_rsc" do
36
+ Facter::Util::Resolution.stubs(:exec).with("/usr/bin/xenstore-read vm-data/provider_data/provider").returns("other")
37
+ Facter.fact(:is_rsc).value.should == nil
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,80 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/uptime'
5
+
6
+ describe "system_uptime:" do
7
+ before { Facter.clear }
8
+ after { Facter.clear }
9
+
10
+ describe "When uptime information is available" do
11
+ describe "uptime" do
12
+ test_cases = [
13
+ [60 * 60 * 24 * 3, '3 days'],
14
+ [60 * 60 * 24 * 3 + 25, '3 days'],
15
+ [60 * 60 * 24 * 1, '1 day'],
16
+ [60 * 60 * 24 * 1 + 25, '1 day'],
17
+ [60 * (60 * 3 + 45), '3:45 hours'],
18
+ [60 * (60 * 3 + 4), '3:04 hours'],
19
+ [60 * 60, '1:00 hours'],
20
+ [60 * 35, '0:35 hours']
21
+ ]
22
+
23
+ test_cases.each do |seconds, expected|
24
+ it "should return #{expected.inspect} for #{seconds} seconds in Linux" do
25
+ Facter.fact(:kernel).stubs(:value).returns("linux")
26
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(seconds)
27
+ Facter.fact(:system_uptime).value['uptime'].should eq expected
28
+ end
29
+
30
+ it "should return #{expected.inspect} for #{seconds} seconds in Windows" do
31
+ Facter.fact(:kernel).stubs(:value).returns("windows")
32
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(seconds)
33
+ Facter.fact(:system_uptime).value['uptime'].should eq expected
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "when uptime information is available" do
40
+ before do
41
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(60 * 60 * 24 + 23)
42
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(60 * 60 * 24 + 23)
43
+ end
44
+
45
+ it "should include a key for seconds" do
46
+ Facter.fact(:system_uptime).value['seconds'].should eq 60 * 60 * 24 + 23
47
+ end
48
+
49
+ it "should include a key for hours" do
50
+ Facter.fact(:system_uptime).value['hours'].should eq 24
51
+ end
52
+
53
+ it "should include a key for days" do
54
+ Facter.fact(:system_uptime).value['days'].should eq 1
55
+ end
56
+ end
57
+
58
+ describe "when uptime information is not available" do
59
+ before do
60
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(nil)
61
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(nil)
62
+ end
63
+
64
+ it "should have an 'uptime' key with value 'unknown'" do
65
+ Facter.fact(:system_uptime).value['uptime'].should eq "unknown"
66
+ end
67
+
68
+ it "should have a 'seconds' key with value nil" do
69
+ Facter.fact(:system_uptime).value['seconds'].should eq nil
70
+ end
71
+
72
+ it "should have a 'hours' key with value nil" do
73
+ Facter.fact(:system_uptime).value['hours'].should eq nil
74
+ end
75
+
76
+ it "should have a 'days' key with value nil" do
77
+ Facter.fact(:system_uptime).value['days'].should eq nil
78
+ end
79
+ end
80
+ end
@@ -27,12 +27,17 @@ describe Facter::Util::Formatter do
27
27
  expect(described_class.format_plaintext({"foo" => "bar"})).to eq "bar"
28
28
  end
29
29
 
30
+ it "can return false:FalseClass as a single fact value" do
31
+ expect(described_class.format_plaintext({"foo" => false})).to eq "false"
32
+ end
33
+
30
34
  it "formats a structured value with #inspect" do
31
35
  value = ["bar"]
32
36
  value.expects(:inspect).returns %Q(["bar"])
33
37
  hash = {"foo" => value, "baz" => "quux"}
34
38
  expect(described_class.format_plaintext(hash)).to match(%Q([bar]))
35
39
  end
40
+
36
41
  it "formats multiple string values as key/value pairs" do
37
42
  hash = {"foo" => "bar", "baz" => "quux"}
38
43
  expect(described_class.format_plaintext(hash)).to match(/foo => bar/)
@@ -91,6 +91,8 @@ describe "The macaddress fact" do
91
91
 
92
92
  before :each do
93
93
  Facter.fact(:kernel).stubs(:value).returns('windows')
94
+ Facter.fact(:operatingsystem).stubs(:value).returns('windows')
95
+ Facter.fact(:osfamily).stubs(:value).returns('windows')
94
96
  Facter::Util::Registry.stubs(:hklm_read).returns(nic_bindings)
95
97
  end
96
98
 
@@ -89,4 +89,124 @@ describe Facter::Util::Processor do
89
89
  Facter::Util::Processor.enum_kstat[7].should == "SPARC64-VII"
90
90
  end
91
91
  end
92
+
93
+ describe "on AIX" do
94
+ let(:lsattr) do
95
+ "type PowerPC_POWER5 Processor type False\n"
96
+ end
97
+
98
+ def lsdev_examples
99
+ examples = "proc0 Available 00-00 Processor\n" +
100
+ "proc4 Available 00-04 Processor\n" +
101
+ "proc8 Defined 00-08 Processor\n" +
102
+ "proc12 Defined 00-12 Processor\n"
103
+ examples
104
+ end
105
+
106
+ before :each do
107
+ Facter.fact(:kernel).stubs(:value).returns("AIX")
108
+ Facter::Util::Processor.stubs(:lsdev).returns(lsdev_examples)
109
+ Facter::Util::Processor.stubs(:lsattr).returns(lsattr)
110
+ end
111
+
112
+ it "should create an array of processors" do
113
+ Facter::Util::Processor.aix_processor_list[0].should eq "PowerPC_POWER5"
114
+ Facter::Util::Processor.aix_processor_list[1].should eq "PowerPC_POWER5"
115
+ Facter::Util::Processor.aix_processor_list[2].should eq "PowerPC_POWER5"
116
+ end
117
+ end
118
+
119
+ describe "on HP-UX" do
120
+ let(:ioscan) do
121
+ "Class I H/W Path Driver S/W State H/W Type Description\n" +
122
+ "===================================================================\n" +
123
+ "processor 0 0/120 processor CLAIMED PROCESSOR Processor\n" +
124
+ "processor 1 0/123 processor CLAIMED PROCESSOR Processor\n"
125
+ end
126
+
127
+ describe "when machinfo is available" do
128
+ def self.machinfo_examples
129
+ examples = []
130
+ examples << [File.read(fixtures('hpux','machinfo','ia64-rx2620')), "Intel(R) Itanium 2 processor"]
131
+ examples << [File.read(fixtures('hpux','machinfo','ia64-rx6600')), "Intel(R) Itanium 2 9100 series processor (1.59 GHz, 18 MB)"]
132
+ examples << [File.read(fixtures('hpux','machinfo','ia64-rx8640')), "Intel(R) Itanium 2 9100 series"]
133
+ examples << [File.read(fixtures('hpux','machinfo','hppa-rp4440')), "PA-RISC 8800 processor (1000 MHz, 64 MB)"]
134
+ examples << [File.read(fixtures('hpux','machinfo','superdome-server-SD32B')), "Intel(R) Itanium 2 9000 series"]
135
+ examples << [File.read(fixtures('hpux','machinfo','superdome2-16s')), "Intel(R) Itanium(R) Processor 9340 (1.6 GHz, 15 MB)"]
136
+ examples
137
+ end
138
+
139
+ machinfo_examples.each_with_index do |example, i|
140
+ machinfo_example, expected_cpu = example
141
+ context "machinfo example ##{i}" do
142
+ before :each do
143
+ Facter.fact(:kernel).stubs(:value).returns("HP-UX")
144
+ Facter::Util::Processor.stubs(:ioscan).returns(ioscan)
145
+ Facter::Util::Processor.stubs(:machinfo).returns(machinfo_example)
146
+ end
147
+
148
+ %w{ 0 1 }.each do |j|
149
+ it "should find #{expected_cpu}" do
150
+ Facter::Util::Processor.hpux_processor_list[j.to_i].should eq expected_cpu
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ describe "when machinfo is not available" do
158
+ def self.model_and_getconf_examples
159
+ examples = []
160
+ examples << ["9000/800/L3000-5x", "sched.models_present", "unistd.h_present", "532", "616", "PA-RISC 8600 processor"]
161
+ examples << ["9000/800/L3000-5x", "", "unistd.h_present", "532", "616", "HP PA-RISC2.0 CHIP TYPE #616"]
162
+ examples << ["9000/800/L3000-5x", "", "", "532", "616", "CPU v532 CHIP TYPE #616"]
163
+ examples << ["ia64 hp server rx2660", "sched.models_present", "unistd.h_present", "768", "536936708", "IA-64 archrev 0 CHIP TYPE #536936708"]
164
+ examples << ["ia64 hp server rx2660", "", "unistd.h_present", "768", "536936708", "IA-64 archrev 0 CHIP TYPE #536936708"]
165
+ examples << ["ia64 hp server rx2660", "", "", "768", "536936708", "CPU v768 CHIP TYPE #536936708"]
166
+ examples
167
+ end
168
+
169
+ sched_models = File.readlines(fixtures('hpux','sched.models'))
170
+ unistd_h = File.readlines(fixtures('hpux','unistd.h'))
171
+ model_and_getconf_examples.each_with_index do |example, i|
172
+ model_example, sm, unistd, getconf_cpu_ver, getconf_chip_type, expected_cpu = example
173
+ context "and model and getconf example ##{i}" do
174
+ before :each do
175
+ Facter.fact(:kernel).stubs(:value).returns("HP-UX")
176
+ Facter::Util::Processor.stubs(:ioscan).returns(ioscan)
177
+ Facter::Util::Processor.stubs(:getconf_cpu_version).returns(getconf_cpu_ver)
178
+ Facter::Util::Processor.stubs(:getconf_cpu_chip_type).returns(getconf_chip_type)
179
+ Facter::Util::Processor.stubs(:machinfo).returns(nil)
180
+ Facter::Util::Processor.stubs(:model).returns(model_example)
181
+ end
182
+
183
+ if unistd == "unistd.h_present" then
184
+ before :each do
185
+ Facter::Util::Processor.stubs(:read_unistd_h).returns(unistd_h)
186
+ end
187
+ else
188
+ before :each do
189
+ Facter::Util::Processor.stubs(:read_unistd_h).returns(nil)
190
+ end
191
+ end
192
+
193
+ if sm == "sched.models_present" then
194
+ before :each do
195
+ Facter::Util::Processor.stubs(:read_sched_models).returns(sched_models)
196
+ end
197
+ else
198
+ before :each do
199
+ Facter::Util::Processor.stubs(:read_sched_models).returns(nil)
200
+ end
201
+ end
202
+
203
+ %w{ 0 1 }.each do |j|
204
+ it "should find #{expected_cpu}" do
205
+ Facter::Util::Processor.hpux_processor_list[j.to_i].should eq expected_cpu
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
92
212
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require 'facter/util/uptime'
5
+ require 'facter/util/posix'
5
6
 
6
7
  describe Facter::Util::Uptime do
7
8
 
@@ -26,15 +27,13 @@ describe Facter::Util::Uptime do
26
27
  end
27
28
 
28
29
  it "should use 'sysctl -n kern.boottime' on OpenBSD" do
29
- sysctl_output_file = my_fixture('sysctl_kern_boottime_openbsd') # Dec 09 21:11:46 +0000 2011
30
- Facter::Util::Uptime.stubs(:uptime_sysctl_cmd).returns("cat \"#{sysctl_output_file}\"")
30
+ Facter::Util::POSIX.stubs(:sysctl).returns(my_fixture_read("sysctl_kern_boottime_openbsd"))
31
31
  Time.stubs(:now).returns Time.parse("Dec 09 22:11:46 +0000 2011") # one hour later
32
32
  Facter::Util::Uptime.get_uptime_seconds_unix.should == 60 * 60
33
33
  end
34
34
 
35
35
  it "should use 'sysctl -n kern.boottime' on Darwin, etc." do
36
- sysctl_output_file = my_fixture('sysctl_kern_boottime_darwin') # Oct 30 21:52:27 +0000 2011
37
- Facter::Util::Uptime.stubs(:uptime_sysctl_cmd).returns("cat \"#{sysctl_output_file}\"")
36
+ Facter::Util::POSIX.stubs(:sysctl).returns(my_fixture_read("sysctl_kern_boottime_darwin"))
38
37
  Time.stubs(:now).returns Time.parse("Oct 30 22:52:27 +0000 2011") # one hour later
39
38
  Facter::Util::Uptime.get_uptime_seconds_unix.should == 60 * 60
40
39
  end
@@ -223,6 +223,14 @@ describe Facter::Util::Virtual do
223
223
  Facter::Util::Virtual.should be_kvm
224
224
  end
225
225
 
226
+ it "should detect kvm on SunOS" do
227
+ FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(false)
228
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
229
+ FileTest.stubs(:exists?).with("/usr/sbin/prtconf").returns(true)
230
+ Facter::Core::Execution.stubs(:exec).with("/usr/sbin/prtconf -v").returns("Qemu virtual machine")
231
+ Facter::Util::Virtual.should be_kvm
232
+ end
233
+
226
234
  it "should identify FreeBSD jail when in jail" do
227
235
  Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
228
236
  Facter::Core::Execution.stubs(:exec).with("/sbin/sysctl -n security.jail.jailed").returns("1")
@@ -4,18 +4,63 @@ require 'spec_helper'
4
4
  require 'facter/util/xendomains'
5
5
 
6
6
  describe Facter::Util::Xendomains do
7
- describe ".get_domains" do
8
- it "should return a list of running Xen Domains on Xen0" do
9
- xen0_domains = my_fixture_read("xendomains")
10
- Facter::Core::Execution.stubs(:exec).with('/usr/sbin/xm list 2>/dev/null').returns(xen0_domains)
11
- Facter::Util::Xendomains.get_domains.should == %{web01,mailserver}
7
+
8
+ let(:xen0_domains) { my_fixture_read("xendomains") }
9
+
10
+ describe "when the xl command is present" do
11
+ before do
12
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xl').returns('/usr/sbin/xl')
12
13
  end
13
14
 
14
- describe "when xm list isn't executable" do
15
- it "should be nil" do
16
- Facter::Core::Execution.stubs(:exec).with('/usr/sbin/xm list 2>/dev/null').returns(nil)
17
- Facter::Util::Xendomains.get_domains.should == nil
15
+ describe "and the xm command is not present" do
16
+
17
+ before do
18
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xm').returns(nil)
19
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xm list 2>/dev/null').never
18
20
  end
21
+
22
+ it "lists the domains running on Xen0 with the 'xl' command" do
23
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xl list 2>/dev/null').returns(xen0_domains)
24
+ Facter::Util::Xendomains.get_domains.should == %{web01,mailserver}
25
+ end
26
+ end
27
+
28
+ describe "and the xm command is also present" do
29
+ before do
30
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xm').returns('/usr/bin/xm')
31
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xm list 2>/dev/null').never
32
+ end
33
+
34
+ it "prefers xl over xm" do
35
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xl list 2>/dev/null').returns(xen0_domains)
36
+ Facter::Util::Xendomains.get_domains.should == %{web01,mailserver}
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "when xl is not present" do
42
+ before do
43
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xl').returns(nil)
44
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xl list 2>/dev/null').never
45
+ end
46
+
47
+ describe "and the xm command is present" do
48
+ before do
49
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xm').returns('/usr/sbin/xm')
50
+ end
51
+
52
+ it "lists the domains running on Xen0 with the 'xm' command" do
53
+ Facter::Util::Resolution.expects(:exec).with('/usr/sbin/xm list 2>/dev/null').returns(xen0_domains)
54
+ Facter::Util::Xendomains.get_domains.should == %{web01,mailserver}
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "neither xl or xm are present" do
60
+ it "returns nil" do
61
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xl').returns(nil)
62
+ Facter::Util::Resolution.stubs(:which).with('/usr/sbin/xm').returns(nil)
63
+ Facter::Util::Xendomains.get_domains.should == nil
19
64
  end
20
65
  end
21
66
  end
@@ -24,6 +24,7 @@ describe "Virtual fact" do
24
24
 
25
25
  it "should be zone on Solaris when a zone" do
26
26
  Facter.fact(:kernel).stubs(:value).returns("SunOS")
27
+ Facter.fact(:operatingsystem).stubs(:value).returns("Solaris")
27
28
  Facter::Util::Virtual.stubs(:zone?).returns(true)
28
29
  Facter::Util::Virtual.stubs(:vserver?).returns(false)
29
30
  Facter::Util::Virtual.stubs(:xen?).returns(false)
@@ -39,6 +40,7 @@ describe "Virtual fact" do
39
40
 
40
41
  it "should be hpvm on HP-UX when in HP-VM" do
41
42
  Facter.fact(:kernel).stubs(:value).returns("HP-UX")
43
+ Facter.fact(:operatingsystem).stubs(:value).returns("HP-UX")
42
44
  Facter::Util::Virtual.stubs(:hpvm?).returns(true)
43
45
  Facter.fact(:virtual).value.should == "hpvm"
44
46
  end
@@ -303,6 +305,11 @@ describe "Virtual fact" do
303
305
  Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("oVirt Node")
304
306
  Facter.fact(:virtual).value.should == "ovirt"
305
307
  end
308
+
309
+ it "should be kvm with KVM product name from sysctl" do
310
+ Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("KVM")
311
+ Facter.fact(:virtual).value.should == "kvm"
312
+ end
306
313
  end
307
314
 
308
315
  describe "on Windows" do
@@ -499,7 +506,7 @@ describe "is_virtual fact" do
499
506
  Facter.fact(:is_virtual).value.should == "true"
500
507
  end
501
508
 
502
- it "should be true when running on ovirt" do
509
+ it "should be true when running on gce" do
503
510
  Facter.fact(:kernel).stubs(:value).returns("Linux")
504
511
  Facter.fact(:virtual).stubs(:value).returns("gce")
505
512
  Facter.fact(:is_virtual).value.should == "true"
@@ -18,31 +18,47 @@ describe "zfs_version fact" do
18
18
  Facter::Core::Execution.stubs(:which).with("zfs").returns("/usr/bin/zfs")
19
19
  end
20
20
 
21
+ it "should return nil on old versions of Solaris 10" do
22
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_old'))
23
+ Facter.fact(:zfs_version).value.should == nil
24
+ end
25
+
21
26
  it "should return correct version on Solaris 10" do
27
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
22
28
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('solaris_10'))
23
29
  Facter.fact(:zfs_version).value.should == "3"
24
30
  end
25
31
 
26
32
  it "should return correct version on Solaris 11" do
33
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
27
34
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('solaris_11'))
28
35
  Facter.fact(:zfs_version).value.should == "5"
29
36
  end
30
37
 
31
38
  it "should return correct version on FreeBSD 8.2" do
39
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
32
40
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('freebsd_8.2'))
33
41
  Facter.fact(:zfs_version).value.should == "4"
34
42
  end
35
43
 
36
44
  it "should return correct version on FreeBSD 9.0" do
45
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
37
46
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('freebsd_9.0'))
38
47
  Facter.fact(:zfs_version).value.should == "5"
39
48
  end
40
49
 
41
50
  it "should return correct version on Linux with ZFS-fuse" do
51
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
42
52
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('linux-fuse_0.6.9'))
43
53
  Facter.fact(:zfs_version).value.should == "4"
44
54
  end
45
55
 
56
+ it "should return correct version on Linux with zfsonlinux" do
57
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
58
+ Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('zfsonlinux_0.6.1'))
59
+ Facter.fact(:zfs_version).value.should == "5"
60
+ end
61
+
46
62
  it "should return nil if zfs command is not available" do
47
63
  Facter::Core::Execution.stubs(:which).with("zfs").returns(nil)
48
64
  Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('linux-fuse_0.6.9'))
@@ -50,20 +66,16 @@ describe "zfs_version fact" do
50
66
  end
51
67
 
52
68
  it "should return nil if zfs fails to run" do
53
- Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns('')
69
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(nil)
54
70
  Facter.fact(:zfs_version).value.should == nil
55
71
  end
56
72
 
57
73
  it "handles the zfs command becoming available at a later point in time" do
58
74
  # Simulate Puppet configuring the zfs tools from a persistent daemon by
59
75
  # simulating three sequential responses to which('zfs').
60
- Facter::Core::Execution.stubs(:which).
61
- with("zfs").
62
- returns(nil,nil,"/usr/bin/zfs")
63
- Facter::Core::Execution.stubs(:exec).
64
- with("zfs upgrade -v").
65
- returns(my_fixture_read('linux-fuse_0.6.9'))
66
-
76
+ Facter::Core::Execution.stubs(:which).with("zfs").returns(nil,nil,"/usr/bin/zfs")
77
+ Facter::Core::Execution.stubs(:exec).with("zfs -? 2> /dev/null").returns(my_fixture_read('zfs_new'))
78
+ Facter::Core::Execution.stubs(:exec).with("zfs upgrade -v").returns(my_fixture_read('linux-fuse_0.6.9'))
67
79
  fact = Facter.fact(:zfs_version)
68
80
 
69
81
  # zfs is not present the first two times the fact is resolved.