test-queue 0.4.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +93 -0
- data/.gitignore +5 -0
- data/Appraisals +35 -0
- data/Gemfile +4 -2
- data/LICENSE +21 -0
- data/README.md +19 -19
- data/Rakefile +14 -0
- data/{bin → exe}/cucumber-queue +4 -0
- data/{bin → exe}/minitest-queue +4 -0
- data/{bin → exe}/rspec-queue +4 -0
- data/{bin → exe}/testunit-queue +4 -0
- data/gemfiles/cucumber1_3.gemfile +9 -0
- data/gemfiles/cucumber2_4.gemfile +9 -0
- data/gemfiles/minitest4.gemfile +7 -0
- data/gemfiles/minitest5.gemfile +7 -0
- data/gemfiles/rspec2.gemfile +8 -0
- data/gemfiles/rspec3.gemfile +7 -0
- data/gemfiles/testunit.gemfile +7 -0
- data/lib/test-queue.rb +1 -1
- data/lib/test_queue/runner/minitest.rb +2 -2
- data/lib/test_queue/runner/minitest4.rb +1 -1
- data/lib/test_queue/runner/minitest5.rb +8 -1
- data/lib/test_queue/runner/puppet_lint.rb +1 -1
- data/lib/test_queue/runner/rspec.rb +8 -7
- data/lib/test_queue/runner/rspec2.rb +6 -0
- data/lib/test_queue/runner/rspec3.rb +6 -0
- data/lib/test_queue/runner/sample.rb +2 -2
- data/lib/test_queue/runner/testunit.rb +1 -1
- data/lib/test_queue/runner.rb +33 -28
- data/lib/test_queue.rb +2 -2
- data/script/bootstrap +1 -0
- data/spec/stats_spec.rb +3 -0
- data/test/minitest4.bats +1 -1
- data/test/minitest5.bats +15 -5
- data/test/{rspec.bats → rspec2.bats} +4 -4
- data/test/rspec3.bats +56 -0
- data/test/sleepy_runner.rb +3 -1
- data/test-queue.gemspec +5 -5
- metadata +26 -37
- data/.travis.yml +0 -18
- data/Gemfile-cucumber1-3 +0 -4
- data/Gemfile-cucumber1-3.lock +0 -33
- data/Gemfile-cucumber2-4 +0 -4
- data/Gemfile-cucumber2-4.lock +0 -37
- data/Gemfile-minitest4 +0 -3
- data/Gemfile-minitest4.lock +0 -19
- data/Gemfile-minitest5 +0 -3
- data/Gemfile-minitest5.lock +0 -19
- data/Gemfile-rspec2-1 +0 -3
- data/Gemfile-rspec2-1.lock +0 -27
- data/Gemfile-rspec3-0 +0 -3
- data/Gemfile-rspec3-0.lock +0 -31
- data/Gemfile-rspec3-1 +0 -3
- data/Gemfile-rspec3-1.lock +0 -31
- data/Gemfile-rspec3-2 +0 -3
- data/Gemfile-rspec3-2.lock +0 -32
- data/Gemfile-testunit +0 -3
- data/Gemfile-testunit.lock +0 -21
- data/Gemfile.lock +0 -41
- data/script/cibuild +0 -19
- data/script/spec +0 -7
data/lib/test_queue/runner.rb
CHANGED
@@ -2,8 +2,8 @@ require 'set'
|
|
2
2
|
require 'socket'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'securerandom'
|
5
|
-
|
6
|
-
|
5
|
+
require_relative 'stats'
|
6
|
+
require_relative 'test_framework'
|
7
7
|
|
8
8
|
module TestQueue
|
9
9
|
class Worker
|
@@ -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'])
|
@@ -47,12 +48,12 @@ module TestQueue
|
|
47
48
|
|
48
49
|
@procline = $0
|
49
50
|
|
50
|
-
@
|
51
|
+
@allowlist = if forced = ENV['TEST_QUEUE_FORCE']
|
51
52
|
forced.split(/\s*,\s*/)
|
52
53
|
else
|
53
54
|
[]
|
54
55
|
end
|
55
|
-
@
|
56
|
+
@allowlist.freeze
|
56
57
|
|
57
58
|
all_files = @test_framework.all_suite_files.to_set
|
58
59
|
@queue = @stats.all_suites
|
@@ -60,12 +61,12 @@ module TestQueue
|
|
60
61
|
.sort_by { |suite| -suite.duration }
|
61
62
|
.map { |suite| [suite.name, suite.path] }
|
62
63
|
|
63
|
-
if @
|
64
|
-
@queue.select! { |suite_name, path| @
|
65
|
-
@queue.sort_by! { |suite_name, path| @
|
64
|
+
if @allowlist.any?
|
65
|
+
@queue.select! { |suite_name, path| @allowlist.include?(suite_name) }
|
66
|
+
@queue.sort_by! { |suite_name, path| @allowlist.index(suite_name) }
|
66
67
|
end
|
67
68
|
|
68
|
-
@awaited_suites = Set.new(@
|
69
|
+
@awaited_suites = Set.new(@allowlist)
|
69
70
|
@original_queue = Set.new(@queue).freeze
|
70
71
|
|
71
72
|
@workers = {}
|
@@ -85,7 +86,7 @@ module TestQueue
|
|
85
86
|
raise ArgumentError, "Worker count (#{@concurrency}) must be greater than 0"
|
86
87
|
end
|
87
88
|
|
88
|
-
@
|
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
|
-
@
|
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 = @
|
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("
|
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}"
|
@@ -312,9 +318,9 @@ module TestQueue
|
|
312
318
|
# distributes them to remote masters.
|
313
319
|
return if relay?
|
314
320
|
|
315
|
-
# No need to discover suites if all
|
321
|
+
# No need to discover suites if all allowlisted suites are already
|
316
322
|
# queued.
|
317
|
-
return if @
|
323
|
+
return if @allowlist.any? && @awaited_suites.empty?
|
318
324
|
|
319
325
|
@discovering_suites_pid = fork do
|
320
326
|
terminate = false
|
@@ -340,7 +346,7 @@ module TestQueue
|
|
340
346
|
def awaiting_suites?
|
341
347
|
case
|
342
348
|
when @awaited_suites.any?
|
343
|
-
# We're waiting to find all the
|
349
|
+
# We're waiting to find all the allowlisted suites so we can run them
|
344
350
|
# in the correct order.
|
345
351
|
true
|
346
352
|
when @queue.empty? && !!@discovering_suites_pid
|
@@ -353,7 +359,7 @@ module TestQueue
|
|
353
359
|
end
|
354
360
|
|
355
361
|
def enqueue_discovered_suite(suite_name, path)
|
356
|
-
if @
|
362
|
+
if @allowlist.any? && !@allowlist.include?(suite_name)
|
357
363
|
return
|
358
364
|
end
|
359
365
|
|
@@ -371,9 +377,9 @@ module TestQueue
|
|
371
377
|
@queue.unshift [suite_name, path]
|
372
378
|
|
373
379
|
if @awaited_suites.delete?(suite_name) && @awaited_suites.empty?
|
374
|
-
# We've found all the
|
375
|
-
#
|
376
|
-
@queue.sort_by! { |suite_name, path| @
|
380
|
+
# We've found all the allowlisted suites. Sort the queue to match the
|
381
|
+
# allowlist.
|
382
|
+
@queue.sort_by! { |suite_name, path| @allowlist.index(suite_name) }
|
377
383
|
|
378
384
|
kill_suite_discovery_process("INT")
|
379
385
|
end
|
@@ -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
|
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 /^
|
513
|
+
when /^REMOTE MASTER (\d+) ([\w\.-]+)(?: (.+))?/
|
509
514
|
num = $1.to_i
|
510
|
-
|
511
|
-
|
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 #{
|
517
|
-
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 #{@
|
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 > @
|
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/lib/test_queue.rb
CHANGED
data/script/bootstrap
CHANGED
data/spec/stats_spec.rb
CHANGED
data/test/minitest4.bats
CHANGED
data/test/minitest5.bats
CHANGED
@@ -3,7 +3,7 @@ load "testlib"
|
|
3
3
|
SCRATCH=tmp/minitest5-tests
|
4
4
|
|
5
5
|
setup() {
|
6
|
-
require_gem "minitest" "
|
6
|
+
require_gem "minitest" "~> 5.0"
|
7
7
|
rm -rf $SCRATCH
|
8
8
|
mkdir -p $SCRATCH
|
9
9
|
}
|
@@ -27,12 +27,12 @@ teardown() {
|
|
27
27
|
assert_output_contains "MiniTestFailure#test_fail"
|
28
28
|
}
|
29
29
|
|
30
|
-
@test "TEST_QUEUE_FORCE
|
31
|
-
export TEST_QUEUE_WORKERS=1 TEST_QUEUE_FORCE="
|
30
|
+
@test "TEST_QUEUE_FORCE allowlists certain tests" {
|
31
|
+
export TEST_QUEUE_WORKERS=1 TEST_QUEUE_FORCE="MiniTestSleep11,MiniTestSleep8"
|
32
32
|
run bundle exec minitest-queue ./test/samples/*_minitest5.rb
|
33
33
|
assert_status 0
|
34
34
|
assert_output_contains "Starting test-queue master"
|
35
|
-
assert_output_contains "
|
35
|
+
assert_output_contains "MiniTestSleep11"
|
36
36
|
assert_output_contains "MiniTestSleep8"
|
37
37
|
refute_output_contains "MiniTestSleep9"
|
38
38
|
}
|
@@ -68,7 +68,7 @@ assert_test_queue_force_ordering() {
|
|
68
68
|
}
|
69
69
|
|
70
70
|
@test "minitest-queue fails if TEST_QUEUE_FORCE specifies nonexistent tests" {
|
71
|
-
export TEST_QUEUE_WORKERS=1 TEST_QUEUE_FORCE="
|
71
|
+
export TEST_QUEUE_WORKERS=1 TEST_QUEUE_FORCE="MiniTestSleep11,DoesNotExist"
|
72
72
|
run bundle exec minitest-queue ./test/samples/*_minitest5.rb
|
73
73
|
assert_status 1
|
74
74
|
assert_output_contains "Failed to discover DoesNotExist specified in TEST_QUEUE_FORCE"
|
@@ -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
|
@@ -1,7 +1,7 @@
|
|
1
1
|
load "testlib"
|
2
2
|
|
3
3
|
setup() {
|
4
|
-
require_gem "rspec" "
|
4
|
+
require_gem "rspec" "~> 2.0"
|
5
5
|
}
|
6
6
|
|
7
7
|
@test "rspec-queue succeeds when all specs pass" {
|
@@ -15,7 +15,9 @@ setup() {
|
|
15
15
|
run bundle exec rspec-queue ./test/samples/sample_spec.rb
|
16
16
|
assert_status 1
|
17
17
|
assert_output_contains "1) RSpecFailure fails"
|
18
|
-
assert_output_contains "
|
18
|
+
assert_output_contains "RSpecFailure fails"
|
19
|
+
assert_output_contains "expected: :bar"
|
20
|
+
assert_output_contains "got: :foo"
|
19
21
|
}
|
20
22
|
|
21
23
|
@test "TEST_QUEUE_SPLIT_GROUPS splits splittable groups" {
|
@@ -41,6 +43,4 @@ setup() {
|
|
41
43
|
run bundle exec rspec-queue ./test/samples/sample_use_shared_example1_spec.rb \
|
42
44
|
./test/samples/sample_use_shared_example2_spec.rb
|
43
45
|
assert_status 0
|
44
|
-
|
45
46
|
}
|
46
|
-
|
data/test/rspec3.bats
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
load "testlib"
|
2
|
+
|
3
|
+
setup() {
|
4
|
+
require_gem "rspec" "~> 3.0"
|
5
|
+
}
|
6
|
+
|
7
|
+
@test "rspec-queue succeeds when all specs pass" {
|
8
|
+
run bundle exec rspec-queue ./test/samples/sample_spec.rb
|
9
|
+
assert_status 0
|
10
|
+
assert_output_contains "Starting test-queue master"
|
11
|
+
assert_output_contains "16 examples, 0 failures"
|
12
|
+
assert_output_contains "16 examples, 0 failures"
|
13
|
+
}
|
14
|
+
|
15
|
+
@test "rspec-queue succeeds all specs pass in the default spec directory even if directory path is omitted" {
|
16
|
+
run bundle exec rspec-queue
|
17
|
+
assert_status 0
|
18
|
+
assert_output_contains "Starting test-queue master"
|
19
|
+
assert_output_contains "6 examples, 0 failures"
|
20
|
+
assert_output_contains "0 examples, 0 failures"
|
21
|
+
}
|
22
|
+
|
23
|
+
@test "rspec-queue fails when a spec fails" {
|
24
|
+
export FAIL=1
|
25
|
+
run bundle exec rspec-queue ./test/samples/sample_spec.rb
|
26
|
+
assert_status 1
|
27
|
+
assert_output_contains "1) RSpecFailure fails"
|
28
|
+
assert_output_contains "RSpecFailure fails"
|
29
|
+
assert_output_contains "expected: :bar"
|
30
|
+
assert_output_contains "got: :foo"
|
31
|
+
}
|
32
|
+
|
33
|
+
@test "TEST_QUEUE_SPLIT_GROUPS splits splittable groups" {
|
34
|
+
export TEST_QUEUE_SPLIT_GROUPS=true
|
35
|
+
run bundle exec rspec-queue ./test/samples/sample_split_spec.rb
|
36
|
+
assert_status 0
|
37
|
+
|
38
|
+
assert_output_matches '\[ 1\] +1 example, 0 failures'
|
39
|
+
assert_output_matches '\[ 2\] +1 example, 0 failures'
|
40
|
+
}
|
41
|
+
|
42
|
+
@test "TEST_QUEUE_SPLIT_GROUPS does not split unsplittable groups" {
|
43
|
+
export TEST_QUEUE_SPLIT_GROUPS=true
|
44
|
+
export NOSPLIT=1
|
45
|
+
run bundle exec rspec-queue ./test/samples/sample_split_spec.rb
|
46
|
+
assert_status 0
|
47
|
+
|
48
|
+
assert_output_contains "2 examples, 0 failures"
|
49
|
+
assert_output_contains "0 examples, 0 failures"
|
50
|
+
}
|
51
|
+
|
52
|
+
@test "rspec-queue supports shared example groups" {
|
53
|
+
run bundle exec rspec-queue ./test/samples/sample_use_shared_example1_spec.rb \
|
54
|
+
./test/samples/sample_use_shared_example2_spec.rb
|
55
|
+
assert_status 0
|
56
|
+
}
|
data/test/sleepy_runner.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
|
2
|
+
|
1
3
|
require 'test_queue'
|
2
4
|
require 'test_queue/runner/minitest'
|
3
5
|
|
4
6
|
class SleepyTestRunner < TestQueue::Runner::MiniTest
|
5
7
|
def after_fork(num)
|
6
|
-
if ENV['SLEEP_AS_RELAY'] && relay?
|
8
|
+
if ENV['SLEEP_AS_RELAY'] && relay?
|
7
9
|
sleep 5
|
8
10
|
elsif ENV['SLEEP_AS_MASTER'] && !relay?
|
9
11
|
sleep 5
|
data/test-queue.gemspec
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
|
1
|
+
Gem::Specification.new do |s|
|
2
2
|
s.name = 'test-queue'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.6.0'
|
4
|
+
s.required_ruby_version = '>= 2.7.0'
|
4
5
|
s.summary = 'parallel test runner'
|
5
6
|
s.description = 'minitest/rspec parallel test runner for CI environments'
|
6
7
|
|
7
|
-
s.homepage = "
|
8
|
+
s.homepage = "https://github.com/tmm1/test-queue"
|
8
9
|
|
9
10
|
s.authors = ["Aman Gupta"]
|
10
11
|
s.email = "ruby@tmm1.net"
|
11
12
|
s.license = 'MIT'
|
12
13
|
|
13
|
-
s.
|
14
|
-
s.bindir = 'bin'
|
14
|
+
s.bindir = 'exe'
|
15
15
|
s.executables << 'rspec-queue'
|
16
16
|
s.executables << 'minitest-queue'
|
17
17
|
s.executables << 'testunit-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
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aman Gupta
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-17 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
|
@@ -20,33 +20,24 @@ executables:
|
|
20
20
|
extensions: []
|
21
21
|
extra_rdoc_files: []
|
22
22
|
files:
|
23
|
+
- ".github/workflows/test.yml"
|
23
24
|
- ".gitignore"
|
24
|
-
-
|
25
|
+
- Appraisals
|
25
26
|
- Gemfile
|
26
|
-
-
|
27
|
-
- Gemfile-cucumber1-3.lock
|
28
|
-
- Gemfile-cucumber2-4
|
29
|
-
- Gemfile-cucumber2-4.lock
|
30
|
-
- Gemfile-minitest4
|
31
|
-
- Gemfile-minitest4.lock
|
32
|
-
- Gemfile-minitest5
|
33
|
-
- Gemfile-minitest5.lock
|
34
|
-
- Gemfile-rspec2-1
|
35
|
-
- Gemfile-rspec2-1.lock
|
36
|
-
- Gemfile-rspec3-0
|
37
|
-
- Gemfile-rspec3-0.lock
|
38
|
-
- Gemfile-rspec3-1
|
39
|
-
- Gemfile-rspec3-1.lock
|
40
|
-
- Gemfile-rspec3-2
|
41
|
-
- Gemfile-rspec3-2.lock
|
42
|
-
- Gemfile-testunit
|
43
|
-
- Gemfile-testunit.lock
|
44
|
-
- Gemfile.lock
|
27
|
+
- LICENSE
|
45
28
|
- README.md
|
46
|
-
-
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
29
|
+
- Rakefile
|
30
|
+
- exe/cucumber-queue
|
31
|
+
- exe/minitest-queue
|
32
|
+
- exe/rspec-queue
|
33
|
+
- exe/testunit-queue
|
34
|
+
- gemfiles/cucumber1_3.gemfile
|
35
|
+
- gemfiles/cucumber2_4.gemfile
|
36
|
+
- gemfiles/minitest4.gemfile
|
37
|
+
- gemfiles/minitest5.gemfile
|
38
|
+
- gemfiles/rspec2.gemfile
|
39
|
+
- gemfiles/rspec3.gemfile
|
40
|
+
- gemfiles/testunit.gemfile
|
50
41
|
- lib/test-queue.rb
|
51
42
|
- lib/test_queue.rb
|
52
43
|
- lib/test_queue/iterator.rb
|
@@ -64,14 +55,13 @@ files:
|
|
64
55
|
- lib/test_queue/stats.rb
|
65
56
|
- lib/test_queue/test_framework.rb
|
66
57
|
- script/bootstrap
|
67
|
-
- script/cibuild
|
68
|
-
- script/spec
|
69
58
|
- spec/stats_spec.rb
|
70
59
|
- test-queue.gemspec
|
71
60
|
- test/cucumber.bats
|
72
61
|
- test/minitest4.bats
|
73
62
|
- test/minitest5.bats
|
74
|
-
- test/
|
63
|
+
- test/rspec2.bats
|
64
|
+
- test/rspec3.bats
|
75
65
|
- test/samples/features/bad.feature
|
76
66
|
- test/samples/features/sample.feature
|
77
67
|
- test/samples/features/sample2.feature
|
@@ -89,11 +79,11 @@ files:
|
|
89
79
|
- test/sleepy_runner.rb
|
90
80
|
- test/testlib.bash
|
91
81
|
- test/testunit.bats
|
92
|
-
homepage:
|
82
|
+
homepage: https://github.com/tmm1/test-queue
|
93
83
|
licenses:
|
94
84
|
- MIT
|
95
85
|
metadata: {}
|
96
|
-
post_install_message:
|
86
|
+
post_install_message:
|
97
87
|
rdoc_options: []
|
98
88
|
require_paths:
|
99
89
|
- lib
|
@@ -101,16 +91,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
91
|
requirements:
|
102
92
|
- - ">="
|
103
93
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
94
|
+
version: 2.7.0
|
105
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
96
|
requirements:
|
107
97
|
- - ">="
|
108
98
|
- !ruby/object:Gem::Version
|
109
99
|
version: '0'
|
110
100
|
requirements: []
|
111
|
-
|
112
|
-
|
113
|
-
signing_key:
|
101
|
+
rubygems_version: 3.4.6
|
102
|
+
signing_key:
|
114
103
|
specification_version: 4
|
115
104
|
summary: parallel test runner
|
116
105
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
install: script/bootstrap
|
3
|
-
rvm:
|
4
|
-
- 2.2
|
5
|
-
env:
|
6
|
-
- SUITE=ruby
|
7
|
-
- SUITE=cucumber1-3
|
8
|
-
- SUITE=cucumber2-4
|
9
|
-
- SUITE=minitest4
|
10
|
-
- SUITE=minitest5
|
11
|
-
- SUITE=rspec2-1
|
12
|
-
- SUITE=rspec3-0
|
13
|
-
- SUITE=rspec3-1
|
14
|
-
- SUITE=rspec3-2
|
15
|
-
- SUITE=testunit
|
16
|
-
script: script/cibuild
|
17
|
-
notifications:
|
18
|
-
email: false
|
data/Gemfile-cucumber1-3
DELETED
data/Gemfile-cucumber1-3.lock
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
test-queue (0.4.2)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
builder (3.2.2)
|
10
|
-
cucumber (1.3.20)
|
11
|
-
builder (>= 2.1.2)
|
12
|
-
diff-lcs (>= 1.1.3)
|
13
|
-
gherkin (~> 2.12)
|
14
|
-
multi_json (>= 1.7.5, < 2.0)
|
15
|
-
multi_test (>= 0.1.2)
|
16
|
-
diff-lcs (1.2.5)
|
17
|
-
gherkin (2.12.2)
|
18
|
-
multi_json (~> 1.3)
|
19
|
-
multi_json (1.12.1)
|
20
|
-
multi_test (0.1.2)
|
21
|
-
rspec-expectations (2.14.5)
|
22
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
23
|
-
|
24
|
-
PLATFORMS
|
25
|
-
ruby
|
26
|
-
|
27
|
-
DEPENDENCIES
|
28
|
-
cucumber (~> 1.3.10)
|
29
|
-
rspec-expectations (~> 2.14.4)
|
30
|
-
test-queue!
|
31
|
-
|
32
|
-
BUNDLED WITH
|
33
|
-
1.13.1
|
data/Gemfile-cucumber2-4
DELETED
data/Gemfile-cucumber2-4.lock
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
test-queue (0.4.2)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
builder (3.2.2)
|
10
|
-
cucumber (2.4.0)
|
11
|
-
builder (>= 2.1.2)
|
12
|
-
cucumber-core (~> 1.5.0)
|
13
|
-
cucumber-wire (~> 0.0.1)
|
14
|
-
diff-lcs (>= 1.1.3)
|
15
|
-
gherkin (~> 4.0)
|
16
|
-
multi_json (>= 1.7.5, < 2.0)
|
17
|
-
multi_test (>= 0.1.2)
|
18
|
-
cucumber-core (1.5.0)
|
19
|
-
gherkin (~> 4.0)
|
20
|
-
cucumber-wire (0.0.1)
|
21
|
-
diff-lcs (1.2.5)
|
22
|
-
gherkin (4.0.0)
|
23
|
-
multi_json (1.12.1)
|
24
|
-
multi_test (0.1.2)
|
25
|
-
rspec-expectations (2.14.4)
|
26
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
27
|
-
|
28
|
-
PLATFORMS
|
29
|
-
ruby
|
30
|
-
|
31
|
-
DEPENDENCIES
|
32
|
-
cucumber (= 2.4.0)
|
33
|
-
rspec-expectations (= 2.14.4)
|
34
|
-
test-queue!
|
35
|
-
|
36
|
-
BUNDLED WITH
|
37
|
-
1.13.1
|
data/Gemfile-minitest4
DELETED
data/Gemfile-minitest4.lock
DELETED
data/Gemfile-minitest5
DELETED
data/Gemfile-minitest5.lock
DELETED
data/Gemfile-rspec2-1
DELETED