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

Commit

Permalink
Merge remote-tracking branch 'origin/FACT-2569' into FACT-2569
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrei Filipovici committed Apr 28, 2020
2 parents a2bab86 + 4f69d4a commit 873704e
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 50 deletions.
4 changes: 3 additions & 1 deletion .github/actions/presuite.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,6 @@ gem install -f facter-*.gem

printf '\nBeaker tests\n\n'
cd $cwd/$FACTER_3_ROOT/acceptance
beaker exec tests --test-tag-exclude=server,facter_3 --test-tag-or=risk:high,audit:high

beaker exec tests/external_facts/external_fact_stderr_messages_output_to_stderr.rb --test-tag-exclude=server,facter_3 --test-tag-or=risk:high,audit:high
echo $PATH
1 change: 0 additions & 1 deletion .rspec
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
--format documentation
--color
--require spec_helper
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ jobs:
script:
- bundle exec rubocop
- bundle exec rake spec

- rvm: 2.6
env: COMMIT_CHECK=true
script:
- bundle exec rake commits

- rvm: 2.5
Expand Down
30 changes: 0 additions & 30 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,6 @@ Dir.glob(File.join('tasks/**/*.rake')).each { |file| load file }

task default: :spec

desc 'verify that commit messages match CONTRIBUTING.md requirements'
task(:commits) do
# This rake task looks at the summary from every commit from this branch not
# in the branch targeted for a PR. This is accomplished by using the
# TRAVIS_COMMIT_RANGE environment variable, which is present in travis CI and
# populated with the range of commits the PR contains. If not available, this
# falls back to `master..HEAD` as a next best bet as `master` is unlikely to
# ever be absent.
commit_range = ENV['TRAVIS_COMMIT_RANGE'].nil? ? 'master..HEAD' : ENV['TRAVIS_COMMIT_RANGE'].sub(/\.\.\./, '..')
puts "Checking commits #{commit_range}"
`git log --no-merges --pretty=%s #{commit_range}`.each_line do |commit_summary|
# This regex tests for the currently supported commit summary tokens: maint, doc, gem, or fact-<number>.
# The exception tries to explain it in more full.
if /^\((maint|doc|docs|gem|fact-\d+)\)|revert/i.match(commit_summary).nil?
raise "\n\n\n\tThis commit summary didn't match CONTRIBUTING.md guidelines:\n" \
"\n\t\t#{commit_summary}\n" \
"\tThe commit summary (i.e. the first line of the commit message) should start with one of:\n" \
"\t\t(FACT-<digits>) # this is most common and should be a ticket at tickets.puppet.com\n" \
"\t\t(docs)\n" \
"\t\t(docs)(DOCUMENT-<digits>)\n" \
"\t\t(maint)\n" \
"\t\t(gem)\n" \
"\n\tThis test for the commit summary is case-insensitive.\n\n\n"
else
puts commit_summary.to_s
end
puts '...passed'
end
end

def retrieve_from_keyboard
return unless ARGV =~ /changelog/

Expand Down
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
31 changes: 31 additions & 0 deletions tasks/commits.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true

desc 'verify that commit messages match CONTRIBUTING.md requirements'
task(:commits) do
# This rake task looks at the summary from every commit from this branch not
# in the branch targeted for a PR. This is accomplished by using the
# TRAVIS_COMMIT_RANGE environment variable, which is present in travis CI and
# populated with the range of commits the PR contains. If not available, this
# falls back to `master..HEAD` as a next best bet as `master` is unlikely to
# ever be absent.
commit_range = ENV['TRAVIS_COMMIT_RANGE'].nil? ? 'master..HEAD' : ENV['TRAVIS_COMMIT_RANGE'].sub(/\.\.\./, '..')
puts "Checking commits #{commit_range}"
`git log --no-merges --pretty=%s #{commit_range}`.each_line do |commit_summary|
# This regex tests for the currently supported commit summary tokens: maint, doc, gem, or fact-<number>.
# The exception tries to explain it in more full.
if /^\((maint|doc|docs|gem|fact-\d+)\)|revert/i.match(commit_summary).nil?
raise "\n\n\n\tThis commit summary didn't match CONTRIBUTING.md guidelines:\n" \
"\n\t\t#{commit_summary}\n" \
"\tThe commit summary (i.e. the first line of the commit message) should start with one of:\n" \
"\t\t(FACT-<digits>) # this is most common and should be a ticket at tickets.puppet.com\n" \
"\t\t(docs)\n" \
"\t\t(docs)(DOCUMENT-<digits>)\n" \
"\t\t(maint)\n" \
"\t\t(gem)\n" \
"\n\tThis test for the commit summary is case-insensitive.\n\n\n"
else
puts commit_summary.to_s
end
puts '...passed'
end
end

0 comments on commit 873704e

Please sign in to comment.