xli-dtr 0.0.5 → 1.0.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.
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
@@ -5,37 +5,20 @@ include DTR::AgentHelper
5
5
  class GeneralTest < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
- #start_agents first for test files loaded would be copied into sub processes
9
8
  start_agents
10
- # put these here for we don't want run them in current process
11
- @pwd = Dir.pwd
12
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/"))
13
- require 'a_test_case'
14
- require 'a_test_case2'
15
- require 'a_failed_test_case'
16
- require 'an_error_test_case'
17
- require 'a_file_system_test_case'
18
- require 'scenario_test_case'
19
- require 'setup_agent_env_test_case'
20
-
21
- DTR.inject
22
9
  end
23
10
 
24
11
  def teardown
25
- DTR.reject
26
- Dir.chdir(@pwd)
27
12
  stop_agents
28
- $argv_dup = nil
29
13
  end
30
14
 
31
15
  def test_run_test_passed
32
- $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb']
33
- suite = Test::Unit::TestSuite.new('run_test_passed')
34
- suite << ATestCase.suite
35
- suite << ATestCase2.suite
36
- suite << AFileSystemTestCase.suite
37
-
38
16
  assert_fork_process_exits_ok do
17
+ $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb']
18
+ suite = Test::Unit::TestSuite.new('run_test_passed')
19
+ suite << ATestCase.suite
20
+ suite << ATestCase2.suite
21
+ suite << AFileSystemTestCase.suite
39
22
  @result = runit(suite)
40
23
 
41
24
  assert @result.passed?
@@ -46,12 +29,11 @@ class GeneralTest < Test::Unit::TestCase
46
29
  end
47
30
 
48
31
  def test_run_test_failed
49
- $argv_dup = ['a_test_case.rb', 'a_failed_test_case.rb']
50
- suite = Test::Unit::TestSuite.new('test_run_test_failed')
51
- suite << ATestCase.suite
52
- suite << AFailedTestCase.suite
53
-
54
32
  assert_fork_process_exits_ok do
33
+ $argv_dup = ['a_test_case.rb', 'a_failed_test_case.rb']
34
+ suite = Test::Unit::TestSuite.new('test_run_test_failed')
35
+ suite << ATestCase.suite
36
+ suite << AFailedTestCase.suite
55
37
  @result = runit(suite)
56
38
 
57
39
  assert !@result.passed?
@@ -62,12 +44,12 @@ class GeneralTest < Test::Unit::TestCase
62
44
  end
63
45
 
64
46
  def test_run_test_error
65
- $argv_dup = ['a_test_case.rb', 'an_error_test_case.rb']
66
- suite = Test::Unit::TestSuite.new('test_run_test_error')
67
- suite << ATestCase.suite
68
- suite << AnErrorTestCase.suite
69
-
70
47
  assert_fork_process_exits_ok do
48
+ $argv_dup = ['a_test_case.rb', 'an_error_test_case.rb']
49
+ suite = Test::Unit::TestSuite.new('test_run_test_error')
50
+ suite << ATestCase.suite
51
+ suite << AnErrorTestCase.suite
52
+
71
53
  @result = runit(suite)
72
54
 
73
55
  assert_false @result.passed?
@@ -78,11 +60,11 @@ class GeneralTest < Test::Unit::TestCase
78
60
  end
79
61
 
80
62
  def test_run_suite_should_be_independence
81
- $argv_dup = ['an_error_test_case.rb']
82
- suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 1')
83
- suite << AnErrorTestCase.suite
84
-
85
63
  assert_fork_process_exits_ok do
64
+ $argv_dup = ['an_error_test_case.rb']
65
+ suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 1')
66
+ suite << AnErrorTestCase.suite
67
+
86
68
  @result = runit(suite)
87
69
 
88
70
  assert_false @result.passed?
@@ -91,11 +73,11 @@ class GeneralTest < Test::Unit::TestCase
91
73
  assert_equal 1, @result.error_count
92
74
  end
93
75
 
94
- $argv_dup = ['a_test_case.rb']
95
- suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 2')
96
- suite << ATestCase.suite
97
-
98
76
  assert_fork_process_exits_ok do
77
+ $argv_dup = ['a_test_case.rb']
78
+ suite = Test::Unit::TestSuite.new('test_run_suite_should_be_independence 2')
79
+ suite << ATestCase.suite
80
+
99
81
  @result = runit(suite)
100
82
 
101
83
  assert @result.passed?
@@ -106,11 +88,11 @@ class GeneralTest < Test::Unit::TestCase
106
88
  end
107
89
 
108
90
  def test_should_ignore_environment_file_not_exists
109
- $argv_dup = ['a_test_case.rb', 'test_file_not_exists.rb']
110
- suite = Test::Unit::TestSuite.new('test_run_test_file_not_exist')
111
- suite << ATestCase.suite
112
-
113
91
  assert_fork_process_exits_ok do
92
+ $argv_dup = ['a_test_case.rb', 'test_file_not_exists.rb']
93
+ suite = Test::Unit::TestSuite.new('test_run_test_file_not_exist')
94
+ suite << ATestCase.suite
95
+
114
96
  @result = runit(suite)
115
97
 
116
98
  assert @result.passed?
@@ -121,10 +103,10 @@ class GeneralTest < Test::Unit::TestCase
121
103
  end
122
104
 
123
105
  def test_run_empty_test_suite_and_no_test_files_in_environment
124
- $argv_dup = []
125
- suite = Test::Unit::TestSuite.new('test_run_without_test_files')
126
-
127
106
  assert_fork_process_exits_ok do
107
+ $argv_dup = []
108
+ suite = Test::Unit::TestSuite.new('test_run_without_test_files')
109
+
128
110
  @result = runit(suite)
129
111
 
130
112
  assert @result.passed?
@@ -135,10 +117,10 @@ class GeneralTest < Test::Unit::TestCase
135
117
  end
136
118
 
137
119
  def test_run_empty_test_suite_should_not_crash_agent
138
- $argv_dup = []
139
- suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent')
140
-
141
120
  assert_fork_process_exits_ok do
121
+ $argv_dup = []
122
+ suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent')
123
+
142
124
  @result = runit(suite)
143
125
 
144
126
  assert @result.passed?
@@ -147,9 +129,11 @@ class GeneralTest < Test::Unit::TestCase
147
129
  assert_equal 0, @result.error_count
148
130
  end
149
131
 
150
- $argv_dup = ['a_test_case.rb']
151
- suite << ATestCase.suite
152
132
  assert_fork_process_exits_ok do
133
+ $argv_dup = ['a_test_case.rb']
134
+ suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_should_not_crash_agent')
135
+ suite << ATestCase.suite
136
+
153
137
  @result = runit(suite)
154
138
 
155
139
  assert @result.passed?
@@ -160,10 +144,10 @@ class GeneralTest < Test::Unit::TestCase
160
144
  end
161
145
 
162
146
  def test_run_empty_test_suite_and_test_files_not_exist_in_environment
163
- $argv_dup = ['test_file_not_exists.rb']
164
- suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_and_test_files_not_exist_in_environment')
165
-
166
147
  assert_fork_process_exits_ok do
148
+ $argv_dup = ['test_file_not_exists.rb']
149
+ suite = Test::Unit::TestSuite.new('test_run_empty_test_suite_and_test_files_not_exist_in_environment')
150
+
167
151
  @result = runit(suite)
168
152
 
169
153
  assert @result.passed?
@@ -174,14 +158,14 @@ class GeneralTest < Test::Unit::TestCase
174
158
  end
175
159
 
176
160
  def test_run_test_specified_by_load_path
177
- lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib')
178
- $LOAD_PATH.unshift lib_path
179
- require 'lib_test_case'
180
- $argv_dup = ['lib_test_case.rb']
181
- suite = Test::Unit::TestSuite.new('test_run_test_specified_by_load_path')
182
- suite << LibTestCase.suite
183
-
184
161
  assert_fork_process_exits_ok do
162
+ lib_path = File.expand_path(File.dirname(__FILE__) + '/../../testdata/lib')
163
+ $LOAD_PATH.unshift lib_path
164
+ require 'lib_test_case'
165
+ $argv_dup = ['lib_test_case.rb']
166
+ suite = Test::Unit::TestSuite.new('test_run_test_specified_by_load_path')
167
+ suite << LibTestCase.suite
168
+
185
169
  @result = runit(suite)
186
170
 
187
171
  assert @result.passed?
@@ -189,16 +173,14 @@ class GeneralTest < Test::Unit::TestCase
189
173
  assert_equal 0, @result.failure_count
190
174
  assert_equal 0, @result.error_count
191
175
  end
192
- ensure
193
- $LOAD_PATH.delete lib_path
194
176
  end
195
177
 
196
178
  def test_message_of_errors_and_failures_should_include_runner_host_name
197
- $argv_dup = ['scenario_test_case.rb']
198
- suite = Test::Unit::TestSuite.new('test_should_wrapper_errors_by_dtr_remote_exception')
199
- suite << ScenarioTestCase.suite
200
-
201
179
  assert_fork_process_exits_ok do
180
+ $argv_dup = ['scenario_test_case.rb']
181
+ suite = Test::Unit::TestSuite.new('test_should_wrapper_errors_by_dtr_remote_exception')
182
+ suite << ScenarioTestCase.suite
183
+
202
184
  @result = runit(suite)
203
185
 
204
186
  assert !@result.passed?
@@ -216,11 +198,12 @@ class GeneralTest < Test::Unit::TestCase
216
198
  end
217
199
 
218
200
  def test_setup_agent_env_from_master_process
219
- $argv_dup = ['setup_agent_env_test_case.rb']
220
- suite = Test::Unit::TestSuite.new('setup_agent_env_from_master_process')
221
- suite << SetupAgentEnvTestCase.suite
222
- ENV['DTR_AGENT_ENV_SETUP_CMD'] = 'touch /tmp/test_setup_agent_env_from_master_process'
223
201
  assert_fork_process_exits_ok do
202
+ $argv_dup = ['setup_agent_env_test_case.rb']
203
+ suite = Test::Unit::TestSuite.new('setup_agent_env_from_master_process')
204
+ suite << SetupAgentEnvTestCase.suite
205
+ ENV['DTR_AGENT_ENV_SETUP_CMD'] = 'touch /tmp/test_setup_agent_env_from_master_process'
206
+
224
207
  @result = runit(suite)
225
208
  assert @result.passed?
226
209
  assert_equal 1, @result.run_count
@@ -229,23 +212,25 @@ class GeneralTest < Test::Unit::TestCase
229
212
  end
230
213
  ensure
231
214
  File.delete('/tmp/test_setup_agent_env_from_master_process') rescue nil
232
- ENV['DTR_AGENT_ENV_SETUP_CMD'] = nil
233
215
  end
234
216
 
235
217
  def test_multi_dtr_tasks_should_be_queued_and_processed_one_by_one
236
- testdata_dir = File.expand_path('./../testdata')
237
- $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb']
238
- suite = Test::Unit::TestSuite.new('run_test_passed')
239
- suite << ATestCase.suite
240
- suite << ATestCase2.suite
241
- suite << AFileSystemTestCase.suite
218
+ testdata_dir = File.expand_path(File.dirname(__FILE__) + "/../../testdata/")
242
219
  process_assertion = Proc.new do |master_dir|
243
220
  FileUtils.cp_r testdata_dir, master_dir
244
221
  begin
245
222
  Dir.chdir(master_dir) do
246
- result = runit(suite)
247
- assert result.passed?
248
- assert_equal 3, result.run_count
223
+ $argv_dup = ['a_test_case.rb', 'a_test_case2.rb', 'a_file_system_test_case.rb']
224
+ setup_test_env
225
+ suite = Test::Unit::TestSuite.new('run_test_passed')
226
+ suite << ATestCase.suite
227
+ suite << ATestCase2.suite
228
+ suite << AFileSystemTestCase.suite
229
+ with_agent_helper_group do
230
+ result = runit(suite)
231
+ assert result.passed?
232
+ assert_equal 3, result.run_count
233
+ end
249
234
  end
250
235
  ensure
251
236
  FileUtils.rm_rf master_dir
@@ -269,7 +254,78 @@ class GeneralTest < Test::Unit::TestCase
269
254
  assert_equal 0, $?.exitstatus
270
255
  ensure
271
256
  @test_processes.each do |pid|
272
- Process.kill 'TERM', pid rescue nil
257
+ DTR.kill_process pid
258
+ end
259
+ end
260
+
261
+ def test_run_test_case_hacked_run_method
262
+ assert_fork_process_exits_ok do
263
+ require 'hacked_run_method_test_case'
264
+
265
+ $argv_dup = ['hacked_run_method_test_case.rb']
266
+ suite = Test::Unit::TestSuite.new('run_test_case_hacked_run_method')
267
+ suite << HackedRunMethodTestCase.suite
268
+
269
+ @result = runit(suite)
270
+
271
+ assert @result.passed?
272
+ assert_equal 1, @result.run_count
273
+ assert_equal 0, @result.failure_count
274
+ assert_equal 0, @result.error_count
275
+ end
276
+ end
277
+
278
+ def test_should_not_break_heartbeat_of_master_process_when_run_with_a_test_case_sleep_long_time
279
+ assert_fork_process_exits_ok do
280
+ DTR.configuration.master_heartbeat_interval = 1
281
+ DTR.configuration.follower_listen_heartbeat_timeout = 2
282
+
283
+ require 'sleep_3_secs_test_case'
284
+
285
+ $argv_dup = ['sleep_3_secs_test_case.rb']
286
+ suite = Test::Unit::TestSuite.new('run_test_case_sleep_3_secs')
287
+ suite << Sleep3SecsTestCase.suite
288
+
289
+ @result = runit(suite)
290
+
291
+ assert @result.passed?
292
+ assert_equal 1, @result.run_count
293
+ assert_equal 0, @result.failure_count
294
+ assert_equal 0, @result.error_count
295
+ end
296
+ end
297
+
298
+ def test_should_add_meaningful_error_when_runner_get_a_unknown_test
299
+ assert_fork_process_exits_ok do
300
+ $argv_dup = ['a_failed_test_case.rb']
301
+ suite = Test::Unit::TestSuite.new('should_add_meaningful_error_when_runner_get_a_unknown_test')
302
+ suite << ATestCase.suite
303
+
304
+ @result = runit(suite)
305
+
306
+ assert !@result.passed?
307
+ assert_equal 1, @result.run_count
308
+ assert_equal 0, @result.failure_count
309
+ assert_equal 1, @result.error_count
310
+ assert_equal "DTR::RemoteError: DTR::Agent::UnknownTestError from #{Socket.gethostname}: No such test loaded: ATestCase", @result.errors.first.message
311
+ end
312
+ end
313
+
314
+ def test_run_test_timeout
315
+ assert_fork_process_exits_ok do
316
+ require 'sleep_3_secs_test_case'
317
+ $argv_dup = ['sleep_3_secs_test_case.rb']
318
+ suite = Test::Unit::TestSuite.new('run_test_case_sleep_3_secs')
319
+ suite << Sleep3SecsTestCase.suite
320
+
321
+ ENV['RUN_TEST_TIMEOUT'] = '1'
322
+ @result = runit(suite)
323
+
324
+ assert !@result.passed?
325
+ assert_equal 1, @result.run_count
326
+ assert_equal 0, @result.failure_count
327
+ assert_equal 1, @result.error_count
328
+ assert @result.errors.first.message.include?('Timeout')
273
329
  end
274
330
  end
275
331
  end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ include DTR::AgentHelper
3
+
4
+ class RakeTasksTest < Test::Unit::TestCase
5
+ def test_test_task
6
+ FileUtils.mkdir_p("raketasks_test_agent")
7
+ Dir.chdir('raketasks_test_agent') do
8
+ start_agents
9
+ end
10
+ test_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata/raketasks')
11
+ Dir.chdir(test_dir) do
12
+ output = %x[rake dtr]
13
+ expected = <<-OUTPUT
14
+ 1 tests, 1 assertions, 0 failures, 0 errors
15
+ OUTPUT
16
+ assert_equal 0, $?.exitstatus
17
+ assert output.include?(expected), "should include #{expected}"
18
+ end
19
+ ensure
20
+ stop_agents
21
+ FileUtils.rm_rf("raketasks_test_agent")
22
+ end
23
+ end
@@ -12,7 +12,7 @@ class SyncCodebaseTest < Test::Unit::TestCase
12
12
  DTR.configuration.with_rinda_server do
13
13
  Dir.chdir(testdata_dir) do
14
14
  DTR::Cmd.execute('rake dtr_repackage')
15
- provide_file DTR::SyncCodebase::Codebase.new
15
+ provide_file DTR::SyncCodebase::CopiablePackage.new
16
16
  DRb.thread.join
17
17
  end
