coverband 4.0.1 → 4.2.0

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.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +6 -1
  3. data/.travis.yml +8 -2
  4. data/Gemfile +2 -0
  5. data/Gemfile.rails4 +2 -0
  6. data/README.md +135 -157
  7. data/Rakefile +1 -1
  8. data/changes.md +56 -5
  9. data/coverband.gemspec +5 -3
  10. data/lib/coverband/adapters/base.rb +44 -11
  11. data/lib/coverband/adapters/file_store.rb +8 -0
  12. data/lib/coverband/adapters/redis_store.rb +65 -8
  13. data/lib/coverband/at_exit.rb +37 -0
  14. data/lib/coverband/collectors/coverage.rb +43 -72
  15. data/lib/coverband/collectors/delta.rb +67 -0
  16. data/lib/coverband/configuration.rb +71 -2
  17. data/lib/coverband/integrations/background.rb +9 -10
  18. data/lib/coverband/integrations/middleware.rb +3 -2
  19. data/lib/coverband/integrations/rack_server_check.rb +4 -1
  20. data/lib/coverband/integrations/resque.rb +27 -0
  21. data/lib/coverband/reporters/base.rb +24 -36
  22. data/lib/coverband/reporters/html_report.rb +40 -15
  23. data/lib/coverband/reporters/web.rb +52 -10
  24. data/lib/coverband/utils/file_groups.rb +53 -0
  25. data/lib/coverband/utils/file_path_helper.rb +57 -0
  26. data/lib/coverband/utils/gem_list.rb +31 -0
  27. data/lib/coverband/utils/html_formatter.rb +50 -8
  28. data/lib/coverband/utils/railtie.rb +9 -1
  29. data/lib/coverband/utils/result.rb +16 -19
  30. data/lib/coverband/utils/results.rb +63 -0
  31. data/lib/coverband/utils/source_file.rb +23 -1
  32. data/lib/coverband/utils/tasks.rb +17 -17
  33. data/lib/coverband/version.rb +1 -1
  34. data/lib/coverband.rb +32 -2
  35. data/public/application.css +5 -0
  36. data/public/application.js +117 -1640
  37. data/public/dependencies.js +1581 -0
  38. data/public/favicon.png +0 -0
  39. data/test/benchmarks/benchmark.rake +36 -1
  40. data/test/benchmarks/coverage_fork.sh +37 -0
  41. data/test/{unit/adapters_base_test.rb → coverband/adapters/base_test.rb} +1 -1
  42. data/test/{unit/adapters_file_store_test.rb → coverband/adapters/file_store_test.rb} +1 -1
  43. data/test/{unit/adapters_redis_store_test.rb → coverband/adapters/redis_store_test.rb} +28 -11
  44. data/test/coverband/at_exit_test.rb +13 -0
  45. data/test/coverband/collectors/coverage_test.rb +73 -0
  46. data/test/coverband/collectors/delta_test.rb +52 -0
  47. data/test/coverband/configuration_test.rb +67 -0
  48. data/test/{unit → coverband}/coverband_test.rb +7 -0
  49. data/test/coverband/integrations/background_test.rb +31 -0
  50. data/test/{unit → coverband/integrations}/middleware_test.rb +3 -2
  51. data/test/{unit/rack_server_checkout_test.rb → coverband/integrations/rack_server_check_test.rb} +1 -1
  52. data/test/coverband/integrations/resque_worker_test.rb +42 -0
  53. data/test/coverband/integrations/test_resque_job.rb +7 -0
  54. data/test/coverband/reporters/base_test.rb +168 -0
  55. data/test/{unit/reports_console_test.rb → coverband/reporters/console_test.rb} +8 -7
  56. data/test/coverband/reporters/html_test.rb +45 -0
  57. data/test/coverband/reporters/web_test.rb +52 -0
  58. data/test/coverband/utils/file_groups_test.rb +55 -0
  59. data/test/{unit → coverband}/utils/file_list_test.rb +1 -1
  60. data/test/coverband/utils/gem_list_test.rb +48 -0
  61. data/test/{unit → coverband}/utils/source_file_test.rb +1 -1
  62. data/test/{unit → integration}/full_stack_test.rb +25 -12
  63. data/test/{unit → integration}/rails_full_stack_test.rb +27 -7
  64. data/test/rails4_dummy/config/application.rb +1 -1
  65. data/test/rails4_dummy/config/coverband.rb +4 -1
  66. data/test/rails4_dummy/tmp/.keep +0 -0
  67. data/test/rails5_dummy/config/application.rb +1 -1
  68. data/test/rails5_dummy/config/coverband.rb +3 -1
  69. data/test/rails5_dummy/tmp/.keep +0 -0
  70. data/test/rails_test_helper.rb +13 -8
  71. data/test/test_helper.rb +12 -17
  72. data/test/unique_files.rb +23 -0
  73. data/views/file_list.erb +33 -20
  74. data/views/gem_list.erb +54 -0
  75. data/views/layout.erb +13 -4
  76. data/views/settings.erb +35 -0
  77. data/views/source_file.erb +16 -4
  78. data/views/source_file_loader.erb +7 -0
  79. metadata +108 -62
  80. data/test/unit/background_test.rb +0 -29
  81. data/test/unit/collectors_coverage_test.rb +0 -48
  82. data/test/unit/configuration_test.rb +0 -23
  83. data/test/unit/reports_base_test.rb +0 -109
  84. data/test/unit/reports_html_test.rb +0 -29
  85. data/test/unit/reports_web_test.rb +0 -39
  86. /data/test/{unit → coverband}/utils/lines_classifier_test.rb +0 -0
  87. /data/test/{unit → coverband}/utils/result_test.rb +0 -0
  88. /data/test/{unit → coverband}/utils/s3_report_test.rb +0 -0
  89. /data/test/{unit → coverband}/utils/source_file_line_test.rb +0 -0
  90. /data/test/{unit/dog.rb → dog.rb} +0 -0
