coverband 2.0.0.alpha1 → 2.0.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/README.md +286 -156
- data/Rakefile +5 -0
- data/changes.md +33 -2
- data/coverband.gemspec +6 -3
- data/docs/coverband_install.gif +0 -0
- data/lib/coverband.rb +1 -2
- data/lib/coverband/adapters/base.rb +31 -0
- data/lib/coverband/adapters/file_store.rb +1 -1
- data/lib/coverband/adapters/memory_cache_store.rb +5 -1
- data/lib/coverband/adapters/redis_store.rb +2 -2
- data/lib/coverband/collectors/base.rb +9 -23
- data/lib/coverband/collectors/coverage.rb +4 -35
- data/lib/coverband/collectors/trace.rb +21 -9
- data/lib/coverband/configuration.rb +17 -12
- data/lib/coverband/s3_web.rb +7 -1
- data/lib/coverband/version.rb +1 -1
- data/test/benchmarks/benchmark.rake +93 -55
- data/test/test_helper.rb +5 -3
- data/test/unit/baseline_test.rb +5 -7
- data/test/unit/collectors_base_test.rb +8 -2
- data/test/unit/collectors_coverage_test.rb +1 -1
- data/test/unit/collectors_trace_test.rb +8 -0
- data/test/unit/configuration_test.rb +0 -4
- data/test/unit/middleware_test.rb +10 -40
- data/test/unit/reports_base_test.rb +26 -0
- data/test/unit/s3_report_writer_test.rb +0 -2
- data/test/unit/s3_web_test.rb +1 -0
- metadata +20 -18
data/test/test_helper.rb
CHANGED
@@ -6,6 +6,7 @@ require 'test/unit'
|
|
6
6
|
require 'mocha/setup'
|
7
7
|
require 'ostruct'
|
8
8
|
require 'json'
|
9
|
+
require 'redis'
|
9
10
|
|
10
11
|
SimpleCov.start do
|
11
12
|
add_filter 'specs/ruby/1.9.1/gems/'
|
@@ -13,6 +14,8 @@ SimpleCov.start do
|
|
13
14
|
add_filter '/config/'
|
14
15
|
end
|
15
16
|
|
17
|
+
TEST_COVERAGE_FILE = '/tmp/fake_file.json'
|
18
|
+
|
16
19
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
17
20
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
18
21
|
Mocha::Configuration.prevent(:stubbing_non_existent_method)
|
@@ -37,7 +40,7 @@ end
|
|
37
40
|
def fake_redis
|
38
41
|
@redis ||= begin
|
39
42
|
redis = OpenStruct.new
|
40
|
-
# mocha requires method to exist to mock it
|
43
|
+
# mocha requires method to exist to mock it
|
41
44
|
def redis.smembers(key); end
|
42
45
|
def redis.hgetall(key); end
|
43
46
|
redis
|
@@ -63,10 +66,9 @@ end
|
|
63
66
|
|
64
67
|
Coverband.configure do |config|
|
65
68
|
config.root = Dir.pwd
|
66
|
-
config.redis = Redis.new
|
67
|
-
# config.coverage_baseline = JSON.parse(File.read('./tmp/coverband_baseline.json'))
|
68
69
|
config.root_paths = ['/app/']
|
69
70
|
config.ignore = ['vendor']
|
70
71
|
config.percentage = 100.0
|
71
72
|
config.reporter = 'std_out'
|
73
|
+
config.store = Coverband::Adapters::RedisStore.new(Redis.new)
|
72
74
|
end
|
data/test/unit/baseline_test.rb
CHANGED
@@ -3,12 +3,10 @@
|
|
3
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
4
4
|
|
5
5
|
class ReporterTest < Test::Unit::TestCase
|
6
|
+
|
6
7
|
test 'record baseline' do
|
7
8
|
Coverband.configure do |config|
|
8
|
-
config.
|
9
|
-
config.store = nil
|
10
|
-
config.root = '/full/remote_app/path'
|
11
|
-
config.coverage_file = '/tmp/fake_file.json'
|
9
|
+
config.store = Coverband::Adapters::FileStore.new(TEST_COVERAGE_FILE)
|
12
10
|
end
|
13
11
|
Coverage.expects(:start).returns(true).at_least_once
|
14
12
|
Coverage.expects(:result).returns('fake' => [0, 1]).at_least_once
|
@@ -29,7 +27,7 @@ class ReporterTest < Test::Unit::TestCase
|
|
29
27
|
config.redis = nil
|
30
28
|
config.store = nil
|
31
29
|
config.root = '/full/remote_app/path'
|
32
|
-
config.
|
30
|
+
config.store = Coverband::Adapters::FileStore.new(TEST_COVERAGE_FILE)
|
33
31
|
end
|
34
32
|
File.expects(:exist?).at_least_once.returns(true)
|
35
33
|
expected = { 'filename.rb' => [0, nil, 1] }
|
@@ -44,7 +42,7 @@ class ReporterTest < Test::Unit::TestCase
|
|
44
42
|
config.redis = nil
|
45
43
|
config.store = nil
|
46
44
|
config.root = '/full/remote_app/path'
|
47
|
-
config.
|
45
|
+
config.store = Coverband::Adapters::FileStore.new(TEST_COVERAGE_FILE)
|
48
46
|
config.ignore = ['ignored_file.rb']
|
49
47
|
end
|
50
48
|
root = Coverband.configuration.root
|
@@ -52,7 +50,7 @@ class ReporterTest < Test::Unit::TestCase
|
|
52
50
|
expected_files = [root + '/fakefile.rb']
|
53
51
|
assert_equal(expected_files, Coverband::Baseline.exclude_files(files))
|
54
52
|
end
|
55
|
-
|
53
|
+
|
56
54
|
test 'convert_coverage_format' do
|
57
55
|
results = { 'fake_file.rb' => [1, nil, 0, 2] }
|
58
56
|
expected = { 'fake_file.rb' => { 1 => 1, 3 => 0, 4 => 2 } }
|
@@ -4,6 +4,12 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
|
|
4
4
|
require File.expand_path('./dog', File.dirname(__FILE__))
|
5
5
|
|
6
6
|
class CollectorsBaseTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
Coverband.configure do |config|
|
9
|
+
config.collector = 'trace'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
test 'defaults to a redis store' do
|
8
14
|
coverband = Coverband::Collectors::Base.instance.reset_instance
|
9
15
|
assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
|
@@ -32,7 +38,6 @@ class CollectorsBaseTest < Test::Unit::TestCase
|
|
32
38
|
assert_equal true, coverband.instance_variable_get('@enabled')
|
33
39
|
coverband.stop
|
34
40
|
assert_equal false, coverband.instance_variable_get('@enabled')
|
35
|
-
assert_equal false, coverband.instance_variable_get('@tracer_set')
|
36
41
|
end
|
37
42
|
|
38
43
|
test 'allow for sampling with a block and enable when 100 percent sample' do
|
@@ -71,7 +76,7 @@ class CollectorsBaseTest < Test::Unit::TestCase
|
|
71
76
|
Coverband.configuration.logger.stubs('info')
|
72
77
|
store = Coverband::Adapters::RedisStore.new(Redis.new)
|
73
78
|
coverband.instance_variable_set('@store', store)
|
74
|
-
store.expects(:save_report).once.with(has_entries(dog_file => {
|
79
|
+
store.expects(:save_report).once.with(has_entries(dog_file => {5 => 5}))
|
75
80
|
assert_equal false, coverband.instance_variable_get('@enabled')
|
76
81
|
coverband.start
|
77
82
|
5.times { Dog.new.bark }
|
@@ -84,6 +89,7 @@ class CollectorsBaseTest < Test::Unit::TestCase
|
|
84
89
|
coverband = Coverband::Collectors::Base.instance.reset_instance
|
85
90
|
coverband.start
|
86
91
|
100.times { Dog.new.bark }
|
92
|
+
Coverband::Collectors::Base.instance
|
87
93
|
assert_equal 100, coverband.instance_variable_get('@file_line_usage')[dog_file][5]
|
88
94
|
coverband.stop
|
89
95
|
coverband.save
|
@@ -8,9 +8,9 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3.0')
|
|
8
8
|
attr_accessor :coverband
|
9
9
|
|
10
10
|
def setup
|
11
|
-
Thread.current[:coverband_instance] = nil
|
12
11
|
Coverband.configure do |config|
|
13
12
|
config.collector = 'coverage'
|
13
|
+
config.store = Coverband::Adapters::RedisStore.new(Redis.new)
|
14
14
|
end
|
15
15
|
@coverband = Coverband::Collectors::Base.instance.reset_instance
|
16
16
|
end
|
@@ -4,6 +4,12 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
|
|
4
4
|
require File.expand_path('./dog', File.dirname(__FILE__))
|
5
5
|
|
6
6
|
class CollectorsTraceTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
Coverband.configure do |config|
|
9
|
+
config.collector = 'trace'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
test 'defaults to a redis store' do
|
8
14
|
coverband = Coverband::Collectors::Base.instance.reset_instance
|
9
15
|
assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
|
@@ -82,6 +88,8 @@ class CollectorsTraceTest < Test::Unit::TestCase
|
|
82
88
|
test 'tracer should count line numbers' do
|
83
89
|
dog_file = File.expand_path('./dog.rb', File.dirname(__FILE__))
|
84
90
|
coverband = Coverband::Collectors::Base.instance.reset_instance
|
91
|
+
store = Coverband::Adapters::RedisStore.new(Redis.new)
|
92
|
+
coverband.instance_variable_set('@store', store)
|
85
93
|
coverband.start
|
86
94
|
100.times { Dog.new.bark }
|
87
95
|
assert_equal 100, coverband.instance_variable_get('@file_line_usage')[dog_file][5]
|
@@ -3,10 +3,6 @@
|
|
3
3
|
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
4
4
|
|
5
5
|
class BaseTest < Test::Unit::TestCase
|
6
|
-
test 'defaults to line trace point event' do
|
7
|
-
assert_equal Coverband.configuration.trace_point_events, [:line]
|
8
|
-
end
|
9
|
-
|
10
6
|
test 'defaults to ignore gems' do
|
11
7
|
assert_equal Coverband.configuration.include_gems, false
|
12
8
|
coverband = Coverband::Collectors::Base.instance.reset_instance
|
@@ -7,6 +7,15 @@ require 'rack'
|
|
7
7
|
class MiddlewareTest < Test::Unit::TestCase
|
8
8
|
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
9
9
|
|
10
|
+
def setup
|
11
|
+
Coverband.configure do |config|
|
12
|
+
config.redis = nil
|
13
|
+
config.store = nil
|
14
|
+
config.collector = 'trace'
|
15
|
+
config.store = Coverband::Adapters::RedisStore.new(Redis.new)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
10
19
|
test 'call app' do
|
11
20
|
request = Rack::MockRequest.env_for('/anything.json')
|
12
21
|
Coverband::Collectors::Base.instance.reset_instance
|
@@ -42,26 +51,6 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
42
51
|
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@enabled')
|
43
52
|
end
|
44
53
|
|
45
|
-
test 'always unset function when sampling' do
|
46
|
-
request = Rack::MockRequest.env_for('/anything.json')
|
47
|
-
Coverband::Collectors::Base.instance.reset_instance
|
48
|
-
middleware = Coverband::Middleware.new(fake_app)
|
49
|
-
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@tracer_set')
|
50
|
-
Coverband::Collectors::Base.instance.instance_variable_set('@sample_percentage', 100.0)
|
51
|
-
middleware.call(request)
|
52
|
-
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@tracer_set')
|
53
|
-
end
|
54
|
-
|
55
|
-
test 'always unset function when not sampling' do
|
56
|
-
request = Rack::MockRequest.env_for('/anything.json')
|
57
|
-
Coverband::Collectors::Base.instance.reset_instance
|
58
|
-
middleware = Coverband::Middleware.new(fake_app)
|
59
|
-
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@tracer_set')
|
60
|
-
middleware.instance_variable_set('@sample_percentage', 0.0)
|
61
|
-
middleware.call(request)
|
62
|
-
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@tracer_set')
|
63
|
-
end
|
64
|
-
|
65
54
|
test 'always record coverage, set trace func, and add_files when sampling' do
|
66
55
|
request = Rack::MockRequest.env_for('/anything.json')
|
67
56
|
Coverband::Collectors::Base.instance.reset_instance
|
@@ -93,30 +82,11 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
93
82
|
fake_redis = Redis.new
|
94
83
|
redis_store = Coverband::Adapters::RedisStore.new(fake_redis)
|
95
84
|
redis_store.clear!
|
96
|
-
Coverband::Collectors::Base.instance.instance_variable_set('@store', redis_store)
|
97
|
-
fake_redis.stubs(:info).returns('redis_version' => 3.0)
|
98
|
-
fake_redis.expects(:sadd).at_least_once
|
99
|
-
fake_redis.expects(:mapped_hmset).at_least_once
|
100
|
-
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", '7' => 1)
|
101
|
-
middleware.call(request)
|
102
|
-
assert_equal true, Coverband::Collectors::Base.instance.instance_variable_get('@enabled')
|
103
|
-
end
|
104
|
-
|
105
|
-
test 'report only on calls when configured' do
|
106
|
-
request = Rack::MockRequest.env_for('/anything.json')
|
107
|
-
Coverband.configuration.trace_point_events = [:call]
|
108
85
|
Coverband::Collectors::Base.instance.reset_instance
|
109
|
-
middleware = Coverband::Middleware.new(fake_app_with_lines)
|
110
|
-
assert_equal false, Coverband::Collectors::Base.instance.instance_variable_get('@enabled')
|
111
|
-
Coverband::Collectors::Base.instance.instance_variable_set('@sample_percentage', 100.0)
|
112
|
-
fake_redis = Redis.new
|
113
|
-
redis_store = Coverband::Adapters::RedisStore.new(fake_redis)
|
114
|
-
redis_store.clear!
|
115
86
|
Coverband::Collectors::Base.instance.instance_variable_set('@store', redis_store)
|
116
|
-
fake_redis.stubs(:info).returns('redis_version' => 3.0)
|
117
87
|
fake_redis.expects(:sadd).at_least_once
|
118
88
|
fake_redis.expects(:mapped_hmset).at_least_once
|
119
|
-
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", '
|
89
|
+
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", '7' => 1)
|
120
90
|
middleware.call(request)
|
121
91
|
assert_equal true, Coverband::Collectors::Base.instance.instance_variable_get('@enabled')
|
122
92
|
end
|
@@ -137,4 +137,30 @@ class ReportsBaseTest < Test::Unit::TestCase
|
|
137
137
|
|
138
138
|
assert_equal expects, Coverband::Reporters::Base.merge_existing_coverage(first, second)
|
139
139
|
end
|
140
|
+
|
141
|
+
test "#get_current_scov_data_imp doesn't ignore folders with default ignore keys" do
|
142
|
+
@fake_redis = fake_redis
|
143
|
+
store = Coverband::Adapters::RedisStore.new(@fake_redis)
|
144
|
+
|
145
|
+
Coverband.configure do |config|
|
146
|
+
config.redis = @fake_redis
|
147
|
+
config.reporter = 'std_out'
|
148
|
+
config.ignore = %w[vendor .erb$ .slim$]
|
149
|
+
config.root = '/full/remote_app/path'
|
150
|
+
end
|
151
|
+
|
152
|
+
key = '/a_path/that_has_erb_in/thepath.rb'
|
153
|
+
roots = ['/app/', '/full/remote_app/path/']
|
154
|
+
|
155
|
+
lines_hit = [1, 3, 6]
|
156
|
+
store.stubs(:covered_lines_for_file).returns(lines_hit)
|
157
|
+
# expects to show hit counts on 1,3,6
|
158
|
+
expected = { '/a_path/that_has_erb_in/thepath.rb' => [1, nil, 1, nil, nil, 1] }
|
159
|
+
File.stubs(:exist?).returns(true)
|
160
|
+
File.stubs(:foreach).returns(['line 1', 'line2', 'line3', 'line4', 'line5', 'line6'])
|
161
|
+
|
162
|
+
# assert_equal expected, Coverband::Reporters::Base.line_hash(store, key, roots)
|
163
|
+
store.expects(:covered_files).returns([key])
|
164
|
+
assert_equal expected, Coverband::Reporters::Base.get_current_scov_data_imp(store, roots)
|
165
|
+
end
|
140
166
|
end
|
data/test/unit/s3_web_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coverband
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: redis
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,13 +151,13 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: benchmark-ips
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
|
-
type: :
|
160
|
+
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
@@ -165,33 +165,33 @@ dependencies:
|
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: json
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0
|
173
|
+
version: '0'
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - "
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0
|
180
|
+
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: simplecov
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- - "
|
185
|
+
- - ">"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 0.11.1
|
188
188
|
type: :runtime
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- - "
|
192
|
+
- - ">"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: 0.11.1
|
195
195
|
description: Rack middleware to help measure production code usage (LOC runtime usage)
|
196
196
|
email:
|
197
197
|
- dan@mayerdan.com
|
@@ -210,7 +210,9 @@ files:
|
|
210
210
|
- coverband.gemspec
|
211
211
|
- docs/coverband_details.png
|
212
212
|
- docs/coverband_index.png
|
213
|
+
- docs/coverband_install.gif
|
213
214
|
- lib/coverband.rb
|
215
|
+
- lib/coverband/adapters/base.rb
|
214
216
|
- lib/coverband/adapters/file_store.rb
|
215
217
|
- lib/coverband/adapters/memory_cache_store.rb
|
216
218
|
- lib/coverband/adapters/redis_store.rb
|
@@ -262,12 +264,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
264
|
version: '0'
|
263
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
266
|
requirements:
|
265
|
-
- - "
|
267
|
+
- - ">="
|
266
268
|
- !ruby/object:Gem::Version
|
267
|
-
version:
|
269
|
+
version: '0'
|
268
270
|
requirements: []
|
269
271
|
rubyforge_project:
|
270
|
-
rubygems_version: 2.
|
272
|
+
rubygems_version: 2.7.3
|
271
273
|
signing_key:
|
272
274
|
specification_version: 4
|
273
275
|
summary: Rack middleware to help measure production code usage (LOC runtime usage)
|