specjour 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,13 +1,11 @@
1
1
  # Specjour
2
-
3
2
  _Distribute your spec suite amongst your LAN via Bonjour._
4
3
 
5
4
  1. Start a dispatcher in your project directory.
6
5
  2. Spin up a manager on each remote machine.
7
- 3. Say "goodbye" to your long coffee breaks.
6
+ 3. Say farewell to your long coffee breaks.
8
7
 
9
8
  ## Requirements
10
-
11
9
  * Bonjour or DNSSD (the capability and the gem)
12
10
  * Rsync (system command used)
13
11
  * Rspec (officially v1.3.0)
@@ -21,15 +19,27 @@ Running `specjour` on the command-line will start a manager which advertises tha
21
19
  $ specjour
22
20
 
23
21
  ## Setup the dispatcher
24
- Add the rake task to the `Rakefile` in your project's directory.
22
+ Require specjour's rake tasks in your project's `Rakefile`.
25
23
 
26
24
  require 'specjour/tasks/specjour'
27
25
 
28
26
  ## Distribute the tests
29
- Run the rake task in your project directory to start the test suite.
27
+ Run the rake task to distribute the tests among the managers you started.
30
28
 
31
29
  $ rake specjour
32
30
 
31
+ ## Rails
32
+ Edit your config/environment.rb
33
+
34
+ config.gem 'specjour'
35
+
36
+ Each worker should run their specs in an isolated database. Modify the test database name in your `config/database.yml` to include the following environment variable (Influenced by [parallel_tests](http://github.com/grosser/parallel_tests)):
37
+
38
+ test:
39
+ database: blog_test<%=ENV['TEST_ENV_NUMBER']%>
40
+
41
+ Each worker will attempt to clear its database tables before running any specs via `DELETE FROM <table_name>;`. Additionally, test databases will be created if they don't exist (i.e. blog_test8 for the 8th worker) and will be migrated when necessary.
42
+
33
43
  ## Note on Patches/Pull Requests
34
44
 
35
45
  * Fork the project.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.1.7
@@ -113,6 +113,7 @@ module Specjour
113
113
  def set_up_manager(manager, uri)
114
114
  manager.project_name = project_name
115
115
  manager.dispatcher_uri = URI::Generic.build :scheme => "specjour", :host => hostname, :port => printer.port
116
+ at_exit { manager.kill_worker_processes }
116
117
  end
117
118
 
118
119
  def sync_managers
@@ -4,12 +4,13 @@ module Specjour
4
4
  include DRbUndumped
5
5
 
6
6
  attr_accessor :project_name, :specs_to_run, :dispatcher_uri
7
- attr_reader :worker_size, :batch_size, :registered_dispatcher, :bonjour_service
7
+ attr_reader :worker_size, :batch_size, :registered_dispatcher, :bonjour_service, :worker_pids
8
8
 
9
9
  def initialize(options = {})
10
10
  @worker_size = options[:worker_size]
11
11
  @batch_size = options[:batch_size]
12
12
  @registered_dispatcher = options[:registered_dispatcher]
13
+ @worker_pids = []
13
14
  end
14
15
 
15
16
  def available_for?(hostname)
@@ -24,20 +25,23 @@ module Specjour
24
25
  end
25
26
  end
26
27
 
28
+ def kill_worker_processes
29
+ Process.kill('TERM', *worker_pids) rescue nil
30
+ end
31
+
27
32
  def project_path
28
33
  File.join("/tmp", project_name)
29
34
  end
30
35
 
31
36
  def dispatch
32
37
  bonjour_service.stop
33
- pids = []
34
38
  (1..worker_size).each do |index|
35
- pids << fork do
39
+ worker_pids << fork do
36
40
  exec("specjour --batch-size #{batch_size} --do-work #{project_path},#{dispatcher_uri},#{index},#{specs_to_run[index - 1].join(',')}")
37
41
  Kernel.exit!
38
42
  end
39
43
  end
40
- at_exit { Process.kill('KILL', *pids) rescue nil }
44
+ at_exit { kill_worker_processes }
41
45
  Process.waitall
42
46
  bonjour_announce
43
47
  end
data/lib/specjour.rb CHANGED
@@ -18,5 +18,5 @@ module Specjour
18
18
  autoload :RsyncDaemon, 'specjour/rsync_daemon'
19
19
  autoload :Worker, 'specjour/worker'
20
20
 
21
- VERSION = "0.1.6".freeze
21
+ VERSION = "0.1.7".freeze
22
22
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 6
9
- version: 0.1.6
8
+ - 7
9
+ version: 0.1.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sandro Turriate
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-21 00:00:00 -04:00
17
+ date: 2010-03-23 00:00:00 -04:00
18
18
  default_executable: specjour
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency