brew/Library/Homebrew/test/test_diagnostic.rb

230 lines
6.0 KiB
Ruby
Raw Normal View History

require "testing_env"
require "fileutils"
require "pathname"
require "diagnostic"
class DiagnosticChecksTest < Homebrew::TestCase
def setup
@env = ENV.to_hash
@checks = Homebrew::Diagnostic::Checks.new
end
def teardown
ENV.replace(@env)
end
2016-01-08 17:54:22 +01:00
def test_inject_file_list
assert_equal "foo:\n",
@checks.inject_file_list([], "foo:\n")
assert_equal "foo:\n /a\n /b\n",
@checks.inject_file_list(%w[/a /b], "foo:\n")
end
def test_check_path_for_trailing_slashes
ENV["PATH"] += File::PATH_SEPARATOR + "/foo/bar/"
assert_match "Some directories in your path end in a slash",
@checks.check_path_for_trailing_slashes
end
def test_check_for_anaconda
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"]
assert_match "Anaconda",
@checks.check_for_anaconda
end
end
2016-01-08 17:54:22 +01:00
def test_check_for_other_package_managers
MacOS.stubs(:macports_or_fink).returns ["fink"]
assert_match "You have MacPorts or Fink installed:",
@checks.check_for_other_package_managers
end
def test_check_for_unsupported_osx
ARGV.stubs(:homebrew_developer?).returns false
OS::Mac.stubs(:prerelease?).returns true
assert_match "We do not provide support for this pre-release version.",
@checks.check_for_unsupported_osx
end
def test_check_access_homebrew_repository
mod = HOMEBREW_REPOSITORY.stat.mode & 0777
HOMEBREW_REPOSITORY.chmod 0555
assert_match "#{HOMEBREW_REPOSITORY} is not writable.",
@checks.check_access_homebrew_repository
ensure
HOMEBREW_REPOSITORY.chmod mod
end
def test_check_access_logs
mod = HOMEBREW_LOGS.stat.mode & 0777
HOMEBREW_LOGS.chmod 0555
assert_match "#{HOMEBREW_LOGS} isn't writable.",
@checks.check_access_logs
ensure
HOMEBREW_LOGS.chmod mod
end
def test_check_access_cache
mod = HOMEBREW_CACHE.stat.mode & 0777
HOMEBREW_CACHE.chmod 0555
assert_match "#{HOMEBREW_CACHE} isn't writable.",
@checks.check_access_cache
ensure
HOMEBREW_CACHE.chmod mod
end
def test_check_access_cellar
mod = HOMEBREW_CELLAR.stat.mode & 0777
HOMEBREW_CELLAR.chmod 0555
assert_match "#{HOMEBREW_CELLAR} isn't writable.",
@checks.check_access_cellar
ensure
HOMEBREW_CELLAR.chmod mod
end
def test_check_access_prefix_opt
opt = HOMEBREW_PREFIX.join("opt")
opt.mkpath
opt.chmod 0555
assert_match "#{opt} isn't writable.",
@checks.check_access_prefix_opt
ensure
opt.unlink
end
def test_check_homebrew_prefix
# the integration tests are run in a special prefix
assert_match "Your Homebrew is not installed to /usr/local",
@checks.check_homebrew_prefix
end
def test_check_user_path_usr_bin_before_homebrew
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
assert_match "/usr/bin occurs before #{HOMEBREW_PREFIX}/bin",
@checks.check_user_path_1
ensure
bin.rmtree
end
def test_check_user_path_bin
ENV["PATH"] = ENV["PATH"].gsub \
%r{(?:^|#{File::PATH_SEPARATOR})#{HOMEBREW_PREFIX}/bin}, ""
assert_nil @checks.check_user_path_1
assert_match "Homebrew's bin was not found in your PATH.",
@checks.check_user_path_2
end
def test_check_user_path_sbin
sbin = HOMEBREW_PREFIX/"sbin"
ENV["PATH"] = "#{HOMEBREW_PREFIX}/bin#{File::PATH_SEPARATOR}" +
ENV["PATH"].gsub(%r{(?:^|#{File::PATH_SEPARATOR})#{sbin}}, "")
(sbin/"something").mkpath
assert_nil @checks.check_user_path_1
assert_nil @checks.check_user_path_2
assert_match "Homebrew's sbin was not found in your PATH",
@checks.check_user_path_3
ensure
sbin.rmtree
end
def test_check_user_curlrc
mktmpdir do |path|
FileUtils.touch "#{path}/.curlrc"
ENV["CURL_HOME"] = path
assert_match "You have a curlrc file",
@checks.check_user_curlrc
end
end
def test_check_for_unsupported_curl_vars
MacOS.stubs(:version).returns OS::Mac::Version.new("10.10")
ENV["SSL_CERT_DIR"] = "/some/path"
assert_match "SSL_CERT_DIR support was removed from Apple's curl.",
@checks.check_for_unsupported_curl_vars
end
def test_check_for_config_scripts
mktmpdir do |path|
file = "#{path}/foo-config"
FileUtils.touch file
FileUtils.chmod 0755, file
ENV["PATH"] = "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}"
assert_match %("config" scripts exist),
@checks.check_for_config_scripts
end
end
def test_check_DYLD_vars
ENV["DYLD_INSERT_LIBRARIES"] = "foo"
assert_match "Setting DYLD_INSERT_LIBRARIES",
@checks.check_DYLD_vars
end
def test_check_for_symlinked_cellar
HOMEBREW_CELLAR.rmtree
mktmpdir do |path|
FileUtils.ln_s path, HOMEBREW_CELLAR
assert_match path,
@checks.check_for_symlinked_cellar
end
ensure
HOMEBREW_CELLAR.unlink
HOMEBREW_CELLAR.mkpath
end
def test_check_tmpdir
ENV["TMPDIR"] = "/i/don/t/exis/t"
assert_match "doesn't exist",
@checks.check_tmpdir
end
def test_check_for_external_cmd_name_conflict
mktmpdir do |path1|
mktmpdir do |path2|
[path1, path2].each do |path|
cmd = "#{path}/brew-foo"
FileUtils.touch cmd
FileUtils.chmod 0755, cmd
end
ENV["PATH"] = [path1, path2, ENV["PATH"]].join File::PATH_SEPARATOR
assert_match "brew-foo",
@checks.check_for_external_cmd_name_conflict
end
end
end
end