Binary file
@@ -134,7 +134,7 @@ namespace :benchmarks do
134
134
  x.config(time: 12, warmup: 5, suite: suite)
135
135
  x.report 'coverband' do
136
136
  work
137
- Coverband::Collectors::Coverage.instance.report_coverage
137
+ Coverband.report_coverage(true)
138
138
  end
139
139
  x.report 'no coverband' do
140
140
  work
@@ -176,6 +176,10 @@ namespace :benchmarks do
176
176
  @file_hash_cache[file] = Digest::MD5.file(__FILE__).hexdigest
177
177
  end
178
178
  end
179
+
180
+ def store.full_path_to_relative(file)
181
+ file
182
+ end
179
183
  end
180
184
 
181
185
  def reporting_speed
@@ -215,12 +219,43 @@ namespace :benchmarks do
215
219
  $stdout = previous_out
216
220
  end
217
221
 
222
+ def measure_configure_memory
223
+ require 'memory_profiler'
224
+ # warmup
225
+ 3.times { Coverband.configure }
226
+
227
+ previous_out = $stdout
228
+ capture = StringIO.new
229
+ $stdout = capture
230
+
231
+ MemoryProfiler.report do
232
+ 10.times do
233
+ Coverband.configure do |config|
234
+ redis_url = ENV['CACHE_REDIS_URL'] || ENV['REDIS_URL']
235
+ config.store = Coverband::Adapters::RedisStore.new(Redis.new(url: redis_url), redis_namespace: 'coverband_data')
236
+ end
237
+ end
238
+ end.pretty_print
239
+ data = $stdout.string
240
+ $stdout = previous_out
241
+ puts data
242
+ raise 'leaking memory!!!' unless data.match('Total retained: 0 bytes')
243
+ ensure
244
+ $stdout = previous_out
245
+ end
246
+
218
247
  desc 'runs memory reporting on Redis store'
219
248
  task memory_reporting: [:setup] do
220
249
  puts 'runs memory benchmarking to ensure we dont leak'
221
250
  measure_memory
222
251
  end
223
252
 
253
+ desc 'runs memory reporting on configure'
254
+ task memory_configure_reporting: [:setup] do
255
+ puts 'runs memory benchmarking on configure to ensure we dont leak'
256
+ measure_configure_memory
257
+ end
258
+
224
259
  desc 'runs memory leak check via Rails tests'
225
260
  task memory_rails: [:setup] do
226
261
  puts 'runs memory rails test to ensure we dont leak'
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This is a small script to illustrate how previous results get wiped out by forking
4
+ # this has implications of forking processes like Resque...
5
+ # this in the end would cause coverage.array_diff
6
+ # with previous results to add NEGATIVE code hits to the stored Coverage
7
+ # which in turn causes all sorts of crazy issues.
8
+ #
9
+ # ruby test/benchmarks/coverage_fork.rb
10
+ # in parent before fork
11
+ # {"/Users/danmayer/projects/coverband/test/dog.rb"=>[nil, nil, 1, 1, 2, nil, nil]}
12
+ # in child after fork
13
+ # {"/Users/danmayer/projects/coverband/test/dog.rb"=>[nil, nil, 0, 0, 0, nil, nil]}
14
+ # now triggering hits
15
+ # {"/Users/danmayer/projects/coverband/test/dog.rb"=>[nil, nil, 0, 0, 3, nil, nil]}
16
+ #
17
+ # I believe this might be related to CoW and GC... not sure
18
+ # http://patshaughnessy.net/2012/3/23/why-you-should-be-excited-about-garbage-collection-in-ruby-2-0
19
+ #
20
+ # NOTE: That the child now has 0 hits where previously method definitions had 1
21
+ # this causes all sorts of bad things to happen.
22
+ require 'coverage'
23
+ Coverage.start
24
+ load './test/dog.rb'
25
+ Dog.new.bark
26
+ Dog.new.bark
27
+ puts 'in parent before fork'
28
+ puts Coverage.peek_result
29
+ fork do
30
+ puts 'in child after fork'
31
+ puts Coverage.peek_result
32
+ puts 'now triggering hits'
33
+ Dog.new.bark
34
+ Dog.new.bark
35
+ Dog.new.bark
36
+ puts Coverage.peek_result
37
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../test_helper', File.dirname(__FILE__))
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
4
 
5
5
  class AdaptersBaseTest < Minitest::Test
6
6
  def setup
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../test_helper', File.dirname(__FILE__))
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
4
 
5
5
  class AdaptersFileStoreTest < Minitest::Test
6
6
  def setup
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../test_helper', File.dirname(__FILE__))
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
4
 
5
5
  class RedisTest < Minitest::Test
6
- BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
6
+ REDIS_STORAGE_FORMAT_VERSION = Coverband::Adapters::RedisStore::REDIS_STORAGE_FORMAT_VERSION
7
7
 
8
8
  def setup
9
9
  super
10
10
  @redis = Redis.new
11
11
  @store = Coverband::Adapters::RedisStore.new(@redis)
12
- @store.clear!
13
12
  end
14
13
 
15
14
  def test_coverage
@@ -34,6 +33,31 @@ class RedisTest < Minitest::Test
34
33
  assert_equal [0, 2, 4], @store.coverage['app_path/dog.rb']['data']
35
34
  end
36
35
 
36
+ def test_store_coverage_by_type
37
+ mock_file_hash
38
+ expected = basic_coverage
39
+ @store.type = :eager_loading
40
+ @store.save_report(expected)
41
+ assert_equal expected.keys, @store.coverage.keys
42
+ @store.coverage.each_pair do |key, data|
43
+ assert_equal expected[key], data['data']
44
+ end
45
+
46
+ @store.type = nil
47
+ assert_equal [], @store.coverage.keys
48
+ end
49
+
50
+ def test_merged_coverage_with_types
51
+ mock_file_hash
52
+ assert_nil @store.type
53
+ @store.type = :eager_loading
54
+ @store.save_report('app_path/dog.rb' => [0, 1, 1])
55
+ @store.type = nil
56
+ @store.save_report('app_path/dog.rb' => [1, 0, 1])
57
+ assert_equal [1, 1, 2], @store.get_coverage_report[:merged]['app_path/dog.rb']['data']
58
+ assert_nil @store.type
59
+ end
60
+
37
61
  def test_covered_lines_for_file
38
62
  mock_file_hash
39
63
  expected = basic_coverage
@@ -46,16 +70,9 @@ class RedisTest < Minitest::Test
46
70
  end
47
71
 
48
72
  def test_clear
49
- @redis.expects(:del).with(BASE_KEY).once
73
+ @redis.expects(:del).twice
50
74
  @store.clear!
51
75
  end
52
76
 
53
- private
54
77
 
55
- def test_data
56
- {
57
- '/Users/danmayer/projects/cover_band_server/app.rb' => { 54 => 1, 55 => 2 },
58
- '/Users/danmayer/projects/cover_band_server/server.rb' => { 5 => 1 }
59
- }
60
- end
61
78
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class AtExitTest < Minitest::Test
6
+ test 'only registers once' do
7
+ Coverband::AtExit.instance_eval { @at_exit_registered = nil }
8
+ Coverband::AtExit.expects(:at_exit).yields.once.returns(true)
9
+ 2.times { Coverband::AtExit.register }
10
+ end
11
+ end
12
+
13
+
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
+
5
+ class CollectorsCoverageTest < Minitest::Test
6
+ attr_accessor :coverband
7
+
8
+ def setup
9
+ super
10
+ Coverband.configure do |config|
11
+ config.store = Coverband::Adapters::RedisStore.new(Redis.new)
12
+ end
13
+ @coverband = Coverband::Collectors::Coverage.instance.reset_instance
14
+ # preload first coverage hit
15
+ @coverband.report_coverage(true)
16
+ end
17
+
18
+ def teardown
19
+ Thread.current[:coverband_instance] = nil
20
+ Coverband.configure do |config|
21
+ end
22
+ @coverband = Coverband::Collectors::Coverage.instance.reset_instance
23
+ end
24
+
25
+ test 'Dog class coverage' do
26
+ file = require_unique_file
27
+ coverband.report_coverage(true)
28
+ coverage = Coverband.configuration.store.coverage
29
+ assert_equal(coverage[file]["data"], [nil, nil, 1, 1, 0, nil, nil])
30
+ end
31
+
32
+ test 'Dog method and class coverage' do
33
+ load File.expand_path('../../dog.rb', File.dirname(__FILE__))
34
+ Dog.new.bark
35
+ coverband.report_coverage(true)
36
+ coverage = Coverband.configuration.store.coverage
37
+ assert_equal(coverage["./test/dog.rb"]["data"], [nil, nil, 1, 1, 1, nil, nil])
38
+ end
39
+
40
+ test 'gets coverage instance' do
41
+ assert_equal Coverband::Collectors::Coverage, coverband.class
42
+ end
43
+
44
+ test 'defaults to a redis store' do
45
+ assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
46
+ end
47
+
48
+ test 'report_coverage raises errors in tests' do
49
+ @coverband.reset_instance
50
+ @coverband.expects(:ready_to_report?).raises('Oh no')
51
+ assert_raises RuntimeError do
52
+ @coverband.report_coverage
53
+ end
54
+ end
55
+
56
+ test 'report_coverage raises errors in tests with verbose enabled' do
57
+ Coverband.configuration.verbose = true
58
+ logger = mock()
59
+ Coverband.configuration.logger = logger
60
+ @coverband.reset_instance
61
+ @coverband.expects(:ready_to_report?).raises('Oh no')
62
+ logger.expects(:error).times(3)
63
+ error = assert_raises RuntimeError do
64
+ @coverband.report_coverage
65
+ end
66
+ assert_match /Oh no/, error.message
67
+ end
68
+
69
+ test 'default tmp ignores' do
70
+ heroku_build_file = '/tmp/build_81feca8c72366e4edf020dc6f1937485/config/initializers/assets.rb'
71
+ assert_equal false, @coverband.send(:track_file?, heroku_build_file)
72
+ end
73
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
+ require './lib/coverband/collectors/delta'
5
+
6
+ class CollectorsDeltaTest < Minitest::Test
7
+ class MockSystemCoverage < Struct.new(:results)
8
+ end
9
+
10
+ def mock_coverage(coverage)
11
+ MockSystemCoverage.new(coverage)
12
+ end
13
+
14
+ def setup
15
+ Coverband::Collectors::Delta.reset
16
+ end
17
+
18
+ test 'No previous results' do
19
+ current_coverage = {
20
+ 'car.rb' => [0,5,1]
21
+ }
22
+ results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
23
+ assert_equal(current_coverage, results)
24
+ end
25
+
26
+ test 'Coverage has gone up' do
27
+ current_coverage = {
28
+ 'car.rb' => [nil,1,5,1]
29
+ }
30
+ results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
31
+ assert_equal(current_coverage, results)
32
+
33
+ current_coverage = {
34
+ 'car.rb' => [nil,1,7,1]
35
+ }
36
+ results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
37
+ assert_equal({'car.rb' => [nil, 0, 2, 0]}, results)
38
+ end
39
+
40
+ test 'New file added to coverage' do
41
+ current_coverage = {}
42
+ results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
43
+ assert_equal(current_coverage, results)
44
+
45
+ current_coverage = {
46
+ 'dealership.rb' => [nil,1,1,nil]
47
+ }
48
+ results = Coverband::Collectors::Delta.results(mock_coverage(current_coverage))
49
+ assert_equal(current_coverage, results)
50
+ end
51
+ end
52
+
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class BaseTest < Minitest::Test
6
+ def setup
7
+ super
8
+ Coverband.configure do |config|
9
+ config.root = Dir.pwd
10
+ config.s3_bucket = nil
11
+ config.root_paths = ['/app_path/']
12
+ config.ignore = ['vendor']
13
+ config.reporting_frequency = 100.0
14
+ config.reporter = 'std_out'
15
+ config.store = Coverband::Adapters::RedisStore.new(Redis.new)
16
+ end
17
+ end
18
+
19
+ test 'defaults' do
20
+ coverband = Coverband::Collectors::Coverage.instance.reset_instance
21
+ assert_equal ['vendor', 'internal:prelude', 'schema.rb'], coverband.instance_variable_get('@ignore_patterns')
22
+ end
23
+
24
+ test 'gem_paths' do
25
+ Coverband::Collectors::Coverage.instance.reset_instance
26
+ assert Coverband.configuration.gem_paths.first != nil
27
+ end
28
+
29
+ test 'groups' do
30
+ Coverband::Collectors::Coverage.instance.reset_instance
31
+ Coverband.configuration.track_gems = true
32
+ assert_equal %w(App Gems), Coverband.configuration.groups.keys
33
+ end
34
+
35
+ test 'all_root_paths' do
36
+ Coverband::Collectors::Coverage.instance.reset_instance
37
+ current_paths = Coverband.configuration.root_paths.dup
38
+ # verify previous bug fix
39
+ # it would extend the root_paths instance variable on each invokation
40
+ Coverband.configuration.all_root_paths
41
+ Coverband.configuration.all_root_paths
42
+ assert_equal current_paths, Coverband.configuration.root_paths
43
+ end
44
+
45
+ test 's3 options' do
46
+ Coverband::Collectors::Coverage.instance.reset_instance
47
+ Coverband.configure do |config|
48
+ config.s3_bucket = 'bucket'
49
+ config.s3_region = 'region'
50
+ config.s3_access_key_id = 'key_id'
51
+ config.s3_secret_access_key = 'secret'
52
+ end
53
+ assert_equal 'bucket', Coverband.configuration.s3_bucket
54
+ assert_equal 'region', Coverband.configuration.s3_region
55
+ assert_equal 'key_id', Coverband.configuration.s3_access_key_id
56
+ assert_equal 'secret', Coverband.configuration.s3_secret_access_key
57
+ end
58
+
59
+ test 'store raises issues' do
60
+ Coverband::Collectors::Coverage.instance.reset_instance
61
+ assert_raises RuntimeError do
62
+ Coverband.configure do |config|
63
+ config.store = 'fake'
64
+ end
65
+ end
66
+ end
67
+ end
@@ -23,4 +23,11 @@ class CoverbandTest < Minitest::Test
23
23
  Coverband::Background.expects(:start).never
