coverband 3.0.0 → 3.0.1

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 (55) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/.travis.yml +3 -0
  4. data/Gemfile +1 -0
  5. data/Gemfile.rails4 +7 -0
  6. data/Gemfile.rails4.lock +164 -0
  7. data/README.md +16 -14
  8. data/changes.md +17 -4
  9. data/coverband.gemspec +11 -4
  10. data/lib/coverband/adapters/base.rb +57 -8
  11. data/lib/coverband/adapters/file_store.rb +4 -22
  12. data/lib/coverband/adapters/redis_store.rb +7 -27
  13. data/lib/coverband/collectors/coverage.rb +5 -0
  14. data/lib/coverband/configuration.rb +4 -1
  15. data/lib/coverband/integrations/background.rb +25 -1
  16. data/lib/coverband/integrations/rack_server_check.rb +27 -0
  17. data/lib/coverband/reporters/simple_cov_report.rb +1 -7
  18. data/lib/coverband/reporters/web.rb +2 -20
  19. data/lib/coverband/utils/s3_report.rb +108 -0
  20. data/lib/coverband/version.rb +1 -1
  21. data/lib/coverband.rb +4 -1
  22. data/test/benchmarks/benchmark.rake +47 -1
  23. data/test/rails4_dummy/app/controllers/dummy_controller.rb +5 -0
  24. data/test/rails4_dummy/config/application.rb +15 -0
  25. data/test/rails4_dummy/config/boot.rb +3 -0
  26. data/test/rails4_dummy/config/coverband.rb +8 -0
  27. data/test/rails4_dummy/config/environment.rb +5 -0
  28. data/test/rails4_dummy/config/routes.rb +3 -0
  29. data/test/rails4_dummy/config/secrets.yml +3 -0
  30. data/test/rails4_dummy/config.ru +4 -0
  31. data/test/rails5_dummy/app/controllers/dummy_controller.rb +5 -0
  32. data/test/rails5_dummy/config/application.rb +16 -0
  33. data/test/rails5_dummy/config/coverband.rb +8 -0
  34. data/test/rails5_dummy/config/environment.rb +2 -0
  35. data/test/rails5_dummy/config/routes.rb +3 -0
  36. data/test/rails5_dummy/config.ru +3 -0
  37. data/test/rails_test_helper.rb +11 -0
  38. data/test/test_helper.rb +14 -9
  39. data/test/unit/adapters_base_test.rb +34 -13
  40. data/test/unit/adapters_file_store_test.rb +8 -4
  41. data/test/unit/adapters_redis_store_test.rb +7 -13
  42. data/test/unit/background_test.rb +16 -0
  43. data/test/unit/collectors_coverage_test.rb +24 -0
  44. data/test/unit/configuration_test.rb +12 -0
  45. data/test/unit/coverband_test.rb +26 -0
  46. data/test/unit/rack_server_checkout_test.rb +24 -0
  47. data/test/unit/rails_full_stack_test.rb +16 -0
  48. data/test/unit/reports_base_test.rb +0 -2
  49. data/test/unit/reports_console_test.rb +1 -0
  50. data/test/unit/reports_simple_cov_test.rb +1 -10
  51. data/test/unit/reports_web_test.rb +1 -3
  52. data/test/unit/utils_s3_report_test.rb +44 -0
  53. metadata +78 -9
  54. data/lib/coverband/utils/s3_report_writer.rb +0 -59
  55. data/test/unit/utils_s3_report_writer_test.rb +0 -30
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class CoverbandTest < Test::Unit::TestCase
6
+
7
+ test 'Coverband#start kicks off background reporting if enabled and not in rack server' do
8
+ Coverband.configuration.stubs(:background_reporting_enabled).returns(:true)
9
+ Coverband::RackServerCheck.expects(:running?).returns(false)
10
+ Coverband::Background.expects(:start)
11
+ Coverband.start
12
+ end
13
+
14
+ test 'Coverband#start delays background reporting if enabled and running in a rack server' do
15
+ Coverband.configuration.stubs(:background_reporting_enabled).returns(true)
16
+ Coverband::RackServerCheck.expects(:running?).returns(true)
17
+ Coverband::Background.expects(:start).never
18
+ Coverband.start
19
+ end
20
+
21
+ test 'Coverband#start does not kick off background reporting if not enabled' do
22
+ Coverband.configuration.stubs(:background_reporting_enabled).returns(false)
23
+ Coverband::Background.expects(:start).never
24
+ ::Coverband.start
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
4
+
5
+ class RackServerCheckTest < Test::Unit::TestCase
6
+
7
+ test 'returns true when running in rack server' do
8
+ caller_locations = ['blah/lib/rack/server.rb'].map{ |path| OpenStruct.new(path: path, label: 'foo') }
9
+ Kernel.expects(:caller_locations).returns(caller_locations)
10
+ assert_true(Coverband::RackServerCheck.running?)
11
+ end
12
+
13
+ test 'returns false when not running in rack server' do
14
+ caller_locations = ['blah/lib/sidekiq/worker.rb'].map{ |path| OpenStruct.new(path: path, label: 'foo') }
15
+ Kernel.expects(:caller_locations).returns(caller_locations)
16
+ assert_false(Coverband::RackServerCheck.running?)
17
+ end
18
+
19
+ test 'returns true if running within a rails server' do
20
+ caller_locations = [OpenStruct.new(path: '/lib/rails/commands/commands_tasks.rb', label: 'server')]
21
+ Kernel.expects(:caller_locations).returns(caller_locations)
22
+ assert_true(Coverband::RackServerCheck.running?)
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../rails_test_helper', File.dirname(__FILE__))
4
+
5
+ class RailsFullStackTest < ActionDispatch::IntegrationTest
6
+ def setup
7
+ Coverband.configuration.store.clear!
8
+ end
9
+
10
+ test 'this is how we do it' do
11
+ get '/dummy/show'
12
+ assert_response :success
13
+ assert_equal "I am no dummy", response.body
14
+ assert_equal [1, 1, 1, nil, nil], Coverband.configuration.store.coverage["#{Rails.root}/app/controllers/dummy_controller.rb"]
15
+ end
16
+ end
@@ -103,8 +103,6 @@ class ReportsBaseTest < Test::Unit::TestCase
103
103
  lines_hit = [1, 3, 6]
104
104
  store.stubs(:coverage).returns(key => lines_hit)
105
105
  expected = { key => [1, 3, 6] }
106
- File.stubs(:exist?).returns(true)
107
- File.stubs(:foreach).returns(['line 1', 'line2', 'line3', 'line4', 'line5', 'line6'])
108
106
 
109
107
  assert_equal expected, Coverband::Reporters::Base.send(:get_current_scov_data_imp, store, roots)
110
108
  end
@@ -18,6 +18,7 @@ class SimpleCovReportTest < Test::Unit::TestCase
18
18
  config.reporting_frequency = 100.0
19
19
  end
20
20
  Coverband.configuration.logger.stubs('info')
21
+ mock_file_hash
21
22
  Coverband::Reporters::ConsoleReport
22
23
  .expects(:current_root)
23
24
  .returns('app_path')
@@ -11,15 +11,6 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
11
11
  @store.clear!
12
12
  end
13
13
 
14
- def combined_report
15
- {
16
- "#{BASE_KEY}.test/unit/dog.rb" => {
17
- new: example_hash,
18
- existing: {}
19
- }
20
- }
21
- end
22
-
23
14
  test 'generate scov report' do
24
15
  Coverband.configure do |config|
25
16
  config.reporter = 'scov'
@@ -28,13 +19,13 @@ class ReportsSimpleCovTest < Test::Unit::TestCase
28
19
  config.ignore = ['notsomething.rb']
29
20
  end
30
21
  Coverband.configuration.logger.stubs('info')
22
+ mock_file_hash
31
23
  @store.send(:save_report, basic_coverage)
32
24
 
33
25
  SimpleCov.expects(:track_files)
34
26
  SimpleCov.expects(:add_not_loaded_files).returns({})
35
27
  SimpleCov::Result.any_instance.expects(:format!)
36
28
  SimpleCov.stubs(:root)
37
-
38
29
  Coverband::Reporters::SimpleCovReport.report(@store, open_report: false)
39
30
  end
40
31
  end
@@ -29,9 +29,7 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
29
29
 
30
30
  test 'renders show content' do
31
31
  Coverband.configuration.s3_bucket = 'coverage-bucket'
32
- s3 = mock('s3')
33
- Aws::S3::Client.expects(:new).returns(s3)
34
- s3.expects(:get_object).with(bucket: 'coverage-bucket', key: 'coverband/index.html').returns mock('response', body: mock('body', read: 'content'))
32
+ Coverband::Utils::S3Report.any_instance.expects(:retrieve).returns('content')
35
33
  get '/show'
36
34
  assert last_response.ok?
37
35
  assert_equal 'content', last_response.body
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
+ require 'aws-sdk'
3
+
4
+ module Coverband
5
+ class S3ReportTest < Test::Unit::TestCase
6
+ def html_version
7
+ Gem::Specification.find_by_name('simplecov-html').version.version.to_s
8
+ rescue StandardError
9
+ '0.10.1'
10
+ end
11
+
12
+ test 'it writes the coverage report to s3' do
13
+ if defined?(Aws::S3::Resource)
14
+ # AWS v2
15
+ s3 = mock('s3_resource')
16
+ bucket = mock('bucket')
17
+ object = mock('object')
18
+ s3.expects(:bucket).with('coverage-bucket').returns(bucket)
19
+ bucket.expects(:object).with('coverband/index.html').returns(object)
20
+ File.expects(:read).at_least(0).returns("content ./assets/#{html_version}/")
21
+ object.expects(:put).with(body: 'content ')
22
+ Aws::S3::Resource.expects(:new).returns(s3)
23
+ else
24
+ # AWS v1
25
+ object = mock('object')
26
+ object.expects(:write).with('content ')
27
+ bucket = mock('bucket')
28
+ bucket.expects(:objects).returns('coverband/index.html' => object)
29
+ local_s3 = mock('s3_resource')
30
+ local_s3.expects(:buckets).returns('coverage-bucket' => bucket)
31
+ File.expects(:read).at_least(0).returns("content ./assets/#{html_version}/")
32
+ AWS::S3::Client.expects(:new).returns(nil)
33
+ AWS::S3.expects(:new).returns(local_s3)
34
+ end
35
+
36
+ s3_options = {
37
+ region: 'us-west-1',
38
+ access_key_id: '',
39
+ secret_access_key: ''
40
+ }
41
+ Coverband::Utils::S3Report.new('coverage-bucket', s3_options).persist!
42
+ end
43
+ end
44
+ end
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: 3.0.0
4
+ version: 3.0.1
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-04 00:00:00.000000000 Z
11
+ date: 2018-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: benchmark-ips
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: redis
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: test-unit
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +137,7 @@ dependencies:
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: redis
140
+ name: m
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - ">="
@@ -123,7 +151,7 @@ dependencies:
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
- name: benchmark-ips
154
+ name: memory_profiler
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ">="
@@ -151,7 +179,7 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
153
181
  - !ruby/object:Gem::Dependency
154
- name: byebug
182
+ name: pry-byebug
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
@@ -189,6 +217,8 @@ files:
189
217
  - ".rubocop.yml"
190
218
  - ".travis.yml"
191
219
  - Gemfile
220
+ - Gemfile.rails4
221
+ - Gemfile.rails4.lock
192
222
  - LICENSE
193
223
  - LICENSE.txt
194
224
  - README.md
@@ -204,11 +234,12 @@ files:
204
234
  - lib/coverband/configuration.rb
205
235
  - lib/coverband/integrations/background.rb
206
236
  - lib/coverband/integrations/middleware.rb
237
+ - lib/coverband/integrations/rack_server_check.rb
207
238
  - lib/coverband/reporters/base.rb
208
239
  - lib/coverband/reporters/console_report.rb
209
240
  - lib/coverband/reporters/simple_cov_report.rb
210
241
  - lib/coverband/reporters/web.rb
211
- - lib/coverband/utils/s3_report_writer.rb
242
+ - lib/coverband/utils/s3_report.rb
212
243
  - lib/coverband/utils/tasks.rb
213
244
  - lib/coverband/version.rb
214
245
  - test/benchmarks/.gitignore
@@ -216,20 +247,39 @@ files:
216
247
  - test/benchmarks/dog.rb
217
248
  - test/benchmarks/graph_bench.sh
218
249
  - test/fake_app/basic_rack.rb
250
+ - test/rails4_dummy/app/controllers/dummy_controller.rb
251
+ - test/rails4_dummy/config.ru
252
+ - test/rails4_dummy/config/application.rb
253
+ - test/rails4_dummy/config/boot.rb
254
+ - test/rails4_dummy/config/coverband.rb
255
+ - test/rails4_dummy/config/environment.rb
256
+ - test/rails4_dummy/config/routes.rb
257
+ - test/rails4_dummy/config/secrets.yml
258
+ - test/rails5_dummy/app/controllers/dummy_controller.rb
259
+ - test/rails5_dummy/config.ru
260
+ - test/rails5_dummy/config/application.rb
261
+ - test/rails5_dummy/config/coverband.rb
262
+ - test/rails5_dummy/config/environment.rb
263
+ - test/rails5_dummy/config/routes.rb
264
+ - test/rails_test_helper.rb
219
265
  - test/test_helper.rb
220
266
  - test/unit/adapters_base_test.rb
221
267
  - test/unit/adapters_file_store_test.rb
222
268
  - test/unit/adapters_redis_store_test.rb
269
+ - test/unit/background_test.rb
223
270
  - test/unit/collectors_coverage_test.rb
224
271
  - test/unit/configuration_test.rb
272
+ - test/unit/coverband_test.rb
225
273
  - test/unit/dog.rb
226
274
  - test/unit/full_stack_test.rb
227
275
  - test/unit/middleware_test.rb
276
+ - test/unit/rack_server_checkout_test.rb
277
+ - test/unit/rails_full_stack_test.rb
228
278
  - test/unit/reports_base_test.rb
229
279
  - test/unit/reports_console_test.rb
230
280
  - test/unit/reports_simple_cov_test.rb
231
281
  - test/unit/reports_web_test.rb
232
- - test/unit/utils_s3_report_writer_test.rb
282
+ - test/unit/utils_s3_report_test.rb
233
283
  homepage: https://github.com/danmayer/coverband
234
284
  licenses:
235
285
  - MIT
@@ -250,7 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
250
300
  version: '0'
251
301
  requirements: []
252
302
  rubyforge_project:
253
- rubygems_version: 2.7.3
303
+ rubygems_version: 2.5.1
254
304
  signing_key:
255
305
  specification_version: 4
256
306
  summary: Rack middleware to help measure production code usage (LOC runtime usage)
@@ -260,17 +310,36 @@ test_files:
260
310
  - test/benchmarks/dog.rb
261
311
  - test/benchmarks/graph_bench.sh
262
312
  - test/fake_app/basic_rack.rb
313
+ - test/rails4_dummy/app/controllers/dummy_controller.rb
314
+ - test/rails4_dummy/config.ru
315
+ - test/rails4_dummy/config/application.rb
316
+ - test/rails4_dummy/config/boot.rb
317
+ - test/rails4_dummy/config/coverband.rb
318
+ - test/rails4_dummy/config/environment.rb
319
+ - test/rails4_dummy/config/routes.rb
320
+ - test/rails4_dummy/config/secrets.yml
321
+ - test/rails5_dummy/app/controllers/dummy_controller.rb
322
+ - test/rails5_dummy/config.ru
323
+ - test/rails5_dummy/config/application.rb
324
+ - test/rails5_dummy/config/coverband.rb
325
+ - test/rails5_dummy/config/environment.rb
326
+ - test/rails5_dummy/config/routes.rb
327
+ - test/rails_test_helper.rb
263
328
  - test/test_helper.rb
264
329
  - test/unit/adapters_base_test.rb
265
330
  - test/unit/adapters_file_store_test.rb
266
331
  - test/unit/adapters_redis_store_test.rb
332
+ - test/unit/background_test.rb
267
333
  - test/unit/collectors_coverage_test.rb
268
334
  - test/unit/configuration_test.rb
335
+ - test/unit/coverband_test.rb
269
336
  - test/unit/dog.rb
270
337
  - test/unit/full_stack_test.rb
271
338
  - test/unit/middleware_test.rb
339
+ - test/unit/rack_server_checkout_test.rb
340
+ - test/unit/rails_full_stack_test.rb
272
341
  - test/unit/reports_base_test.rb
273
342
  - test/unit/reports_console_test.rb
274
343
  - test/unit/reports_simple_cov_test.rb
275
344
  - test/unit/reports_web_test.rb
276
- - test/unit/utils_s3_report_writer_test.rb
345
+ - test/unit/utils_s3_report_test.rb
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Coverband
4
- module Utils
5
- ###
6
- # TODO: this is currently a html report writer
7
- # this should support writing coverage the current method should be fine
8
- # to write every report to S3 and sum them later or use the 2 pass
9
- # method we do for redis if in a background thread
10
- ###
11
- class S3ReportWriter
12
- def initialize(bucket_name, options = {})
13
- @bucket_name = bucket_name
14
- @region = options[:region]
15
- @access_key_id = options[:access_key_id]
16
- @secret_access_key = options[:secret_access_key]
17
- begin
18
- require 'aws-sdk'
19
- rescue StandardError
20
- err_msg = 'coverband requires aws-sdk in order use S3ReportWriter.'
21
- Coverband.configuration.logger.error err_msg
22
- return
23
- end
24
- end
25
-
26
- def persist!
27
- object.put(body: coverage_content)
28
- end
29
-
30
- private
31
-
32
- def coverage_content
33
- version = Gem::Specification.find_by_name('simplecov-html').version.version
34
- File.read("#{SimpleCov.coverage_dir}/index.html").gsub("./assets/#{version}/", '')
35
- rescue StandardError
36
- File.read("#{SimpleCov.coverage_dir}/index.html").to_s.gsub('./assets/0.10.1/', '')
37
- end
38
-
39
- def object
40
- bucket.object('coverband/index.html')
41
- end
42
-
43
- def s3
44
- client_options = {
45
- region: @region,
46
- access_key_id: @access_key_id,
47
- secret_access_key: @secret_access_key
48
- }
49
- resource_options = { client: Aws::S3::Client.new(client_options) }
50
- resource_options = {} if client_options.values.any?(&:nil?)
51
- Aws::S3::Resource.new(resource_options)
52
- end
53
-
54
- def bucket
55
- s3.bucket(@bucket_name)
56
- end
57
- end
58
- end
59
- end
@@ -1,30 +0,0 @@
1
- require File.expand_path('../test_helper', File.dirname(__FILE__))
2
- require 'aws-sdk'
3
-
4
- module Coverband
5
- class S3ReportWriterTest < Test::Unit::TestCase
6
- def html_version
7
- Gem::Specification.find_by_name('simplecov-html').version.version.to_s
8
- rescue StandardError
9
- '0.10.1'
10
- end
11
-
12
- test 'it writes the coverage report to s3' do
13
- s3 = mock('s3_resource')
14
- bucket = mock('bucket')
15
- object = mock('object')
16
- s3.expects(:bucket).with('coverage-bucket').returns(bucket)
17
- bucket.expects(:object).with('coverband/index.html').returns(object)
18
- File.expects(:read).at_least(0).returns("content ./assets/#{html_version}/")
19
- object.expects(:put).with(body: 'content ')
20
- Aws::S3::Resource.expects(:new).returns(s3)
21
-
22
- s3_writer_options = {
23
- region: 'us-west-1',
24
- access_key_id: '',
25
- secret_access_key: ''
26
- }
27
- Coverband::Utils::S3ReportWriter.new('coverage-bucket', s3_writer_options).persist!
28
- end
29
- end
30
- end