| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  | end |