| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  | 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_path_for_trailing_slashes" do | 
					
						
							| 
									
										
										
										
											2017-05-13 11:42:01 +01:00
										 |  |  |     ENV["HOMEBREW_PATH"] += File::PATH_SEPARATOR + "/foo/bar/" | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |     expect(subject.check_path_for_trailing_slashes) | 
					
						
							|  |  |  |       .to match("Some directories in your path end in a slash") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-20 11:18:16 -04:00
										 |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |   specify "#check_for_anaconda" do | 
					
						
							| 
									
										
										
										
											2017-02-28 14:50:46 +01:00
										 |  |  |     mktmpdir do |path| | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |       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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:50:46 +01:00
										 |  |  |       ENV["PATH"] = "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}" | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       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 | 
					
						
							| 
									
										
										
										
											2017-04-03 07:06:59 +05:30
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#check_access_lock_dir" do | 
					
						
							|  |  |  |     begin | 
					
						
							| 
									
										
										
										
											2017-05-10 03:02:55 +05:30
										 |  |  |       prev_mode = HOMEBREW_LOCK_DIR.stat.mode | 
					
						
							| 
									
										
										
										
											2017-04-03 07:06:59 +05:30
										 |  |  |       mode = HOMEBREW_LOCK_DIR.stat.mode & 0777
 | 
					
						
							|  |  |  |       HOMEBREW_LOCK_DIR.chmod 0555
 | 
					
						
							| 
									
										
										
										
											2017-05-10 03:02:55 +05:30
										 |  |  |       expect(HOMEBREW_LOCK_DIR.stat.mode).not_to eq(prev_mode) | 
					
						
							| 
									
										
										
										
											2017-04-03 07:06:59 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 18:29:40 +05:30
										 |  |  |       expect(subject.check_access_lock_dir) | 
					
						
							| 
									
										
										
										
											2017-04-03 07:06:59 +05:30
										 |  |  |         .to match("#{HOMEBREW_LOCK_DIR} isn't writable.") | 
					
						
							|  |  |  |     ensure | 
					
						
							|  |  |  |       HOMEBREW_LOCK_DIR.chmod mode | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |     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" | 
					
						
							| 
									
										
										
										
											2017-04-22 16:31:19 +01:00
										 |  |  |       ENV["HOMEBREW_PATH"] = | 
					
						
							|  |  |  |         "#{HOMEBREW_PREFIX}/bin#{File::PATH_SEPARATOR}" + | 
					
						
							|  |  |  |         ENV["HOMEBREW_PATH"].gsub(/(?:^|#{Regexp.escape(File::PATH_SEPARATOR)})#{Regexp.escape(sbin)}/, "") | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |       (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_user_curlrc" do | 
					
						
							| 
									
										
										
										
											2017-02-28 14:50:46 +01:00
										 |  |  |     mktmpdir do |path| | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |       FileUtils.touch "#{path}/.curlrc" | 
					
						
							|  |  |  |       ENV["CURL_HOME"] = path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(subject.check_user_curlrc).to match("You have a curlrc file") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#check_for_config_scripts" do | 
					
						
							| 
									
										
										
										
											2017-02-28 14:50:46 +01:00
										 |  |  |     mktmpdir do |path| | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |       file = "#{path}/foo-config" | 
					
						
							|  |  |  |       FileUtils.touch file | 
					
						
							|  |  |  |       FileUtils.chmod 0755, file | 
					
						
							| 
									
										
										
										
											2017-04-22 16:31:19 +01:00
										 |  |  |       ENV["HOMEBREW_PATH"] = | 
					
						
							|  |  |  |         ENV["PATH"] = | 
					
						
							|  |  |  |           "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}" | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect(subject.check_for_config_scripts) | 
					
						
							|  |  |  |         .to match('"config" scripts exist') | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#check_dyld_vars" do | 
					
						
							|  |  |  |     ENV["DYLD_INSERT_LIBRARIES"] = "foo" | 
					
						
							|  |  |  |     expect(subject.check_dyld_vars).to match("Setting DYLD_INSERT_LIBRARIES") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#check_for_symlinked_cellar" do | 
					
						
							|  |  |  |     begin | 
					
						
							|  |  |  |       HOMEBREW_CELLAR.rmtree | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:50:46 +01:00
										 |  |  |       mktmpdir do |path| | 
					
						
							| 
									
										
										
										
											2017-02-21 02:02:39 +01:00
										 |  |  |         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_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 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ENV["PATH"] = [path1, path2, ENV["PATH"]].join File::PATH_SEPARATOR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(subject.check_for_external_cmd_name_conflict) | 
					
						
							|  |  |  |           .to match("brew-foo") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |