test-queue 0.2.4 → 0.2.9

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDc5NzAzZGY0OGYwMGU4ZjkwZjI3NmIwODAwMmMyYjdmMzJjNzU0YQ==
4
+ MjQ3ZGNkZDQ3OGNjMWU2YmIxZDU2NGZjOTZjYTk5ZTNhY2E4NzQxZQ==
5
5
  data.tar.gz: !binary |-
6
- ZTNiMWZhMDNmOTE2NDRkZmFjNWM5ZjY4YmU1OTExNjM1ZDc4NGNjOQ==
6
+ MjJiZjRjM2M4Y2E0ODA5ZjQyYTJkMDkzOTM0MjA0Nzc2NjM1NDg3ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MThiMzZlY2I1YzU4YzQ5YzNjYmVhZWVlYTQxOTJjNTJjZjk2NmE3YzE0ZWJm
10
- MjhmMmQzZmQ2MmZlOGVhZTBmOWU5MWRhYTg0MTM5MDNmZmQxMzBhZGI3NmEw
11
- MzVmYmQyZTJjN2QxODQ3MDEzNDg2OGNiODc4MDAwMTg3MjgxNzM=
9
+ MWYwODQ5NjBmMmEwMTNiYWFjZWQ1NGNmMTcyNjRiMWRhNDM4OWVkY2E3YTNi
10
+ NDViMTBjZDNjMGU1ZDc1MTNmYjIzYTMzNDViMzMyYmEyMjY1Mjk2MjFhYmIz
11
+ MTcxODg3NzA3MTI5MjkzMTc2MGRjMWNiNGIxOTNmYWFiMmI4MWE=
12
12
  data.tar.gz: !binary |-
13
- MTBkYTYyNzgyNGI0MmE2YjNmZjI3ODU0NDliMzcyNTdlNThkZjM2NmI0ZWJj
14
- N2ViYjI2NzliYTVkYmM4Y2I2MmIzM2FhNjVkYWI1MTYwNjA3NTBhODc4ODk0
15
- Mzc1MGE5M2Q1MTdkNTQxYjg5YTA1NDA3ZmU3MzE1ZGMxMjcyYjU=
13
+ YzhhNTMxM2U3ZDNlNzg1YTcwY2Q4OTNiY2M1YTkwMmZlZTFhNjUzNTk5NzEw
14
+ MTk1YTNlZjZjYTcwMzhkNTM4MTQ5Yjg1ZjFjZWU4Y2MyOGY4MWFjNGRhOGZl
15
+ YTI2NWE5N2I2N2Y4MWVhMTEwZjA4ZWU0NjU0YWIwMGEzZjY1Njg=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.2.3)
4
+ test-queue (0.2.9)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -27,7 +27,7 @@ module TestQueue
27
27
  if data = client.read(65536)
28
28
  client.close
29
29
  item = Marshal.load(data)
30
- break if item.nil?
30
+ break if item.nil? || item.empty?
31
31
  suite = @suites[item]
32
32
 
33
33
  $0 = "#{@procline} - #{suite.respond_to?(:description) ? suite.description : suite}"
@@ -84,7 +84,7 @@ module TestQueue
84
84
  execute_parallel :
85
85
  execute_sequential
86
86
  ensure
87
- summarize_internal
87
+ summarize_internal unless $!
88
88
  end
89
89
 
90
90
  def summarize_internal
@@ -144,6 +144,9 @@ module TestQueue
144
144
 
145
145
  def execute_parallel
146
146
  start_master
147
+ prepare(@concurrency)
148
+ @prepared_time = Time.now
149
+ start_relay if relay?
147
150
  spawn_workers
148
151
  distribute_queue
149
152
  ensure
@@ -154,21 +157,12 @@ module TestQueue
154
157
  end
155
158
 
156
159
  until @workers.empty?
157
- cleanup_worker
160
+ reap_worker
158
161
  end
159
162
  end
160
163
 
161
164
  def start_master
162
- if relay?
163
- begin
164
- sock = connect_to_relay
165
- sock.puts("SLAVE #{@concurrency}")
166
- sock.close
167
- rescue Errno::ECONNREFUSED
168
- STDERR.puts "*** Unable to connect to relay #{@relay}. Aborting.."
169
- exit! 1
170
- end
171
- else
165
+ if !relay?
172
166
  if @socket =~ /^(?:(.+):)?(\d+)$/
173
167
  address = $1 || '0.0.0.0'
174
168
  port = $2.to_i
@@ -185,6 +179,17 @@ module TestQueue
185
179
  $0 = "#{desc} - #{@procline}"