24
24
  ::Coverband.start
25
25
  end
26
+
27
+ test 'Eager load coverage' do
28
+ Coverband.eager_loading_coverage!
29
+ assert_equal :eager_loading, Coverband.configuration.store.type
30
+ Coverband.runtime_coverage!
31
+ assert_nil Coverband.configuration.store.type
32
+ end
26
33
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
+
5
+ class BackgroundTest < Minitest::Test
6
+ class ThreadDouble < Struct.new(:alive)
7
+ def exit
8
+ end
9
+
10
+ def alive?
11
+ alive
12
+ end
13
+ end
14
+
15
+ def test_start
16
+ Thread.expects(:new).yields.returns(ThreadDouble.new(true))
17
+ Coverband::Background.expects(:loop).yields
18
+ Coverband::Background.expects(:sleep).with(30)
19
+ Coverband::Collectors::Coverage.instance.expects(:report_coverage).once
20
+ 2.times { Coverband::Background.start }
21
+ end
22
+
23
+ def test_start_dead_thread
24
+ Thread.expects(:new).yields.returns(ThreadDouble.new(false)).twice
25
+ Coverband::Background.expects(:loop).yields.twice
26
+ Coverband::Background.expects(:sleep).with(30).twice
27
+ Coverband::Collectors::Coverage.instance.expects(:report_coverage).twice
28
+ 2.times { Coverband::Background.start }
29
+ end
30
+
31
+ end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../test_helper', File.dirname(__FILE__))
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
4
  require 'rack'
