| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | require "testing_env" | 
					
						
							|  |  |  | require "fileutils" | 
					
						
							| 
									
										
										
										
											2016-01-06 14:26:38 +01:00
										 |  |  | require "pathname" | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2016-01-06 14:26:38 +01:00
										 |  |  |       FileUtils.chmod 0755, anaconda | 
					
						
							|  |  |  |       FileUtils.chmod 0755, python | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       ENV["PATH"] = path + File::PATH_SEPARATOR + ENV["PATH"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       assert_match "Anaconda", | 
					
						
							|  |  |  |         @checks.check_for_anaconda | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_check_access_homebrew_repository | 
					
						
							|  |  |  |     mod = HOMEBREW_REPOSITORY.stat.mode & 0777
 | 
					
						
							|  |  |  |     HOMEBREW_REPOSITORY.chmod 0555
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-21 16:32:19 +00:00
										 |  |  |     assert_match "#{HOMEBREW_REPOSITORY} is not writable.", | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  |       @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}" + | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |                   ENV["PATH"].gsub(%r{(?:^|#{sep})(?:/usr/bin|#{bin})}, "") | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # ensure there's at least one file with the same name in both /usr/bin/ and | 
					
						
							|  |  |  |     # HOMEBREW_PREFIX/bin/ | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |     (bin/File.basename(Dir["/usr/bin/*"].first)).mkpath | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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}" + | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |                   ENV["PATH"].gsub(/(?:^|#{Regexp.escape(File::PATH_SEPARATOR)})#{Regexp.escape(sbin)}/, "") | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  |     (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 | 
					
						
							| 
									
										
										
										
											2016-01-06 14:26:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-05 22:04:59 -07:00
										 |  |  |   def test_check_dyld_vars | 
					
						
							| 
									
										
										
										
											2016-01-06 14:26:38 +01:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2016-01-06 12:34:27 +01:00
										 |  |  | end |