Skip to content

Commit

Permalink
Merge pull request #2052 from sebastian-miclea/FACT-2752
Browse files Browse the repository at this point in the history
(FACT-2752) Added serialnumber fact for AIX
  • Loading branch information
oanatmaria authored Aug 31, 2020
2 parents 34cc10a + 8e9bb92 commit 16911ea
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 0 deletions.
20 changes: 20 additions & 0 deletions lib/facter/facts/aix/serialnumber.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# frozen_string_literal: true

module Facts
module Aix
class Serialnumber
FACT_NAME = 'serialnumber'
TYPE = :legacy

def call_the_resolver
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
end

private

def fact_value
Facter::Resolvers::Aix::Serialnumber.resolve(:serialnumber)
end
end
end
end
37 changes: 37 additions & 0 deletions lib/facter/resolvers/aix/serialnumber.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# frozen_string_literal: true

module Facter
module Resolvers
module Aix
class Serialnumber < BaseResolver
@semaphore = Mutex.new
@fact_list ||= {}

class << self
private

def post_resolve(fact_name)
@fact_list.fetch(fact_name) { read_serialnumber(fact_name) }
end

def read_serialnumber(fact_name)
odmquery = Facter::ODMQuery.new
odmquery
.equals('name', 'sys0')
.equals('attribute', 'systemid')
result = odmquery.execute

result.each_line do |line|
if line.include?('value')
@fact_list[:serialnumber] = line.split('=')[1].strip.delete('\"')[6..-1]
break
end
end

@fact_list[fact_name]
end
end
end
end
end
end
23 changes: 23 additions & 0 deletions spec/facter/facts/aix/serialnumber_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

describe Facts::Aix::Serialnumber do
describe '#call_the_resolver' do
subject(:fact) { Facts::Aix::Serialnumber.new }

let(:value) { '21684EW' }

before do
allow(Facter::Resolvers::Aix::Serialnumber).to receive(:resolve).with(:serialnumber).and_return(value)
end

it 'calls Facter::Resolvers::Aix::Serialnumber' do
fact.call_the_resolver
expect(Facter::Resolvers::Aix::Serialnumber).to have_received(:resolve).with(:serialnumber)
end

it 'returns serialnumber fact' do
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
have_attributes(name: 'serialnumber', value: value, type: :legacy)
end
end
end
42 changes: 42 additions & 0 deletions spec/facter/resolvers/aix/serialnumber_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# frozen_string_literal: true

describe Facter::Resolvers::Aix::Serialnumber do
describe '#resolve' do
before do
odm = instance_spy('Facter::ODMQuery')

allow(Facter::ODMQuery).to receive(:new).and_return(odm)
allow(odm).to receive(:equals).with('name', 'sys0').and_return(odm)
allow(odm).to receive(:equals).with('attribute', 'systemid')
allow(odm).to receive(:execute).and_return(result)
end

after do
Facter::Resolvers::Aix::Serialnumber.invalidate_cache
end

context 'when line contains value' do
let(:result) { 'value = "IBM,0221684EW"' }

it 'detects serialnumber' do
expect(Facter::Resolvers::Aix::Serialnumber.resolve(:serialnumber)).to eql('21684EW')
end
end

context 'when line does not include value key' do
let(:result) { 'test = IBM,0221684EW' }

it 'detects serialnumber as nil' do
expect(Facter::Resolvers::Aix::Serialnumber.resolve(:serialnumber)).to be(nil)
end
end

context 'when fails to retrieve fact' do
let(:result) { nil }

it 'detects serialnumber as nil' do
expect(Facter::Resolvers::Aix::Serialnumber.resolve(:serialnumber)).to be(nil)
end
end
end
end

0 comments on commit 16911ea

Please sign in to comment.