diff --git a/lib/facter/facts/freebsd/memory/swap/available.rb b/lib/facter/facts/freebsd/memory/swap/available.rb new file mode 100644 index 0000000000..6386af533a --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/available.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class Available + FACT_NAME = 'memory.swap.available' + ALIASES = 'swapfree' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:available_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/available_bytes.rb b/lib/facter/facts/freebsd/memory/swap/available_bytes.rb new file mode 100644 index 0000000000..b62919930a --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/available_bytes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class AvailableBytes + FACT_NAME = 'memory.swap.available_bytes' + ALIASES = 'swapfree_mb' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:available_bytes) + [Facter::ResolvedFact.new(FACT_NAME, fact_value), + Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/capacity.rb b/lib/facter/facts/freebsd/memory/swap/capacity.rb new file mode 100644 index 0000000000..3a1621c730 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/capacity.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class Capacity + FACT_NAME = 'memory.swap.capacity' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:capacity) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/encrypted.rb b/lib/facter/facts/freebsd/memory/swap/encrypted.rb new file mode 100644 index 0000000000..e3f9de7ba0 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/encrypted.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class Encrypted + FACT_NAME = 'memory.swap.encrypted' + ALIASES = 'swapencrypted' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:encrypted) + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/total.rb b/lib/facter/facts/freebsd/memory/swap/total.rb new file mode 100644 index 0000000000..e4986b38ca --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/total.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class Total + FACT_NAME = 'memory.swap.total' + ALIASES = 'swapsize' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:total_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/total_bytes.rb b/lib/facter/facts/freebsd/memory/swap/total_bytes.rb new file mode 100644 index 0000000000..2e8f3fedec --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/total_bytes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class TotalBytes + FACT_NAME = 'memory.swap.total_bytes' + ALIASES = 'swapsize_mb' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:total_bytes) + [Facter::ResolvedFact.new(FACT_NAME, fact_value), + Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/used.rb b/lib/facter/facts/freebsd/memory/swap/used.rb new file mode 100644 index 0000000000..0366259d67 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/used.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class Used + FACT_NAME = 'memory.swap.used' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:used_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/swap/used_bytes.rb b/lib/facter/facts/freebsd/memory/swap/used_bytes.rb new file mode 100644 index 0000000000..16a70db92e --- /dev/null +++ b/lib/facter/facts/freebsd/memory/swap/used_bytes.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module Swap + class UsedBytes + FACT_NAME = 'memory.swap.used_bytes' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SwapMemory.resolve(:used_bytes) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/available.rb b/lib/facter/facts/freebsd/memory/system/available.rb new file mode 100644 index 0000000000..b33dc0fe68 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/available.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class Available + FACT_NAME = 'memory.system.available' + ALIASES = 'memoryfree' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:available_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/available_bytes.rb b/lib/facter/facts/freebsd/memory/system/available_bytes.rb new file mode 100644 index 0000000000..a5606e6a00 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/available_bytes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class AvailableBytes + FACT_NAME = 'memory.system.available_bytes' + ALIASES = 'memoryfree_mb' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:available_bytes) + [Facter::ResolvedFact.new(FACT_NAME, fact_value), + Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/capacity.rb b/lib/facter/facts/freebsd/memory/system/capacity.rb new file mode 100644 index 0000000000..e94343cbcf --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/capacity.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class Capacity + FACT_NAME = 'memory.system.capacity' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:capacity) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/total.rb b/lib/facter/facts/freebsd/memory/system/total.rb new file mode 100644 index 0000000000..abb6eae016 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/total.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class Total + FACT_NAME = 'memory.system.total' + ALIASES = 'memorysize' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:total_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/total_bytes.rb b/lib/facter/facts/freebsd/memory/system/total_bytes.rb new file mode 100644 index 0000000000..7bf52b1b71 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/total_bytes.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class TotalBytes + FACT_NAME = 'memory.system.total_bytes' + ALIASES = 'memorysize_mb' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:total_bytes) + [Facter::ResolvedFact.new(FACT_NAME, fact_value), + Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)] + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/used.rb b/lib/facter/facts/freebsd/memory/system/used.rb new file mode 100644 index 0000000000..14d8158a46 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/used.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class Used + FACT_NAME = 'memory.system.used' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:used_bytes) + fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value) + + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/facts/freebsd/memory/system/used_bytes.rb b/lib/facter/facts/freebsd/memory/system/used_bytes.rb new file mode 100644 index 0000000000..1c39e2ff41 --- /dev/null +++ b/lib/facter/facts/freebsd/memory/system/used_bytes.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Facts + module Freebsd + module Memory + module System + class UsedBytes + FACT_NAME = 'memory.system.used_bytes' + + def call_the_resolver + fact_value = Facter::Resolvers::Freebsd::SystemMemory.resolve(:used_bytes) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end + end + end +end diff --git a/lib/facter/resolvers/freebsd/swap_memory_resolver.rb b/lib/facter/resolvers/freebsd/swap_memory_resolver.rb new file mode 100644 index 0000000000..d7fcff2d24 --- /dev/null +++ b/lib/facter/resolvers/freebsd/swap_memory_resolver.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Facter + module Resolvers + module Freebsd + class SwapMemory < BaseResolver + @semaphore = Mutex.new + @fact_list ||= {} + class << self + private + + def post_resolve(fact_name) + @fact_list.fetch(fact_name) { read_swap_memory(fact_name) } + end + + def read_swap_memory(fact_name) # rubocop:disable Metrics/AbcSize + output = Facter::Core::Execution.execute('swapinfo -k', logger: log) + data = output.split("\n")[1..-1].map { |line| line.split(/\s+/) } + + unless data.empty? + @fact_list[:total_bytes] = kilobytes_to_bytes(data.map { |line| line[1].to_i }.inject(:+)) + @fact_list[:used_bytes] = kilobytes_to_bytes(data.map { |line| line[2].to_i }.inject(:+)) + @fact_list[:available_bytes] = kilobytes_to_bytes(data.map { |line| line[3].to_i }.inject(:+)) + @fact_list[:capacity] = FilesystemHelper.compute_capacity(@fact_list[:used_bytes], + @fact_list[:total_bytes]) + @fact_list[:encrypted] = data.map { |line| line[0].end_with?('.eli') }.all? + end + + @fact_list[fact_name] + end + + def kilobytes_to_bytes(quantity) + (quantity.to_f * 1024).to_i + end + end + end + end + end +end diff --git a/lib/facter/resolvers/freebsd/system_memory_resolver.rb b/lib/facter/resolvers/freebsd/system_memory_resolver.rb new file mode 100644 index 0000000000..a6c57177ea --- /dev/null +++ b/lib/facter/resolvers/freebsd/system_memory_resolver.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module Facter + module Resolvers + module Freebsd + class SystemMemory < BaseResolver + @semaphore = Mutex.new + @fact_list ||= {} + class << self + private + + def post_resolve(fact_name) + @fact_list.fetch(fact_name) { calculate_system_memory(fact_name) } + end + + def calculate_system_memory(fact_name) + read_total_memory_in_bytes + read_available_memory_in_bytes + + @fact_list[:used_bytes] = @fact_list[:total_bytes] - @fact_list[:available_bytes] + @fact_list[:capacity] = FilesystemHelper.compute_capacity(@fact_list[:used_bytes], @fact_list[:total_bytes]) + + @fact_list[fact_name] + end + + def read_available_memory_in_bytes + output = Facter::Core::Execution.execute('vmstat -H --libxo json', logger: log) + data = JSON.parse(output) + @fact_list[:available_bytes] = data['memory']['free-memory'] * 1024 + end + + def read_total_memory_in_bytes + require_relative 'ffi/ffi_helper' + + @fact_list[:total_bytes] = Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'hw.physmem') + end + end + end + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/available_bytes_spec.rb b/spec/facter/facts/freebsd/memory/swap/available_bytes_spec.rb new file mode 100644 index 0000000000..be2413bd9d --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/available_bytes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::AvailableBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::AvailableBytes.new } + + let(:value) { 1024 * 1024 } + let(:value_mb) { 1 } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:available_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:available_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.swap.available_bytes', value: value), + an_object_having_attributes(name: 'swapfree_mb', value: value_mb, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/available_spec.rb b/spec/facter/facts/freebsd/memory/swap/available_spec.rb new file mode 100644 index 0000000000..bfdd60d343 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/available_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::Available do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::Available.new } + + let(:value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:available_bytes).and_return(1024) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:available_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.swap.available', value: value), + an_object_having_attributes(name: 'swapfree', value: value, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/capacity_spec.rb b/spec/facter/facts/freebsd/memory/swap/capacity_spec.rb new file mode 100644 index 0000000000..04c62e3401 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/capacity_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::Capacity do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::Capacity.new } + + let(:value) { 1024 } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:capacity).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:capacity) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.swap.capacity', value: value) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/encrypted_spec.rb b/spec/facter/facts/freebsd/memory/swap/encrypted_spec.rb new file mode 100644 index 0000000000..5866640e0b --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/encrypted_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::Encrypted do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::Encrypted.new } + + let(:value) { true } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:encrypted).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:encrypted) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.swap.encrypted', value: value), + an_object_having_attributes(name: 'swapencrypted', value: value, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/total_bytes_spec.rb b/spec/facter/facts/freebsd/memory/swap/total_bytes_spec.rb new file mode 100644 index 0000000000..9771e16c54 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/total_bytes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::TotalBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::TotalBytes.new } + + let(:value) { 1024 * 1024 } + let(:value_mb) { 1 } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:total_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:total_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.swap.total_bytes', value: value), + an_object_having_attributes(name: 'swapsize_mb', value: value_mb, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/total_spec.rb b/spec/facter/facts/freebsd/memory/swap/total_spec.rb new file mode 100644 index 0000000000..ad7552d94f --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/total_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::Total do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::Total.new } + + let(:value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:total_bytes).and_return(1024) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:total_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.swap.total', value: value), + an_object_having_attributes(name: 'swapsize', value: value, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/used_bytes_spec.rb b/spec/facter/facts/freebsd/memory/swap/used_bytes_spec.rb new file mode 100644 index 0000000000..0f00543081 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/used_bytes_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::UsedBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::UsedBytes.new } + + let(:value) { 1024 } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:used_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:used_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.swap.used_bytes', value: value) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/swap/used_spec.rb b/spec/facter/facts/freebsd/memory/swap/used_spec.rb new file mode 100644 index 0000000000..05cd2b3da1 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/swap/used_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::Swap::Used do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::Swap::Used.new } + + let(:resolver_result) { 1024 } + let(:fact_value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SwapMemory).to receive(:resolve).with(:used_bytes).and_return(resolver_result) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SwapMemory).to have_received(:resolve).with(:used_bytes) + end + + it 'returns a memory.swap.used fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.swap.used', value: fact_value) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/available_bytes_spec.rb b/spec/facter/facts/freebsd/memory/system/available_bytes_spec.rb new file mode 100644 index 0000000000..3a061b5bd6 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/available_bytes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::AvailableBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::AvailableBytes.new } + + let(:value) { 1024 * 1024 } + let(:value_mb) { 1 } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:available_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:available_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.system.available_bytes', value: value), + an_object_having_attributes(name: 'memoryfree_mb', value: value_mb, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/available_spec.rb b/spec/facter/facts/freebsd/memory/system/available_spec.rb new file mode 100644 index 0000000000..9943996105 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/available_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::Available do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::Available.new } + + let(:value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:available_bytes).and_return(1024) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:available_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.system.available', value: value), + an_object_having_attributes(name: 'memoryfree', value: value, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/capacity_spec.rb b/spec/facter/facts/freebsd/memory/system/capacity_spec.rb new file mode 100644 index 0000000000..41873c4eda --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/capacity_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::Capacity do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::Capacity.new } + + let(:value) { '15.53%' } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:capacity).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:capacity) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.system.capacity', value: value) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/total_bytes_spec.rb b/spec/facter/facts/freebsd/memory/system/total_bytes_spec.rb new file mode 100644 index 0000000000..3129e38591 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/total_bytes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::TotalBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::TotalBytes.new } + + let(:value) { 1024 * 1024 } + let(:value_mb) { 1 } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:total_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:total_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.system.total_bytes', value: value), + an_object_having_attributes(name: 'memorysize_mb', value: value_mb, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/total_spec.rb b/spec/facter/facts/freebsd/memory/system/total_spec.rb new file mode 100644 index 0000000000..84660601a9 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/total_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::Total do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::Total.new } + + let(:value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:total_bytes).and_return(1024) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:total_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Array).and \ + contain_exactly(an_object_having_attributes(name: 'memory.system.total', value: value), + an_object_having_attributes(name: 'memorysize', value: value, type: :legacy)) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/used_bytes_spec.rb b/spec/facter/facts/freebsd/memory/system/used_bytes_spec.rb new file mode 100644 index 0000000000..7ca9065e85 --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/used_bytes_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::UsedBytes do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::UsedBytes.new } + + let(:value) { 1024 } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:used_bytes).and_return(value) + end + + it 'calls Facter::Resolvers::Freebsd::SystemMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:used_bytes) + end + + it 'returns a fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.system.used_bytes', value: value) + end + end +end diff --git a/spec/facter/facts/freebsd/memory/system/used_spec.rb b/spec/facter/facts/freebsd/memory/system/used_spec.rb new file mode 100644 index 0000000000..7091319abd --- /dev/null +++ b/spec/facter/facts/freebsd/memory/system/used_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +describe Facts::Freebsd::Memory::System::Used do + describe '#call_the_resolver' do + subject(:fact) { Facts::Freebsd::Memory::System::Used.new } + + let(:resolver_result) { 1024 } + let(:fact_value) { '1.00 KiB' } + + before do + allow(Facter::Resolvers::Freebsd::SystemMemory).to receive(:resolve).with(:used_bytes).and_return(resolver_result) + end + + it 'calls Facter::Resolvers::Freebsd::SwapMemory' do + fact.call_the_resolver + expect(Facter::Resolvers::Freebsd::SystemMemory).to have_received(:resolve).with(:used_bytes) + end + + it 'returns a memory.system.used fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'memory.system.used', value: fact_value) + end + end +end diff --git a/spec/facter/resolvers/freebsd/swap_memory_resolver_spec.rb b/spec/facter/resolvers/freebsd/swap_memory_resolver_spec.rb new file mode 100644 index 0000000000..e6ab00a9e1 --- /dev/null +++ b/spec/facter/resolvers/freebsd/swap_memory_resolver_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +describe Facter::Resolvers::Freebsd::SwapMemory do + subject(:swap_memory) { Facter::Resolvers::Freebsd::SwapMemory } + + let(:log_spy) { instance_spy(Facter::Log) } + let(:available_bytes) { 4_294_967_296 } + let(:total_bytes) { 4_294_967_296 } + let(:used_bytes) { 0 } + let(:capacity) { '0%' } + let(:encrypted) { true } + + before do + swap_memory.instance_variable_set(:@log, log_spy) + allow(Facter::Core::Execution).to receive(:execute) + .with('swapinfo -k', logger: log_spy) + .and_return(load_fixture('freebsd_swapinfo').read) + end + + it 'returns available swap memory in bytes' do + expect(swap_memory.resolve(:available_bytes)).to eq(available_bytes) + end + + it 'returns total swap memory in bytes' do + expect(swap_memory.resolve(:total_bytes)).to eq(total_bytes) + end + + it 'returns used swap memory in bytes' do + expect(swap_memory.resolve(:used_bytes)).to eq(used_bytes) + end + + it 'returns capacity of swap memory' do + expect(swap_memory.resolve(:capacity)).to eq(capacity) + end + + it 'returns true because swap memory is encrypted' do + expect(swap_memory.resolve(:encrypted)).to eq(encrypted) + end +end diff --git a/spec/facter/resolvers/freebsd/system_memory_resolver_spec.rb b/spec/facter/resolvers/freebsd/system_memory_resolver_spec.rb new file mode 100644 index 0000000000..a5e8a8e2f9 --- /dev/null +++ b/spec/facter/resolvers/freebsd/system_memory_resolver_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +describe Facter::Resolvers::Freebsd::SystemMemory do + subject(:system_memory) { Facter::Resolvers::Freebsd::SystemMemory } + + let(:log_spy) { instance_spy(Facter::Log) } + let(:available_bytes) { 2_696_462_336 } + let(:total_bytes) { 17_043_554_304 } + let(:used_bytes) { 14_347_091_968 } + let(:capacity) { '84.18%' } + + before do + system_memory.instance_variable_set(:@log, log_spy) + allow(Facter::Freebsd::FfiHelper).to receive(:sysctl_by_name) + .with(:long, 'hw.physmem') + .and_return(17_043_554_304) + + allow(Facter::Core::Execution).to receive(:execute) + .with('vmstat -H --libxo json', logger: log_spy) + .and_return(load_fixture('freebsd_vmstat').read) + end + + it 'returns available system memory in bytes' do + expect(system_memory.resolve(:available_bytes)).to eq(available_bytes) + end + + it 'returns total system memory in bytes' do + expect(system_memory.resolve(:total_bytes)).to eq(total_bytes) + end + + it 'returns used system memory in bytes' do + expect(system_memory.resolve(:used_bytes)).to eq(used_bytes) + end + + it 'returns memory capacity' do + expect(system_memory.resolve(:capacity)).to eq(capacity) + end +end diff --git a/spec/fixtures/freebsd_swapinfo b/spec/fixtures/freebsd_swapinfo new file mode 100644 index 0000000000..43f0cca394 --- /dev/null +++ b/spec/fixtures/freebsd_swapinfo @@ -0,0 +1,3 @@ +Device 1K-blocks Used Avail Capacity +/dev/ada0p2.eli 2097152 0 2097152 0% +/dev/ada1p2.eli 2097152 0 2097152 0% diff --git a/spec/fixtures/freebsd_vmstat b/spec/fixtures/freebsd_vmstat new file mode 100644 index 0000000000..01bcd3679a --- /dev/null +++ b/spec/fixtures/freebsd_vmstat @@ -0,0 +1,6 @@ +{"__version": "1", "processes": {"runnable":2,"waiting":14,"swapped-out":0} +, "memory": {"available-memory":62672436,"free-memory":2633264,"total-page-faults":1972} +, "paging-rates": {"page-reactivated":0,"paged-in":1,"paged-out":0,"freed":1831,"scanned":841} +, "device": [{"name":"ad0","transfers":"0"}, {"name":"pa0","transfers":"0"}], "fault-rates": {"interrupts":3495,"system-calls":17391,"context-switches":11777} +, "cpu-statistics": {"user":" 5","system":" 3","idle":"92"} +}