test-queue 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5c919d302e14f5b2acf5fe2311c3aa30591ba2ad
4
- data.tar.gz: d47c906e667f8709b771667594c58bdb2d6f6abf
2
+ SHA256:
3
+ metadata.gz: 4c32b025eec2391d8523ce84f4f180443b09f003f8770b8b27ff741aac464629
4
+ data.tar.gz: 6a18a116cba1ec57617f92405a5d4554dab34dc5ab41be6ed10825b9c8b9f503
5
5
  SHA512:
6
- metadata.gz: 993127c3b76dc9855c1d0b3b38a85b5bea1e7a43fd5533a725b728c702bc34d8b1c503dddfae693d59381de8b44eceff39879751a15aeffc917376f94ac51c05
7
- data.tar.gz: 0841ce47fbebdd598a6c61b60f235b091a005a94dddef5fc1d161535c59aaeb2a2ce1227a5d08d4401b2f29a090b957ebe24db1d3bc6d67ac6622b5ab3d23947
6
+ metadata.gz: c7be91c62fc0e8f47826b441ed36f08ce454caf53bb56af03b11a3f7ed0eb88028ecb7ec96b03baf413ef985401292fee055561e876012c88e7e63fc7007ae00
7
+ data.tar.gz: 27e6d8fbaf61bf96beede058ad5a25ae8695a88fb3ce3d14ba96666e8da2b1df066574aa7efa0f9bcd5cbd619d1825a0a8c4f4cbe20f0eb312b2f9692f7a3d49
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- test-queue (0.4.2)
4
+ test-queue (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Aman Gupta
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -35,9 +35,9 @@ the workload and relay results back to a central master.
35
35
  - `TEST_QUEUE_RELAY`: relay results back to a central master, specified as tcp `address:port`
36
36
  - `TEST_QUEUE_STATS`: `path` to cache build stats in-build CI runs (default: `.test_queue_stats`)
37
37
  - `TEST_QUEUE_FORCE`: comma separated list of suites to run
38
- - `TEST_QUEUE_RELAY_TIMEOUT`: when using remote workers, the amount of time a worker will try to reconnect to start work
39
- - `TEST_QUEUE_RELAY_TOKEN`: when using remote workers, this must be the same on both workers and the server for remote workers to run tests.
40
- - `TEST_QUEUE_SLAVE_MESSAGE`: when using remote workers, set this on a slave worker and it will appear on the slave's connection message on the master.
38
+ - `TEST_QUEUE_RELAY_TIMEOUT`: when using distributed builds, the amount of time a remote master will try to reconnect to start work
39
+ - `TEST_QUEUE_RELAY_TOKEN`: when using distributed builds, this must be the same on remote masters and the central master for remote masters to be able to connect.
40
+ - `TEST_QUEUE_REMOTE_MASTER_MESSAGE`: when using distributed builds, set this on a remote master and it will appear in that master's connection message on the central master.
41
41
  - `TEST_QUEUE_SPLIT_GROUPS`: split tests up by example rather than example group. Faster for tests with short setup time such as selenium. RSpec only. Add the :no_split tag to ExampleGroups you don't want split.
42
42
 
43
43
  ### usage
@@ -83,8 +83,8 @@ class MyAppTestRunner < TestQueue::Runner::MiniTest
83
83
  # ...
84
84
  end
85
85
 
86
- # If this is a remote slave, tell the master something about us
87
- @slave_message = "Output for slave 123: http://myhost.com/build/123"
86
+ # If this is a remote master, tell the central master something about us
87
+ @remote_master_message = "Output for remote master 123: http://myhost.com/build/123"
88
88
  end
89
89
 
90
90
  def around_filter(suite)
@@ -100,8 +100,8 @@ MyAppTestRunner.new.execute
100
100
  ### distributed mode
101
101
 
102
102
  To use distributed mode, the central master must listen on a tcp port. Additional masters can be booted
103
- in relay mode to connect to the central master. Workers must provide a TEST_QUEUE_RELAY_TOKEN to match
104
- the master's.
103
+ in relay mode to connect to the central master. Remote masters must provide a TEST_QUEUE_RELAY_TOKEN
104
+ to match the central master's.
105
105
 
106
106
  ```
107
107
  $ TEST_QUEUE_RELAY_TOKEN=123 TEST_QUEUE_SOCKET=0.0.0.0:12345 bundle exec minitest-queue ./test/sample_test.rb
@@ -10,12 +10,6 @@ else
10
10
  fail 'requires rspec version 2 or 3'
11
11
  end
12
12
 
13
- class ::RSpec::Core::ExampleGroup
14
- def self.failure_count
15
- examples.map {|e| e.execution_result[:status] == "failed"}.length
16
- end
17
- end
18
-
19
13
  module TestQueue
20
14
  class Runner
21
15
  class RSpec < Runner
@@ -53,6 +47,8 @@ module TestQueue
53
47
  example_or_group.id
54
48
  elsif example_or_group.respond_to?(:full_description)
55
49
  example_or_group.full_description
50
+ elsif example_or_group.metadata.key?(:full_description)
51
+ example_or_group.metadata[:full_description]
56
52
  else
57
53
  example_or_group.metadata[:example_group][:full_description]
58
54
  end
@@ -1,3 +1,9 @@
1
+ class ::RSpec::Core::ExampleGroup
2
+ def self.failure_count
3
+ examples.map {|e| e.execution_result[:status] == "failed"}.length
4
+ end
5
+ end
6
+
1
7
  module RSpec::Core
2
8
  class QueueRunner < CommandLine
3
9
  def initialize
@@ -1,3 +1,9 @@
1
+ class ::RSpec::Core::ExampleGroup
2
+ def self.failure_count
3
+ examples.map {|e| e.execution_result.status == "failed"}.length
4
+ end
5
+ end
6
+
1
7
  module RSpec::Core
2
8
  # RSpec 3.2 introduced:
3
9
  unless Configuration.method_defined?(:with_suite_hooks)
@@ -37,6 +37,7 @@ module TestQueue
37
37
  @test_framework = test_framework
38
38
  @stats = Stats.new(stats_file)
39
39
 
40
+ @early_failure_limit = nil
40
41
  if ENV['TEST_QUEUE_EARLY_FAILURE_LIMIT']
41
42
  begin
42
43
  @early_failure_limit = Integer(ENV['TEST_QUEUE_EARLY_FAILURE_LIMIT'])
@@ -85,7 +86,7 @@ module TestQueue
85
86
  raise ArgumentError, "Worker count (#{@concurrency}) must be greater than 0"
86
87
  end
87
88
 
88
- @slave_connection_timeout =
89
+ @relay_connection_timeout =
89
90
  (ENV['TEST_QUEUE_RELAY_TIMEOUT'] && ENV['TEST_QUEUE_RELAY_TIMEOUT'].to_i) ||
90
91
  30
91
92
 
@@ -100,7 +101,12 @@ module TestQueue
100
101
  relay ||
101
102
  ENV['TEST_QUEUE_RELAY']
102
103
 
103
- @slave_message = ENV["TEST_QUEUE_SLAVE_MESSAGE"] if ENV.has_key?("TEST_QUEUE_SLAVE_MESSAGE")
104
+ @remote_master_message = if ENV.has_key?("TEST_QUEUE_REMOTE_MASTER_MESSAGE")
105
+ ENV["TEST_QUEUE_REMOTE_MASTER_MESSAGE"]
106
+ elsif ENV.has_key?("TEST_QUEUE_SLAVE_MESSAGE")
107
+ warn("`TEST_QUEUE_SLAVE_MESSAGE` is deprecated. Use `TEST_QUEUE_REMOTE_MASTER_MESSAGE` instead.")
108
+ ENV["TEST_QUEUE_SLAVE_MESSAGE"]
109
+ end
104
110
 
105
111
  if @relay == @socket
106
112
  STDERR.puts "*** Detected TEST_QUEUE_RELAY == TEST_QUEUE_SOCKET. Disabling relay mode."
@@ -265,10 +271,10 @@ module TestQueue
265
271
  return unless relay?
266
272
 
267
273
  sock = connect_to_relay
268
- message = @slave_message ? " #{@slave_message}" : ""
274
+ message = @remote_master_message ? " #{@remote_master_message}" : ""
269
275
  message.gsub!(/(\r|\n)/, "") # Our "protocol" is newline-separated
270
276
  sock.puts("TOKEN=#{@run_token}")
271
- sock.puts("SLAVE #{@concurrency} #{Socket.gethostname} #{message}")
277
+ sock.puts("REMOTE MASTER #{@concurrency} #{Socket.gethostname} #{message}")
272
278
  response = sock.gets.strip
273
279
  unless response == "OK"
274
280
  STDERR.puts "*** Got non-OK response from master: #{response}"
@@ -485,7 +491,7 @@ module TestQueue
485
491
  cmd = sock.gets.strip
486
492
 
487
493
  token = token[TOKEN_REGEX, 1]
488
- # If we have a slave from a different test run, respond with "WRONG RUN", and it will consider the test run done.
494
+ # If we have a remote master from a different test run, respond with "WRONG RUN", and it will consider the test run done.
489
495
  if token != @run_token
490
496
  message = token.nil? ? "Worker sent no token to master" : "Worker from run #{token} connected to master"
491
497
  STDERR.puts "*** #{message} for run #{@run_token}; ignoring."
@@ -495,7 +501,6 @@ module TestQueue
495
501
 
496
502
  case cmd
497
503
  when /^POP (\S+) (\d+)/
498
- # If we have a slave from a different test run, don't respond, and it will consider the test run done.
499
504
  hostname = $1
500
505
  pid = Integer($2)
501
506
  if awaiting_suites?
@@ -505,16 +510,16 @@ module TestQueue
505
510
  sock.write(data)
506
511
  @assignments[obj] = [hostname, pid]
507
512
  end
508
- when /^SLAVE (\d+) ([\w\.-]+)(?: (.+))?/
513
+ when /^REMOTE MASTER (\d+) ([\w\.-]+)(?: (.+))?/
509
514
  num = $1.to_i
510
- slave = $2
511
- slave_message = $3
515
+ remote_master = $2
516
+ remote_master_message = $3
512
517
 
513
518
  sock.write("OK\n")
514
519
  remote_workers += num
515
520
 
516
- message = "*** #{num} workers connected from #{slave} after #{Time.now-@start_time}s"
517
- message << " " + slave_message if slave_message
521
+ message = "*** #{num} workers connected from #{remote_master} after #{Time.now-@start_time}s"
522
+ message << " " + remote_master_message if remote_master_message
518
523
  STDERR.puts message
519
524
  when /^WORKER (\d+)/
520
525
  data = sock.read($1.to_i)
@@ -546,12 +551,12 @@ module TestQueue
546
551
  def connect_to_relay
547
552
  sock = nil
548
553
  start = Time.now
549
- puts "Attempting to connect for #{@slave_connection_timeout}s..."
554
+ puts "Attempting to connect for #{@relay_connection_timeout}s..."
550
555
  while sock.nil?
551
556
  begin
552
557
  sock = TCPSocket.new(*@relay.split(':'))
553
558
  rescue Errno::ECONNREFUSED => e
554
- raise e if Time.now - start > @slave_connection_timeout
559
+ raise e if Time.now - start > @relay_connection_timeout
555
560
  puts "Master not yet available, sleeping..."
556
561
  sleep 0.5
557
562
  end
data/test/minitest5.bats CHANGED
@@ -128,6 +128,16 @@ assert_test_queue_force_ordering() {
128
128
  assert_output_contains "MiniTestFailure#test_fail"
129
129
  }
130
130
 
131
+ @test "multi-master central master prints out remote master messages" {
132
+ export TEST_QUEUE_RELAY_TOKEN=$(date | cksum | cut -d' ' -f1)
133
+ TEST_QUEUE_RELAY=0.0.0.0:12345 TEST_QUEUE_REMOTE_MASTER_MESSAGE="hello from remote master" bundle exec minitest-queue ./test/samples/sample_minitest5.rb &
134
+ TEST_QUEUE_SOCKET=0.0.0.0:12345 run bundle exec minitest-queue ./test/samples/sample_minitest5.rb
135
+ wait
136
+
137
+ assert_status 0
138
+ assert_output_contains "hello from remote master"
139
+ }
140
+
131
141
  @test "recovers from child processes dying in an unorderly way" {
132
142
  export KILL=1
133
143
  run bundle exec minitest-queue ./test/samples/sample_minitest5.rb
data/test-queue.gemspec CHANGED
@@ -1,16 +1,15 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'test-queue'
3
- s.version = '0.4.2'
3
+ s.version = '0.5.0'
4
4
  s.summary = 'parallel test runner'
5
5
  s.description = 'minitest/rspec parallel test runner for CI environments'
6
6
 
7
- s.homepage = "http://github.com/tmm1/test-queue"
7
+ s.homepage = "https://github.com/tmm1/test-queue"
8
8
 
9
9
  s.authors = ["Aman Gupta"]
10
10
  s.email = "ruby@tmm1.net"
11
11
  s.license = 'MIT'
12
12
 
13
- s.has_rdoc = false
14
13
  s.bindir = 'bin'
15
14
  s.executables << 'rspec-queue'
16
15
  s.executables << 'minitest-queue'
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.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aman Gupta
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-17 00:00:00.000000000 Z
11
+ date: 2022-07-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: minitest/rspec parallel test runner for CI environments
14
14
  email: ruby@tmm1.net
@@ -42,6 +42,7 @@ files:
42
42
  - Gemfile-testunit
43
43
  - Gemfile-testunit.lock
44
44
  - Gemfile.lock
45
+ - LICENSE
45
46
  - README.md
46
47
  - bin/cucumber-queue
47
48
  - bin/minitest-queue
@@ -89,11 +90,11 @@ files:
89
90
  - test/sleepy_runner.rb
90
91
  - test/testlib.bash
91
92
  - test/testunit.bats
92
- homepage: http://github.com/tmm1/test-queue
93
+ homepage: https://github.com/tmm1/test-queue
93
94
  licenses:
94
95
  - MIT
95
96
  metadata: {}
96
- post_install_message:
97
+ post_install_message:
97
98
  rdoc_options: []
98
99
  require_paths:
99
100
  - lib
@@ -108,9 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.4.5
113
- signing_key:
112
+ rubygems_version: 3.3.3
113
+ signing_key:
114
114
  specification_version: 4
115
115
  summary: parallel test runner
116
116
  test_files: []