Skip to content
This repository has been archived by the owner on Jun 19, 2020. It is now read-only.

Commit

Permalink
(FACT-2585) Mountpoints fact returns ASCI-8BIT instead of UTF-8 in so…
Browse files Browse the repository at this point in the history
…me cases (#472)
  • Loading branch information
Bogdan Irimie committed Apr 28, 2020
1 parent 70dde94 commit af87c82
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 18 deletions.
42 changes: 27 additions & 15 deletions lib/resolvers/utils/filesystem_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,36 @@ module FilesystemHelper
MOUNT_KEYS = %i[device filesystem path options
available available_bytes size
size_bytes used used_bytes capacity].freeze
class << self
def read_mountpoints
require 'sys/filesystem'
force_utf(Sys::Filesystem.mounts)
end

def self.read_mountpoints
require 'sys/filesystem'
Sys::Filesystem.mounts
end
def read_mountpoint_stats(path)
require 'sys/filesystem'
Sys::Filesystem.stat(path)
end

def self.read_mountpoint_stats(path)
require 'sys/filesystem'
Sys::Filesystem.stat(path)
end
def compute_capacity(used, total)
if used == total
'100%'
elsif used.positive?
"#{format('%.2f', 100.0 * used.to_f / total.to_f)}%"
else
'0%'
end
end

private

def self.compute_capacity(used, total)
if used == total
'100%'
elsif used.positive?
"#{format('%.2f', 100.0 * used.to_f / total.to_f)}%"
else
'0%'
def force_utf(mounts)
mounts.each do |mount|
mount.name.force_encoding('UTF-8')
mount.mount_type.force_encoding('UTF-8')
mount.mount_point.force_encoding('UTF-8')
mount.options.force_encoding('UTF-8')
end
end
end
end
Expand Down
8 changes: 5 additions & 3 deletions spec/facter/resolvers/mountpoints_resolver_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@
allow(Facter::Util::FileHelper).to receive(:safe_read)
.with('/proc/cmdline')
.and_return(load_fixture('cmdline_root_device').read)
allow(Sys::Filesystem).to receive(:mounts).and_return([mount])
allow(Sys::Filesystem).to receive(:stat).with(mount.mount_point).and_return(stat)

allow(Facter::FilesystemHelper).to receive(:read_mountpoints).and_return([mount])
allow(Facter::FilesystemHelper).to receive(:read_mountpoint_stats).with(mount.mount_point).and_return(stat)

# mock sys/filesystem methods
allow(stat).to receive(:bytes_total).and_return(stat.blocks * stat.fragment_size)
Expand All @@ -55,7 +56,8 @@
end

it 'drops automounts and non-tmpfs mounts under /proc or /sys' do
allow(Sys::Filesystem).to receive(:mounts).and_return(ignored_mounts)
allow(Facter::FilesystemHelper).to receive(:read_mountpoints).and_return(ignored_mounts)

result = Facter::Resolvers::Linux::Mountpoints.resolve(:mountpoints)
expect(result).to be_empty
end
Expand Down
31 changes: 31 additions & 0 deletions spec/facter/resolvers/utils/macosx/filesystem_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,35 @@
expect(capacity).to eq('4.21%')
end
end

describe '#read_mountpoints' do
before do
mount = OpenStruct.new
mount.name = +'test_name'.encode('ASCII-8BIT')
mount.mount_type = +'test_type'.encode('ASCII-8BIT')
mount.mount_point = +'test_mount_point'.encode('ASCII-8BIT')
mount.options = +'test_options'.encode('ASCII-8BIT')

mounts = [mount]
allow(Sys::Filesystem).to receive(:mounts).and_return(mounts)
end

let(:mount_points) { Facter::FilesystemHelper.read_mountpoints }

it 'converts name from ASCII-8BIT to UTF-8' do
expect(mount_points.first.name.encoding.name). to eq('UTF-8')
end

it 'converts mount_type from ASCII-8BIT to UTF-8' do
expect(mount_points.first.mount_type.encoding.name). to eq('UTF-8')
end

it 'converts mount_point from ASCII-8BIT to UTF-8' do
expect(mount_points.first.mount_point.encoding.name). to eq('UTF-8')
end

it 'converts options from ASCII-8BIT to UTF-8' do
expect(mount_points.first.options.encoding.name). to eq('UTF-8')
end
end
end

0 comments on commit af87c82

Please sign in to comment.