18
18
  end
@@ -31,8 +31,8 @@ class SyncCodebaseTest < Test::Unit::TestCase
31
31
  assert !File.exists?("test_sync_codebase/#{package_copy_file}")
32
32
  ensure
33
33
  stop_service rescue nil
34
- Process.kill 'TERM', master rescue nil
35
- Process.kill 'TERM', client rescue nil
34
+ DTR.kill_process master
35
+ DTR.kill_process client
36
36
  FileUtils.rm_rf("test_sync_codebase")
37
37
  Dir.chdir(testdata_dir) do
38
38
  DTR::Cmd.execute('rake dtr_clobber_package')
@@ -40,17 +40,17 @@ class SyncCodebaseTest < Test::Unit::TestCase
40
40
  end
41
41
 
42
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/should_not_sync_codebase_and_setup_working_dir_when_agent_is_in_same_dir_with_master_process')
44
- Dir.chdir(@master_dir) do
45
- require 'verify_dir_pwd_test_case'
46
- end
47
- $argv_dup = ['verify_dir_pwd_test_case.rb']
48
- suite = Test::Unit::TestSuite.new('test_should_not_sync_codebase_and_setup_working_dir')
49
- suite << VerifyDirPwdTestCase.suite
43
+ @master_dir = File.expand_path(File.dirname(__FILE__) + '/../../testdata/verify_dir_pwd')
50
44
  @agent = start_agent_at @master_dir, 2, false
51
45
  begin
52
- DTR.inject
53
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
54
  Dir.chdir(@master_dir) do
55
55
  result = runit(suite)
56
56
  assert result.passed?
@@ -58,8 +58,7 @@ class SyncCodebaseTest < Test::Unit::TestCase
58
58
  end
59
59
  end
60
60
  ensure
61
- DTR.reject
62
- Process.kill 'TERM', @agent rescue nil
61
+ DTR.kill_process @agent
63
62
  Process.waitall
64
63
  end
65
64
  end
@@ -6,36 +6,27 @@ class SyncLoggerTest < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
8
  start_agents
9
- # put these here for we don't want run them in current process
10
- @pwd = Dir.pwd
11
- Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../../testdata/"))
12
- require 'a_test_case'
13
- @logger = LoggerStub.new
14
- DTR.logger = @logger
15
- DTR.inject
16
9
  end
17
10
 
18
11
  def teardown
19
- DTR.reject
20
- Dir.chdir(@pwd)
21
12
  stop_agents
22
- $argv_dup = nil
23
- DTR.logger = nil
24
- @logger.clear
25
13
  end
26
14
 
27
- #todo fix random failure
28
15
  def test_master_process_should_get_log_of_agents
29
- $argv_dup = ['a_test_case.rb']
30
- suite = Test::Unit::TestSuite.new('test_master_process_should_get_log_of_agents')
31
- suite << ATestCase.suite
32
16
  assert_fork_process_exits_ok do
17
+ @logger = LoggerStub.new
18
+ DTR.logger = @logger
19
+
20
+ $argv_dup = ['a_test_case.rb']
21
+ suite = Test::Unit::TestSuite.new('master_process_should_get_log_of_agents')
22
+ suite << ATestCase.suite
33
23
  runit(suite)
