coverband 2.0.0.alpha1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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.redis = nil
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.coverage_file = '/tmp/fake_file.json'
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.coverage_file = '/tmp/fake_file.json'
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 => { 5 => 5 }))
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}", '6' => 1)
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
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require File.expand_path('../test_helper', File.dirname(__FILE__))
4
2
  require 'aws-sdk'
5
3
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+ require 'aws-sdk'
4
5
  require File.expand_path('../../lib/coverband/s3_web', File.dirname(__FILE__))
5
6
  require 'rack/test'
6
7
 
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.alpha1
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-04-18 00:00:00.000000000 Z
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: byebug
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: json
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: :runtime
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: simplecov
168
+ name: json
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">"
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: 0.11.1
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.11.1
180
+ version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: redis
182
+ name: simplecov
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">="
185
+ - - ">"
186
186
  - !ruby/object:Gem::Version
187
- version: '0'
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: '0'
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: 1.3.1
269
+ version: '0'
268
270
  requirements: []
269
271
  rubyforge_project:
270
- rubygems_version: 2.5.1
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)