Codebase list facter / 638155f
Import upstream version 4.2.14+git20230119.1.2735508 Debian Janitor 1 year, 3 months ago
85 changed file(s) with 271 addition(s) and 181 deletion(s). Raw diff Collapse all Expand all
2727 * AIX
2828
2929 ## Requirements
30 * Ruby 2.3+
30 * Ruby 2.5+
3131 * FFI (for facts like `mountpoints` which are resolved using C API calls)
3232
3333 ## Basic concepts
1818 gem "rake", ">= 12.3.3"
1919 gem "multi_json", "~> 1.8"
2020
21 if File.exists? "#{__FILE__}.local"
21 if File.exist? "#{__FILE__}.local"
2222 eval(File.read("#{__FILE__}.local"), binding)
2323 end
337337 /#{version[1]}/
338338 end
339339 case agent[:platform]
340 when /solaris-10/
341 os_release_full = /#{os_version}_u\d+/
342 os_kernel = /Generic_\d+-\d+/
343 os_kernel_major = os_kernel
340344 when /solaris-11/
341345 os_release_full = /#{os_version}\.\d+/
342346 os_kernel = os_release_full
3939
4040 has_sitedir = !on(agent, 'ruby -e"puts RbConfig::CONFIG[\'sitedir\']"').output.chomp.empty?
4141
42 ruby_version = /2\.\d+\.\d+/
42 puppet_version = on(agent, puppet("--version")).stdout.chomp
43 ruby_version = if puppet_version =~ /^(6|7)\./
44 /2\.\d+\.\d+/
45 else
46 /3\.\d+\.\d+/
47 end
4348 expected_facts = {
4449 'ruby.platform' => ruby_platform,
4550 'ruby.version' => ruby_version
44
55 Gem::Specification.new do |spec|
66 spec.name = 'facter-ng'
7 spec.version = '4.2.14'
7 spec.version = '4.3.0'
88 spec.authors = ['Puppet']
99 spec.email = ['team-nw@puppet.com']
1010 spec.homepage = 'https://github.com/puppetlabs/facter'
2626
2727 spec.files = dirs.map { |path| path.sub(base, '') }
2828
29 spec.required_ruby_version = '>= 2.3', '< 4.0'
29 spec.required_ruby_version = '>= 2.5', '< 4.0'
3030
3131 spec.bindir = 'bin'
3232 spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
1111 gem_executables: 'facter'
1212 gem_license: 'Apache-2.0'
1313 gem_default_executables: 'facter'
14 gem_required_ruby_version: ['>= 2.3', '< 4.0']
14 gem_required_ruby_version: ['>= 2.5', '< 4.0']
1515 gem_runtime_dependencies:
1616 hocon: ~> 1.3
1717 thor: ['>= 1.0.1', '< 2.0']
44
55 Gem::Specification.new do |spec|
66 spec.name = 'facter'
7 spec.version = '4.2.14'
7 spec.version = '4.3.0'
88 spec.authors = ['Puppet']
99 spec.email = ['team-nw@puppet.com']
1010 spec.homepage = 'https://github.com/puppetlabs/facter'
2323 base = "#{__dir__}#{File::SEPARATOR}"
2424 spec.files = dirs.map { |path| path.sub(base, '') }
2525
26 spec.required_ruby_version = '>= 2.3', '< 4.0'
26 spec.required_ruby_version = '>= 2.5', '< 4.0'
2727 spec.bindir = 'bin'
2828 spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
2929 spec.require_paths = ['lib']
6363 bindings.empty? ? nil : bindings.first
6464 end
6565
66 IPV4_LINK_LOCAL_ADDR = IPAddr.new('169.254.0.0/16').freeze # RFC5735
67 IPV6_LINK_LOCAL_ADDR = IPAddr.new('fe80::/10').freeze # RFC4291
68 IPV6_UNIQUE_LOCAL_ADDR = IPAddr.new('fc00::/7').freeze # RFC4193
69
6670 def ignored_ip_address(addr)
67 addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
71 return true if addr.empty?
72
73 ip = IPAddr.new(addr)
74 return true if ip.loopback?
75
76 [
77 IPV4_LINK_LOCAL_ADDR,
78 IPV6_LINK_LOCAL_ADDR,
79 IPV6_UNIQUE_LOCAL_ADDR
80 ].each do |range|
81 return true if range.include?(ip)
82 end
83
84 false
6885 end
6986
7087 def calculate_mask_length(netmask)
00 # frozen_string_literal: true
11
22 module Facter
3 VERSION = '4.2.14' unless defined?(VERSION)
3 VERSION = '4.3.0' unless defined?(VERSION)
44 end
3636 end
3737
3838 it 'delegates #exec to #execute' do
39 expect(impl).to receive(:execute).with('waffles', on_fail: nil)
39 expect(impl).to receive(:execute).with('waffles', { on_fail: nil })
4040 execution.exec('waffles')
4141 end
4242
4040
4141 it 'passes resolution specific options to the fact' do
4242 fact = Facter::Util::Fact.new(:myname)
43 allow(Facter::Util::Fact).to receive(:new).with(:myname, timeout: 'myval').and_return(fact)
44
45 expect(fact).to receive(:add).with(timeout: 'myval')
43 allow(Facter::Util::Fact).to receive(:new).with(:myname, { timeout: 'myval' }).and_return(fact)
44
45 expect(fact).to receive(:add).with({ timeout: 'myval' })
4646
4747 collection.add(:myname, timeout: 'myval') {}
4848 end
353353 let(:yaml_content) { load_fixture('external_fact_yaml_date').read }
354354
355355 it 'loads date' do
356 pending 'There is a bug in newer versions of Psych and Timecop' if RUBY_VERSION =~ /^3\.2/
356 if RUBY_VERSION.to_f == 3.2 && Gem::Version.new(Timecop::VERSION) < Gem::Version.new('0.9.6')
357 pending 'There is a bug in newer versions of Psych and timecop'
358 end
357359 expected_result = { 'testsfact' => { 'date' => Date.parse('2020-04-28') } }
358360
359361 expect(yaml_parser.parse_results).to eq(expected_result)
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Aix::Ruby::Version.new }
55
6 let(:value) { '2.4.5' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
55
66 before do
77 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
8 .with(:release, release_file: '/etc/alpine-release')
8 .with(:release, { release_file: '/etc/alpine-release' })
99 .and_return(value)
1010 end
1111
1616 it 'calls Facter::Resolvers::SpecificReleaseFile with version' do
1717 fact.call_the_resolver
1818 expect(Facter::Resolvers::SpecificReleaseFile).to have_received(:resolve)
19 .with(:release, release_file: '/etc/alpine-release')
19 .with(:release, { release_file: '/etc/alpine-release' })
2020 end
2121
2222 it 'returns operating system name fact' do
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Amzn::Os::Distro::Codename.new }
55
6 before do
7 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
8 .with(:release, { release_file: '/etc/system-release' }).and_return(value)
9 end
10
611 context 'when codename is not in system-release' do
712 let(:value) { 'Amazon Linux AMI release 2017.03' }
813 let(:expected_value) { 'n/a' }
914
10 before do
11 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
12 .with(:release, release_file: '/etc/system-release').and_return(value)
13 end
14
1515 it 'calls Facter::Resolvers::SpecificReleaseFile' do
1616 fact.call_the_resolver
1717 expect(Facter::Resolvers::SpecificReleaseFile).to have_received(:resolve)
18 .with(:release, release_file: '/etc/system-release')
18 .with(:release, { release_file: '/etc/system-release' })
1919 end
2020
2121 it "returns 'n/a' fact value" do
2828 let(:value) { 'Amazon Linux release 2 (2017.12) LTS Release Candidate' }
2929 let(:expected_value) { '2017.12' }
3030
31 before do
32 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
33 .with(:release, release_file: '/etc/system-release').and_return(value)
34 end
35
3631 it 'calls Facter::Resolvers::SpecificReleaseFile' do
3732 fact.call_the_resolver
3833 expect(Facter::Resolvers::SpecificReleaseFile).to have_received(:resolve)
39 .with(:release, release_file: '/etc/system-release')
34 .with(:release, { release_file: '/etc/system-release' })
4035 end
4136
4237 it 'returns release fact' do
77
88 before do
99 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
10 .with(:release, release_file: '/etc/system-release').and_return(value)
10 .with(:release, { release_file: '/etc/system-release' }).and_return(value)
1111 end
1212
1313 it 'calls Facter::Resolvers::SpecificReleaseFile' do
1414 fact.call_the_resolver
1515 expect(Facter::Resolvers::SpecificReleaseFile).to have_received(:resolve)
16 .with(:release, release_file: '/etc/system-release')
16 .with(:release, { release_file: '/etc/system-release' })
1717 end
1818
1919 it 'returns release fact' do
88
99 before do
1010 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
11 .with(:release, release_file: '/etc/system-release').and_return(value)
11 .with(:release, { release_file: '/etc/system-release' }).and_return(value)
1212 end
1313
1414 it 'calls Facter::Resolvers::SpecificReleaseFile' do
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/system-release')
8 .with(:release, { release_file: '/etc/system-release' })
99 .and_return(value)
1010 end
1111
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/system-release')
8 .with(:release, { release_file: '/etc/system-release' })
99 .and_return(value)
1010 end
1111
55
66 before do
77 allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
8 .with(:release, release_file: '/etc/devuan_version')
8 .with(:release, { release_file: '/etc/devuan_version' })
99 .and_return(value)
1010 end
1111
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Freebsd::Ruby::Version.new }
55
6 let(:value) { '2.4.5' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/gentoo-release')
8 .with(:release, { release_file: '/etc/gentoo-release' })
99 .and_return(value)
1010 end
1111
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Linux::Ruby::Version.new }
55
6 let(:value) { '2.4.5' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Macosx::Ruby::Version.new }
55
6 let(:value) { '2.4.5' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/meego-release')
8 .with(:release, { release_file: '/etc/meego-release' })
99 .and_return(value)
1010 end
1111
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/enterprise-release')
8 .with(:release, { release_file: '/etc/enterprise-release' })
99 .and_return(value)
1010 end
1111
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/oracle-release')
8 .with(:release, { release_file: '/etc/oracle-release' })
99 .and_return(value)
1010 end
1111
1616 it 'calls Facter::Resolvers::ReleaseFromFirstLine with version' do
1717 fact.call_the_resolver
1818 expect(Facter::Resolvers::ReleaseFromFirstLine).to have_received(:resolve)
19 .with(:release, release_file: '/etc/oracle-release')
19 .with(:release, { release_file: '/etc/oracle-release' })
2020 end
2121
2222 it 'returns operating system name fact' do
55
66 before do
77 allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
8 .with(:release, release_file: '/etc/ovs-release')
8 .with(:release, { release_file: '/etc/ovs-release' })
99 .and_return(value)
1010 end
1111
1616 it 'calls Facter::Resolvers::ReleaseFromFirstLine with version' do
1717 fact.call_the_resolver
1818 expect(Facter::Resolvers::ReleaseFromFirstLine).to have_received(:resolve)
19 .with(:release, release_file: '/etc/ovs-release')
19 .with(:release, { release_file: '/etc/ovs-release' })
2020 end
2121
2222 it 'returns operating system name fact' do
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Solaris::Ruby::Version.new }
55
6 let(:value) { '2.4.5' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
3232 allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('kvm')
3333 allow(Facter::Resolvers::DMIComputerSystem).to receive(:resolve).with(:name).and_return('OpenStack')
3434 allow(Facter::Resolvers::DMIBios).to receive(:resolve).with(:manufacturer).and_return('value')
35 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.kvm', openstack: true).and_return(expected_fact)
35 allow(Facter::ResolvedFact).to receive(:new)
36 .with('hypervisors.kvm', { openstack: true })
37 .and_return(expected_fact)
3638
3739 fact = Facts::Windows::Hypervisors::Kvm.new
3840 expect(fact.call_the_resolver).to eq(expected_fact)
4648 allow(Facter::Resolvers::NetKVM).to receive(:resolve).with(:kvm).and_return(true)
4749 allow(Facter::Resolvers::DMIComputerSystem).to receive(:resolve).with(:name).and_return('value')
4850 allow(Facter::Resolvers::DMIBios).to receive(:resolve).with(:manufacturer).and_return('Google')
49 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.kvm', google: true).and_return(expected_fact)
51 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.kvm', { google: true }).and_return(expected_fact)
5052
5153 fact = Facts::Windows::Hypervisors::Kvm.new
5254 expect(fact.call_the_resolver).to eq(expected_fact)
2121 allow(Facter::Resolvers::Windows::Virtualization)
2222 .to receive(:resolve).with(:oem_strings)
2323 .and_return(['vboxVer_ 13.4', 'vboxRev_ 13.4'])
24 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.virtualbox', revision: ' 13.4', version: ' 13.4')
25 .and_return(expected_fact)
24 allow(Facter::ResolvedFact).to receive(:new)
25 .with('hypervisors.virtualbox', { revision: ' 13.4', version: ' 13.4' })
26 .and_return(expected_fact)
2627
2728 fact = Facts::Windows::Hypervisors::Virtualbox.new
2829 expect(fact.call_the_resolver).to eq(expected_fact)
3637 allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('value')
3738 allow(Facter::Resolvers::DMIComputerSystem).to receive(:resolve).with(:name).and_return('VirtualBox')
3839 allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:oem_strings).and_return(['', ''])
39 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.virtualbox', revision: '', version: '')
40 .and_return(expected_fact)
40 allow(Facter::ResolvedFact).to receive(:new)
41 .with('hypervisors.virtualbox', { revision: '', version: '' })
42 .and_return(expected_fact)
4143
4244 fact = Facts::Windows::Hypervisors::Virtualbox.new
4345 expect(fact.call_the_resolver).to eq(expected_fact)
1717 expected_fact = double(Facter::ResolvedFact, name: 'hypervisors.xen', value: { context: 'pv' })
1818 allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('xen')
1919 allow(Facter::Resolvers::DMIComputerSystem).to receive(:resolve).with(:name).and_return('PV domU')
20 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.xen', context: 'pv').and_return(expected_fact)
20 allow(Facter::ResolvedFact).to receive(:new)
21 .with('hypervisors.xen', { context: 'pv' }).and_return(expected_fact)
2122
2223 fact = Facts::Windows::Hypervisors::Xen.new
2324 expect(fact.call_the_resolver).to eq(expected_fact)
2930 expected_fact = double(Facter::ResolvedFact, name: 'hypervisors.xen', value: { context: 'hvm' })
3031 allow(Facter::Resolvers::Windows::Virtualization).to receive(:resolve).with(:virtual).and_return('xen')
3132 allow(Facter::Resolvers::DMIComputerSystem).to receive(:resolve).with(:name).and_return('HVM domU')
32 allow(Facter::ResolvedFact).to receive(:new).with('hypervisors.xen', context: 'hvm').and_return(expected_fact)
33 allow(Facter::ResolvedFact).to receive(:new)
34 .with('hypervisors.xen', { context: 'hvm' }).and_return(expected_fact)
3335
3436 fact = Facts::Windows::Hypervisors::Xen.new
3537 expect(fact.call_the_resolver).to eq(expected_fact)
33 describe '#call_the_resolver' do
44 subject(:fact) { Facts::Windows::Ruby::Version.new }
55
6 let(:value) { '2.5.7' }
6 let(:value) { '2.5.9' }
77
88 before do
99 allow(Facter::Resolvers::Ruby).to receive(:resolve).with(:version).and_return(value)
66
77 before do
88 resolver.instance_variable_set(:@log, logger_spy)
9 allow(Facter::Core::Execution).to receive(:execute).with('lspv', logger: logger_spy)
10 .and_return(result)
9 allow(Facter::Core::Execution).to receive(:execute)
10 .with('lspv', { logger: logger_spy })
11 .and_return(result)
1112 end
1213
1314 after do
3031 end
3132
3233 before do
33 allow(Facter::Core::Execution).to receive(:execute).with('lspv hdisk0', logger: logger_spy)
34 .and_return(load_fixture('lspv_disk_output').read)
34 allow(Facter::Core::Execution).to receive(:execute)
35 .with('lspv hdisk0', { logger: logger_spy })
36 .and_return(load_fixture('lspv_disk_output').read)
3537 end
3638
3739 it 'returns disks informations' do
4042
4143 context 'when second lspv call fails' do
4244 before do
43 allow(Facter::Core::Execution).to receive(:execute).with('lspv hdisk0', logger: logger_spy)
44 .and_return('')
45 allow(Facter::Core::Execution).to receive(:execute)
46 .with('lspv hdisk0', { logger: logger_spy })
47 .and_return('')
4548 end
4649
4750 it 'returns disks informations' do
66
77 before do
88 resolver.instance_variable_set(:@log, log_spy)
9 allow(Facter::Core::Execution).to receive(:execute).with('svmon', logger: log_spy)
10 .and_return(svmon_content)
11 allow(Facter::Core::Execution).to receive(:execute).with('pagesize', logger: log_spy)
12 .and_return(pagesize_content)
9 allow(Facter::Core::Execution).to receive(:execute)
10 .with('svmon', { logger: log_spy })
11 .and_return(svmon_content)
12 allow(Facter::Core::Execution).to receive(:execute)
13 .with('pagesize', { logger: log_spy })
14 .and_return(pagesize_content)
1315 end
1416
1517 after do
1919
2020 before do
2121 Facter::Resolvers::Aix::Mountpoints.instance_variable_set(:@log, log_spy)
22 allow(Facter::Core::Execution).to receive(:execute).with('mount', logger: log_spy)
23 .and_return(load_fixture('mount').read)
24 allow(Facter::Core::Execution).to receive(:execute).with('df -P', logger: log_spy)
25 .and_return(load_fixture('df').read)
22 allow(Facter::Core::Execution).to receive(:execute)
23 .with('mount', { logger: log_spy })
24 .and_return(load_fixture('mount').read)
25 allow(Facter::Core::Execution).to receive(:execute)
26 .with('df -P', { logger: log_spy })
27 .and_return(load_fixture('df').read)
2628 end
2729
2830 it "only skips lines containing the string 'node'" do
1414 before do
1515 networking_resolver.instance_variable_set(:@log, log_spy)
1616 allow(Facter::Core::Execution).to receive(:execute)
17 .with('netstat -rn', logger: log_spy)
17 .with('netstat -rn', { logger: log_spy })
1818 .and_return(netstat_rn)
1919
2020 allow(Facter::Core::Execution).to receive(:execute)
21 .with('netstat -in', logger: log_spy)
21 .with('netstat -in', { logger: log_spy })
2222 .and_return(netstat_in)
2323
2424 allow(Facter::Resolvers::Aix::FfiHelper).to receive(:read_interfaces).and_return(ffi_interfaces)
3636 end
3737
3838 before do
39 allow(Facter::Core::Execution).to receive(:execute).with('lslv -L hd5', logger: logger_spy)
40 .and_return(load_fixture('lslv_output').read)
41 allow(Facter::Core::Execution).to receive(:execute).with('lslv -L hd6', logger: logger_spy)
42 .and_return('')
39 allow(Facter::Core::Execution).to receive(:execute)
40 .with('lslv -L hd5', { logger: logger_spy })
41 .and_return(load_fixture('lslv_output').read)
42 allow(Facter::Core::Execution).to receive(:execute)
43 .with('lslv -L hd6', { logger: logger_spy })
44 .and_return('')
4345 end
4446
4547 it 'returns partitions informations' do
1717 context 'when augparse is installed' do
1818 before do
1919 allow(Facter::Core::Execution).to receive(:execute)
20 .with('augparse --version 2>&1', logger: log_spy)
20 .with('augparse --version 2>&1', { logger: log_spy })
2121 .and_return('augparse 1.12.0 <http://augeas.net/>')
2222 end
2323
3131
3232 before do
3333 allow(Facter::Core::Execution).to receive(:execute)
34 .with('/opt/puppetlabs/puppet/bin/augparse --version 2>&1', logger: log_spy)
34 .with('/opt/puppetlabs/puppet/bin/augparse --version 2>&1', { logger: log_spy })
3535 .and_return('augparse 1.12.0 <http://augeas.net/>')
3636 end
3737
4343 context 'when augparse is not installed' do
4444 before do
4545 allow(Facter::Core::Execution).to receive(:execute)
46 .with('augparse --version 2>&1', logger: log_spy)
46 .with('augparse --version 2>&1', { logger: log_spy })
4747 .and_return('sh: augparse: command not found')
4848 end
4949
7575 .with("/sys/block/#{disk}#{value}", nil).and_return(values[:vendor])
7676 when 'false'
7777 allow(Facter::Core::Execution).to receive(:execute)
78 .with("lsblk -dn -o #{fact} /dev/#{disk}", on_fail: '', timeout: 1)
78 .with("lsblk -dn -o #{fact} /dev/#{disk}", { on_fail: '', timeout: 1 })
7979 .and_return(values[fact])
8080 end
8181 end
144144 next unless value == 'false'
145145
146146 allow(Facter::Core::Execution).to receive(:execute)
147 .with("lsblk -dn -o #{fact} /dev/#{disk}", on_fail: '', timeout: 1)
147 .with("lsblk -dn -o #{fact} /dev/#{disk}", { on_fail: '', timeout: 1 })
148148 .and_return('')
149149 end
150150 end
55
66 before do
77 allow(Facter::Core::Execution).to receive(:execute)
8 .with('dmidecode', logger: instance_of(Facter::Log)).and_return(command_output)
8 .with('dmidecode', { logger: instance_of(Facter::Log) }).and_return(command_output)
99 end
1010
1111 after { dmidecode.invalidate_cache }
44
55 before do
66 allow(Facter::Core::Execution).to receive(:execute)
7 .with('/bin/freebsd-version -k', logger: freebsd_version.log)
7 .with('/bin/freebsd-version -k', { logger: freebsd_version.log })
88 .and_return("13.0-CURRENT\n")
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('/bin/freebsd-version -ru', logger: freebsd_version.log)
10 .with('/bin/freebsd-version -ru', { logger: freebsd_version.log })
1111 .and_return("12.1-RELEASE-p3\n12.0-STABLE\n")
1212 end
1313
1212 before do
1313 swap_memory.instance_variable_set(:@log, log_spy)
1414 allow(Facter::Core::Execution).to receive(:execute)
15 .with('swapinfo -k', logger: log_spy)
15 .with('swapinfo -k', { logger: log_spy })
1616 .and_return(load_fixture('freebsd_swapinfo').read)
1717 end
1818
1515 .and_return(17_043_554_304)
1616
1717 allow(Facter::Core::Execution).to receive(:execute)
18 .with('vmstat -H --libxo json', logger: log_spy)
18 .with('vmstat -H --libxo json', { logger: log_spy })
1919 .and_return(load_fixture('freebsd_vmstat').read)
2020 end
2121
1414 before do
1515 allow(Facter::Core::Execution)
1616 .to receive(:execute)
17 .with('ps -o etime= -p "1"', logger: log_spy)
17 .with('ps -o etime= -p "1"', { logger: log_spy })
1818 .and_return('20')
1919
2020 allow(Facter::Util::Resolvers::UptimeHelper)
4444 before do
4545 allow(Facter::Core::Execution)
4646 .to receive(:execute)
47 .with('ps -o etime= -p "1"', logger: log_spy)
47 .with('ps -o etime= -p "1"', { logger: log_spy })
4848 .and_return('10:20')
4949
5050 allow(Facter::Util::Resolvers::UptimeHelper)
7474 before do
7575 allow(Facter::Core::Execution)
7676 .to receive(:execute)
77 .with('ps -o etime= -p "1"', logger: log_spy)
77 .with('ps -o etime= -p "1"', { logger: log_spy })
7878 .and_return('3:10:20')
7979
8080 allow(Facter::Util::Resolvers::UptimeHelper)
104104 before do
105105 allow(Facter::Core::Execution)
106106 .to receive(:execute)
107 .with('ps -o etime= -p "1"', logger: log_spy)
107 .with('ps -o etime= -p "1"', { logger: log_spy })
108108 .and_return('1-3:10:20')
109109
110110 allow(Facter::Util::Resolvers::UptimeHelper)
134134 before do
135135 allow(Facter::Core::Execution)
136136 .to receive(:execute)
137 .with('ps -o etime= -p "1"', logger: log_spy)
137 .with('ps -o etime= -p "1"', { logger: log_spy })
138138 .and_return('2-3:10:20')
139139
140140 allow(Facter::Util::Resolvers::UptimeHelper)
44 Facter::Resolvers::Linux::Lscpu.instance_variable_set(:@log, log_spy)
55 allow(Facter::Core::Execution)
66 .to receive(:execute)
7 .with("lscpu | grep -e 'Thread(s)' -e 'Core(s)'", logger: log_spy)
7 .with("lscpu | grep -e 'Thread(s)' -e 'Core(s)'", { logger: log_spy })
88 .and_return(lscpu_output)
99 end
1010
88 before do
99 networking_linux.instance_variable_set(:@log, log_spy)
1010 allow(Facter::Core::Execution).to receive(:execute)
11 .with('ip link show', logger: log_spy).and_return(load_fixture('ip_link_show').read)
11 .with('ip link show', { logger: log_spy }).and_return(load_fixture('ip_link_show').read)
1212 allow(Facter::Util::Linux::SocketParser).to receive(:retrieve_interfaces)
1313 .with(log_spy).and_return(socket_interfaces)
1414 allow(Facter::Util::Linux::Dhcp).to receive(:dhcp).with('lo', '1', log_spy).and_return('10.32.22.9')
77 before do
88 lpar_resolver.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('/usr/bin/lparstat -i', logger: log_spy)
10 .with('/usr/bin/lparstat -i', { logger: log_spy })
1111 .and_return(load_fixture('lparstat_i').read)
1212 lpar_resolver.invalidate_cache
1313 end
66
77 before do
88 lspci_resolver.instance_variable_set(:@log, log_spy)
9 allow(Facter::Core::Execution).to receive(:execute).with('lspci', logger: log_spy).and_return(output)
9 allow(Facter::Core::Execution).to receive(:execute)
10 .with('lspci', { logger: log_spy }).and_return(output)
1011 end
1112
1213 after do
88 before do
99 dmi_resolver.instance_variable_set(:@log, log_spy)
1010 allow(Facter::Core::Execution).to receive(:execute)
11 .with('sysctl -n hw.model', logger: log_spy)
11 .with('sysctl -n hw.model', { logger: log_spy })
1212 .and_return(macosx_model)
1313 end
1414
66
77 before do
88 filesystems_resolver.instance_variable_set(:@log, log_spy)
9 allow(Facter::Core::Execution).to receive(:execute).with('mount', logger: log_spy)
10 .and_return(load_fixture('macosx_filesystems').read)
9 allow(Facter::Core::Execution).to receive(:execute)
10 .with('mount', { logger: log_spy })
11 .and_return(load_fixture('macosx_filesystems').read)
1112 end
1213
1314 describe '#call_the_resolver' do
88 before do
99 load_averages.instance_variable_set(:@log, log_spy)
1010 allow(Facter::Core::Execution).to receive(:execute)
11 .with('sysctl -n vm.loadavg', logger: log_spy)
11 .with('sysctl -n vm.loadavg', { logger: log_spy })
1212 .and_return('{ 0.00 0.03 0.03 }')
1313 end
1414
1818
1919 allow(Facter::Core::Execution)
2020 .to receive(:execute)
21 .with(query_string, logger: log_spy)
21 .with(query_string, { logger: log_spy })
2222 .and_return(output)
2323 end
2424
1212 before do
1313 swap_memory.instance_variable_set(:@log, log_spy)
1414 allow(Facter::Core::Execution).to receive(:execute)
15 .with('sysctl -n vm.swapusage', logger: log_spy)
15 .with('sysctl -n vm.swapusage', { logger: log_spy })
1616 .and_return('total = 3072.00M used = 1422.75M free = 1649.25M (encrypted)')
1717 end
1818
1111 before do
1212 system_memory.instance_variable_set(:@log, log_spy)
1313 allow(Facter::Core::Execution).to receive(:execute)
14 .with('sysctl -n hw.memsize', logger: log_spy)
14 .with('sysctl -n hw.memsize', { logger: log_spy })
1515 .and_return('34359738368')
1616
1717 allow(Facter::Core::Execution).to receive(:execute)
18 .with('vm_stat', logger: log_spy)
18 .with('vm_stat', { logger: log_spy })
1919 .and_return(load_fixture('vm_stat').read)
2020 end
2121
139139 .with('/proc/cmdline')
140140 .and_return(load_fixture('cmdline_root_device_partuuid').read)
141141 allow(Facter::Core::Execution).to receive(:execute)
142 .with('blkid', logger: log)
142 .with('blkid', { logger: log })
143143 .and_return(load_fixture('blkid_output_root_has_partuuid').read)
144144 Facter::Resolvers::Mountpoints.instance_variable_set(:@log, log)
145145 end
153153 context 'when blkid command is not available' do
154154 before do
155155 allow(Facter::Core::Execution).to receive(:execute)
156 .with('blkid', logger: log)
156 .with('blkid', { logger: log })
157157 .and_return('blkid: command not found')
158158 Facter::Resolvers::Mountpoints.instance_variable_set(:@log, log)
159159 end
1010 allow(Facter::Util::Resolvers::Networking::PrimaryInterface)
1111 .to receive(:read_from_route)
1212 .and_return(primary)
13 allow(Facter::Core::Execution).to receive(:execute).with('ifconfig -a', logger: log_spy).and_return(interfaces)
1413 allow(Facter::Core::Execution)
15 .to receive(:execute).with('ipconfig getoption en0 server_identifier', logger: log_spy).and_return(dhcp)
14 .to receive(:execute).with('ifconfig -a', { logger: log_spy }).and_return(interfaces)
1615 allow(Facter::Core::Execution)
17 .to receive(:execute).with('ipconfig getoption en0.1 server_identifier', logger: log_spy).and_return(dhcp)
16 .to receive(:execute).with('ipconfig getoption en0 server_identifier', { logger: log_spy }).and_return(dhcp)
1817 allow(Facter::Core::Execution)
19 .to receive(:execute).with('ipconfig getoption llw0 server_identifier', logger: log_spy).and_return('')
18 .to receive(:execute).with('ipconfig getoption en0.1 server_identifier', { logger: log_spy }).and_return(dhcp)
2019 allow(Facter::Core::Execution)
21 .to receive(:execute).with('ipconfig getoption awdl0 server_identifier', logger: log_spy).and_return(dhcp)
20 .to receive(:execute).with('ipconfig getoption llw0 server_identifier', { logger: log_spy }).and_return('')
21 allow(Facter::Core::Execution)
22 .to receive(:execute).with('ipconfig getoption awdl0 server_identifier', { logger: log_spy }).and_return(dhcp)
2223 end
2324
2425 after do
3939 allow(Facter::Core::Execution).to receive(:which)
4040 .with('blkid').and_return('/usr/bin/blkid')
4141 allow(Facter::Core::Execution).to receive(:execute)
42 .with('blkid', logger: logger).and_return(load_fixture('blkid_output').read)
42 .with('blkid', { logger: logger }).and_return(load_fixture('blkid_output').read)
4343 allow(Facter::Core::Execution).to receive(:which)
4444 .with('lsblk').and_return('/usr/bin/lsblk')
4545 allow(Facter::Core::Execution).to receive(:execute)
46 .with('lsblk -fp', logger: logger).and_return(load_fixture('lsblk_output').read)
46 .with('lsblk -fp', { logger: logger }).and_return(load_fixture('lsblk_output').read)
4747 end
4848
4949 context 'when block has a device subdir' do
1111 before do
1212 selinux_resolver.instance_variable_set(:@log, log_spy)
1313 allow(Facter::Core::Execution).to receive(:execute)
14 .with('cat /proc/self/mounts', logger: log_spy)
14 .with('cat /proc/self/mounts', { logger: log_spy })
1515 .and_return(load_fixture(file).read)
1616 end
1717
66 allow(File).to receive(:executable?).with('/usr/bin/kstat').and_return(status)
77 allow(Facter::Core::Execution)
88 .to receive(:execute)
9 .with('/usr/bin/kstat sderr', logger: resolver.log)
9 .with('/usr/bin/kstat sderr', { logger: resolver.log })
1010 .and_return(output)
1111 end
1212
99 resolver.instance_variable_set(:@log, log_spy)
1010 allow(File).to receive(:executable?).with('/usr/sbin/prtdiag').and_return(true)
1111 allow(Facter::Core::Execution).to receive(:execute)
12 .with('/usr/sbin/prtdiag', logger: log_spy)
12 .with('/usr/sbin/prtdiag', { logger: log_spy })
1313 .and_return(load_fixture('prtdiag').read)
1414 allow(File).to receive(:executable?).with('/usr/sbin/sneep').and_return(true)
1515 allow(Facter::Core::Execution).to receive(:execute)
16 .with('/usr/sbin/sneep', logger: log_spy).and_return('random_string')
16 .with('/usr/sbin/sneep', { logger: log_spy }).and_return('random_string')
1717 end
1818
1919 after do
99 resolver.instance_variable_set(:@log, log_spy)
1010 allow(File).to receive(:executable?).with('/usr/sbin/smbios').and_return(true)
1111 allow(Facter::Core::Execution).to receive(:execute)
12 .with('/usr/sbin/smbios -t SMB_TYPE_BIOS', logger: log_spy)
12 .with('/usr/sbin/smbios -t SMB_TYPE_BIOS', { logger: log_spy })
1313 .and_return(load_fixture('smbios_bios').read)
1414 allow(Facter::Core::Execution).to receive(:execute)
15 .with('/usr/sbin/smbios -t SMB_TYPE_SYSTEM', logger: log_spy)
15 .with('/usr/sbin/smbios -t SMB_TYPE_SYSTEM', { logger: log_spy })
1616 .and_return(load_fixture('smbios_system').read)
1717 allow(Facter::Core::Execution).to receive(:execute)
18 .with('/usr/sbin/smbios -t SMB_TYPE_CHASSIS', logger: log_spy)
18 .with('/usr/sbin/smbios -t SMB_TYPE_CHASSIS', { logger: log_spy })
1919 .and_return(load_fixture('smbios_chassis').read)
2020 end
2121
99 filesystems_resolver.instance_variable_set(:@log, log_spy)
1010 allow(File).to receive(:executable?).with('/usr/sbin/sysdef').and_return(true)
1111 allow(Facter::Core::Execution).to receive(:execute)
12 .with('/usr/sbin/sysdef', logger: log_spy)
12 .with('/usr/sbin/sysdef', { logger: log_spy })
1313 .and_return(load_fixture('solaris_filesystems').read)
1414 end
1515
1111
1212 before do
1313 ipaddress.instance_variable_set(:@log, log)
14 allow(Facter::Core::Execution).to receive(:execute).with('route -n get default | grep interface',
15 logger: log).and_return(route)
14 allow(Facter::Core::Execution).to receive(:execute)
15 .with('route -n get default | grep interface', { logger: log })
16 .and_return(route)
1617 end
1718
1819 context 'when returns ip' do
2021 let(:ifconfig) { load_fixture('solaris_ifconfig').read }
2122
2223 before do
23 allow(Facter::Core::Execution).to receive(:execute).with('ifconfig net0', logger: log).and_return(ifconfig)
24 allow(Facter::Core::Execution).to receive(:execute)
25 .with('ifconfig net0', { logger: log })
26 .and_return(ifconfig)
2427 end
2528
2629 it 'detects ipadress' do
88 resolver.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution)
1010 .to receive(:execute)
11 .with('/usr/sbin/virtinfo -a -p', logger: log_spy)
11 .with('/usr/sbin/virtinfo -a -p', { logger: log_spy })
1212 .and_return(output)
1313 end
1414
88 resolver.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution)
1010 .to receive(:execute)
11 .with('/usr/bin/kstat -m unix -n system_pages', logger: log_spy)
11 .with('/usr/bin/kstat -m unix -n system_pages', { logger: log_spy })
1212 .and_return(kstat_output)
1313 allow(Facter::Core::Execution)
1414 .to receive(:execute)
15 .with('pagesize', logger: log_spy)
15 .with('pagesize', { logger: log_spy })
1616 .and_return(pagesize)
1717 allow(Facter::Core::Execution)
1818 .to receive(:execute)
19 .with('/usr/sbin/swap -l', logger: log_spy)
19 .with('/usr/sbin/swap -l', { logger: log_spy })
2020 .and_return(swap_output)
2121 end
2222
66 allow(File).to receive(:executable?).with('/usr/bin/kstat').and_return(status)
77 allow(Facter::Core::Execution)
88 .to receive(:execute)
9 .with('/usr/bin/kstat -m cpu_info', logger: resolver.log)
9 .with('/usr/bin/kstat -m cpu_info', { logger: resolver.log })
1010 .and_return(output)
1111 end
1212
1111 .with('/bin/zonename')
1212 .and_return(true)
1313 allow(Facter::Core::Execution).to receive(:execute)
14 .with('/bin/zonename', logger: log_spy)
14 .with('/bin/zonename', { logger: log_spy })
1515 .and_return(zone_name_output)
1616 end
1717
77 before do
88 solaris_zone.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('/usr/sbin/zoneadm list -cp', logger: log_spy)
10 .with('/usr/sbin/zoneadm list -cp', { logger: log_spy })
1111 .and_return(output)
1212 end
1313
77 before do
88 sw_vers.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('sw_vers', logger: log_spy)
10 .with('sw_vers', { logger: log_spy })
1111 .and_return("ProductName:\tMac OS X\nProductVersion:\t10.14.1\nBuildVersion:\t18B75\n")
1212 end
1313
1212 uname -p &&
1313 uname -r &&
1414 uname -s &&
15 uname -v', logger: log_spy)
15 uname -v', { logger: log_spy })
1616 .and_return('x86_64
1717 wifi.tsr.corp.puppet.net
1818 i386
1010
1111 before do
1212 virt_what_resolver.instance_variable_set(:@log, log_spy)
13 allow(Facter::Core::Execution).to receive(:execute).with('virt-what', logger: log_spy).and_return(content)
13 allow(Facter::Core::Execution).to receive(:execute).with('virt-what', { logger: log_spy }).and_return(content)
1414 end
1515
1616 context 'when virt-what fails' do
66
77 before do
88 vmware_resolver.instance_variable_set(:@log, log_spy)
9 allow(Facter::Core::Execution).to receive(:execute).with('vmware -v', logger: log_spy).and_return(output)
9 allow(Facter::Core::Execution).to receive(:execute).with('vmware -v', { logger: log_spy }).and_return(output)
1010 end
1111
1212 after do
55 before do
66 Facter::Resolvers::Wpar.instance_variable_set(:@log, log_spy)
77 allow(Facter::Core::Execution).to receive(:execute)
8 .with('/usr/bin/lparstat -W', logger: log_spy)
8 .with('/usr/bin/lparstat -W', { logger: log_spy })
99 .and_return(open3_result)
1010 end
1111
1515 allow(File).to receive(:exist?).with('/usr/lib/xen-common/bin/xen-toolstack').and_return(false)
1616 allow(File).to receive(:exist?).with('/usr/sbin/xl').and_return(false)
1717 allow(File).to receive(:exist?).with('/usr/sbin/xm').and_return(true)
18 allow(Facter::Core::Execution).to receive(:execute).with('/usr/sbin/xm list', logger: log_spy).and_return(domains)
18 allow(Facter::Core::Execution).to receive(:execute)
19 .with('/usr/sbin/xm list', { logger: log_spy }).and_return(domains)
1920
2021 xen_resolver.invalidate_cache
2122 end
77 before do
88 zfs_resolver.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('zfs upgrade -v', logger: log_spy)
10 .with('zfs upgrade -v', { logger: log_spy })
1111 .and_return(output)
1212 end
1313
77 before do
88 zpool_resolver.instance_variable_set(:@log, log_spy)
99 allow(Facter::Core::Execution).to receive(:execute)
10 .with('zpool upgrade -v', logger: log_spy)
10 .with('zpool upgrade -v', { logger: log_spy })
1111 .and_return(output)
1212 end
1313
1111 it 'creates a query' do
1212 odm_query.equals('name', '12345')
1313
14 expect(Facter::Core::Execution).to receive(:execute).with("odmget -q \"name='12345'\" CuAt", logger: log_spy)
14 expect(Facter::Core::Execution).to receive(:execute).with("odmget -q \"name='12345'\" CuAt", { logger: log_spy })
1515 odm_query.execute
1616 end
1717
1919 odm_query.equals('field1', 'value').like('field2', 'value*')
2020
2121 expect(Facter::Core::Execution).to receive(:execute)
22 .with("odmget -q \"field1='value' AND field2 like 'value*'\" CuAt", logger: log_spy)
22 .with("odmget -q \"field1='value' AND field2 like 'value*'\" CuAt", { logger: log_spy })
2323 odm_query.execute
2424 end
2525 end
1616 it 'returns the correct result' do
1717 allow(Facter::Core::Execution)
1818 .to receive(:execute)
19 .with(uptime_proc_file_cmd, logger: log_spy)
19 .with(uptime_proc_file_cmd, { logger: log_spy })
2020 .and_return(proc_uptime_value)
2121
2222 expect(Facter::Util::Facts::UptimeParser.uptime_seconds_unix).to eq(2672)
3535
3636 allow(Facter::Core::Execution)
3737 .to receive(:execute)
38 .with(uptime_proc_file_cmd, logger: log_spy)
38 .with(uptime_proc_file_cmd, { logger: log_spy })
3939 .and_return('')
4040
4141 allow(Facter::Core::Execution)
4242 .to receive(:execute)
43 .with(kern_boottime_cmd, logger: log_spy)
43 .with(kern_boottime_cmd, { logger: log_spy })
4444 .and_return(kern_boottime_value)
4545
4646 expect(Facter::Util::Facts::UptimeParser.uptime_seconds_unix).to eq(60)
5151 before do
5252 allow(Facter::Core::Execution)
5353 .to receive(:execute)
54 .with(uptime_proc_file_cmd, logger: log_spy)
54 .with(uptime_proc_file_cmd, { logger: log_spy })
5555 .and_return('')
5656
5757 allow(Facter::Core::Execution)
5858 .to receive(:execute)
59 .with(kern_boottime_cmd, logger: log_spy)
59 .with(kern_boottime_cmd, { logger: log_spy })
6060 .and_return('')
6161 end
6262
6464 it 'returns the correct result' do
6565 allow(Facter::Core::Execution)
6666 .to receive(:execute)
67 .with(uptime_cmd, logger: log_spy)
67 .with(uptime_cmd, { logger: log_spy })
6868 .and_return(cmd_output)
6969
7070 expect(Facter::Util::Facts::UptimeParser.uptime_seconds_unix).to eq(result)
9797 end
9898
9999 describe '#dir_children' do
100 context 'with ruby < 2.5' do
101 before do
102 allow(Dir).to receive(:entries).with(File.dirname(path)).and_return(entries + ['.', '..'])
103 stub_const('RUBY_VERSION', '2.4.5')
104 end
105
106 it 'delegates to Dir.entries' do
107 file_helper.dir_children(File.dirname(path))
108 expect(Dir).to have_received(:entries)
109 end
110
111 it 'correctly resolves entries' do
112 expect(file_helper.dir_children(File.dirname(path))).to eq(entries)
113 end
100 before do
101 allow(Dir).to receive(:children).with(File.dirname(path)).and_return(entries)
102 stub_const('RUBY_VERSION', '2.5.9')
114103 end
115104
116 context 'with ruby >= 2.5', if: RUBY_VERSION.to_f >= 2.5 do
117 before do
118 allow(Dir).to receive(:children).with(File.dirname(path)).and_return(entries)
119 stub_const('RUBY_VERSION', '2.5.1')
120 end
105 it 'delegates to Dir.children' do
106 file_helper.dir_children(File.dirname(path))
107 expect(Dir).to have_received(:children)
108 end
121109
122 it 'delegates to Dir.children' do
123 file_helper.dir_children(File.dirname(path))
124 expect(Dir).to have_received(:children)
125 end
126
127 it 'correctly resolves entries' do
128 expect(file_helper.dir_children(File.dirname(path))).to eq(entries)
129 end
110 it 'correctly resolves entries' do
111 expect(file_helper.dir_children(File.dirname(path))).to eq(entries)
130112 end
131113 end
132114
7070 allow(Facter::Core::Execution).to receive(:which)
7171 .with('dhcpcd').and_return('/usr/bin/dhcpcd')
7272 allow(Facter::Core::Execution).to receive(:execute)
73 .with('/usr/bin/dhcpcd -U ens160', logger: log_spy).and_return(load_fixture('dhcpcd').read)
73 .with('/usr/bin/dhcpcd -U ens160', { logger: log_spy }).and_return(load_fixture('dhcpcd').read)
7474
7575 dhcp_search.instance_eval { @dhcpcd_command = nil }
7676 end
88 context 'when ip route show finds an IP, Socket lib did not retrieve' do
99 before do
1010 allow(Facter::Core::Execution).to receive(:execute)
11 .with('ip route show', logger: log_spy).and_return(load_fixture('ip_route_show').read)
11 .with('ip route show', { logger: log_spy }).and_return(load_fixture('ip_route_show').read)
1212 allow(Facter::Core::Execution).to receive(:execute)
13 .with('ip -6 route show', logger: log_spy).and_return(load_fixture('ip_-6_route_show').read)
13 .with('ip -6 route show', { logger: log_spy }).and_return(load_fixture('ip_-6_route_show').read)
1414 end
1515
1616 it 'returns the ipv4 info' do
2626 allow(Socket).to receive(:getifaddrs).and_return(ifaddrs)
2727 allow(Socket).to receive(:const_defined?).with(:PF_LINK).and_return(true)
2828 allow(Facter::Core::Execution).to receive(:execute)
29 .with('ip -o link show', logger: log_spy).and_return(load_fixture('ip_link_show_all').read)
29 .with('ip -o link show', { logger: log_spy }).and_return(load_fixture('ip_link_show_all').read)
3030 end
3131
3232 let(:result) do
232232 expect(networking_facts).to include(expected)
233233 end
234234
235 context 'when there is a global ip address' do
235 context 'when there is a link-local ip address' do
236236 let(:networking_facts) do
237237 {
238238 interfaces:
250250
251251 it 'expands the correct binding' do
252252 expected = {
253 ip6: 'fe87::1',
253 ip6: '::1',
254 netmask6: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
255 network6: '::1',
256 scope6: 'host'
257 }
258
259 networking_helper.expand_main_bindings(networking_facts)
260
261 expect(networking_facts[:interfaces]['lo0']).to include(expected)
262 end
263 end
264
265 context 'when there is a unique local ip address' do
266 let(:networking_facts) do
267 {
268 interfaces:
269 { 'lo0' =>
270 { mtu: 16_384,
271 bindings6:
272 [{ address: '::1',
273 netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
274 network: '::1' },
275 { address: 'fdfc:f496:4c6f:0:b0e3:7bff:fe3a:6baf',
276 netmask: 'ffff:ffff:ffff:ffff::',
277 network: 'fdfc:f496:4c6f:0::' }] } }
278 }
279 end
280
281 it 'expands the correct binding' do
282 expected = {
283 ip6: '::1',
284 netmask6: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
285 network6: '::1',
286 scope6: 'host'
287 }
288
289 networking_helper.expand_main_bindings(networking_facts)
290
291 expect(networking_facts[:interfaces]['lo0']).to include(expected)
292 end
293 end
294
295 context 'when there is a global ip address' do
296 let(:networking_facts) do
297 {
298 interfaces:
299 { 'lo0' =>
300 { mtu: 16_384,
301 bindings6:
302 [{ address: '::1',
303 netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
304 network: '::1' },
305 { address: '2001:0DB8::1',
306 netmask: 'ffff:ffff:ffff:ffff::',
307 network: '2001:0DB8::' }] } }
308 }
309 end
310
311 it 'expands the correct binding' do
312 expected = {
313 ip6: '2001:0DB8::1',
254314 netmask6: 'ffff:ffff:ffff:ffff::',
255 network6: 'fe87::',
256 scope6: 'link'
315 network6: '2001:0DB8::',
316 scope6: 'global'
257317 }
258318
259319 networking_helper.expand_main_bindings(networking_facts)
44 def keys; end
55
66 def close; end
7
8 module API
9 end
710
811 class HKEY_LOCAL_MACHINE
912 def self.open(*); end