xli-dtr 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/CHANGES +7 -0
  2. data/README.rdoc +208 -0
  3. data/Rakefile +54 -63
  4. data/TODO +7 -16
  5. data/bin/dtr +26 -20
  6. data/dtr.gemspec +7 -10
  7. data/lib/dtr/agent/brain.rb +13 -22
  8. data/lib/dtr/agent/herald.rb +24 -14
  9. data/lib/dtr/agent/runner.rb +22 -35
  10. data/lib/dtr/agent/sync_codebase.rb +1 -1
  11. data/lib/dtr/agent/sync_logger.rb +38 -8
  12. data/lib/dtr/agent/test_case.rb +53 -0
  13. data/lib/dtr/agent/test_unit.rb +3 -5
  14. data/lib/dtr/agent/worker.rb +29 -32
  15. data/lib/dtr/agent/working_env_ext.rb +4 -2
  16. data/lib/dtr/agent.rb +2 -1
  17. data/lib/dtr/facade.rb +65 -0
  18. data/lib/dtr/master.rb +3 -3
  19. data/lib/dtr/monitor.rb +69 -11
  20. data/lib/dtr/raketasks.rb +91 -19
  21. data/lib/dtr/shared/adapter.rb +29 -26
  22. data/lib/dtr/shared/configuration.rb +39 -11
  23. data/lib/dtr/shared/message_decorator.rb +1 -1
  24. data/lib/dtr/shared/ruby_ext.rb +1 -25
  25. data/lib/dtr/shared/service/agent.rb +5 -1
  26. data/lib/dtr/shared/service/file.rb +1 -1
  27. data/lib/dtr/shared/service/rinda.rb +11 -3
  28. data/lib/dtr/shared/service/runner.rb +6 -5
  29. data/lib/dtr/shared/service/working_env.rb +1 -1
  30. data/lib/dtr/shared/service.rb +1 -1
  31. data/lib/dtr/shared/sync_codebase/{codebase.rb → copiable_package.rb} +13 -5
  32. data/lib/dtr/shared/sync_codebase/master_ext.rb +6 -18
  33. data/lib/dtr/shared/sync_codebase/package.rb +16 -2
  34. data/lib/dtr/shared/sync_codebase/sync_service.rb +7 -12
  35. data/lib/dtr/shared/sync_codebase.rb +2 -2
  36. data/lib/dtr/shared/sync_logger.rb +6 -14
  37. data/lib/dtr/shared/utils/cmd.rb +5 -5
  38. data/lib/dtr/shared/utils/env_store.rb +1 -1
  39. data/lib/dtr/shared/utils/logger.rb +33 -17
  40. data/lib/dtr/shared/utils.rb +1 -1
  41. data/lib/dtr/shared/working_env.rb +2 -2
  42. data/lib/dtr/shared.rb +1 -1
  43. data/lib/dtr/test_unit/drb_test_runner.rb +5 -14
  44. data/lib/dtr/test_unit/injection.rb +1 -2
  45. data/lib/dtr/test_unit/test_case_injection.rb +13 -13
  46. data/lib/dtr/test_unit/test_suite_injection.rb +24 -0
  47. data/lib/dtr/test_unit/testrunnermediator_injection.rb +11 -11
  48. data/lib/dtr/test_unit/thread_safe_test_result.rb +1 -3
  49. data/lib/dtr/test_unit/worker_club.rb +7 -7
  50. data/lib/dtr/test_unit.rb +2 -1
  51. data/lib/dtr/test_unit_injection.rb +1 -1
  52. data/lib/dtr.rb +5 -36
  53. data/test/acceptance/agent_working_env_test.rb +28 -34
  54. data/test/acceptance/dtr_package_task_test.rb +13 -3
  55. data/test/acceptance/general_test.rb +139 -83
  56. data/test/acceptance/raketasks_test.rb +23 -0
  57. data/test/acceptance/sync_codebase_test.rb +12 -13
  58. data/test/acceptance/sync_logger_test.rb +12 -21
  59. data/test/agent_helper.rb +8 -10
  60. data/test/logger_stub.rb +4 -0
  61. data/test/test_helper.rb +33 -5
  62. data/test/unit/adapter_test.rb +58 -16
  63. data/test/unit/configuration_test.rb +44 -0
  64. data/test/unit/facade_test.rb +41 -0
  65. data/test/unit/logger_test.rb +72 -0
  66. data/test/unit/test_unit_test.rb +0 -21
  67. data/testdata/Rakefile +1 -5
  68. data/testdata/hacked_run_method_test_case.rb +15 -0
  69. data/testdata/raketasks/Rakefile +7 -0
  70. data/testdata/raketasks/success_test_case.rb +6 -0
  71. data/testdata/sleep_3_secs_test_case.rb +9 -0
  72. data/testdata/{should_not_sync_codebase_and_setup_working_dir_when_agent_is_in_same_dir_with_master_process → verify_dir_pwd}/verify_dir_pwd_test_case.rb +1 -1
  73. metadata +33 -13
  74. data/README +0 -182
  75. data/install.rb +0 -88
  76. /data/testdata/{should_not_sync_codebase_and_setup_working_dir_when_agent_is_in_same_dir_with_master_process → verify_dir_pwd}/Rakefile +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -13,6 +13,6 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require 'dtr/shared/sync_codebase/package'
