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.
- checksums.yaml +5 -5
- data/.gitignore +6 -1
- data/.travis.yml +8 -2
- data/Gemfile +2 -0
- data/Gemfile.rails4 +2 -0
- data/README.md +135 -157
- data/Rakefile +1 -1
- data/changes.md +56 -5
- data/coverband.gemspec +5 -3
- data/lib/coverband/adapters/base.rb +44 -11
- data/lib/coverband/adapters/file_store.rb +8 -0
- data/lib/coverband/adapters/redis_store.rb +65 -8
- data/lib/coverband/at_exit.rb +37 -0
- data/lib/coverband/collectors/coverage.rb +43 -72
- data/lib/coverband/collectors/delta.rb +67 -0
- data/lib/coverband/configuration.rb +71 -2
- data/lib/coverband/integrations/background.rb +9 -10
- data/lib/coverband/integrations/middleware.rb +3 -2
- data/lib/coverband/integrations/rack_server_check.rb +4 -1
- data/lib/coverband/integrations/resque.rb +27 -0
- data/lib/coverband/reporters/base.rb +24 -36
- data/lib/coverband/reporters/html_report.rb +40 -15
- data/lib/coverband/reporters/web.rb +52 -10
- data/lib/coverband/utils/file_groups.rb +53 -0
- data/lib/coverband/utils/file_path_helper.rb +57 -0
- data/lib/coverband/utils/gem_list.rb +31 -0
- data/lib/coverband/utils/html_formatter.rb +50 -8
- data/lib/coverband/utils/railtie.rb +9 -1
- data/lib/coverband/utils/result.rb +16 -19
- data/lib/coverband/utils/results.rb +63 -0
- data/lib/coverband/utils/source_file.rb +23 -1
- data/lib/coverband/utils/tasks.rb +17 -17
- data/lib/coverband/version.rb +1 -1
- data/lib/coverband.rb +32 -2
- data/public/application.css +5 -0
- data/public/application.js +117 -1640
- data/public/dependencies.js +1581 -0
- data/public/favicon.png +0 -0
- data/test/benchmarks/benchmark.rake +36 -1
- data/test/benchmarks/coverage_fork.sh +37 -0
- data/test/{unit/adapters_base_test.rb → coverband/adapters/base_test.rb} +1 -1
- data/test/{unit/adapters_file_store_test.rb → coverband/adapters/file_store_test.rb} +1 -1
- data/test/{unit/adapters_redis_store_test.rb → coverband/adapters/redis_store_test.rb} +28 -11
- data/test/coverband/at_exit_test.rb +13 -0
- data/test/coverband/collectors/coverage_test.rb +73 -0
- data/test/coverband/collectors/delta_test.rb +52 -0
- data/test/coverband/configuration_test.rb +67 -0
- data/test/{unit → coverband}/coverband_test.rb +7 -0
- data/test/coverband/integrations/background_test.rb +31 -0
- data/test/{unit → coverband/integrations}/middleware_test.rb +3 -2
- data/test/{unit/rack_server_checkout_test.rb → coverband/integrations/rack_server_check_test.rb} +1 -1
- data/test/coverband/integrations/resque_worker_test.rb +42 -0
- data/test/coverband/integrations/test_resque_job.rb +7 -0
- data/test/coverband/reporters/base_test.rb +168 -0
- data/test/{unit/reports_console_test.rb → coverband/reporters/console_test.rb} +8 -7
- data/test/coverband/reporters/html_test.rb +45 -0
- data/test/coverband/reporters/web_test.rb +52 -0
- data/test/coverband/utils/file_groups_test.rb +55 -0
- data/test/{unit → coverband}/utils/file_list_test.rb +1 -1
- data/test/coverband/utils/gem_list_test.rb +48 -0
- data/test/{unit → coverband}/utils/source_file_test.rb +1 -1
- data/test/{unit → integration}/full_stack_test.rb +25 -12
- data/test/{unit → integration}/rails_full_stack_test.rb +27 -7
- data/test/rails4_dummy/config/application.rb +1 -1
- data/test/rails4_dummy/config/coverband.rb +4 -1
- data/test/rails4_dummy/tmp/.keep +0 -0
- data/test/rails5_dummy/config/application.rb +1 -1
- data/test/rails5_dummy/config/coverband.rb +3 -1
- data/test/rails5_dummy/tmp/.keep +0 -0
- data/test/rails_test_helper.rb +13 -8
- data/test/test_helper.rb +12 -17
- data/test/unique_files.rb +23 -0
- data/views/file_list.erb +33 -20
- data/views/gem_list.erb +54 -0
- data/views/layout.erb +13 -4
- data/views/settings.erb +35 -0
- data/views/source_file.erb +16 -4
- data/views/source_file_loader.erb +7 -0
- metadata +108 -62
- data/test/unit/background_test.rb +0 -29
- data/test/unit/collectors_coverage_test.rb +0 -48
- data/test/unit/configuration_test.rb +0 -23
- data/test/unit/reports_base_test.rb +0 -109
- data/test/unit/reports_html_test.rb +0 -29
- data/test/unit/reports_web_test.rb +0 -39
- /data/test/{unit → coverband}/utils/lines_classifier_test.rb +0 -0
- /data/test/{unit → coverband}/utils/result_test.rb +0 -0
- /data/test/{unit → coverband}/utils/s3_report_test.rb +0 -0
- /data/test/{unit → coverband}/utils/source_file_line_test.rb +0 -0
- /data/test/{unit/dog.rb → dog.rb} +0 -0
data/public/favicon.png
ADDED
|
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
|
|
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,15 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require File.expand_path('
|
|
3
|
+
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
|
|
5
5
|
class RedisTest < Minitest::Test
|
|
6
|
-
|
|
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).
|
|
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('
|
|
3
|
+
require File.expand_path('../../test_helper', File.dirname(__FILE__))
|
|
4
4
|
require 'rack'
|
|
5
5
|
|
|
6
6
|
class MiddlewareTest < Minitest::Test
|
|
7
|
-
|
|
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')
|
data/test/{unit/rack_server_checkout_test.rb → coverband/integrations/rack_server_check_test.rb}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require File.expand_path('
|
|
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
|