24
+
25
+ logs = @logger.logs.flatten.join("\n")
26
+ assert(/From #{Socket.gethostname}: => Herald starts off\.\.\./ =~ logs)
27
+ assert(/From #{Socket.gethostname}: runner0: test files loaded/ =~ logs)
28
+ #when use Delegator to implement UndumpedLogger, there are lots of 'nil' in the log
29
+ assert(/nil/ !~ logs)
34
30
  end
35
- logs = @logger.logs.flatten.join("\n")
36
- assert(/From #{Socket.gethostname}: => Herald starts off\.\.\./ =~ logs)
37
- assert(/From #{Socket.gethostname}: runner0: test files loaded/ =~ logs)
38
- #when use Delegator to implement UndumpedLogger, there are lots of 'nil' in the log
39
- assert(/nil/ !~ logs)
40
31
  end
41
32
  end
data/test/agent_helper.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require 'fileutils'
2
2
  module DTR
3
3
  module AgentHelper
4
- def start_agents
4
+ GROUP = 'dtr acceptance tests'
5
+ def start_agents(size = 3)
5
6
  @agents_dir = File.join(Dir.pwd, 'agents')
6
7
  @agents = []
7
- @agents << start_agent_at(File.join(@agents_dir, 'agent1'), 3)
8
+ @agents << start_agent_at(File.join(@agents_dir, 'agent1'), size)
8
9
  # @agents << start_agent_at(File.join(@agents_dir, 'agent2'), 1)
9
10
  end
10
11
 
@@ -14,13 +15,9 @@ module DTR
14
15
  runner_names = []
15
16
  size.times {|i| runner_names << "runner#{i}"}
16
17
  Process.fork do
17
- begin
18
- Dir.chdir(agent_dir) do
19
- DTR.launch_agent(runner_names, nil)
20
- end
21
- rescue Exception => e
22
- puts e.message
23
- puts e.backtrace.join("\n")
18
+ Dir.chdir(agent_dir) do
19
+ DTR.configuration.group = GROUP
20
+ DTR.launch_agent(runner_names, nil)
24
21
  end
25
22
  end
26
23
  end
@@ -28,9 +25,10 @@ module DTR
28
25
  def stop_agents
29
26
  if @agents
30
27
  @agents.each do |agent|
31
- Process.kill 'TERM', agent rescue nil
28
+ DTR.kill_process agent
32
29
  end
33
30
  Process.waitall
31
+ sleep 1
34
32
  end
35
33
  ensure
36
34
  FileUtils.rm_rf(@agents_dir) rescue nil
data/test/logger_stub.rb CHANGED
@@ -15,6 +15,10 @@ class LoggerStub
15
15
  output(:error, message, &block)
16
16
  end
17
17
 
18
+ def level
19
+ Logger::INFO
20
+ end
21
+
18
22
  def output(level, msg=nil, &block)
19
23
  message = block_given? ? block.call : msg.to_s
20
24
  @store << [:logs, [level, message]]
data/test/test_helper.rb CHANGED
@@ -4,11 +4,11 @@ require 'test/unit/ui/console/testrunner'
4
4
  $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
5
5
 
6
6
  require 'rubygems'
7
- # require 'growling_test'
7
+ require 'growling_test'
8
8
  require 'dtr'
9
9
  require 'dtr/test_unit'
10
- # DTR.configuration.master_yell_interval = 2
11
- # DTR.configuration.follower_listen_sleep_timeout = 3
10
+ DTR.configuration.master_heartbeat_interval = 2
11
+ DTR.configuration.follower_listen_heartbeat_timeout = 3
12
12
 
13
13
  require File.dirname(__FILE__) + '/agent_helper'
14
14
  require File.dirname(__FILE__) + '/logger_stub'
@@ -23,17 +23,45 @@ module Test
23
23
  end
24
24
  def assert_fork_process_exits_ok(&block)
25
25
  pid = Process.fork do
26
- block.call
26
+ Dir.chdir(File.expand_path(File.dirname(__FILE__) + "/../testdata/")) do
27
+ setup_test_env
28
+ with_agent_helper_group(&block)
29
+ end
27
30
  exit 0
28
31
  end
29
32
  Process.waitpid pid
30
33
  assert_equal 0, $?.exitstatus
31
34
  ensure
32
- Process.kill 'TERM', pid rescue nil
35
+ DTR.kill_process pid
36
+ end
37
+
38
+ def with_agent_helper_group(&block)
39
+ DTR.configuration.group = DTR::AgentHelper::GROUP
40
+ begin
41
+ block.call
42
+ ensure
43
+ DTR.configuration.group = nil
44
+ end
33
45
  end
46
+
47
+ def setup_test_env
48
+ require 'a_test_case'
49
+ require 'a_test_case2'
50
+ require 'a_failed_test_case'
51
+ require 'an_error_test_case'
52
+ require 'a_file_system_test_case'
53
+ require 'scenario_test_case'
54
+ require 'setup_agent_env_test_case'
55
+ DTR.inject
56
+ end
57
+
34
58
  def runit(suite)
35
59
  Test::Unit::UI::Console::TestRunner.run(suite, Test::Unit::UI::SILENT)
36
60
  end
61
+ def clear_configuration
62
+ DTR::EnvStore.destroy
63
+ DTR.configuration.load
64
+ end
37
65
  end
38
66
  end
39
67
  end