 1fe16a5e35
			
		
	
	
		1fe16a5e35
		
	
	
	
	
		
			
			- Move HOMEBREW_TAP_DIRECTORY to startup/config.rb because this file holds more of the directory constants - Rename `Commands.cmd_directories` to `Commands.tap_cmd_directories` to better express that the commands come from taps This file has the directory constants while the other one has regexes. Just better organization.
		
			
				
	
	
		
			136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require "diagnostic"
 | |
| 
 | |
| RSpec.describe Homebrew::Diagnostic::Checks do
 | |
|   subject(:checks) { described_class.new }
 | |
| 
 | |
|   specify "#inject_file_list" do
 | |
|     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")
 | |
|   end
 | |
| 
 | |
|   specify "#check_access_directories" do
 | |
|     skip "User is root so everything is writable." if Process.euid.zero?
 | |
|     begin
 | |
|       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
 | |
|         expect(checks.check_access_directories).to match(dir.to_s)
 | |
|       end
 | |
|     ensure
 | |
|       modes.each do |dir, mode|
 | |
|         dir.chmod mode
 | |
|       end
 | |
|     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(checks.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}o, ""
 | |
| 
 | |
|     expect(checks.check_user_path_1).to be_nil
 | |
|     expect(checks.check_user_path_2)
 | |
|       .to match("Homebrew's \"bin\" was not found in your PATH.")
 | |
|   end
 | |
| 
 | |
|   specify "#check_user_path_3" do
 | |
|     sbin = HOMEBREW_PREFIX/"sbin"
 | |
|     (sbin/"something").mkpath
 | |
| 
 | |
|     homebrew_path =
 | |
|       "#{HOMEBREW_PREFIX}/bin#{File::PATH_SEPARATOR}" +
 | |
|       ENV["HOMEBREW_PATH"].gsub(/(?:^|#{Regexp.escape(File::PATH_SEPARATOR)})#{Regexp.escape(sbin)}/, "")
 | |
|     stub_const("ORIGINAL_PATHS", PATH.new(homebrew_path).filter_map { |path| Pathname.new(path).expand_path })
 | |
| 
 | |
|     expect(checks.check_user_path_1).to be_nil
 | |
|     expect(checks.check_user_path_2).to be_nil
 | |
|     expect(checks.check_user_path_3)
 | |
|       .to match("Homebrew's \"sbin\" was not found in your PATH")
 | |
|   ensure
 | |
|     sbin.rmtree
 | |
|   end
 | |
| 
 | |
|   specify "#check_for_symlinked_cellar" do
 | |
|     HOMEBREW_CELLAR.rmtree
 | |
| 
 | |
|     mktmpdir do |path|
 | |
|       FileUtils.ln_s path, HOMEBREW_CELLAR
 | |
| 
 | |
|       expect(checks.check_for_symlinked_cellar).to match(path)
 | |
|     end
 | |
|   ensure
 | |
|     HOMEBREW_CELLAR.unlink
 | |
|     HOMEBREW_CELLAR.mkpath
 | |
|   end
 | |
| 
 | |
|   specify "#check_tmpdir" do
 | |
|     ENV["TMPDIR"] = "/i/don/t/exis/t"
 | |
|     expect(checks.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(Commands).to receive(:tap_cmd_directories).and_return([path1, path2])
 | |
| 
 | |
|         expect(checks.check_for_external_cmd_name_conflict)
 | |
|           .to match("brew-foo")
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   specify "#check_homebrew_prefix" do
 | |
|     allow(Homebrew).to receive(:default_prefix?).and_return(false)
 | |
|     expect(checks.check_homebrew_prefix)
 | |
|       .to match("Your Homebrew's prefix is not #{Homebrew::DEFAULT_PREFIX}")
 | |
|   end
 | |
| 
 | |
|   specify "#check_for_unnecessary_core_tap" do
 | |
|     ENV.delete("HOMEBREW_DEVELOPER")
 | |
|     ENV.delete("HOMEBREW_NO_INSTALL_FROM_API")
 | |
| 
 | |
|     expect_any_instance_of(CoreTap).to receive(:installed?).and_return(true)
 | |
| 
 | |
|     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")
 | |
| 
 | |
|     expect_any_instance_of(CoreCaskTap).to receive(:installed?).and_return(true)
 | |
| 
 | |
|     expect(checks.check_for_unnecessary_cask_tap).to match("unnecessary local Cask tap")
 | |
|   end
 | |
| end
 |