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.
- data/CHANGES +7 -0
- data/README.rdoc +208 -0
- data/Rakefile +54 -63
- data/TODO +7 -16
- data/bin/dtr +26 -20
- data/dtr.gemspec +7 -10
- data/lib/dtr/agent/brain.rb +13 -22
- data/lib/dtr/agent/herald.rb +24 -14
- data/lib/dtr/agent/runner.rb +22 -35
- data/lib/dtr/agent/sync_codebase.rb +1 -1
- data/lib/dtr/agent/sync_logger.rb +38 -8
- data/lib/dtr/agent/test_case.rb +53 -0
- data/lib/dtr/agent/test_unit.rb +3 -5
- data/lib/dtr/agent/worker.rb +29 -32
- data/lib/dtr/agent/working_env_ext.rb +4 -2
- data/lib/dtr/agent.rb +2 -1
- data/lib/dtr/facade.rb +65 -0
- data/lib/dtr/master.rb +3 -3
- data/lib/dtr/monitor.rb +69 -11
- data/lib/dtr/raketasks.rb +91 -19
- data/lib/dtr/shared/adapter.rb +29 -26
- data/lib/dtr/shared/configuration.rb +39 -11
- data/lib/dtr/shared/message_decorator.rb +1 -1
- data/lib/dtr/shared/ruby_ext.rb +1 -25
- data/lib/dtr/shared/service/agent.rb +5 -1
- data/lib/dtr/shared/service/file.rb +1 -1
- data/lib/dtr/shared/service/rinda.rb +11 -3
- data/lib/dtr/shared/service/runner.rb +6 -5
- data/lib/dtr/shared/service/working_env.rb +1 -1
- data/lib/dtr/shared/service.rb +1 -1
- data/lib/dtr/shared/sync_codebase/{codebase.rb → copiable_package.rb} +13 -5
- data/lib/dtr/shared/sync_codebase/master_ext.rb +6 -18
- data/lib/dtr/shared/sync_codebase/package.rb +16 -2
- data/lib/dtr/shared/sync_codebase/sync_service.rb +7 -12
- data/lib/dtr/shared/sync_codebase.rb +2 -2
- data/lib/dtr/shared/sync_logger.rb +6 -14
- data/lib/dtr/shared/utils/cmd.rb +5 -5
- data/lib/dtr/shared/utils/env_store.rb +1 -1
- data/lib/dtr/shared/utils/logger.rb +33 -17
- data/lib/dtr/shared/utils.rb +1 -1
- data/lib/dtr/shared/working_env.rb +2 -2
- data/lib/dtr/shared.rb +1 -1
- data/lib/dtr/test_unit/drb_test_runner.rb +5 -14
- data/lib/dtr/test_unit/injection.rb +1 -2
- data/lib/dtr/test_unit/test_case_injection.rb +13 -13
- data/lib/dtr/test_unit/test_suite_injection.rb +24 -0
- data/lib/dtr/test_unit/testrunnermediator_injection.rb +11 -11
- data/lib/dtr/test_unit/thread_safe_test_result.rb +1 -3
- data/lib/dtr/test_unit/worker_club.rb +7 -7
- data/lib/dtr/test_unit.rb +2 -1
- data/lib/dtr/test_unit_injection.rb +1 -1
- data/lib/dtr.rb +5 -36
- data/test/acceptance/agent_working_env_test.rb +28 -34
- data/test/acceptance/dtr_package_task_test.rb +13 -3
- data/test/acceptance/general_test.rb +139 -83
- data/test/acceptance/raketasks_test.rb +23 -0
- data/test/acceptance/sync_codebase_test.rb +12 -13
- data/test/acceptance/sync_logger_test.rb +12 -21
- data/test/agent_helper.rb +8 -10
- data/test/logger_stub.rb +4 -0
- data/test/test_helper.rb +33 -5
- data/test/unit/adapter_test.rb +58 -16
- data/test/unit/configuration_test.rb +44 -0
- data/test/unit/facade_test.rb +41 -0
- data/test/unit/logger_test.rb +72 -0
- data/test/unit/test_unit_test.rb +0 -21
- data/testdata/Rakefile +1 -5
- data/testdata/hacked_run_method_test_case.rb +15 -0
- data/testdata/raketasks/Rakefile +7 -0
- data/testdata/raketasks/success_test_case.rb +6 -0
- data/testdata/sleep_3_secs_test_case.rb +9 -0
- 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
- metadata +33 -13
- data/README +0 -182
- data/install.rb +0 -88
- /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
data/README
DELETED
@@ -1,182 +0,0 @@
|
|
1
|
-
= DTR -- Distributed Test Runner
|
2
|
-
|
3
|
-
Supporting DTR version: 0.0.x
|
4
|
-
|
5
|
-
This package contains DTR, a distributed test runner program for decreasing
|
6
|
-
time of running ruby tests, only supporting Test::Unit ruby testing framework
|
7
|
-
currently.
|
8
|
-
|
9
|
-
DTR has the following features:
|
10
|
-
|
11
|
-
* Run tests in mutli processes or on distributed machines.
|
12
|
-
|
13
|
-
* Hot plug distributed agents.
|
14
|
-
|
15
|
-
* Runtime injection, all tests run in same environment.
|
16
|
-
|
17
|
-
DTR works in two parts: Runner Agent and DTR Master.
|
18
|
-
|
19
|
-
* Runner Agent is a DRb service hosting on distributed machines to run tests. For using 'fork' to create runner process, Runner Agent can't run on Windows directly.
|
20
|
-
|
21
|
-
* DTR Master is the process finding runner service to run tests and collect test results. It works by loading 'dtr/test_unit_injection.rb' with all test files.
|
22
|
-
|
23
|
-
DTR doesn't synchronize codebase, so you need to consider using synchronize tools
|
24
|
-
(e.g. rsync(http://samba.anu.edu.au/rsync/)) or distributed version control system
|
25
|
-
(e.g. mercurial(http://www.selenic.com/mercurial/wiki/)) to synchronize project
|
26
|
-
files between machines. The distributed version control system Mercurial is cool for
|
27
|
-
synchronizing codebase between machines, see the example "Setup a development build
|
28
|
-
grid".
|
29
|
-
|
30
|
-
== Download
|
31
|
-
|
32
|
-
The latest version of DTR can be found at
|
33
|
-
|
34
|
-
* http://github.com/xli/dtr/tree/master
|
35
|
-
|
36
|
-
== Installation
|
37
|
-
|
38
|
-
=== Normal Installation
|
39
|
-
|
40
|
-
You can install DTR with the following command.
|
41
|
-
|
42
|
-
% ruby install.rb
|
43
|
-
|
44
|
-
from its distribution directory.
|
45
|
-
|
46
|
-
=== GEM Installation
|
47
|
-
|
48
|
-
Download and install DTR with the following.
|
49
|
-
|
50
|
-
gem install --remote dtr
|
51
|
-
|
52
|
-
=== Running the DTR Test Suite
|
53
|
-
|
54
|
-
If you wish to run the unit and functional tests that come with DTR:
|
55
|
-
|
56
|
-
* CD into the top project directory of dtr.
|
57
|
-
* Type the following:
|
58
|
-
|
59
|
-
rake # You need a version of rake installed
|
60
|
-
|
61
|
-
== Simple Example
|
62
|
-
|
63
|
-
Once installed, you can run DTR server anywhere:
|
64
|
-
|
65
|
-
% dtr -s
|
66
|
-
|
67
|
-
If you are running Runner Agent on remote machine, please specify the DTR server machine ip:
|
68
|
-
|
69
|
-
% dtr -s --server_address dtr_server_ip
|
70
|
-
|
71
|
-
After server started, you can run DTR runner agent at your project directory as follows:
|
72
|
-
|
73
|
-
% dtr --server_address dtr_server_ip -r runner_name
|
74
|
-
|
75
|
-
Type "dtr --help" for an up-to-date option summary.
|
76
|
-
Invoking <tt>dtr</tt> without any options causes dtr to show help too.
|
77
|
-
|
78
|
-
Most of time your project test suite need setup environment before run tests, you
|
79
|
-
can set setup command by option '--setup', for example:
|
80
|
-
|
81
|
-
% dtr --server_address dtr_server_ip -r runner1 --setup "rake db:test:prepare"
|
82
|
-
|
83
|
-
At last, you need to add 'dtr/test_unit_injection.rb' into test_files of your test
|
84
|
-
task in your Rakefile, and for load it, you also need add dtr lib path:
|
85
|
-
|
86
|
-
require 'dtr'
|
87
|
-
|
88
|
-
DTR.broadcast_list = ['dtr server ip']
|
89
|
-
|
90
|
-
Rake::TestTask.new(:dtr_tests) do |t|
|
91
|
-
t.libs << DTR.lib_path
|
92
|
-
t.test_files = FileList['dtr/test_unit_injection.rb', 'test/*test.rb']
|
93
|
-
t.warning = false
|
94
|
-
t.verbose = false
|
95
|
-
end
|
96
|
-
|
97
|
-
In the case above we changed dtr broadcast list for listening remote dtr server.
|
98
|
-
And you also can use *DTR.port = 1234* to change the port listening. These two
|
99
|
-
options would be cached in the directory running the test or any other dtr processes
|
100
|
-
(e.g. dtr runner agent or dtr server).
|
101
|
-
|
102
|
-
== Run tests in multi-processes on one machine
|
103
|
-
|
104
|
-
For running Runner in multi-processes.
|
105
|
-
The following is the test task example in the rake file:
|
106
|
-
|
107
|
-
require 'dtr/raketasks'
|
108
|
-
|
109
|
-
DTR::TestTask.new :test do |t|
|
110
|
-
t.test_files = FileList['test/*test.rb']
|
111
|
-
t.processes = 2 #default is 2
|
112
|
-
end
|
113
|
-
|
114
|
-
=== Runner Agent
|
115
|
-
|
116
|
-
* Clone repository from M1 to M2 in home directory: hg clone http: //M1_IP:8000/pet_store
|
117
|
-
* Start runner agent in the directory ~/pet_store on M2: rake --rakefile dtr_tasks.rake dtr:runner_agent
|
118
|
-
* Start runner agent on M3 same with above.
|
119
|
-
|
120
|
-
=== Run DTR Master on M1
|
121
|
-
|
122
|
-
* Commit all changes into Mercurial
|
123
|
-
* rake --rakefile dtr_tasks.rake dtr
|
124
|
-
* After you started the DTR Master, you can type the following to monitor the DTR Server status: dtr -a $DEV_BUILD_SERVER -m
|
125
|
-
* For output into console, open the debug option: dtr -a $DEV_BUILD_SERVER -d -m
|
126
|
-
|
127
|
-
== Credits
|
128
|
-
|
129
|
-
[<b>Josh Price</b>] For fixing tests packer in release 0.0.1.
|
130
|
-
|
131
|
-
[<b>Wang Pengchao</b>] For sharing lots of ideas.
|
132
|
-
|
133
|
-
[<b>Barrow H Kwan</b>] For patch of specifying DTR server port.
|
134
|
-
|
135
|
-
[<b>Mingle team</b>(http://studios.thoughtworks.com/mingle-project-intelligence)] For making all these happen.
|
136
|
-
|
137
|
-
== License
|
138
|
-
|
139
|
-
DTR is available under an Apache License Version 2.
|
140
|
-
|
141
|
-
== Support
|
142
|
-
|
143
|
-
Feel free to submit commits or feature requests. If you send a patch,
|
144
|
-
remember to update the corresponding unit tests. If fact, I prefer
|
145
|
-
new feature to be submitted in the form of new unit tests.
|
146
|
-
|
147
|
-
For other information, feel free to contact mailto:iam@li-xiao.com.
|
148
|
-
|
149
|
-
== Usage
|
150
|
-
|
151
|
-
DTR client is invoked from the command line using:
|
152
|
-
|
153
|
-
% dtr [<em>options</em> ...]
|
154
|
-
|
155
|
-
=== Options are:
|
156
|
-
|
157
|
-
-p, --port PORT Port number DTR will listen to. Default is 3344.
|
158
|
-
-r runner1_name,runner2_name Start DTR test runner agent with unique runner names.
|
159
|
-
-a, --server_address ADDRESS Specify dtr server address, domain name or ip address, e.g. 192.168.0.1. Default is 'localhost'.
|
160
|
-
-i, --setup COMMAND Set command for initializing test runner test environment, e.g. 'rake db:test:prepare'. Default is do nothing.
|
161
|
-
-m, --monitor Monitor the status of the dtr rinda server, e.g. dtr -a 10.11.1.2 -m
|
162
|
-
-b, --be_silent Only show error messages
|
163
|
-
-d, --debug output debug log
|
164
|
-
-v, --version Show version
|
165
|
-
-h, --help Show this help doc
|
166
|
-
|
167
|
-
Type "dtr --help" for an up-to-date option summary.
|
168
|
-
|
169
|
-
= Other stuff
|
170
|
-
|
171
|
-
Author:: Li Xiao <iam@li-xiao.com>
|
172
|
-
Requires:: Ruby 1.8.5 or later
|
173
|
-
License:: Copyright 2007-2008 by Li Xiao.
|
174
|
-
Released under an Apache License 2. See the LICENSE file
|
175
|
-
included in the distribution.
|
176
|
-
|
177
|
-
== Warranty
|
178
|
-
|
179
|
-
This software is provided "as is" and without any express or
|
180
|
-
implied warranties, including, without limitation, the implied
|
181
|
-
warranties of merchantibility and fitness for a particular
|
182
|
-
purpose.
|
data/install.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
require 'find'
|
3
|
-
require 'ftools'
|
4
|
-
|
5
|
-
include Config
|
6
|
-
|
7
|
-
$ruby = CONFIG['ruby_install_name']
|
8
|
-
|
9
|
-
##
|
10
|
-
# Install a binary file. We patch in on the way through to
|
11
|
-
# insert a #! line. If this is a Unix install, we name
|
12
|
-
# the command (for example) 'dtr' and let the shebang line
|
13
|
-
# handle running it. Under windows, we add a '.rb' extension
|
14
|
-
# and let file associations to their stuff
|
15
|
-
#
|
16
|
-
|
17
|
-
def installBIN(from, opfile)
|
18
|
-
|
19
|
-
tmp_dir = nil
|
20
|
-
for t in [".", "/tmp", "c:/temp", $bindir]
|
21
|
-
stat = File.stat(t) rescue next
|
22
|
-
if stat.directory? and stat.writable?
|
23
|
-
tmp_dir = t
|
24
|
-
break
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
fail "Cannot find a temporary directory" unless tmp_dir
|
29
|
-
tmp_file = File.join(tmp_dir, "_tmp")
|
30
|
-
|
31
|
-
File.open(from) do |ip|
|
32
|
-
File.open(tmp_file, "w") do |op|
|
33
|
-
ruby = File.join($realbindir, $ruby)
|
34
|
-
op.puts "#!#{ruby}"
|
35
|
-
op.write ip.read
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
|
40
|
-
File::install(tmp_file, File.join($bindir, opfile), 0755, true)
|
41
|
-
File::unlink(tmp_file)
|
42
|
-
end
|
43
|
-
|
44
|
-
$sitedir = CONFIG["sitelibdir"]
|
45
|
-
unless $sitedir
|
46
|
-
version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
|
47
|
-
$libdir = File.join(CONFIG["libdir"], "ruby", version)
|
48
|
-
$sitedir = $:.find {|x| x =~ /site_ruby/}
|
49
|
-
if !$sitedir
|
50
|
-
$sitedir = File.join($libdir, "site_ruby")
|
51
|
-
elsif $sitedir !~ Regexp.quote(version)
|
52
|
-
$sitedir = File.join($sitedir, version)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
$bindir = CONFIG["bindir"]
|
57
|
-
|
58
|
-
$realbindir = $bindir
|
59
|
-
|
60
|
-
bindir = CONFIG["bindir"]
|
61
|
-
if (destdir = ENV['DESTDIR'])
|
62
|
-
$bindir = destdir + $bindir
|
63
|
-
$sitedir = destdir + $sitedir
|
64
|
-
|
65
|
-
File::makedirs($bindir)
|
66
|
-
File::makedirs($sitedir)
|
67
|
-
end
|
68
|
-
|
69
|
-
dtr_dest = File.join($sitedir, "dtr")
|
70
|
-
File::makedirs(dtr_dest, true)
|
71
|
-
File::chmod(0755, dtr_dest)
|
72
|
-
|
73
|
-
# The library files
|
74
|
-
|
75
|
-
files = Dir.chdir('lib') { Dir['**/*.rb', '**/*.rake'] }
|
76
|
-
|
77
|
-
for fn in files
|
78
|
-
fn_dir = File.dirname(fn)
|
79
|
-
target_dir = File.join($sitedir, fn_dir)
|
80
|
-
if ! File.exist?(target_dir)
|
81
|
-
File.makedirs(target_dir)
|
82
|
-
end
|
83
|
-
File::install(File.join('lib', fn), File.join($sitedir, fn), 0644, true)
|
84
|
-
end
|
85
|
-
|
86
|
-
# and the executable
|
87
|
-
|
88
|
-
installBIN("bin/dtr", "dtr")
|