5
5
 
6
6
  class MiddlewareTest < Minitest::Test
7
- BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
7
+ REDIS_STORAGE_FORMAT_VERSION = Coverband::Adapters::RedisStore::REDIS_STORAGE_FORMAT_VERSION
8
8
 
9
9
  def setup
10
10
  super
@@ -62,6 +62,7 @@ class MiddlewareTest < Minitest::Test
62
62
  request = Rack::MockRequest.env_for('/anything.json')
63
63
  Coverband::Collectors::Coverage.instance.reset_instance
64
64
  collector = Coverband::Collectors::Coverage.instance
65
+ collector.report_coverage(true)
65
66
  collector.instance_variable_set('@reporting_frequency', 100.0)
66
67
  middleware = Coverband::Middleware.new(fake_app)
67
68
  store = Coverband::Collectors::Coverage.instance.instance_variable_get('@store')
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../test_helper', File.dirname(__FILE__))
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
4
 
5
5
  class RackServerCheckTest < Minitest::Test
6
6
  test 'returns true when running in rack server' do
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../../test_helper', File.dirname(__FILE__))
4
+
5
+ class ResqueWorkerTest < Minitest::Test
6
+ def enqueue_and_run_job
7
+ Resque.enqueue(TestResqueJob)
8
+ queue = ENV['QUEUE'] ='resque_coverband'
9
+ worker = Resque::Worker.new
10
+ worker.startup
11
+ worker.work_one_job
12
+ end
13
+
14
+ def setup
15
+ super
16
+ Coverband.configure do |config|
17
+ config.background_reporting_enabled = false
18
+ config.root_paths = ["#{File.expand_path('../', File.dirname(__FILE__))}/"]
19
+ end
20
+ Coverband.start
21
+ redis = Coverband.configuration.store.send(:redis)
22
+ Resque.redis = redis
23
+ end
24
+
25
+ test 'resque job coverage' do
26
+ relative_job_file = './integrations/test_resque_job.rb'
27
+ resque_job_file = File.expand_path('./test_resque_job.rb', File.dirname(__FILE__))
28
+ require resque_job_file
29
+
30
+ enqueue_and_run_job
31
+
32
+ assert !Coverband::Background.running?
33
+
34
+ # TODO: There is a test only type issue where the test is looking at eager data
35
+ # it merged eager and eager for merged and runtime is eager
36
+ Coverband.runtime_coverage!
37
+ report = Coverband.configuration.store.get_coverage_report
38
+
39
+ assert_equal 0, report[Coverband::EAGER_TYPE][relative_job_file]['data'][4]
40
+ assert_equal 1, report[Coverband::RUNTIME_TYPE][relative_job_file]['data'][4]
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ class TestResqueJob
2
+ @queue = :resque_coverband
3
+
4
+ def self.perform
5
+ "resque job perform"
6
+ end
7
+ end