186
180
  end
187
181
 
182
+ def start_relay
183
+ return unless relay?
184
+
185
+ sock = connect_to_relay
186
+ sock.puts("SLAVE #{@concurrency} #{Socket.gethostname}")
187
+ sock.close
188
+ rescue Errno::ECONNREFUSED
189
+ STDERR.puts "*** Unable to connect to relay #{@relay}. Aborting.."
190
+ exit! 1
191
+ end
192
+
188
193
  def stop_master
189
194
  return if relay?
190
195
 
@@ -194,8 +199,6 @@ module TestQueue
194
199
  end
195
200
 
196
201
  def spawn_workers
197
- prepare(@concurrency)
198
-
199
202
  @concurrency.times do |i|
200
203
  num = i+1
201
204
 
@@ -204,7 +207,9 @@ module TestQueue
204
207
 
205
208
  iterator = Iterator.new(relay?? @relay : @socket, @suites, method(:around_filter))
206
209
  after_fork_internal(num, iterator)
207
- exit! run_worker(iterator) || 0
210
+ ret = run_worker(iterator) || 0
211
+ cleanup_worker
212
+ exit! ret
208
213
  end
209
214
 
210
215
  @workers[pid] = Worker.new(pid, num)
@@ -222,7 +227,7 @@ module TestQueue
222
227
 
223
228
  $0 = "test-queue worker [#{num}]"
224
229
  puts
225
- puts "==> Starting #$0 (#{Process.pid}) - iterating over #{iterator.sock}"
230
+ puts "==> Starting #$0 (#{Process.pid} on #{Socket.gethostname}) - iterating over #{iterator.sock}"
226
231
  puts
227
232
 
228
233
  after_fork(num)
@@ -246,6 +251,9 @@ module TestQueue
246
251
  return 0 # exit status
247
252
  end
248
253
 
254
+ def cleanup_worker
255
+ end
256
+
249
257
  def summarize_worker(worker)
250
258
  num_tests = ''
251
259
  failures = ''
@@ -253,7 +261,7 @@ module TestQueue
253
261
  [ num_tests, failures ]
254
262
  end
255
263
 
256
- def cleanup_worker(blocking=true)
264
+ def reap_worker(blocking=true)
257
265
  if pid = Process.waitpid(-1, blocking ? 0 : Process::WNOHANG) and worker = @workers.delete(pid)
258
266
  worker.status = $?
259
267
  worker.end_time = Time.now
@@ -284,7 +292,7 @@ module TestQueue
284
292
 
285
293
  until @queue.empty? && remote_workers == 0
286
294
  if IO.select([@server], nil, nil, 0.1).nil?
287
- cleanup_worker(false) # check for worker deaths
295
+ reap_worker(false) if @workers.any? # check for worker deaths
288
296
  else
289
297
  sock = @server.accept
290
298
  cmd = sock.gets.strip
@@ -294,10 +302,11 @@ module TestQueue
294
302
  data = Marshal.dump(obj.to_s)
295
303
  sock.write(data)
296
304
  end
297
- when /^SLAVE (\d+)/
305
+ when /^SLAVE (\d+) ([\w\.-]+)/
298
306
  num = $1.to_i
307
+ slave = $2
299
308
  remote_workers += num
300
- STDERR.puts "*** slave connected with additional #{num} workers"
309
+ STDERR.puts "*** #{num} workers connected from #{slave} after #{Time.now-@start_time}s"
301
310
  when /^WORKER (\d+)/
302
311
  data = sock.read($1.to_i)
303
312
  worker = Marshal.load(data)
@@ -311,7 +320,7 @@ module TestQueue
311
320
  stop_master
312
321
 
313
322
  until @workers.empty?
314
- cleanup_worker
323
+ reap_worker
315
324
  end
316
325
  end
317
326
 
data/test-multi.sh CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/bin/sh
2
2
  set -x
3
3
 
4
+ # export TEST_QUEUE_VERBOSE=1
4
5
  TEST_QUEUE_SOCKET=0.0.0.0:12345 bundle exec minitest-queue ./test/sample_test.rb &
5
6
  sleep 0.1
6
7
  TEST_QUEUE_RELAY=0.0.0.0:12345 bundle exec minitest-queue ./test/sample_test.rb
data/test-queue.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'test-queue'
3
- s.version = '0.2.4'
3
+ s.version = '0.2.9'
4
4
  s.summary = 'parallel test runner'
5
5
  s.description = 'minitest/rspec parallel test runner for CI environments'
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aman Gupta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec