2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-02-21 02:02:39 +01:00
|
|
|
require "diagnostic"
|
|
|
|
|
|
|
|
describe Homebrew::Diagnostic::Checks do
|
2021-01-31 13:14:23 -05:00
|
|
|
subject(:checks) { described_class.new }
|
|
|
|
|
2017-02-21 02:02:39 +01:00
|
|
|
specify "#inject_file_list" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.inject_file_list([], "foo:\n")).to eq("foo:\n")
|
|
|
|
expect(checks.inject_file_list(%w[/a /b], "foo:\n")).to eq("foo:\n /a\n /b\n")
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
|
2018-09-06 18:38:43 +01:00
|
|
|
specify "#check_access_directories" do
|
2019-02-16 12:16:02 -08:00
|
|
|
skip "User is root so everything is writable." if Process.euid.zero?
|
2017-02-21 02:02:39 +01:00
|
|
|
begin
|
2018-09-06 18:38:43 +01:00
|
|
|
dirs = [
|
|
|
|
HOMEBREW_CACHE,
|
|
|
|
HOMEBREW_CELLAR,
|
|
|
|
HOMEBREW_REPOSITORY,
|
|
|
|
HOMEBREW_LOGS,
|
|
|
|
HOMEBREW_LOCKS,
|
|
|
|
]
|
|
|
|
modes = {}
|
|
|
|
dirs.each do |dir|
|
|
|
|
modes[dir] = dir.stat.mode & 0777
|
|
|
|
dir.chmod 0555
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_access_directories).to match(dir.to_s)
|
2018-09-06 18:38:43 +01:00
|
|
|
end
|
2017-02-21 02:02:39 +01:00
|
|
|
ensure
|
2018-09-06 18:38:43 +01:00
|
|
|
modes.each do |dir, mode|
|
|
|
|
dir.chmod mode
|
|
|
|
end
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_user_path_1" do
|
|
|
|
bin = HOMEBREW_PREFIX/"bin"
|
|
|
|
sep = File::PATH_SEPARATOR
|
|
|
|
# ensure /usr/bin is before HOMEBREW_PREFIX/bin in the PATH
|
|
|
|
ENV["PATH"] = "/usr/bin#{sep}#{bin}#{sep}" +
|
|
|
|
ENV["PATH"].gsub(%r{(?:^|#{sep})(?:/usr/bin|#{bin})}, "")
|
|
|
|
|
|
|
|
# ensure there's at least one file with the same name in both /usr/bin/ and
|
|
|
|
# HOMEBREW_PREFIX/bin/
|
|
|
|
(bin/File.basename(Dir["/usr/bin/*"].first)).mkpath
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_user_path_1)
|
2017-02-21 02:02:39 +01:00
|
|
|
.to match("/usr/bin occurs before #{HOMEBREW_PREFIX}/bin")
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_user_path_2" do
|
|
|
|
ENV["PATH"] = ENV["PATH"].gsub \
|
2020-11-16 22:18:56 +01:00
|
|
|
%r{(?:^|#{File::PATH_SEPARATOR})#{HOMEBREW_PREFIX}/bin}o, ""
|
2017-02-21 02:02:39 +01:00
|
|
|
|
2022-03-01 00:01:13 +00:00
|
|
|
expect(checks.check_user_path_1).to be_nil
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_user_path_2)
|
2021-01-26 15:21:24 -05:00
|
|
|
.to match("Homebrew's \"bin\" was not found in your PATH.")
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_user_path_3" do
|
2019-10-13 10:03:26 +01:00
|
|
|
sbin = HOMEBREW_PREFIX/"sbin"
|
2022-06-15 05:40:43 +01:00
|
|
|
(sbin/"something").mkpath
|
|
|
|
|
|
|
|
homebrew_path =
|
2019-10-13 10:03:26 +01:00
|
|
|
"#{HOMEBREW_PREFIX}/bin#{File::PATH_SEPARATOR}" +
|
|
|
|
ENV["HOMEBREW_PATH"].gsub(/(?:^|#{Regexp.escape(File::PATH_SEPARATOR)})#{Regexp.escape(sbin)}/, "")
|
2022-06-15 05:40:43 +01:00
|
|
|
stub_const("ORIGINAL_PATHS", PATH.new(homebrew_path).map { |path| Pathname.new(path).expand_path }.compact)
|
2019-10-13 10:03:26 +01:00
|
|
|
|
2022-03-01 00:01:13 +00:00
|
|
|
expect(checks.check_user_path_1).to be_nil
|
|
|
|
expect(checks.check_user_path_2).to be_nil
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_user_path_3)
|
2021-01-26 15:21:24 -05:00
|
|
|
.to match("Homebrew's \"sbin\" was not found in your PATH")
|
2019-10-13 10:03:26 +01:00
|
|
|
ensure
|
|
|
|
sbin.rmtree
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_for_symlinked_cellar" do
|
2019-10-13 10:03:26 +01:00
|
|
|
HOMEBREW_CELLAR.rmtree
|
2017-02-21 02:02:39 +01:00
|
|
|
|
2019-10-13 10:03:26 +01:00
|
|
|
mktmpdir do |path|
|
|
|
|
FileUtils.ln_s path, HOMEBREW_CELLAR
|
2017-02-21 02:02:39 +01:00
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_for_symlinked_cellar).to match(path)
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
2019-10-13 10:03:26 +01:00
|
|
|
ensure
|
|
|
|
HOMEBREW_CELLAR.unlink
|
|
|
|
HOMEBREW_CELLAR.mkpath
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_tmpdir" do
|
|
|
|
ENV["TMPDIR"] = "/i/don/t/exis/t"
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_tmpdir).to match("doesn't exist")
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_for_external_cmd_name_conflict" do
|
2017-02-28 14:50:46 +01:00
|
|
|
mktmpdir do |path1|
|
|
|
|
mktmpdir do |path2|
|
2017-02-21 02:02:39 +01:00
|
|
|
[path1, path2].each do |path|
|
|
|
|
cmd = "#{path}/brew-foo"
|
|
|
|
FileUtils.touch cmd
|
|
|
|
FileUtils.chmod 0755, cmd
|
|
|
|
end
|
|
|
|
|
2017-11-17 17:41:58 +00:00
|
|
|
allow(Tap).to receive(:cmd_directories).and_return([path1, path2])
|
2017-02-21 02:02:39 +01:00
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_for_external_cmd_name_conflict)
|
2017-02-21 02:02:39 +01:00
|
|
|
.to match("brew-foo")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2019-01-01 18:11:59 -08:00
|
|
|
|
|
|
|
specify "#check_homebrew_prefix" do
|
2019-01-21 14:33:56 +00:00
|
|
|
allow(Homebrew).to receive(:default_prefix?).and_return(false)
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(checks.check_homebrew_prefix)
|
2019-01-01 18:11:59 -08:00
|
|
|
.to match("Your Homebrew's prefix is not #{Homebrew::DEFAULT_PREFIX}")
|
|
|
|
end
|
2023-04-30 15:03:51 +01:00
|
|
|
|
|
|
|
specify "#check_for_unnecessary_core_tap" do
|
|
|
|
ENV.delete("HOMEBREW_DEVELOPER")
|
|
|
|
ENV.delete("HOMEBREW_NO_INSTALL_FROM_API")
|
|
|
|
|
2023-07-13 19:28:39 +01:00
|
|
|
expect_any_instance_of(CoreTap).to receive(:installed?).and_return(true)
|
2023-04-30 15:03:51 +01:00
|
|
|
|
|
|
|
expect(checks.check_for_unnecessary_core_tap).to match("You have an unnecessary local Core tap")
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#check_for_unnecessary_cask_tap" do
|
|
|
|
ENV.delete("HOMEBREW_DEVELOPER")
|
|
|
|
ENV.delete("HOMEBREW_NO_INSTALL_FROM_API")
|
|
|
|
|
2023-07-13 19:28:39 +01:00
|
|
|
expect_any_instance_of(CoreCaskTap).to receive(:installed?).and_return(true)
|
2023-04-30 15:03:51 +01:00
|
|
|
|
|
|
|
expect(checks.check_for_unnecessary_cask_tap).to match("unnecessary local Cask tap")
|
|
|
|
end
|
2017-02-21 02:02:39 +01:00
|
|
|
end
|