facter 2.0.2 → 2.1.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.
- checksums.yaml +4 -4
- data/Gemfile +14 -0
- data/ext/project_data.yaml +9 -6
- data/lib/facter/core/execution/base.rb +3 -3
- data/lib/facter/core/suitable.rb +1 -5
- data/lib/facter/dhcp_servers.rb +39 -0
- data/lib/facter/ec2.rb +33 -26
- data/lib/facter/ec2/rest.rb +130 -0
- data/lib/facter/fqdn.rb +2 -0
- data/lib/facter/gce.rb +16 -0
- data/lib/facter/gce/metadata.rb +87 -0
- data/lib/facter/kernelmajversion.rb +8 -0
- data/lib/facter/kernelrelease.rb +8 -0
- data/lib/facter/memory.rb +21 -15
- data/lib/facter/netmask.rb +1 -1
- data/lib/facter/operatingsystem.rb +20 -0
- data/lib/facter/operatingsystemmajrelease.rb +2 -1
- data/lib/facter/operatingsystemrelease.rb +19 -0
- data/lib/facter/osfamily.rb +3 -1
- data/lib/facter/partitions.rb +35 -0
- data/lib/facter/physicalprocessorcount.rb +9 -0
- data/lib/facter/processor.rb +25 -25
- data/lib/facter/util/config.rb +3 -1
- data/lib/facter/util/dhcp_servers.rb +43 -0
- data/lib/facter/util/ec2.rb +5 -0
- data/lib/facter/util/formatter.rb +2 -1
- data/lib/facter/util/ip.rb +1 -1
- data/lib/facter/util/loader.rb +10 -1
- data/lib/facter/util/manufacturer.rb +15 -16
- data/lib/facter/util/memory.rb +12 -12
- data/lib/facter/util/netmask.rb +1 -1
- data/lib/facter/util/operatingsystem.rb +21 -0
- data/lib/facter/util/partitions.rb +41 -0
- data/lib/facter/util/partitions/linux.rb +65 -0
- data/lib/facter/util/posix.rb +16 -0
- data/lib/facter/util/processor.rb +8 -10
- data/lib/facter/util/resolution.rb +4 -0
- data/lib/facter/util/values.rb +29 -0
- data/lib/facter/util/virtual.rb +32 -3
- data/lib/facter/util/windows_root.rb +2 -32
- data/lib/facter/version.rb +1 -1
- data/lib/facter/virtual.rb +53 -12
- data/spec/fixtures/ifconfig/openbsd_bridge_rules +11 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_devices +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_devices_disconnected +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_dhcp +36 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_static +24 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_dhcp +49 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_static +37 -0
- data/spec/fixtures/unit/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/dhcp_servers/route_nogw +1 -0
- data/spec/fixtures/unit/ec2/rest/meta-data/root +20 -0
- data/spec/fixtures/unit/gce/metadata/metadata.json +69 -0
- data/spec/fixtures/unit/kernelrelease/openbsd-5.3 +2 -0
- data/spec/fixtures/unit/kernelrelease/openbsd-5.3-current +3 -0
- data/spec/fixtures/unit/memory/aix-svmon +9 -0
- data/spec/fixtures/unit/memory/aix-swap_l +2 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-multiple +3 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-single +2 -0
- data/spec/fixtures/unit/memory/darwin-vm_stat +13 -0
- data/spec/fixtures/unit/memory/dragonfly-vmstat +3 -0
- data/spec/fixtures/unit/memory/freebsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/linux-proc_meminfo +10 -0
- data/spec/fixtures/unit/memory/openbsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/smartos_zone_swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-prtconf +4 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-multiple +3 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-vmstat +3 -0
- data/spec/fixtures/unit/netmask/ifconfig_aix_7.txt +3 -0
- data/spec/fixtures/unit/util/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/util/dhcp_servers/route_nogw +1 -0
- data/spec/fixtures/unit/util/manufacturer/smartos_smbios +533 -0
- data/spec/fixtures/unit/util/operatingsystem/cumuluslinux.txt +8 -0
- data/spec/fixtures/unit/util/operatingsystem/redhat-7.txt +12 -0
- data/spec/fixtures/unit/util/operatingsystem/sabayon.txt +7 -0
- data/spec/fixtures/unit/util/operatingsystem/wheezy.txt +9 -0
- data/spec/fixtures/unit/util/partitions/partitions/mount +9 -0
- data/spec/fixtures/virtual/proc_1_cgroup/in_a_container +9 -0
- data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container +8 -0
- data/spec/fixtures/virtual/proc_1_cgroup/not_in_a_container +9 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/core/execution/base_spec.rb +3 -5
- data/spec/unit/core/execution/posix_spec.rb +2 -2
- data/spec/unit/core/suitable_spec.rb +10 -0
- data/spec/unit/dhcp_servers_spec.rb +152 -0
- data/spec/unit/ec2/rest_spec.rb +145 -0
- data/spec/unit/ec2_spec.rb +87 -147
- data/spec/unit/fqdn_spec.rb +16 -0
- data/spec/unit/gce/metadata_spec.rb +49 -0
- data/spec/unit/gce_spec.rb +34 -0
- data/spec/unit/interfaces_spec.rb +9 -9
- data/spec/unit/kernelmajversion_spec.rb +14 -9
- data/spec/unit/kernelrelease_spec.rb +16 -0
- data/spec/unit/macaddress_spec.rb +12 -0
- data/spec/unit/memory_spec.rb +53 -122
- data/spec/unit/netmask_spec.rb +11 -0
- data/spec/unit/operatingsystem_spec.rb +19 -0
- data/spec/unit/operatingsystemmajrelease_spec.rb +1 -1
- data/spec/unit/operatingsystemrelease_spec.rb +8 -0
- data/spec/unit/osfamily_spec.rb +62 -0
- data/spec/unit/partitions_spec.rb +48 -0
- data/spec/unit/physicalprocessorcount_spec.rb +9 -0
- data/spec/unit/processor_spec.rb +15 -7
- data/spec/unit/util/config_spec.rb +13 -0
- data/spec/unit/util/dhcp_servers_spec.rb +63 -0
- data/spec/unit/util/ec2_spec.rb +4 -0
- data/spec/unit/util/formatter_spec.rb +50 -0
- data/spec/unit/util/loader_spec.rb +4 -4
- data/spec/unit/util/macosx_spec.rb +3 -2
- data/spec/unit/util/manufacturer_spec.rb +44 -0
- data/spec/unit/util/operatingsystem_spec.rb +92 -0
- data/spec/unit/util/partitions/partitions_spec.rb +67 -0
- data/spec/unit/util/partitions_spec.rb +19 -0
- data/spec/unit/util/posix_spec.rb +11 -0
- data/spec/unit/util/values_spec.rb +40 -0
- data/spec/unit/util/virtual_spec.rb +72 -2
- data/spec/unit/virtual_spec.rb +67 -18
- metadata +116 -4
- data/spec/fixtures/unit/util/loader/nosuchfact.rb +0 -1
@@ -1,9 +1,10 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require 'facter/util/
|
4
|
+
require 'facter/util/config'
|
5
|
+
require 'facter/util/macosx' unless Facter::Util::Config.is_windows?
|
5
6
|
|
6
|
-
describe Facter::Util::Macosx do
|
7
|
+
describe "Facter::Util::Macosx", :unless => Facter::Util::Config.is_windows? do
|
7
8
|
let(:badplist) do
|
8
9
|
'<?xml version="1.0" encoding="UTF-8"?>
|
9
10
|
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd>
|
@@ -63,6 +63,17 @@ describe Facter::Manufacturer do
|
|
63
63
|
Facter.value(:reldate).should == "12/01/2006"
|
64
64
|
end
|
65
65
|
|
66
|
+
it "can parse smbios output that contains non-UTF8 characters" do
|
67
|
+
smbios_output = my_fixture_read("smartos_smbios")
|
68
|
+
Facter::Core::Execution.stubs(:exec).with('/usr/sbin/smbios 2>/dev/null').returns(smbios_output)
|
69
|
+
Facter.fact(:kernel).stubs(:value).returns("SunOS")
|
70
|
+
|
71
|
+
query = { 'BIOS information' => [ { 'Release Date:' => 'reldate' } ] }
|
72
|
+
|
73
|
+
Facter::Manufacturer.dmi_find_system_info(query)
|
74
|
+
Facter.value(:reldate).should == "06/11/2007"
|
75
|
+
end
|
76
|
+
|
66
77
|
it "should not split on dmi keys containing the string Handle" do
|
67
78
|
dmidecode_output = <<-eos
|
68
79
|
Handle 0x1000, DMI type 16, 15 bytes
|
@@ -176,4 +187,37 @@ Handle 0x001F
|
|
176
187
|
Facter.value(:serialnumber).should == "56 4d 40 2b 4d 81 94 d6-e6 c5 56 a4 56 0c 9e 9f"
|
177
188
|
Facter.value(:productname).should == "VMware Virtual Platform"
|
178
189
|
end
|
190
|
+
|
191
|
+
describe "using sysctl to look up manufacturer information" do
|
192
|
+
before do
|
193
|
+
Facter.fact(:kernel).stubs(:value).returns 'OpenBSD'
|
194
|
+
end
|
195
|
+
|
196
|
+
let(:mfg_keys) do
|
197
|
+
{
|
198
|
+
'hw.vendor' => 'manufacturer',
|
199
|
+
'hw.product' => 'productname',
|
200
|
+
'hw.serialno' => 'serialnumber'
|
201
|
+
}
|
202
|
+
end
|
203
|
+
|
204
|
+
it "creates a new fact for the each hash key" do
|
205
|
+
mfg_keys.values.each do |value|
|
206
|
+
Facter.expects(:add).with(value)
|
207
|
+
end
|
208
|
+
described_class.sysctl_find_system_info(mfg_keys)
|
209
|
+
end
|
210
|
+
|
211
|
+
it "uses sysctl to determine the value for that fact" do
|
212
|
+
mfg_keys.keys.each do |sysctl|
|
213
|
+
Facter::Util::POSIX.expects(:sysctl).with(sysctl).returns "sysctl #{sysctl}"
|
214
|
+
end
|
215
|
+
|
216
|
+
described_class.sysctl_find_system_info(mfg_keys)
|
217
|
+
|
218
|
+
mfg_keys.invert.each_pair do |factname, value|
|
219
|
+
expect(Facter.value(factname)).to eq "sysctl #{value}"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
179
223
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'facter/util/operatingsystem'
|
3
|
+
|
4
|
+
describe Facter::Util::Operatingsystem do
|
5
|
+
describe "reading the os-release file" do
|
6
|
+
|
7
|
+
it "correctly parses the file on Cumulus Linux" do
|
8
|
+
values = described_class.os_release(my_fixture('cumuluslinux.txt'))
|
9
|
+
|
10
|
+
expect(values).to eq({
|
11
|
+
'NAME' => "Cumulus Linux",
|
12
|
+
'VERSION_ID' => "1.5.2",
|
13
|
+
'VERSION' => "1.5.2-28283a7-201311181623-final",
|
14
|
+
'PRETTY_NAME' => "Cumulus Linux",
|
15
|
+
'ID' => "cumulus-linux",
|
16
|
+
'ID_LIKE' => "debian",
|
17
|
+
'CPE_NAME' => "cpe:/o:cumulusnetworks:cumulus_linux:1.5.2-28283a7-201311181623-final",
|
18
|
+
'HOME_URL' => "http://www.cumulusnetworks.com/",
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
it "correctly parses the file on Sabayon" do
|
23
|
+
values = described_class.os_release(my_fixture('sabayon.txt'))
|
24
|
+
|
25
|
+
expect(values).to eq({
|
26
|
+
"NAME" => "Sabayon",
|
27
|
+
"ID" => "sabayon",
|
28
|
+
"PRETTY_NAME" => "Sabayon/Linux",
|
29
|
+
"ANSI_COLOR" => "1;32",
|
30
|
+
"HOME_URL" => "http://www.sabayon.org/",
|
31
|
+
"SUPPORT_URL" => "http://forum.sabayon.org/",
|
32
|
+
"BUG_REPORT_URL" => "https://bugs.sabayon.org/",
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
it "correctly parses the file on Debian Wheezy" do
|
37
|
+
values = described_class.os_release(my_fixture('wheezy.txt'))
|
38
|
+
|
39
|
+
expect(values).to eq({
|
40
|
+
"PRETTY_NAME" => "Debian GNU/Linux 7 (wheezy)",
|
41
|
+
"NAME" => "Debian GNU/Linux",
|
42
|
+
"VERSION_ID" => "7",
|
43
|
+
"VERSION" => "7 (wheezy)",
|
44
|
+
"ID" => "debian",
|
45
|
+
"ANSI_COLOR" => "1;31",
|
46
|
+
"HOME_URL" => "http://www.debian.org/",
|
47
|
+
"SUPPORT_URL" => "http://www.debian.org/support/",
|
48
|
+
"BUG_REPORT_URL" => "http://bugs.debian.org/",
|
49
|
+
})
|
50
|
+
end
|
51
|
+
|
52
|
+
it "correctly parses the file on Debian Wheezy" do
|
53
|
+
values = described_class.os_release(my_fixture('wheezy.txt'))
|
54
|
+
|
55
|
+
expect(values).to eq({
|
56
|
+
"PRETTY_NAME" => "Debian GNU/Linux 7 (wheezy)",
|
57
|
+
"NAME" => "Debian GNU/Linux",
|
58
|
+
"VERSION_ID" => "7",
|
59
|
+
"VERSION" => "7 (wheezy)",
|
60
|
+
"ID" => "debian",
|
61
|
+
"ANSI_COLOR" => "1;31",
|
62
|
+
"HOME_URL" => "http://www.debian.org/",
|
63
|
+
"SUPPORT_URL" => "http://www.debian.org/support/",
|
64
|
+
"BUG_REPORT_URL" => "http://bugs.debian.org/",
|
65
|
+
})
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
it "correctly parses the file on RedHat 7" do
|
70
|
+
values = described_class.os_release(my_fixture('redhat-7.txt'))
|
71
|
+
expect(values).to eq({
|
72
|
+
"NAME" => "Red Hat Enterprise Linux Everything",
|
73
|
+
"VERSION" => "7.0 (Maipo)",
|
74
|
+
"ID" => "rhel",
|
75
|
+
"VERSION_ID" => "7.0",
|
76
|
+
"PRETTY_NAME" => "Red Hat Enterprise Linux Everything 7.0 (Maipo)",
|
77
|
+
"ANSI_COLOR" => "0;31",
|
78
|
+
"CPE_NAME" => "cpe:/o:redhat:enterprise_linux:7.0:beta:everything",
|
79
|
+
"REDHAT_BUGZILLA_PRODUCT" => "Red Hat Enterprise Linux 7",
|
80
|
+
"REDHAT_BUGZILLA_PRODUCT_VERSION" => "7.0",
|
81
|
+
"REDHAT_SUPPORT_PRODUCT" => "Red Hat Enterprise Linux",
|
82
|
+
"REDHAT_SUPPORT_PRODUCT_VERSION" => "7.0",
|
83
|
+
})
|
84
|
+
end
|
85
|
+
|
86
|
+
it "does not try to read an unreadable '/etc/os-release' file" do
|
87
|
+
File.expects(:readable?).with('/some/nonexistent/file').returns false
|
88
|
+
|
89
|
+
expect(described_class.os_release('/some/nonexistent/file')).to be_empty
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'facter'
|
3
|
+
require 'facter/util/partitions/linux'
|
4
|
+
|
5
|
+
describe 'Facter::Util::Partitions::Linux' do
|
6
|
+
describe 'on Linux OS' do
|
7
|
+
before :each do
|
8
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
9
|
+
|
10
|
+
File.stubs(:exist?).with('/sys/block/').returns(true)
|
11
|
+
File.stubs(:exist?).with("/sys/block/./device").returns(false)
|
12
|
+
File.stubs(:exist?).with("/sys/block/../device").returns(false)
|
13
|
+
File.stubs(:exist?).with('/dev/disk/by-uuid/').returns(true)
|
14
|
+
|
15
|
+
devices = [".", "..", "sda", "sdb", "sdc"]
|
16
|
+
Dir.stubs(:entries).with('/sys/block/').returns(devices)
|
17
|
+
|
18
|
+
Facter::Core::Execution.stubs(:which).with('mount').returns(true)
|
19
|
+
Facter::Core::Execution.stubs(:which).with('blkid').returns(true)
|
20
|
+
|
21
|
+
test_parts = {
|
22
|
+
'sda1' => '13459663-22cc-47b4-a9e6-21dea9906e03',
|
23
|
+
'sdb2' => '98043570-eb10-457f-9718-0b85a26e66bf',
|
24
|
+
'sdc3' => 'a35fb506-e831-4752-9899-dff6c601214b',
|
25
|
+
}
|
26
|
+
|
27
|
+
Dir.stubs(:entries).with('/dev/disk/by-uuid/').returns(test_parts.values)
|
28
|
+
test_parts.each do |part,uuid|
|
29
|
+
device = part.match(/(\D+)/)[1]
|
30
|
+
File.stubs(:exist?).with("/sys/block/#{device}/device").returns(true)
|
31
|
+
File.stubs(:symlink?).with("/dev/disk/by-uuid/#{uuid}").returns(true)
|
32
|
+
File.stubs(:readlink).with("/dev/disk/by-uuid/#{uuid}").returns("/dev/#{part}")
|
33
|
+
Dir.stubs(:glob).with("/sys/block/#{device}/#{device}*").returns(["/sys/block/#{device}/#{part}"])
|
34
|
+
Facter::Util::Partitions::Linux.stubs(:read_size).returns('12345')
|
35
|
+
Facter::Core::Execution.stubs(:exec).with("blkid /dev/#{part}").returns("/dev/#{part}: UUID=\"#{uuid}\" TYPE=\"ext4\"")
|
36
|
+
end
|
37
|
+
|
38
|
+
Facter::Core::Execution.stubs(:exec).with('mount').returns(my_fixture_read("mount"))
|
39
|
+
end
|
40
|
+
|
41
|
+
it '.list should return a list of partitions' do
|
42
|
+
Facter::Util::Partitions::Linux.list.should == ['sda1', 'sdb2', 'sdc3']
|
43
|
+
end
|
44
|
+
|
45
|
+
it '.uuid should return a string containing the uuid' do
|
46
|
+
Facter::Util::Partitions::Linux.uuid('sda1').should == '13459663-22cc-47b4-a9e6-21dea9906e03'
|
47
|
+
Facter::Util::Partitions::Linux.uuid('sdb2').should == '98043570-eb10-457f-9718-0b85a26e66bf'
|
48
|
+
Facter::Util::Partitions::Linux.uuid('sdc3').should == 'a35fb506-e831-4752-9899-dff6c601214b'
|
49
|
+
end
|
50
|
+
|
51
|
+
it '.size should return a string containing the size' do
|
52
|
+
Facter::Util::Partitions::Linux.size('sda1').should == '12345'
|
53
|
+
end
|
54
|
+
|
55
|
+
it '.mount should return a string containing the mount point of the partition' do
|
56
|
+
Facter::Util::Partitions::Linux.mount('sda1').should == '/home'
|
57
|
+
Facter::Util::Partitions::Linux.mount('sdb2').should == '/'
|
58
|
+
Facter::Util::Partitions::Linux.mount('sdc3').should == '/var'
|
59
|
+
end
|
60
|
+
|
61
|
+
it '.filesystem should return a string containing the filesystem on the partition' do
|
62
|
+
Facter::Util::Partitions::Linux.filesystem('sda1').should == 'ext4'
|
63
|
+
Facter::Util::Partitions::Linux.filesystem('sdb2').should == 'ext4'
|
64
|
+
Facter::Util::Partitions::Linux.filesystem('sdc3').should == 'ext4'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'facter'
|
3
|
+
require 'facter/util/partitions'
|
4
|
+
|
5
|
+
describe 'Facter::Util::Partitions' do
|
6
|
+
describe 'on unsupported OSs' do
|
7
|
+
before :each do
|
8
|
+
Facter.fact(:kernel).stubs(:value).returns("SunOS")
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'list should return empty array' do
|
12
|
+
Facter::Util::Partitions.list.should == []
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'available? should return false' do
|
16
|
+
Facter::Util::Partitions.available?.should == false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'facter/util/posix'
|
3
|
+
|
4
|
+
describe Facter::Util::POSIX do
|
5
|
+
describe "retrieving values via sysctl" do
|
6
|
+
it "returns the result of the sysctl command" do
|
7
|
+
Facter::Util::Resolution.expects(:exec).with("sysctl -n hw.pagesize 2>/dev/null").returns("somevalue")
|
8
|
+
expect(described_class.sysctl("hw.pagesize")).to eq "somevalue"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -128,4 +128,44 @@ describe Facter::Util::Values do
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
131
|
+
|
132
|
+
describe "flatten_structure" do
|
133
|
+
it "converts a string to a hash containing that string" do
|
134
|
+
input = "foo"
|
135
|
+
output = described_class.flatten_structure("path", input)
|
136
|
+
expect(output).to eq({"path" => "foo"})
|
137
|
+
end
|
138
|
+
|
139
|
+
it "converts an array to a hash with the array elements with indexes" do
|
140
|
+
input = ["foo"]
|
141
|
+
output = described_class.flatten_structure("path", input)
|
142
|
+
expect(output).to eq({"path_0" => "foo"})
|
143
|
+
end
|
144
|
+
|
145
|
+
it "prefixes a non-nested hash with the given path" do
|
146
|
+
input = {"foo" => "bar"}
|
147
|
+
output = described_class.flatten_structure("path", input)
|
148
|
+
expect(output).to eq({"path_foo" => "bar"})
|
149
|
+
end
|
150
|
+
|
151
|
+
it "flattens elements till it reaches the first non-flattenable structure" do
|
152
|
+
input = {
|
153
|
+
"first" => "second",
|
154
|
+
"arr" => ["zero", "one"],
|
155
|
+
"nested_array" => [
|
156
|
+
"hash" => "string",
|
157
|
+
],
|
158
|
+
"top" => {"middle" => ['bottom']},
|
159
|
+
}
|
160
|
+
output = described_class.flatten_structure("path", input)
|
161
|
+
|
162
|
+
expect(output).to eq({
|
163
|
+
"path_first" => "second",
|
164
|
+
"path_arr_0" => "zero",
|
165
|
+
"path_arr_1" => "one",
|
166
|
+
"path_nested_array_0_hash" => "string",
|
167
|
+
"path_top_middle_0" => "bottom"
|
168
|
+
})
|
169
|
+
end
|
170
|
+
end
|
131
171
|
end
|
@@ -127,6 +127,16 @@ describe Facter::Util::Virtual do
|
|
127
127
|
Facter::Util::Virtual.should_not be_ovirt
|
128
128
|
end
|
129
129
|
|
130
|
+
it "detects GCE if the DMI product name is Google" do
|
131
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").returns("Google")
|
132
|
+
expect(Facter::Util::Virtual.gce?).to be_true
|
133
|
+
end
|
134
|
+
|
135
|
+
it "does not detect GCE if the DMI product name is not Google" do
|
136
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").returns('')
|
137
|
+
expect(Facter::Util::Virtual.gce?).to be_false
|
138
|
+
end
|
139
|
+
|
130
140
|
fixture_path = fixtures('virtual', 'proc_self_status')
|
131
141
|
|
132
142
|
test_cases = [
|
@@ -202,14 +212,14 @@ describe Facter::Util::Virtual do
|
|
202
212
|
it "should detect kvm on FreeBSD" do
|
203
213
|
FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(false)
|
204
214
|
Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
|
205
|
-
Facter::
|
215
|
+
Facter::Util::POSIX.stubs(:sysctl).with("hw.model").returns("QEMU Virtual CPU version 0.12.4")
|
206
216
|
Facter::Util::Virtual.should be_kvm
|
207
217
|
end
|
208
218
|
|
209
219
|
it "should detect kvm on OpenBSD" do
|
210
220
|
FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(false)
|
211
221
|
Facter.fact(:kernel).stubs(:value).returns("OpenBSD")
|
212
|
-
Facter::
|
222
|
+
Facter::Util::POSIX.stubs(:sysctl).with("hw.model").returns('QEMU Virtual CPU version (cpu64-rhel6) ("AuthenticAMD" 686-class, 512KB L2 cache)')
|
213
223
|
Facter::Util::Virtual.should be_kvm
|
214
224
|
end
|
215
225
|
|
@@ -291,4 +301,64 @@ describe Facter::Util::Virtual do
|
|
291
301
|
context "on windows" do
|
292
302
|
it_should_behave_like "virt-what", "windows", 'c:\windows\system32\virt-what', "NUL"
|
293
303
|
end
|
304
|
+
|
305
|
+
describe '.lxc?' do
|
306
|
+
subject do
|
307
|
+
Facter::Util::Virtual.lxc?
|
308
|
+
end
|
309
|
+
|
310
|
+
fixture_path = fixtures('virtual', 'proc_1_cgroup')
|
311
|
+
|
312
|
+
context '/proc/1/cgroup has at least one hierarchy rooted in /lxc/' do
|
313
|
+
before :each do
|
314
|
+
fakepath = Pathname.new(File.join(fixture_path, 'in_a_container'))
|
315
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
316
|
+
end
|
317
|
+
|
318
|
+
it 'is true' do
|
319
|
+
subject.should be_true
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
context '/proc/1/cgroup has no hierarchies rooted in /lxc/' do
|
324
|
+
before :each do
|
325
|
+
fakepath = Pathname.new(File.join(fixture_path, 'not_in_a_container'))
|
326
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'is false' do
|
330
|
+
subject.should be_false
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe '.docker?' do
|
336
|
+
subject do
|
337
|
+
Facter::Util::Virtual.docker?
|
338
|
+
end
|
339
|
+
|
340
|
+
fixture_path = fixtures('virtual', 'proc_1_cgroup')
|
341
|
+
|
342
|
+
context '/proc/1/cgroup has at least one hierarchy rooted in /docker/' do
|
343
|
+
before :each do
|
344
|
+
fakepath = Pathname.new(File.join(fixture_path, 'in_a_docker_container'))
|
345
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
346
|
+
end
|
347
|
+
|
348
|
+
it 'is true' do
|
349
|
+
subject.should be_true
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
context '/proc/1/cgroup has no hierarchies rooted in /docker/' do
|
354
|
+
before :each do
|
355
|
+
fakepath = Pathname.new(File.join(fixture_path, 'not_in_a_container'))
|
356
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'is false' do
|
360
|
+
subject.should be_false
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
294
364
|
end
|
data/spec/unit/virtual_spec.rb
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'facter/util/virtual'
|
5
|
-
require 'facter/util/macosx'
|
5
|
+
require 'facter/util/macosx' unless Facter::Util::Config.is_windows?
|
6
6
|
|
7
7
|
describe "Virtual fact" do
|
8
8
|
before(:each) do
|
9
|
+
Facter::Util::Virtual.stubs(:docker?).returns(false)
|
10
|
+
Facter::Util::Virtual.stubs(:lxc?).returns(false)
|
9
11
|
Facter::Util::Virtual.stubs(:zone?).returns(false)
|
10
12
|
Facter::Util::Virtual.stubs(:openvz?).returns(false)
|
11
13
|
Facter::Util::Virtual.stubs(:vserver?).returns(false)
|
@@ -16,6 +18,7 @@ describe "Virtual fact" do
|
|
16
18
|
Facter::Util::Virtual.stubs(:virt_what).returns(nil)
|
17
19
|
Facter::Util::Virtual.stubs(:rhev?).returns(false)
|
18
20
|
Facter::Util::Virtual.stubs(:ovirt?).returns(false)
|
21
|
+
Facter::Util::Virtual.stubs(:gce?).returns(false)
|
19
22
|
Facter::Util::Virtual.stubs(:virtualbox?).returns(false)
|
20
23
|
end
|
21
24
|
|
@@ -47,28 +50,23 @@ describe "Virtual fact" do
|
|
47
50
|
Facter.fact(:virtual).value.should == "zlinux"
|
48
51
|
end
|
49
52
|
|
50
|
-
describe "on Darwin" do
|
53
|
+
describe "on Darwin", :unless => Facter::Util::Config.is_windows? do
|
51
54
|
before do
|
52
55
|
Facter.fact(:kernel).stubs(:value).returns("Darwin")
|
53
56
|
end
|
54
57
|
|
55
|
-
it "should be parallels with Parallels vendor id" do
|
56
|
-
Facter::Util::Macosx.stubs(:profiler_data).returns({ "
|
58
|
+
it "should be parallels with Parallels ethernet vendor id" do
|
59
|
+
Facter::Util::Macosx.stubs(:profiler_data).returns({ "spethernet_subsystem-vendor-id" => "0x1ab8" })
|
57
60
|
Facter.fact(:virtual).value.should == "parallels"
|
58
61
|
end
|
59
62
|
|
60
|
-
it "should be
|
61
|
-
Facter::Util::Macosx.stubs(:profiler_data).returns({ "
|
62
|
-
Facter.fact(:virtual).value.should == "
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should be vmware with VMWare vendor id" do
|
66
|
-
Facter::Util::Macosx.stubs(:profiler_data).returns({ "spdisplays_vendor-id" => "0x15ad" })
|
67
|
-
Facter.fact(:virtual).value.should == "vmware"
|
63
|
+
it "should be virtualbox with VirtualBox boot rom name" do
|
64
|
+
Facter::Util::Macosx.stubs(:profiler_data).returns({ "boot_rom_version" => "VirtualBox" })
|
65
|
+
Facter.fact(:virtual).value.should == "virtualbox"
|
68
66
|
end
|
69
67
|
|
70
|
-
it "should be vmware with
|
71
|
-
Facter::Util::Macosx.stubs(:profiler_data).returns({ "
|
68
|
+
it "should be vmware with VMware machine model" do
|
69
|
+
Facter::Util::Macosx.stubs(:profiler_data).returns({ "machine_model" => "VMware7,1" })
|
72
70
|
Facter.fact(:virtual).value.should == "vmware"
|
73
71
|
end
|
74
72
|
end
|
@@ -164,6 +162,12 @@ describe "Virtual fact" do
|
|
164
162
|
Facter.fact(:virtual).value.should == "ovirt"
|
165
163
|
end
|
166
164
|
|
165
|
+
it "is gce based on DMI info" do
|
166
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
167
|
+
Facter::Util::Virtual.stubs(:gce?).returns(true)
|
168
|
+
Facter.fact(:virtual).value.should == "gce"
|
169
|
+
end
|
170
|
+
|
167
171
|
it "should be hyperv with Microsoft vendor name from lspci 2>/dev/null" do
|
168
172
|
Facter::Core::Execution.stubs(:exec).with('lspci 2>/dev/null').returns("00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual VGA")
|
169
173
|
Facter.fact(:virtual).value.should == "hyperv"
|
@@ -175,6 +179,28 @@ describe "Virtual fact" do
|
|
175
179
|
Facter.fact(:virtual).value.should == "hyperv"
|
176
180
|
end
|
177
181
|
|
182
|
+
context "In a Linux Container (LXC)" do
|
183
|
+
before :each do
|
184
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'is "lxc" when Facter::Util::Virtual.lxc? is true' do
|
188
|
+
Facter::Util::Virtual.stubs(:lxc?).returns(true)
|
189
|
+
Facter.fact(:virtual).value.should == 'lxc'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "In a Docker Container (docker)" do
|
194
|
+
before :each do
|
195
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'is "docker" when Facter::Util::Virtual.docker? is true' do
|
199
|
+
Facter::Util::Virtual.stubs(:docker?).returns(true)
|
200
|
+
Facter.fact(:virtual).value.should == 'docker'
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
178
204
|
context "In Google Compute Engine" do
|
179
205
|
before :each do
|
180
206
|
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
@@ -254,24 +280,29 @@ describe "Virtual fact" do
|
|
254
280
|
end
|
255
281
|
|
256
282
|
it "should be parallels with Parallels product name from sysctl" do
|
257
|
-
Facter::
|
283
|
+
Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("Parallels Virtual Platform")
|
258
284
|
Facter.fact(:virtual).value.should == "parallels"
|
259
285
|
end
|
260
286
|
|
261
287
|
it "should be vmware with VMware product name from sysctl" do
|
262
|
-
Facter::
|
288
|
+
Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("VMware Virtual Platform")
|
263
289
|
Facter.fact(:virtual).value.should == "vmware"
|
264
290
|
end
|
265
291
|
|
266
292
|
it "should be virtualbox with VirtualBox product name from sysctl" do
|
267
|
-
Facter::
|
293
|
+
Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("VirtualBox")
|
268
294
|
Facter.fact(:virtual).value.should == "virtualbox"
|
269
295
|
end
|
270
296
|
|
271
297
|
it "should be xenhvm with Xen HVM product name from sysctl" do
|
272
|
-
Facter::
|
298
|
+
Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("HVM domU")
|
273
299
|
Facter.fact(:virtual).value.should == "xenhvm"
|
274
300
|
end
|
301
|
+
|
302
|
+
it "should be ovirt with oVirt Node product name from sysctl" do
|
303
|
+
Facter::Util::POSIX.stubs(:sysctl).with('hw.product').returns("oVirt Node")
|
304
|
+
Facter.fact(:virtual).value.should == "ovirt"
|
305
|
+
end
|
275
306
|
end
|
276
307
|
|
277
308
|
describe "on Windows" do
|
@@ -467,4 +498,22 @@ describe "is_virtual fact" do
|
|
467
498
|
Facter.fact(:virtual).stubs(:value).returns("ovirt")
|
468
499
|
Facter.fact(:is_virtual).value.should == "true"
|
469
500
|
end
|
501
|
+
|
502
|
+
it "should be true when running on ovirt" do
|
503
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
504
|
+
Facter.fact(:virtual).stubs(:value).returns("gce")
|
505
|
+
Facter.fact(:is_virtual).value.should == "true"
|
506
|
+
end
|
507
|
+
|
508
|
+
it "should be true when running in LXC" do
|
509
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
510
|
+
Facter.fact(:virtual).stubs(:value).returns("lxc")
|
511
|
+
Facter.fact(:is_virtual).value.should == "true"
|
512
|
+
end
|
513
|
+
|
514
|
+
it "should be true when running in docker" do
|
515
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
516
|
+
Facter.fact(:virtual).stubs(:value).returns("docker")
|
517
|
+
Facter.fact(:is_virtual).value.should == "true"
|
518
|
+
end
|
470
519
|
end
|