dtr 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +21 -0
- data/README.rdoc +39 -28
- data/Rakefile +1 -1
- data/TODO +1 -3
- data/bin/dtr +20 -13
- data/dtr.gemspec +3 -3
- data/lib/dtr.rb +2 -2
- data/lib/dtr/agent.rb +12 -5
- data/lib/dtr/agent/brain.rb +45 -19
- data/lib/dtr/agent/herald.rb +8 -10
- data/lib/dtr/agent/process_root.rb +23 -0
- data/lib/dtr/agent/rails_ext.rb +57 -0
- data/lib/dtr/agent/runner.rb +19 -39
- data/lib/dtr/agent/sync_codebase.rb +10 -19
- data/lib/dtr/agent/sync_logger.rb +1 -0
- data/lib/dtr/agent/worker.rb +13 -61
- data/lib/dtr/agent/working_env_ext.rb +51 -17
- data/lib/dtr/agent/working_status.rb +34 -0
- data/lib/dtr/facade.rb +19 -17
- data/lib/dtr/master.rb +2 -0
- data/lib/dtr/monitor.rb +2 -2
- data/lib/dtr/raketasks.rb +14 -19
- data/lib/dtr/shared.rb +1 -0
- data/lib/dtr/shared/adapter.rb +2 -101
- data/lib/dtr/shared/adapter/base.rb +118 -0
- data/lib/dtr/shared/adapter/mortality.rb +41 -0
- data/lib/dtr/shared/configuration.rb +32 -14
- data/lib/dtr/shared/root.rb +20 -0
- data/lib/dtr/shared/sync_codebase/master_ext.rb +2 -2
- data/lib/dtr/shared/sync_codebase/sync_service.rb +7 -4
- data/lib/dtr/shared/utils/cmd.rb +4 -2
- data/lib/dtr/shared/utils/env_store.rb +16 -24
- data/lib/dtr/shared/working_env.rb +8 -0
- data/lib/dtr/test_unit/drb_test_runner.rb +1 -1
- data/lib/dtr/test_unit/thread_safe_test_result.rb +56 -3
- data/test/acceptance/dtr_package_task_test.rb +3 -3
- data/test/acceptance/general_test.rb +3 -3
- data/test/acceptance/rails_ext_test.rb +86 -0
- data/test/acceptance/raketasks_test.rb +14 -0
- data/test/acceptance/sync_codebase_test.rb +8 -31
- data/test/acceptance/sync_logger_test.rb +6 -3
- data/test/agent_helper.rb +24 -16
- data/test/logger_stub.rb +3 -3
- data/test/test_helper.rb +12 -9
- data/test/unit/adapter_test.rb +1 -1
- data/test/unit/configuration_test.rb +36 -4
- data/test/unit/database_initializer_test.rb +36 -0
- data/test/unit/facade_test.rb +11 -1
- data/test/unit/thread_safe_test_result_test.rb +41 -0
- data/test/unit/working_env_test.rb +11 -21
- data/testdata/rails_projects/simple_project/README +256 -0
- data/testdata/rails_projects/simple_project/Rakefile +10 -0
- data/testdata/rails_projects/simple_project/app/controllers/application.rb +15 -0
- data/testdata/rails_projects/simple_project/app/controllers/products_controller.rb +5 -0
- data/testdata/rails_projects/simple_project/app/helpers/application_helper.rb +3 -0
- data/testdata/rails_projects/simple_project/app/helpers/products_helper.rb +2 -0
- data/testdata/rails_projects/simple_project/app/models/product.rb +5 -0
- data/testdata/rails_projects/simple_project/app/views/products/index.rhtml +7 -0
- data/testdata/rails_projects/simple_project/config/boot.rb +109 -0
- data/testdata/rails_projects/simple_project/config/database.yml +19 -0
- data/testdata/rails_projects/simple_project/config/database.yml.mysql +12 -0
- data/testdata/rails_projects/simple_project/config/environment.rb +67 -0
- data/testdata/rails_projects/simple_project/config/environments/development.rb +17 -0
- data/testdata/rails_projects/simple_project/config/environments/production.rb +22 -0
- data/testdata/rails_projects/simple_project/config/environments/test.rb +22 -0
- data/testdata/rails_projects/simple_project/config/initializers/inflections.rb +10 -0
- data/testdata/rails_projects/simple_project/config/initializers/mime_types.rb +5 -0
- data/testdata/rails_projects/simple_project/config/initializers/new_rails_defaults.rb +17 -0
- data/testdata/rails_projects/simple_project/config/routes.rb +43 -0
- data/testdata/rails_projects/simple_project/db/migrate/20081027133744_create_products.rb +13 -0
- data/testdata/rails_projects/simple_project/db/schema.rb +21 -0
- data/testdata/rails_projects/simple_project/doc/README_FOR_APP +2 -0
- data/testdata/rails_projects/simple_project/public/404.html +30 -0
- data/testdata/rails_projects/simple_project/public/422.html +30 -0
- data/testdata/rails_projects/simple_project/public/500.html +30 -0
- data/testdata/rails_projects/simple_project/public/dispatch.cgi +10 -0
- data/testdata/rails_projects/simple_project/public/dispatch.fcgi +24 -0
- data/testdata/rails_projects/simple_project/public/dispatch.rb +10 -0
- data/testdata/rails_projects/simple_project/public/favicon.ico +0 -0
- data/testdata/rails_projects/simple_project/public/images/rails.png +0 -0
- data/testdata/rails_projects/simple_project/public/index.html +274 -0
- data/testdata/rails_projects/simple_project/public/javascripts/application.js +2 -0
- data/testdata/rails_projects/simple_project/public/javascripts/controls.js +963 -0
- data/testdata/rails_projects/simple_project/public/javascripts/dragdrop.js +972 -0
- data/testdata/rails_projects/simple_project/public/javascripts/effects.js +1120 -0
- data/testdata/rails_projects/simple_project/public/javascripts/prototype.js +4225 -0
- data/testdata/rails_projects/simple_project/public/robots.txt +5 -0
- data/testdata/rails_projects/simple_project/script/about +4 -0
- data/testdata/rails_projects/simple_project/script/console +3 -0
- data/testdata/rails_projects/simple_project/script/dbconsole +3 -0
- data/testdata/rails_projects/simple_project/script/destroy +3 -0
- data/testdata/rails_projects/simple_project/script/generate +3 -0
- data/testdata/rails_projects/simple_project/script/performance/benchmarker +3 -0
- data/testdata/rails_projects/simple_project/script/performance/profiler +3 -0
- data/testdata/rails_projects/simple_project/script/performance/request +3 -0
- data/testdata/rails_projects/simple_project/script/plugin +3 -0
- data/testdata/rails_projects/simple_project/script/process/inspector +3 -0
- data/testdata/rails_projects/simple_project/script/process/reaper +3 -0
- data/testdata/rails_projects/simple_project/script/process/spawner +3 -0
- data/testdata/rails_projects/simple_project/script/runner +3 -0
- data/testdata/rails_projects/simple_project/script/server +3 -0
- data/testdata/rails_projects/simple_project/test/fixtures/products.yml +9 -0
- data/testdata/rails_projects/simple_project/test/functional/products_controller_test.rb +11 -0
- data/testdata/rails_projects/simple_project/test/test_helper.rb +38 -0
- data/testdata/rails_projects/simple_project/test/unit/product_test.rb +27 -0
- data/testdata/raketasks/Rakefile +1 -1
- metadata +90 -5
- data/testdata/verify_dir_pwd/Rakefile +0 -6
- data/testdata/verify_dir_pwd/verify_dir_pwd_test_case.rb +0 -10
|
@@ -17,9 +17,10 @@ module DTR
|
|
|
17
17
|
module SyncService
|
|
18
18
|
include Package
|
|
19
19
|
include Service::File
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
|
|
21
|
+
def sync_codebase(&block)
|
|
22
|
+
DTR.info("Start sync codebase, clean #{File.expand_path(Dir.pwd)}")
|
|
23
|
+
Dir.glob('*').each { |f| FileUtils.rm_rf(f) }
|
|
23
24
|
|
|
24
25
|
DTR.info("Lookup codebase package file")
|
|
25
26
|
package = lookup_file
|
|
@@ -27,7 +28,9 @@ module DTR
|
|
|
27
28
|
File.open(package_copy_file, 'w') do |f|
|
|
28
29
|
package.copy_into(f)
|
|
29
30
|
end
|
|
30
|
-
|
|
31
|
+
|
|
32
|
+
block.call
|
|
33
|
+
|
|
31
34
|
DTR.info("sync codebase finished, clean #{package_copy_file}")
|
|
32
35
|
FileUtils.rm_f(package_copy_file)
|
|
33
36
|
end
|
data/lib/dtr/shared/utils/cmd.rb
CHANGED
|
@@ -16,14 +16,16 @@ module DTR
|
|
|
16
16
|
class CmdInterrupt < StandardError; end
|
|
17
17
|
|
|
18
18
|
class Cmd
|
|
19
|
-
def self.execute(cmd)
|
|
19
|
+
def self.execute(cmd, options = {:error_output_log_level => :error})
|
|
20
20
|
return true if cmd.nil? || cmd.empty?
|
|
21
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
24
|
status = $?.exitstatus
|
|
25
25
|
DTR.info {"Execution is done, status: #{status}"}
|
|
26
|
-
|
|
26
|
+
if status != 0
|
|
27
|
+
DTR.send(options[:error_output_log_level], "#{cmd.inspect} output:\n#{output}")
|
|
28
|
+
end
|
|
27
29
|
$?.exitstatus == 0
|
|
28
30
|
end
|
|
29
31
|
end
|
|
@@ -18,42 +18,34 @@ module DTR
|
|
|
18
18
|
class EnvStore
|
|
19
19
|
FILE_NAME = '.dtr_env_pstore' unless defined?(FILE_NAME)
|
|
20
20
|
|
|
21
|
-
def self.
|
|
22
|
-
File.
|
|
21
|
+
def self.default_file
|
|
22
|
+
File.join(DTR.root || Dir.pwd, FILE_NAME)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize(file=EnvStore.default_file)
|
|
26
|
+
@pstore = PStore.new(File.expand_path(file))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def destroy
|
|
30
|
+
File.delete(@pstore.path) if File.exist?(@pstore.path)
|
|
23
31
|
end
|
|
24
32
|
|
|
25
33
|
def [](key)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
repository = PStore.new(FILE_NAME)
|
|
29
|
-
repository.transaction(true) do
|
|
30
|
-
repository[key]
|
|
34
|
+
@pstore.transaction(true) do
|
|
35
|
+
@pstore[key]
|
|
31
36
|
end
|
|
32
37
|
end
|
|
33
38
|
|
|
34
39
|
def []=(key, value)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
repository[key] = value
|
|
40
|
+
@pstore.transaction do
|
|
41
|
+
@pstore[key] = value
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
|
|
41
45
|
def <<(key_value)
|
|
42
46
|
key, value = key_value
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
repository[key] = (repository[key] || []) << value
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def shift(key)
|
|
50
|
-
repository = PStore.new(FILE_NAME)
|
|
51
|
-
repository.transaction do
|
|
52
|
-
if array = repository[key]
|
|
53
|
-
array.shift
|
|
54
|
-
repository[key] = array
|
|
55
|
-
end
|
|
56
|
-
end
|
|
47
|
+
array_value = (self[key] || []) << value
|
|
48
|
+
self[key] = array_value
|
|
57
49
|
end
|
|
58
50
|
end
|
|
59
51
|
|
|
@@ -32,7 +32,7 @@ module DTR
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def run_test_on(runner)
|
|
35
|
-
runner.run(@test, @result, &@progress_block)
|
|
35
|
+
runner.run(@test, @result.instance(runner), &@progress_block)
|
|
36
36
|
rescue DRb::DRbConnError => e
|
|
37
37
|
DTR.info {"#{cause.class.name}(#{cause.message}), rerun test: #{@test.name}"}
|
|
38
38
|
DTR.debug { cause.backtrace.join("\n") }
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
module DTR
|
|
16
16
|
module TestUnit
|
|
17
|
-
class
|
|
18
|
-
include DRbUndumped
|
|
19
|
-
|
|
17
|
+
class SynchronizedTestResult
|
|
20
18
|
def initialize(rs)
|
|
21
19
|
@mutex = Mutex.new
|
|
22
20
|
@rs = rs
|
|
@@ -34,5 +32,60 @@ module DTR
|
|
|
34
32
|
end
|
|
35
33
|
end
|
|
36
34
|
end
|
|
35
|
+
|
|
36
|
+
class ThreadSafeTestResult < SynchronizedTestResult
|
|
37
|
+
|
|
38
|
+
class Pair
|
|
39
|
+
include DRbUndumped
|
|
40
|
+
|
|
41
|
+
def initialize(rs1, rs2)
|
|
42
|
+
@rs1 = rs1
|
|
43
|
+
@rs2 = rs2
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_s
|
|
47
|
+
@rs1.to_s
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def method_missing(method, *args, &block)
|
|
51
|
+
@rs1.send(method, *args, &block)
|
|
52
|
+
@rs2.send(method, *args, &block)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class RunnerTestResults
|
|
57
|
+
|
|
58
|
+
def initialize
|
|
59
|
+
@results = {}
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def fetch(runner)
|
|
63
|
+
@results[runner_id(runner)] ||= SynchronizedTestResult.new(Test::Unit::TestResult.new)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def to_s
|
|
67
|
+
@results.sort_by{|runner_id, result| -result.run_count}.collect do |runner_id, result|
|
|
68
|
+
"#{runner_id} => #{result}"
|
|
69
|
+
end.join("\n")
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def runner_id(runner)
|
|
73
|
+
runner.instance_variable_get('@uri').gsub(/^druby:\/\//, '')
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def initialize(*args)
|
|
78
|
+
super
|
|
79
|
+
@results = RunnerTestResults.new
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def instance(runner)
|
|
83
|
+
Pair.new(self, @results.fetch(runner))
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def to_s
|
|
87
|
+
"#{@results}\n\n#{super}"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
37
90
|
end
|
|
38
91
|
end
|
|
@@ -5,14 +5,14 @@ class DTRPackageTaskTest < Test::Unit::TestCase
|
|
|
5
5
|
def test_package
|
|
6
6
|
testdata_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata')
|
|
7
7
|
Dir.chdir(testdata_dir) do
|
|
8
|
-
%x[rake --rakefile package_task_test_rakefile dtr_package]
|
|
8
|
+
%x[rake -q --rakefile package_task_test_rakefile dtr_package]
|
|
9
9
|
assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/a_test_case2.rb")
|
|
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
13
|
assert File.exists?(testdata_dir + "/dtr_pkg/codebase-dump.zip")
|
|
14
14
|
|
|
15
|
-
%x[rake --rakefile package_task_test_rakefile dtr_clobber_package]
|
|
15
|
+
%x[rake -q --rakefile package_task_test_rakefile dtr_clobber_package]
|
|
16
16
|
|
|
17
17
|
assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/a_test_case2.rb")
|
|
18
18
|
assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/lib/lib_test_case.rb")
|
|
@@ -27,7 +27,7 @@ class DTRPackageTaskTest < Test::Unit::TestCase
|
|
|
27
27
|
def test_should_not_include_dtr_pkg_dir
|
|
28
28
|
testdata_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata')
|
|
29
29
|
Dir.chdir(testdata_dir) do
|
|
30
|
-
%x[rake dtr_repackage]
|
|
30
|
+
%x[rake -q dtr_repackage]
|
|
31
31
|
assert !File.exists?(testdata_dir + "/dtr_pkg/codebase-dump/dtr_pkg")
|
|
32
32
|
end
|
|
33
33
|
ensure
|
|
@@ -158,8 +158,8 @@ class GeneralTest < Test::Unit::TestCase
|
|
|
158
158
|
end
|
|
159
159
|
|
|
160
160
|
def test_run_test_specified_by_load_path
|
|
161
|
+
lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib')
|
|
161
162
|
assert_fork_process_exits_ok do
|
|
162
|
-
lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib')
|
|
163
163
|
$LOAD_PATH.unshift lib_path
|
|
164
164
|
require 'lib_test_case'
|
|
165
165
|
$argv_dup = ['lib_test_case.rb']
|
|
@@ -226,7 +226,7 @@ class GeneralTest < Test::Unit::TestCase
|
|
|
226
226
|
suite << ATestCase.suite
|
|
227
227
|
suite << ATestCase2.suite
|
|
228
228
|
suite << AFileSystemTestCase.suite
|
|
229
|
-
|
|
229
|
+
with_agent_configuration do
|
|
230
230
|
result = runit(suite)
|
|
231
231
|
assert result.passed?
|
|
232
232
|
assert_equal 3, result.run_count
|
|
@@ -254,7 +254,7 @@ class GeneralTest < Test::Unit::TestCase
|
|
|
254
254
|
assert_equal 0, $?.exitstatus
|
|
255
255
|
ensure
|
|
256
256
|
@test_processes.each do |pid|
|
|
257
|
-
|
|
257
|
+
kill_process pid
|
|
258
258
|
end
|
|
259
259
|
end
|
|
260
260
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
2
|
+
|
|
3
|
+
include DTR::AgentHelper
|
|
4
|
+
|
|
5
|
+
class RailsExtTest < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
start_agents(:follower_listen_heartbeat_timeout => 15)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
stop_agents
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_run_dtr_test_task_with_simple_sqlite_project
|
|
16
|
+
new_simple_project do |testdata|
|
|
17
|
+
assert_run_dtr_test_task_success_with(testdata)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_should_not_trigger_auto_preparing_database_when_setup_agent_env_command_specified
|
|
22
|
+
new_simple_project do |testdata|
|
|
23
|
+
assert_fork_process_exits_ok do
|
|
24
|
+
Dir.chdir(testdata) do
|
|
25
|
+
output = %x[rake dtr:test DTR_GROUP='#{DTR::AgentHelper::GROUP}' BROADCAST_IP=localhost DTR_AGENT_ENV_SETUP_CMD=ls]
|
|
26
|
+
expected = <<-OUTPUT
|
|
27
|
+
5 tests, 0 assertions, 0 failures, 10 errors
|
|
28
|
+
OUTPUT
|
|
29
|
+
assert_equal 1, $?.exitstatus
|
|
30
|
+
assert output.include?(expected), "#{output} should include #{expected}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_run_dtr_test_task_with_mysql_database
|
|
37
|
+
new_simple_project do |testdata|
|
|
38
|
+
FileUtils.cp_r(testdata + "/config/database.yml.mysql", testdata + "/config/database.yml")
|
|
39
|
+
assert_run_dtr_test_task_success_with(testdata)
|
|
40
|
+
Dir.chdir(agent1_runner1_dir) do
|
|
41
|
+
assert File.exist?('created_by_database_yml_mysql')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_run_dtr_test_task_with_database_yml_dtr_specified
|
|
47
|
+
new_simple_project do |testdata|
|
|
48
|
+
FileUtils.cp_r(testdata + "/config/database.yml.mysql", testdata + "/config/database.yml.dtr")
|
|
49
|
+
assert_run_dtr_test_task_success_with(testdata)
|
|
50
|
+
Dir.chdir(agent1_runner1_dir) do
|
|
51
|
+
assert File.exist?('created_by_database_yml_mysql')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def assert_run_dtr_test_task_success_with(testdata)
|
|
57
|
+
assert_fork_process_exits_ok do
|
|
58
|
+
Dir.chdir(testdata) do
|
|
59
|
+
output = %x[rake dtr:test DTR_GROUP='#{DTR::AgentHelper::GROUP}' BROADCAST_IP=localhost]
|
|
60
|
+
expected = <<-OUTPUT
|
|
61
|
+
5 tests, 7 assertions, 0 failures, 0 errors
|
|
62
|
+
OUTPUT
|
|
63
|
+
assert_equal 0, $?.exitstatus
|
|
64
|
+
assert output.include?(expected), "should include #{expected}"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def new_simple_project
|
|
70
|
+
simple_project = File.expand_path(File.dirname(__FILE__) + '/../../testdata/rails_projects/simple_project')
|
|
71
|
+
testdata = File.expand_path(File.dirname(__FILE__) + '/rails_ext_test')
|
|
72
|
+
FileUtils.rm_rf(testdata)
|
|
73
|
+
FileUtils.cp_r(simple_project, testdata)
|
|
74
|
+
|
|
75
|
+
lib_dir = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
|
76
|
+
tasks_dir = File.expand_path(File.dirname(__FILE__) + '/../../tasks')
|
|
77
|
+
dtr_plugin_dir = testdata + '/vendor/plugins/dtr'
|
|
78
|
+
FileUtils.mkdir_p(dtr_plugin_dir)
|
|
79
|
+
FileUtils.cp_r(lib_dir, dtr_plugin_dir)
|
|
80
|
+
FileUtils.cp_r(tasks_dir, dtr_plugin_dir)
|
|
81
|
+
|
|
82
|
+
yield testdata
|
|
83
|
+
ensure
|
|
84
|
+
FileUtils.rm_rf(testdata)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -20,4 +20,18 @@ OUTPUT
|
|
|
20
20
|
stop_agents
|
|
21
21
|
FileUtils.rm_rf("raketasks_test_agent")
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
def test_test_task_with_processes
|
|
25
|
+
test_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata/raketasks')
|
|
26
|
+
Dir.chdir(test_dir) do
|
|
27
|
+
output = %x[rake dtr P=3]
|
|
28
|
+
expected = <<-OUTPUT
|
|
29
|
+
1 tests, 1 assertions, 0 failures, 0 errors
|
|
30
|
+
OUTPUT
|
|
31
|
+
assert_equal 0, $?.exitstatus
|
|
32
|
+
assert output.include?(expected), "should include #{expected}"
|
|
33
|
+
end
|
|
34
|
+
ensure
|
|
35
|
+
FileUtils.rm_rf("#{test_dir}/#{Socket.gethostname.gsub(/[^\d\w]/, '_')}")
|
|
36
|
+
end
|
|
23
37
|
end
|
|
@@ -9,8 +9,8 @@ class SyncCodebaseTest < Test::Unit::TestCase
|
|
|
9
9
|
testdata_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata')
|
|
10
10
|
|
|
11
11
|
master = Process.fork do
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
Dir.chdir(testdata_dir) do
|
|
13
|
+
DTR.configuration.with_rinda_server do
|
|
14
14
|
DTR::Cmd.execute('rake dtr_repackage')
|
|
15
15
|
provide_file DTR::SyncCodebase::CopiablePackage.new
|
|
16
16
|
DRb.thread.join
|
|
@@ -20,10 +20,12 @@ class SyncCodebaseTest < Test::Unit::TestCase
|
|
|
20
20
|
#sleep for waiting rinda server start
|
|
21
21
|
sleep(1)
|
|
22
22
|
client = Process.fork do
|
|
23
|
-
start_service
|
|
24
23
|
Dir.mkdir("test_sync_codebase")
|
|
25
24
|
Dir.chdir("test_sync_codebase") do
|
|
26
|
-
|
|
25
|
+
start_service
|
|
26
|
+
sync_codebase do
|
|
27
|
+
do_work(unpackage_cmd)
|
|
28
|
+
end
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
Process.waitpid client
|
|
@@ -31,36 +33,11 @@ class SyncCodebaseTest < Test::Unit::TestCase
|
|
|
31
33
|
assert !File.exists?("test_sync_codebase/#{package_copy_file}")
|
|
32
34
|
ensure
|
|
33
35
|
stop_service rescue nil
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
kill_process master
|
|
37
|
+
kill_process client
|
|
36
38
|
FileUtils.rm_rf("test_sync_codebase")
|
|
37
39
|
Dir.chdir(testdata_dir) do
|
|
38
40
|
DTR::Cmd.execute('rake dtr_clobber_package')
|
|
39
41
|
end
|
|
40
42
|
end
|
|
41
|
-
|
|
42
|
-
def test_should_not_sync_codebase_and_setup_working_dir_when_agent_is_in_same_dir_with_master_process
|
|
43
|
-
@master_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata/verify_dir_pwd')
|
|
44
|
-
@agent = start_agent_at @master_dir, 2, false
|
|
45
|
-
begin
|
|
46
|
-
assert_fork_process_exits_ok do
|
|
47
|
-
Dir.chdir(@master_dir) do
|
|
48
|
-
require 'verify_dir_pwd_test_case'
|
|
49
|
-
end
|
|
50
|
-
$argv_dup = ['verify_dir_pwd_test_case.rb']
|
|
51
|
-
suite = Test::Unit::TestSuite.new('test_should_not_sync_codebase_and_setup_working_dir')
|
|
52
|
-
suite << VerifyDirPwdTestCase.suite
|
|
53
|
-
|
|
54
|
-
Dir.chdir(@master_dir) do
|
|
55
|
-
result = runit(suite)
|
|
56
|
-
assert result.passed?
|
|
57
|
-
assert_equal 1, result.run_count
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
ensure
|
|
61
|
-
DTR.kill_process @agent
|
|
62
|
-
Process.waitall
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
43
|
end
|
|
@@ -5,7 +5,7 @@ include DTR::AgentHelper
|
|
|
5
5
|
class SyncLoggerTest < Test::Unit::TestCase
|
|
6
6
|
|
|
7
7
|
def setup
|
|
8
|
-
start_agents
|
|
8
|
+
start_agents(:size => 1)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def teardown
|
|
@@ -13,8 +13,8 @@ class SyncLoggerTest < Test::Unit::TestCase
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def test_master_process_should_get_log_of_agents
|
|
16
|
+
@logger = LoggerStub.new
|
|
16
17
|
assert_fork_process_exits_ok do
|
|
17
|
-
@logger = LoggerStub.new
|
|
18
18
|
DTR.logger = @logger
|
|
19
19
|
|
|
20
20
|
$argv_dup = ['a_test_case.rb']
|
|
@@ -23,10 +23,13 @@ class SyncLoggerTest < Test::Unit::TestCase
|
|
|
23
23
|
runit(suite)
|
|
24
24
|
|
|
25
25
|
logs = @logger.logs.flatten.join("\n")
|
|
26
|
-
|
|
26
|
+
# puts logs
|
|
27
|
+
assert(/From #{Socket.gethostname}: => Herald starts off/ =~ logs)
|
|
27
28
|
assert(/From #{Socket.gethostname}: runner0: test files loaded/ =~ logs)
|
|
28
29
|
#when use Delegator to implement UndumpedLogger, there are lots of 'nil' in the log
|
|
29
30
|
assert(/nil/ !~ logs)
|
|
30
31
|
end
|
|
32
|
+
ensure
|
|
33
|
+
@logger.clear
|
|
31
34
|
end
|
|
32
35
|
end
|