16
- require 'dtr/shared/sync_codebase/codebase'
16
+ require 'dtr/shared/sync_codebase/copiable_package'
17
17
  require 'dtr/shared/sync_codebase/sync_service'
18
18
  require 'dtr/shared/sync_codebase/master_ext'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -18,22 +18,21 @@ module DTR
18
18
  module SyncLogger
19
19
  class UndumpedLogger
20
20
  include DRbUndumped
21
- include MessageDecorator
22
21
 
23
22
  def initialize(logger)
24
23
  @logger = logger
25
24
  end
26
25
 
27
26
  def debug(message=nil, &block)
28
- with_decorating_message(:debug, message, &block)
27
+ @logger.send(:debug, message, &block)
29
28
  end
30
29
 
31
30
  def info(message=nil, &block)
32
- with_decorating_message(:info, message, &block)
31
+ @logger.send(:info, message, &block)
33
32
  end
34
33
 
35
34
  def error(message=nil, &block)
36
- with_decorating_message(:error, message, &block)
35
+ @logger.send(:error, message, &block)
37
36
  end
38
37
 
39
38
  def datetime_format=(format)
@@ -44,15 +43,8 @@ module DTR
44
43
  @logger.level = level
45
44
  end
46
45
 
47
- private
48
- def with_decorating_message(level, msg, &block)
49
- if block_given?
50
- @logger.send(level) do
51
- decorate_message(block.call)
52
- end
53
- else
54
- @logger.send(level, decorate_message(msg))
55
- end
46
+ def level
47
+ @logger.level
56
48
  end
57
49
  end
58
50
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -18,12 +18,12 @@ module DTR
18
18
  class Cmd
19
19
  def self.execute(cmd)
20
20
  return true if cmd.nil? || cmd.empty?
