mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
205 lines
5.7 KiB
Ruby
205 lines
5.7 KiB
Ruby
require "diagnostic"
|
|
|
|
describe Homebrew::Diagnostic::Checks do
|
|
specify "#inject_file_list" do
|
|
expect(subject.inject_file_list([], "foo:\n")).to eq("foo:\n")
|
|
expect(subject.inject_file_list(%w[/a /b], "foo:\n")).to eq("foo:\n /a\n /b\n")
|
|
end
|
|
|
|
specify "#check_build_from_source" do
|
|
ENV["HOMEBREW_BUILD_FROM_SOURCE"] = "1"
|
|
expect(subject.check_build_from_source)
|
|
.to match("You have HOMEBREW_BUILD_FROM_SOURCE set.")
|
|
end
|
|
|
|
specify "#check_for_anaconda" do
|
|
mktmpdir do |path|
|
|
anaconda = "#{path}/anaconda"
|
|
python = "#{path}/python"
|
|
FileUtils.touch anaconda
|
|
File.open(python, "w") do |file|
|
|
file.write("#! #{`which bash`}\necho -n '#{python}'\n")
|
|
end
|
|
FileUtils.chmod 0755, anaconda
|
|
FileUtils.chmod 0755, python
|
|
|
|
ENV["PATH"] = "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}"
|
|
|
|
expect(subject.check_for_anaconda).to match("Anaconda")
|
|
end
|
|
end
|
|
|
|
specify "#check_access_homebrew_repository" do
|
|
begin
|
|
mode = HOMEBREW_REPOSITORY.stat.mode & 0777
|
|
HOMEBREW_REPOSITORY.chmod 0555
|
|
|
|
expect(subject.check_access_homebrew_repository)
|
|
.to match("#{HOMEBREW_REPOSITORY} is not writable.")
|
|
ensure
|
|
HOMEBREW_REPOSITORY.chmod mode
|
|
end
|
|
end
|
|
|
|
specify "#check_access_lock_dir" do
|
|
begin
|
|
prev_mode = HOMEBREW_LOCK_DIR.stat.mode
|
|
mode = HOMEBREW_LOCK_DIR.stat.mode & 0777
|
|
HOMEBREW_LOCK_DIR.chmod 0555
|
|
expect(HOMEBREW_LOCK_DIR.stat.mode).not_to eq(prev_mode)
|
|
|
|
expect(subject.check_access_lock_dir)
|
|
.to match("#{HOMEBREW_LOCK_DIR} isn't writable.")
|
|
ensure
|
|
HOMEBREW_LOCK_DIR.chmod mode
|
|
end
|
|
end
|
|
|
|
specify "#check_access_logs" do
|
|
begin
|
|
mode = HOMEBREW_LOGS.stat.mode & 0777
|
|
HOMEBREW_LOGS.chmod 0555
|
|
|
|
expect(subject.check_access_logs)
|
|
.to match("#{HOMEBREW_LOGS} isn't writable.")
|
|
ensure
|
|
HOMEBREW_LOGS.chmod mode
|
|
end
|
|
end
|
|
|
|
specify "#check_access_cache" do
|
|
begin
|
|
mode = HOMEBREW_CACHE.stat.mode & 0777
|
|
HOMEBREW_CACHE.chmod 0555
|
|
expect(subject.check_access_cache)
|
|
.to match("#{HOMEBREW_CACHE} isn't writable.")
|
|
ensure
|
|
HOMEBREW_CACHE.chmod mode
|
|
end
|
|
end
|
|
|
|
specify "#check_access_cellar" do
|
|
begin
|
|
mode = HOMEBREW_CELLAR.stat.mode & 0777
|
|
HOMEBREW_CELLAR.chmod 0555
|
|
|
|
expect(subject.check_access_cellar)
|
|
.to match("#{HOMEBREW_CELLAR} isn't writable.")
|
|
ensure
|
|
HOMEBREW_CELLAR.chmod mode
|
|
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
|
|
|
|
expect(subject.check_user_path_1)
|
|
.to match("/usr/bin occurs before #{HOMEBREW_PREFIX}/bin")
|
|
end
|
|
|
|
specify "#check_user_path_2" do
|
|
ENV["PATH"] = ENV["PATH"].gsub \
|
|
%r{(?:^|#{File::PATH_SEPARATOR})#{HOMEBREW_PREFIX}/bin}, ""
|
|
|
|
expect(subject.check_user_path_1).to be nil
|
|
expect(subject.check_user_path_2)
|
|
.to match("Homebrew's bin was not found in your PATH.")
|
|
end
|
|
|
|
specify "#check_user_path_3" do
|
|
begin
|
|
sbin = HOMEBREW_PREFIX/"sbin"
|
|
ENV["HOMEBREW_PATH"] =
|
|
"#{HOMEBREW_PREFIX}/bin#{File::PATH_SEPARATOR}" +
|
|
ENV["HOMEBREW_PATH"].gsub(/(?:^|#{Regexp.escape(File::PATH_SEPARATOR)})#{Regexp.escape(sbin)}/, "")
|
|
(sbin/"something").mkpath
|
|
|
|
expect(subject.check_user_path_1).to be nil
|
|
expect(subject.check_user_path_2).to be nil
|
|
expect(subject.check_user_path_3)
|
|
.to match("Homebrew's sbin was not found in your PATH")
|
|
ensure
|
|
sbin.rmtree
|
|
end
|
|
end
|
|
|
|
specify "#check_for_config_scripts" do
|
|
mktmpdir do |path|
|
|
file = "#{path}/foo-config"
|
|
FileUtils.touch file
|
|
FileUtils.chmod 0755, file
|
|
ENV["HOMEBREW_PATH"] =
|
|
ENV["PATH"] =
|
|
"#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}"
|
|
|
|
expect(subject.check_for_config_scripts)
|
|
.to match('"config" scripts exist')
|
|
end
|
|
end
|
|
|
|
specify "#check_for_symlinked_cellar" do
|
|
begin
|
|
HOMEBREW_CELLAR.rmtree
|
|
|
|
mktmpdir do |path|
|
|
FileUtils.ln_s path, HOMEBREW_CELLAR
|
|
|
|
expect(subject.check_for_symlinked_cellar).to match(path)
|
|
end
|
|
ensure
|
|
HOMEBREW_CELLAR.unlink
|
|
HOMEBREW_CELLAR.mkpath
|
|
end
|
|
end
|
|
|
|
specify "#check_ld_vars catches LD vars" do
|
|
ENV["LD_LIBRARY_PATH"] = "foo"
|
|
expect(subject.check_ld_vars).to match("Setting DYLD_\\* or LD_\\* variables")
|
|
end
|
|
|
|
specify "#check_ld_vars catches DYLD vars" do
|
|
ENV["DYLD_LIBRARY_PATH"] = "foo"
|
|
expect(subject.check_ld_vars).to match("Setting DYLD_\\* or LD_\\* variables")
|
|
end
|
|
|
|
specify "#check_ld_vars catches LD and DYLD vars" do
|
|
ENV["LD_LIBRARY_PATH"] = "foo"
|
|
ENV["DYLD_LIBRARY_PATH"] = "foo"
|
|
expect(subject.check_ld_vars).to match("Setting DYLD_\\* or LD_\\* variables")
|
|
end
|
|
|
|
specify "#check_ld_vars returns success when neither LD nor DYLD vars are set" do
|
|
expect(subject.check_ld_vars).to be nil
|
|
end
|
|
|
|
specify "#check_tmpdir" do
|
|
ENV["TMPDIR"] = "/i/don/t/exis/t"
|
|
expect(subject.check_tmpdir).to match("doesn't exist")
|
|
end
|
|
|
|
specify "#check_for_external_cmd_name_conflict" do
|
|
mktmpdir do |path1|
|
|
mktmpdir do |path2|
|
|
[path1, path2].each do |path|
|
|
cmd = "#{path}/brew-foo"
|
|
FileUtils.touch cmd
|
|
FileUtils.chmod 0755, cmd
|
|
end
|
|
|
|
allow(Tap).to receive(:cmd_directories).and_return([path1, path2])
|
|
|
|
expect(subject.check_for_external_cmd_name_conflict)
|
|
.to match("brew-foo")
|
|
end
|
|
end
|
|
end
|
|
end
|