aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd
diff options
context:
space:
mode:
authorXu Cheng2015-04-13 18:05:41 +0800
committerXu Cheng2015-04-15 19:51:54 +0800
commit11d9e553c8c44e82e492f3f1df2f0b8f62a4633d (patch)
tree8d9fbd59fe554bac72189d6fa1dc8d85d44921f7 /Library/Homebrew/cmd
parent62ca25e8976d4c85c7a54a8aca6153a023fef6ea (diff)
downloadhomebrew-11d9e553c8c44e82e492f3f1df2f0b8f62a4633d.tar.bz2
sandbox test
Diffstat (limited to 'Library/Homebrew/cmd')
-rw-r--r--Library/Homebrew/cmd/test.rb31
1 files changed, 19 insertions, 12 deletions
diff --git a/Library/Homebrew/cmd/test.rb b/Library/Homebrew/cmd/test.rb
index 0983c0b81..c4f322b60 100644
--- a/Library/Homebrew/cmd/test.rb
+++ b/Library/Homebrew/cmd/test.rb
@@ -1,17 +1,12 @@
require "extend/ENV"
-require "timeout"
-require "debrew"
require "formula_assertions"
+require "sandbox"
module Homebrew
- TEST_TIMEOUT_SECONDS = 5*60
def test
raise FormulaUnspecifiedError if ARGV.named.empty?
- ENV.extend(Stdenv)
- ENV.setup_build_environment
-
ARGV.formulae.each do |f|
# Cannot test uninstalled formulae
unless f.installed?
@@ -27,15 +22,27 @@ module Homebrew
puts "Testing #{f.name}"
- f.extend(Assertions)
- f.extend(Debrew::Formula) if ARGV.debug?
-
env = ENV.to_hash
begin
- # tests can also return false to indicate failure
- Timeout::timeout TEST_TIMEOUT_SECONDS do
- raise "test returned false" if f.run_test == false
+ args = %W[
+ #{RUBY_PATH}
+ -W0
+ -I #{HOMEBREW_LIBRARY_PATH}
+ --
+ #{HOMEBREW_LIBRARY_PATH}/test.rb
+ #{f.path}
+ ].concat(ARGV.options_only)
+
+ Utils.safe_fork do
+ if Sandbox.available? && ARGV.sandbox?
+ sandbox = Sandbox.new
+ sandbox.allow_write_temp_and_cache
+ sandbox.allow_write_log(f)
+ sandbox.exec(*args)
+ else
+ exec(*args)
+ end
end
rescue Assertions::FailedAssertion => e
ofail "#{f.name}: failed"