21
- DTR.info "Executing: #{cmd.inspect}"
21
+ DTR.info {"Executing: #{cmd.inspect}"}
22
22
  output = %x[#{cmd} 2>&1]
23
23
  # don't put the following message into a block which maybe passed to remote process
24
- # and no $? could be found
25
- DTR.info "Execution is done, status: #{$?.exitstatus}"
26
- DTR.error "#{cmd.inspect} output:\n#{output}" if $?.exitstatus != 0
24
+ status = $?.exitstatus
25
+ DTR.info {"Execution is done, status: #{status}"}
26
+ DTR.error "#{cmd.inspect} output:\n#{output}" if status != 0
27
27
  $?.exitstatus == 0
28
28
  end
29
29
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -13,9 +13,26 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require 'logger'
16
+ require 'fileutils'
16
17
 
17
18
  module DTR
18
19
  module LoggerExt
20
+ DATETIME_FORMAT = "%m-%d %H:%M:%S"
21
+
22
+ LOGGER_LEVEL = {:info => Logger::INFO, :error => Logger::ERROR, :debug => Logger::DEBUG}
23
+
24
+ module OutputErrorIntoConsole
25
+ def self.included(base)
26
+ base.alias_method_chain :error, :output_into_console
27
+ end
28
+
29
+ def error_with_output_into_console(message = nil, &block)
30
+ $stderr.puts "\n" + format_message(format_severity(Logger::ERROR), Time.now, nil, message || block.call)
31
+ error_without_output_into_console(message, &block)
32
+ end
33
+ end
34
+ Logger.send(:include, OutputErrorIntoConsole)
35
+
19
36
  def logger(file=nil)
20
37
  @logger ||= create_default_logger(file)
21
38
  end
@@ -24,12 +41,13 @@ module DTR
24
41
  @logger = logger
25
42
  end
26
43
 
27
- def create_default_logger(file=nil)
28
- dir = File.exist?('log') ? 'log' : '/tmp'
29
- log_file = File.join(dir, file || "dtr.log")
30
- do_print "dtr logfile at #{log_file}\n"
44
+ def create_default_logger(file)
45
+ dir = 'log'
46
+ FileUtils.mkdir_p(dir)
47
+ log_file = File.join(dir, file || 'dtr.log')
48
+ do_println "DTR logfile at #{Dir.pwd}/#{log_file}"
31
49
  logger = Logger.new(log_file, 1, 5*1024*1024)
32
- logger.datetime_format = "%m-%d %H:%M:%S"
50
+ logger.datetime_format = DATETIME_FORMAT
33
51
  logger.level = (ENV['DTR_LOG_LEVEL'] || Logger::INFO).to_i
34
52
  logger
35
53
  end
@@ -40,6 +58,10 @@ module DTR
40
58
  end
41
59
  end
42
60
 
61
+ def do_println(str)
62
+ do_print("#{str}\n")
63
+ end
64
+
43
65
  def debug(message=nil, &block)
44
66
  output(:debug, message, &block)
45
67
  end
@@ -53,17 +75,11 @@ module DTR
53
75
  end
54
76
 
55
77
  def output(level, msg=nil, &block)
56
- logger.send(level) do
57
- message = block_given? ? block.call : msg.to_s
58
- # puts "log: #{message}"
59
-
60
- #output message when it's an error for agent error log should be displayed in console
61
- if level == :error
62
- $stderr.puts ''
63
- $stderr.puts "#{Time.now}: #{message}"
64
- end
65
- message
66
- end
78
+ return if LOGGER_LEVEL[level] < logger.level
79
+
80
+ msg = block.call if block_given?
81
+ # puts "log: #{msg}"
82
+ logger.send(level, msg)
67
83
  end
68
84
  end
69
85
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
15
15
  module DTR
16
16
  class WorkingEnv
17
17
  def initialize
18
- files = (defined?($argv_dup) ? $argv_dup : []).dup
18
+ files = (defined?($argv_dup) && $argv_dup ? $argv_dup : []).dup
19
19
  @env = {:libs => $LOAD_PATH.dup, :files => files, :created_at => Time.now.to_s, :dtr_master_env => ENV['DTR_MASTER_ENV'], :agent_env_setup_cmd => ENV['DTR_AGENT_ENV_SETUP_CMD'], :identifier => "#{Time.now.to_s}:#{rand}:#{object_id}", :host => Socket.gethostname, :pwd => Dir.pwd}
20
20
  end
21
21
 
data/lib/dtr/shared.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,8 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'timeout'
16
-
17
15
  module DTR
18
16
  module TestUnit
19
17
  class DRbTestRunner
@@ -33,18 +31,11 @@ module DTR
33
31
  end
34
32
  end
35
33
 
36
- def run_test_on(runner, timeout)
37
- Timeout.timeout(timeout) do
38
- runner.run(@test, @result, &@progress_block)
39
- end
40
- rescue Timeout::Error => e
41
- DTR.info {"Run test timeout(#{timeout}), reboot runner"}
42
- runner.reboot rescue nil
43
- DTR.info {"rerun test: #{@test.name}"}
44
- self.run
34
+ def run_test_on(runner)
35
+ runner.run(@test, @result, &@progress_block)
45
36
  rescue DRb::DRbConnError => e
46
- DTR.info {"DRb::DRbConnError(#{e.message}), rerun test: #{@test.name}"}
47
- DTR.debug { e.backtrace.join("\n") }
37
+ DTR.info {"#{cause.class.name}(#{cause.message}), rerun test: #{@test.name}"}
38
+ DTR.debug { cause.backtrace.join("\n") }
48
39
  self.run
49
40
  rescue Exception => e
50
41
  DTR.info{ "#{@test.name}, rescue an exception: #{e.message}, add error into result." }
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,7 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'test/unit/testcase'
16
15
  require 'test/unit/ui/testrunnermediator'
17
16
 
18
17
  module DTR
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -15,22 +15,22 @@
15
15
  module DTR
16
16
  module TestUnit
17
17
  module TestCaseInjection
18
+ class Proxy
19
+ def initialize(test)
20
+ @test = test
21
+ end
22
+
23
+ def run(result, &progress_block)
24
+ DRbTestRunner.new(@test, result, &progress_block).run
25
+ end
18
26
 
19
- def self.included(base)
20
- base.alias_method_chain :run, :dtr_injection
21
- #have to use class_eval for adding it back after removed reject_dtr method
22
- base.class_eval do
23
- def self.reject_dtr
24
- remove_method :run
25
- alias_method :run, :run_without_dtr_injection
26
- remove_method :run_without_dtr_injection
27
- (class << self; self; end;).send :remove_method, :reject_dtr
28
- end
27
+ def size
28
+ @test.size
29
29
  end
30
30
  end
31
31
 
32
- def run_with_dtr_injection(result, &progress_block)
33
- DRbTestRunner.new(self, result, &progress_block).run
32
+ def proxy
33
+ Proxy.new(self)
34
34
  end
35
35
  end
36
36
  end
@@ -0,0 +1,24 @@
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module DTR
16
+ module TestUnit
17
+ module TestSuiteInjection
18
+ def proxy
19
+ @tests.collect! {|t| t.proxy}
20
+ self
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,18 +12,22 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ require 'test/unit/testcase'
16
+ require 'test/unit/testsuite'
17
+
15
18
  module DTR
16
19
  module TestUnit
17
20
  module TestRunnerMediatorInjection
18
-
19
21
  class SuiteWrapper
20
22
  def initialize(suite)
21
23
  @suite = suite
22
24
  end
25
+
23
26
  def run(result, &block)
24
27
  @suite.run(result, &block)
25
28
  WorkerClub.instance.graceful_shutdown
26
29
  end
30
+
27
31
  def size
28
32
  @suite.size
29
33
  end
@@ -55,16 +59,12 @@ module DTR
55
59
 
56
60
  def run_suite_with_dtr_injection
57
61
  DTR.logger('dtr_master_process.log')
58
- @suite = SuiteWrapper.new(@suite)
62
+ # inject testcase&testsuite as late as possible, for it's too easy to be hacked in ruby world
63
+ Test::Unit::TestCase.send(:include, TestUnit::TestCaseInjection)
64
+ Test::Unit::TestSuite.send(:include, TestUnit::TestSuiteInjection)
65
+ @suite = SuiteWrapper.new(@suite.proxy)
59
66
  with_dtr_master do
60
- # inject testcase as late as possible, for in ruby world there is lots hacks added to TestCase#run method,
61
- # DTR should be the last one to add dtr injection chain into run method
62
- Test::Unit::TestCase.send(:include, TestUnit::TestCaseInjection)
63
- begin
64
- run_suite_without_dtr_injection
65
- ensure
66
- Test::Unit::TestCase.reject_dtr
67
- end
67
+ run_suite_without_dtr_injection
68
68
  end
69
69
  end
70
70
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,8 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'drb'
16
-
17
15
  module DTR
18
16
  module TestUnit
19
17
  class ThreadSafeTestResult
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@ module DTR
23
23
 
24
24
  def start_thread(drb_runner, remote_runner)
25
25
  thread = Thread.new(drb_runner, remote_runner) do |local, remote|
26
- local.run_test_on(remote, timeout)
26
+ local.run_test_on(remote)
27
27
  end
28
28
  thread[:started_on] = Time.now
29
29
  workers.add(thread)
@@ -33,16 +33,16 @@ module DTR
33
33
  # too long. It waits by ENV['RUN_TEST_TIMEOUT'] || 60 seconds
34
34
  def graceful_shutdown
35
35
  while reap_dead_workers("shutdown") > 0
36
- DTR.info "Waiting for #{workers.list.length} threads to finish, could take #{timeout} seconds."
36
+ DTR.info {"Waiting for #{workers.list.length} threads to finish, could take #{timeout} seconds."}
37
37
  sleep timeout / 60
38
38
  end
39
39
  end
40
40
 
41
+ private
41
42
  def timeout
42
- ENV['RUN_TEST_TIMEOUT'] || DEFAULT_RUN_TEST_TIMEOUT
43
+ (ENV['RUN_TEST_TIMEOUT'] || DEFAULT_RUN_TEST_TIMEOUT).to_i
43
44
  end
44
45
 
45
- private
46
46
  def workers
47
47
  @workers ||= ThreadGroup.new
48
48
  end
@@ -52,14 +52,14 @@ module DTR
52
52
  # after the reap is done. It only runs if there are workers to reap.
53
53
  def reap_dead_workers(reason='unknown')
54
54
  if workers.list.length > 0
55
- DTR.info "Reaping #{workers.list.length} threads because of '#{reason}'"
55
+ DTR.info {"Reaping #{workers.list.length} threads because of '#{reason}'"}
56
56
  error_msg = "#{Time.now}: WorkerClub timed out this thread: #{reason}"
57
57
  mark = Time.now
58
58
  workers.list.each do |worker|
59
59
  worker[:started_on] = Time.now if not worker[:started_on]
60
60
 
61
61
  if mark - worker[:started_on] > timeout
62
- DTR.info "Thread #{worker.inspect} is too old, killing."
62
+ DTR.info {"Thread #{worker.inspect} is too old, killing."}
63
63
  worker.raise(TimeoutError.new(error_msg))
64
64
  end
65
65
  end
data/lib/dtr/test_unit.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -18,5 +18,6 @@ require 'dtr/test_unit/worker_club'
18
18
  require 'dtr/test_unit/thread_safe_test_result'
19
19
  require 'dtr/test_unit/drb_test_runner'
20
20
  require 'dtr/test_unit/test_case_injection'
21
+ require 'dtr/test_unit/test_suite_injection'
21
22
  require 'dtr/test_unit/testrunnermediator_injection'
22
23
  require 'dtr/test_unit/injection'
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
data/lib/dtr.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2008 Li Xiao
1
+ # Copyright (c) 2007-2008 Li Xiao <iam@li-xiao.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,42 +12,11 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- DTRVERSION="0.0.5"
15
+ require 'dtr/facade'
16
+
17
+ DTRVERSION="1.0.0"
16
18
  DTR_AGENT_OPTIONS = {:runners => [], :agent_env_setup_cmd => nil}
17
19
 
18
20
  module DTR
19
-
20
- def start_agent
21
- launch_agent(DTR_AGENT_OPTIONS[:runners], DTR_AGENT_OPTIONS[:agent_env_setup_cmd])
22
- end
23
-
24
- def launch_agent(names, setup=nil)
25
- require 'dtr/agent'
26
- names = names || "DTR(#{Time.now})"
27
- DTR::Agent.start(names, setup)
28
- end
29
-
30
- def lib_path
31
- File.expand_path(File.dirname(__FILE__))
32
- end
33
-
34
- def broadcast_list=(list)
35
- require 'dtr/shared'
36
- DTR.configuration.broadcast_list = list
37
- DTR.configuration.save
38
- end
39
-
40
- def port=(port)
41
- require 'dtr/shared'
42
- DTR.configuration.rinda_server_port = port
43
- DTR.configuration.save
44
- end
45
-
46
- def monitor
47
- require 'dtr/monitor'
48
- DTR.logger('dtr_monitor.log')
49
- Monitor.new.start
50
- end
51
-
52
- module_function :start_agent, :launch_agent, :lib_path, :broadcast_list=, :monitor, :port=
21
+ extend Facade
53
22
  end
@@ -7,40 +7,34 @@ class AgentWorkingEnvTest < Test::Unit::TestCase
7
7
  def setup
8
8
  #start_agents first for test files loaded would be copied into sub processes
9
9
  start_agents
10
- DTR.inject
11
10
  end
12
11
 
13
12
  def teardown
14
- DTR.reject
15
13
  stop_agents
16
- $argv_dup = nil
17
14
  end
18
15
 
19
16
  def test_run_2_project_should_be_independence
20
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/")) do
17
+ assert_fork_process_exits_ok do
21
18
  $argv_dup = ['an_error_test_case.rb']
22
- require 'an_error_test_case'
23
19
 
24
20
  suite = Test::Unit::TestSuite.new('test_run_2_project_should_be_independence 1')
25
21
  suite << AnErrorTestCase.suite
26
22
 
27
- assert_fork_process_exits_ok do
28
- @result = runit(suite)
23
+ @result = runit(suite)
29
24
 
30
- assert_false @result.passed?
31
- assert_equal 1, @result.run_count
32
- assert_equal 0, @result.failure_count
33
- assert_equal 1, @result.error_count
34
- end
25
+ assert_false @result.passed?
26
+ assert_equal 1, @result.run_count
27
+ assert_equal 0, @result.failure_count
28
+ assert_equal 1, @result.error_count
35
29
  end
36
30
 
37
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/another_project")) do
38
- $argv_dup = ['passed_test_case.rb']
39
- require 'passed_test_case'
40
- suite = Test::Unit::TestSuite.new('test_run_2_project_should_be_independence 2')
41
- suite << PassedTestCase.suite
31
+ assert_fork_process_exits_ok do
32
+ Dir.chdir("another_project") do
33
+ $argv_dup = ['passed_test_case.rb']
34
+ require 'passed_test_case'
35
+ suite = Test::Unit::TestSuite.new('test_run_2_project_should_be_independence 2')
36
+ suite << PassedTestCase.suite
42
37
 
43
- assert_fork_process_exits_ok do
44
38
  @result = runit(suite)
45
39
 
46
40
  assert @result.passed?
@@ -52,13 +46,13 @@ class AgentWorkingEnvTest < Test::Unit::TestCase
52
46
  end
53
47
 
54
48
  def test_run_same_project_twice_should_be_independence
55
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/another_project")) do
56
- $argv_dup = ['passed_test_case.rb']
57
- require 'passed_test_case'
58
- suite = Test::Unit::TestSuite.new('test_run_same_project_twice_should_be_independence 1')
59
- suite << PassedTestCase.suite
49
+ assert_fork_process_exits_ok do
50
+ Dir.chdir("another_project") do
51
+ $argv_dup = ['passed_test_case.rb']
52
+ require 'passed_test_case'
53
+ suite = Test::Unit::TestSuite.new('test_run_same_project_twice_should_be_independence 1')
54
+ suite << PassedTestCase.suite
60
55
 
61
- assert_fork_process_exits_ok do
62
56
  @result = runit(suite)
63
57
 
64
58
  assert @result.passed?
@@ -68,24 +62,24 @@ class AgentWorkingEnvTest < Test::Unit::TestCase
68
62
  end
69
63
  end
70
64
 
71
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/another_project")) do
72
- FileUtils.cp("./../an_error_test_case.rb", '.')
73
- begin
74
- $argv_dup = ['an_error_test_case.rb']
75
- require 'an_error_test_case'
76
- suite = Test::Unit::TestSuite.new('test_run_same_project_twice_should_be_independence 2')
77
- suite << AnErrorTestCase.suite
65
+ assert_fork_process_exits_ok do
66
+ Dir.chdir("another_project") do
67
+ FileUtils.cp("./../an_error_test_case.rb", '.')
68
+ begin
69
+ $argv_dup = ['an_error_test_case.rb']
70
+ require 'an_error_test_case'
71
+ suite = Test::Unit::TestSuite.new('test_run_same_project_twice_should_be_independence 2')
72
+ suite << AnErrorTestCase.suite
78
73
 
79
- assert_fork_process_exits_ok do
80
74
  @result = runit(suite)
81
75
 
82
76
  assert_false @result.passed?
83
77
  assert_equal 1, @result.run_count
84
78
  assert_equal 0, @result.failure_count
85
79
  assert_equal 1, @result.error_count
80
+ ensure
81
+ FileUtils.rm_f('an_error_test_case.rb')
86
82
  end
87
- ensure
88
- FileUtils.rm_f('an_error_test_case.rb')
89
83
  end
90
84
  end
91
85
  end
@@ -10,7 +10,7 @@ class DTRPackageTaskTest < Test::Unit::TestCase
10
10
  assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/lib/lib_test_case.rb")
11
11
  assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/is_required_by_a_test.rb")
12
12
 
13
- assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump.tar.bz2")
13
+ assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump.zip")
14
14
 
15
15
  %x[rake --rakefile package_task_test_rakefile dtr_clobber_package]
16
16
 
@@ -18,9 +18,19 @@ class DTRPackageTaskTest < Test::Unit::TestCase
18
18
  assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/lib/lib_test_case.rb")
19
19
  assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/is_required_by_a_test.rb")
20
20
 
21
- assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump.tar.bz2")
21
+ assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump.zip")
22
22
  end
23
23
  ensure
24
24
  FileUtils.rm_rf(testdata_dir + "/dtr_pkg") rescue nil
25
25
  end
26
- end
26
+
27
+ def test_should_not_include_dtr_pkg_dir
28
+ testdata_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata')
29
+ Dir.chdir(testdata_dir) do
30
+ %x[rake dtr_repackage]
31
+ assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/dtr_pkg")
32
+ end
33
+ ensure
34
+ FileUtils.rm_rf(testdata_dir + "/dtr_pkg") rescue nil
35
+ end
36
+ end