diff --git a/lib/facts/bsd/os/family.rb b/lib/facts/bsd/os/family.rb new file mode 100644 index 000000000..c4f54b411 --- /dev/null +++ b/lib/facts/bsd/os/family.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Facts + module Bsd + module Os + class Family + FACT_NAME = 'os.family' + ALIASES = 'osfamily' + + def call_the_resolver + fact_value = Facter::Resolvers::Uname.resolve(:kernelname) + + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end +end diff --git a/spec/facter/facts/bsd/os/family_spec.rb b/spec/facter/facts/bsd/os/family_spec.rb new file mode 100644 index 000000000..ac6ab8033 --- /dev/null +++ b/spec/facter/facts/bsd/os/family_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Bsd::Os::Family do + describe '#call_the_resolver' do + subject(:fact) { Facts::Bsd::Os::Family.new } + + let(:value) { 'FreeBSD' } + + before do + allow(Facter::Resolvers::Uname).to receive(:resolve).with(:kernelname).and_return(value) + end + + it 'calls Facter::Resolvers::Uname' do + fact.call_the_resolver + expect(Facter::Resolvers::Uname).to have_received(:resolve).with(:kernelname) + end + + it 'returns os family fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'os.family', value: value), + an_object_having_attributes(name: 'osfamily', value: value, type: :legacy)) + end + end +end