DTR 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,368 @@
1
+ # Rakefile for DTR -*- ruby -*-
2
+
3
+ # Copyright 2007 by Li Xiao (swing1979@gmail.com)
4
+ # All rights reserved.
5
+
6
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
7
+ require 'dtr'
8
+
9
+ require 'rake/clean'
10
+ require 'rake/testtask'
11
+ require 'rake/rdoctask'
12
+
13
+ begin
14
+ require 'rubygems'
15
+ require 'rake/gempackagetask'
16
+ rescue Exception
17
+ nil
18
+ end
19
+ CLEAN.include('**/*.o', '*.dot')
20
+ CLOBBER.include('TAGS')
21
+ CLOBBER.include('coverage', 'rcov_aggregate')
22
+
23
+ def announce(msg='')
24
+ STDERR.puts msg
25
+ end
26
+
27
+ if `ruby -Ilib ./bin/dtr --version` =~ /dtr, version ([0-9.]+)$/
28
+ CURRENT_VERSION = $1
29
+ else
30
+ CURRENT_VERSION = "0.0.0"
31
+ end
32
+
33
+ $package_version = CURRENT_VERSION
34
+
35
+ SRC_RB = FileList['lib/**/*.rb']
36
+
37
+ # The default task is run if rake is given no explicit arguments.
38
+
39
+ desc "Default Task"
40
+ task :default => :test_all
41
+
42
+ # Test Tasks ---------------------------------------------------------
43
+ task :dbg do |t|
44
+ puts "Arguments are: #{t.args.join(', ')}"
45
+ end
46
+
47
+ # Common Abbreviations ...
48
+
49
+ task :test_all => [:test_units, :test_functionals]
50
+ task :tu => :test_units
51
+ task :tf => :test_functionals
52
+ task :test => :test_units
53
+
54
+ Rake::TestTask.new(:test_units) do |t|
55
+ t.test_files = FileList['test/*test.rb']
56
+ t.warning = true
57
+ t.verbose = false
58
+ end
59
+
60
+ Rake::TestTask.new(:test_functionals) do |t|
61
+ t.test_files = FileList['test/scenario*.rb']
62
+ t.warning = true
63
+ t.verbose = false
64
+ end
65
+
66
+ begin
67
+ require 'rcov/rcovtask'
68
+
69
+ Rcov::RcovTask.new do |t|
70
+ t.libs << "test"
71
+ t.rcov_opts = [
72
+ '-xRakefile', '-xrakefile', '-xpublish.rf', '--text-report',
73
+ ]
74
+ t.test_files = FileList[
75
+ 'test/*test.rb'
76
+ ]
77
+ t.output_dir = 'coverage'
78
+ t.verbose = true
79
+ end
80
+ rescue LoadError
81
+ # No rcov available
82
+ end
83
+
84
+ directory 'testdata'
85
+ [:test_units].each do |t|
86
+ task t => ['testdata']
87
+ end
88
+
89
+ # CVS Tasks ----------------------------------------------------------
90
+
91
+ # Install DTR using the standard install.rb script.
92
+
93
+ desc "Install the application"
94
+ task :install do
95
+ ruby "install.rb"
96
+ end
97
+
98
+ # Create a task to build the RDOC documentation tree.
99
+
100
+ rd = Rake::RDocTask.new("rdoc") { |rdoc|
101
+ rdoc.rdoc_dir = 'html'
102
+ # rdoc.template = 'kilmer'
103
+ # rdoc.template = 'css2'
104
+ rdoc.template = 'doc/jamis.rb'
105
+ rdoc.title = "DTR -- Distributed Test Runner"
106
+ rdoc.options << '--line-numbers' << '--inline-source' <<
107
+ '--main' << 'README' <<
108
+ '--title' << '"DTR -- Distributed Test Runner'
109
+ rdoc.rdoc_files.include('README', 'LICENSE.txt', 'TODO', 'CHANGES')
110
+ rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
111
+ }
112
+
113
+ # ====================================================================
114
+ # Create a task that will package the DTR software into distributable
115
+ # tar, zip and gem files.
116
+
117
+ PKG_FILES = FileList[
118
+ 'install.rb',
119
+ '[A-Z]*',
120
+ 'bin/**/*',
121
+ 'lib/**/*.rb',
122
+ 'test/**/*.rb',
123
+ 'doc/**/*'
124
+ ]
125
+ PKG_FILES.exclude('doc/example/*.o')
126
+ PKG_FILES.exclude(%r{doc/example/main$})
127
+
128
+ if ! defined?(Gem)
129
+ puts "Package Target requires RubyGEMs"
130
+ else
131
+ spec = Gem::Specification.new do |s|
132
+
133
+ #### Basic information.
134
+
135
+ s.name = 'DTR'
136
+ s.version = $package_version
137
+ s.summary = "DTR is a distributed test runner to run tests on distributed computers for decreasing build time."
138
+
139
+ #### Dependencies and requirements.
140
+
141
+ s.add_dependency('progressbar', '> 0.0.2')
142
+ #s.requirements << ""
143
+
144
+ #### Which files are to be included in this gem? Everything! (Except SVN directories.)
145
+
146
+ s.files = PKG_FILES.to_a.delete_if {|item| item.include?(".svn")}
147
+
148
+ #### Load-time details: library and application (you will need one or both).
149
+
150
+ s.require_path = 'lib' # Use these for libraries.
151
+
152
+ s.bindir = "bin" # Use these for applications.
153
+ s.executables = ["dtr"]
154
+ s.default_executable = "dtr"
155
+
156
+ #### Documentation and testing.
157
+
158
+ s.has_rdoc = false
159
+ #s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
160
+ #s.rdoc_options = rd.options
161
+
162
+ #### Author and project details.
163
+
164
+ s.author = "Li Xiao"
165
+ s.email = "swing1979@gmail.com"
166
+ s.homepage = "http://dtr.rubyforge.org"
167
+ s.rubyforge_project = "dtr"
168
+ # if ENV['CERT_DIR']
169
+ # s.signing_key = File.join(ENV['CERT_DIR'], 'gem-private_key.pem')
170
+ # s.cert_chain = [File.join(ENV['CERT_DIR'], 'gem-public_cert.pem')]
171
+ # end
172
+ end
173
+
174
+ package_task = Rake::GemPackageTask.new(spec) do |pkg|
175
+ #pkg.need_zip = true
176
+ #pkg.need_tar = true
177
+ end
178
+ end
179
+
180
+ # Misc tasks =========================================================
181
+
182
+ def count_lines(filename)
183
+ lines = 0
184
+ codelines = 0
185
+ open(filename) { |f|
186
+ f.each do |line|
187
+ lines += 1
188
+ next if line =~ /^\s*$/
189
+ next if line =~ /^\s*#/
190
+ codelines += 1
191
+ end
192
+ }
193
+ [lines, codelines]
194
+ end
195
+
196
+ def show_line(msg, lines, loc)
197
+ printf "%6s %6s %s\n", lines.to_s, loc.to_s, msg
198
+ end
199
+
200
+ desc "Count lines in the main DTR file"
201
+ task :lines do
202
+ total_lines = 0
203
+ total_code = 0
204
+ show_line("File Name", "LINES", "LOC")
205
+ SRC_RB.each do |fn|
206
+ lines, codelines = count_lines(fn)
207
+ show_line(fn, lines, codelines)
208
+ total_lines += lines
209
+ total_code += codelines
210
+ end
211
+ show_line("TOTAL", total_lines, total_code)
212
+ end
213
+
214
+ # Define an optional publish target in an external file. If the
215
+ # publish.rf file is not found, the publish targets won't be defined.
216
+
217
+ load "publish.rf" if File.exist? "publish.rf"
218
+
219
+ # Support Tasks ------------------------------------------------------
220
+
221
+ RUBY_FILES = FileList['**/*.rb'].exclude('pkg')
222
+
223
+ desc "Look for TODO and FIXME tags in the code"
224
+ task :todo do
225
+ RUBY_FILES.egrep(/#.*(FIXME|TODO|TBD)/)
226
+ end
227
+
228
+ desc "Look for Debugging print lines"
229
+ task :dbg do
230
+ RUBY_FILES.egrep(/\bDBG|\bbreakpoint\b/)
231
+ end
232
+
233
+ desc "List all ruby files"
234
+ task :rubyfiles do
235
+ puts RUBY_FILES
236
+ puts FileList['bin/*'].exclude('bin/*.rb')
237
+ end
238
+ task :rf => :rubyfiles
239
+
240
+ desc "Create a TAGS file"
241
+ task :tags => "TAGS"
242
+
243
+ TAGS = 'xctags -e'
244
+
245
+ file "TAGS" => RUBY_FILES do
246
+ puts "Makings TAGS"
247
+ sh "#{TAGS} #{RUBY_FILES}", :verbose => false
248
+ end
249
+
250
+ # --------------------------------------------------------------------
251
+ # Creating a release
252
+
253
+ task :noop
254
+
255
+ desc "[rel, reuse, reltest] Make a new release"
256
+ task :release => [
257
+ :prerelease,
258
+ :clobber,
259
+ :test_all,
260
+ :update_version,
261
+ :package,
262
+ :tag] do
263
+
264
+ announce
265
+ announce "**************************************************************"
266
+ announce "* Release #{$package_version} Complete."
267
+ announce "* Packages ready to upload."
268
+ announce "**************************************************************"
269
+ announce
270
+ end
271
+
272
+ # Validate that everything is ready to go for a release.
273
+ desc "[rel, reuse, reltest]"
274
+ task :prerelease do |t, rel, reuse, reltest|
275
+ $package_version = rel
276
+ announce
277
+ announce "**************************************************************"
278
+ announce "* Making RubyGem Release #{$package_version}"
279
+ announce "* (current version #{CURRENT_VERSION})"
280
+ announce "**************************************************************"
281
+ announce
282
+
283
+ # Is a release number supplied?
284
+ unless rel
285
+ fail "Usage: rake release[X.Y.Z] [REUSE=tag_suffix]"
286
+ end
287
+
288
+ # Is the release different than the current release.
289
+ # (or is REUSE set?)
290
+ if $package_version == CURRENT_VERSION && ! reuse
291
+ fail "Current version is #{$package_version}, must specify REUSE=tag_suffix to reuse version"
292
+ end
293
+
294
+ # Are all source files checked in?
295
+ if reltest
296
+ announce "Release Task Testing, skipping checked-in file test"
297
+ else
298
+ announce "Checking for unchecked-in files..."
299
+ data = `svn st`
300
+ unless data =~ /^$/
301
+ abort "svn status is not clean ... do you have unchecked-in files?"
302
+ end
303
+ announce "No outstanding checkins found ... OK"
304
+ end
305
+ end
306
+
307
+ desc "[rel, reuse, reltest]"
308
+ task :update_version => [:prerelease] do |t, rel, reuse, reltest|
309
+ if rel == CURRENT_VERSION
310
+ announce "No version change ... skipping version update"
311
+ else
312
+ announce "Updating DTR version to #{rel}"
313
+ open("lib/dtr.rb") do |dtrin|
314
+ open("lib/dtr.rb.new", "w") do |dtrout|
315
+ dtrin.each do |line|
316
+ if line =~ /^DTRVERSION\s*=\s*/
317
+ dtrout.puts "DTRVERSION = '#{rel}'"
318
+ else
319
+ dtrout.puts line
320
+ end
321
+ end
322
+ end
323
+ end
324
+ mv "lib/dtr.rb.new", "lib/dtr.rb"
325
+ if reltest
326
+ announce "Release Task Testing, skipping commiting of new version"
327
+ else
328
+ sh %{svn commit -m "Updated to version #{rel}" lib/dtr.rb} # "
329
+ end
330
+ end
331
+ end
332
+
333
+ desc "[rel, reuse, reltest] Tag all the CVS files with the latest release number (REL=x.y.z)"
334
+ task :tag => [:prerelease] do |t, rel, reuse, reltest|
335
+ reltag = "REL_#{rel.gsub(/\./, '_')}"
336
+ reltag << reuse.gsub(/\./, '_') if reuse
337
+ announce "Tagging Repository with [#{reltag}]"
338
+ if reltest
339
+ announce "Release Task Testing, skipping CVS tagging"
340
+ else
341
+ sh %{svn copy svn+ssh://rubyforge.org/var/svn/dtr/trunk svn+ssh://rubyforge.org/var/svn/dtr/tags/#{reltag} -m 'Commiting release #{reltag}'}
342
+ end
343
+ end
344
+
345
+ desc "Install the jamis RDoc template"
346
+ task :install_jamis_template do
347
+ require 'rbconfig'
348
+ dest_dir = File.join(Config::CONFIG['rubylibdir'], "rdoc/generators/template/html")
349
+ fail "Unabled to write to #{dest_dir}" unless File.writable?(dest_dir)
350
+ install "doc/jamis.rb", dest_dir, :verbose => true
351
+ end
352
+
353
+
354
+ task :run_dtr_lots do
355
+ Dir.chdir('testdata') do
356
+ begin
357
+ FileUtils.makedirs 'run_dtr_lots'
358
+ test_files = Array.new(10) do |index|
359
+ test_file = "run_dtr_lots/test#{index}.rb"
360
+ FileUtils.copy_file 'a_test_case.rb', test_file
361
+ test_file
362
+ end
363
+ DTR.run test_files, ['druby://localhost:3344']
364
+ ensure
365
+ FileUtils.rm_rf 'run_dtr_lots'
366
+ end
367
+ end
368
+ end
data/TODO ADDED
@@ -0,0 +1,11 @@
1
+ = DTR Project -- To Do List
2
+
3
+ Send suggestions for this list to swing1979@gmail.com
4
+
5
+ === To Do
6
+ 17. check thread safe
7
+ 18. integrate with cc.rb
8
+ 19. error log trace has file path on client
9
+ 20. rake task
10
+ 21. good example in README
11
+ (moved DONE list to CHANGES file)
data/bin/dtr ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby -w
2
+ begin
3
+ require 'dtr'
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require 'dtr'
7
+ end
8
+
9
+ require 'optparse'
10
+ require 'logger'
11
+
12
+ opts = OptionParser.new do |opts|
13
+ opts.banner = "DTR client server usage: #{$0} [options]"
14
+ opts.separator ""
15
+ opts.separator "Synopsis:"
16
+ opts.separator "dtr -s 'DTR server uri'"
17
+ opts.separator ""
18
+ opts.separator "Options:"
19
+
20
+ opts.on("-s", "--server_uri SERVER_URI", "DTR server uri") do |server_uri|
21
+ DTROPTIONS[:server_uri] = server_uri.untaint
22
+ end
23
+
24
+ opts.on("-n", "--name NAME", "DTR client server name, the default is string 'client' with a time stamp.") do |name|
25
+ DTROPTIONS[:client_name] = name.untaint
26
+ end
27
+
28
+ opts.on("-o", "--output_dir OUTPUT_DIR", "the dir for DTR client server to output logs, the default is 'dtr_tmp'.") do |output_dir|
29
+ DTROPTIONS[:tmp_dir] = output_dir.untaint
30
+ end
31
+
32
+ opts.on("-i", "--setup COMMAND", "Define the command for initializing test environment, the default is 'rake db:test:prepare'") do |command|
33
+ DTROPTIONS[:setup] = command.untaint
34
+ end
35
+
36
+ opts.on("-p", "--port PORT", "Define DTR client server port, the default is 3344") do |port|
37
+ DTROPTIONS[:port] = port.untaint
38
+ end
39
+
40
+ opts.on_tail("-t", "--trace", "Turn on invoke/execute tracing.") do
41
+ DTROPTIONS[:log_level] = Logger::DEBUG
42
+ end
43
+
44
+ opts.on_tail("-u", "--stdout", "Print all log into stdout.") do
45
+ DTROPTIONS[:output_model] = :stdout
46
+ end
47
+
48
+ opts.on_tail("-v", "--version", "Show version") do
49
+ puts "dtr, version " + DTRVERSION
50
+ DTROPTIONS[:exit] = true
51
+ end
52
+
53
+ opts.on_tail("-h", "--help", "Show this help doc") do
54
+ puts opts
55
+ DTROPTIONS[:exit] = true
56
+ end
57
+ end
58
+
59
+ begin
60
+ opts.parse!
61
+ DTR.start_client_server unless DTROPTIONS[:exit]
62
+ rescue Exception => e
63
+ logger.error { e }
64
+ end