coverband 3.0.0 → 4.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  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 +143 -334
  8. data/changes.md +41 -17
  9. data/coverband.gemspec +16 -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 +7 -10
  14. data/lib/coverband/configuration.rb +27 -13
  15. data/lib/coverband/integrations/background.rb +26 -1
  16. data/lib/coverband/integrations/middleware.rb +5 -1
  17. data/lib/coverband/integrations/rack_server_check.rb +27 -0
  18. data/lib/coverband/reporters/simple_cov_report.rb +1 -7
  19. data/lib/coverband/reporters/web.rb +3 -21
  20. data/lib/coverband/utils/railtie.rb +17 -0
  21. data/lib/coverband/utils/s3_report.rb +108 -0
  22. data/lib/coverband/utils/tasks.rb +6 -6
  23. data/lib/coverband/version.rb +1 -1
  24. data/lib/coverband.rb +14 -3
  25. data/test/benchmarks/benchmark.rake +53 -2
  26. data/test/rails4_dummy/app/controllers/dummy_controller.rb +5 -0
  27. data/test/rails4_dummy/config/application.rb +15 -0
  28. data/test/rails4_dummy/config/boot.rb +3 -0
  29. data/test/rails4_dummy/config/coverband.rb +8 -0
  30. data/test/rails4_dummy/config/environment.rb +5 -0
  31. data/test/rails4_dummy/config/routes.rb +3 -0
  32. data/test/rails4_dummy/config/secrets.yml +3 -0
  33. data/test/rails4_dummy/config.ru +4 -0
  34. data/test/rails5_dummy/app/controllers/dummy_controller.rb +5 -0
  35. data/test/rails5_dummy/config/application.rb +16 -0
  36. data/test/rails5_dummy/config/coverband.rb +8 -0
  37. data/test/rails5_dummy/config/environment.rb +2 -0
  38. data/test/rails5_dummy/config/routes.rb +3 -0
  39. data/test/rails5_dummy/config.ru +3 -0
  40. data/test/rails_test_helper.rb +11 -0
  41. data/test/test_helper.rb +14 -9
  42. data/test/unit/adapters_base_test.rb +34 -13
  43. data/test/unit/adapters_file_store_test.rb +8 -4
  44. data/test/unit/adapters_redis_store_test.rb +7 -13
  45. data/test/unit/background_test.rb +24 -0
  46. data/test/unit/collectors_coverage_test.rb +14 -0
  47. data/test/unit/configuration_test.rb +12 -0
  48. data/test/unit/coverband_test.rb +26 -0
  49. data/test/unit/full_stack_test.rb +2 -1
  50. data/test/unit/middleware_test.rb +19 -0
  51. data/test/unit/rack_server_checkout_test.rb +24 -0
  52. data/test/unit/rails_full_stack_test.rb +60 -0
  53. data/test/unit/reports_base_test.rb +0 -2
  54. data/test/unit/reports_console_test.rb +1 -0
  55. data/test/unit/reports_simple_cov_test.rb +1 -10
  56. data/test/unit/reports_web_test.rb +1 -3
  57. data/test/unit/utils_s3_report_test.rb +44 -0
  58. metadata +89 -19
  59. data/lib/coverband/utils/s3_report_writer.rb +0 -59
  60. 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
@@ -5,7 +5,7 @@ require 'rack'
5
5
 
6
6
  class FullStackTest < Test::Unit::TestCase
7
7
  BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
8
- TEST_RACK_APP = '../fake_app/basic_rack.rb'.freeze
8
+ TEST_RACK_APP = '../fake_app/basic_rack.rb'
9
9
 
10
10
  def setup
11
11
  Coverband::Collectors::Coverage.instance.reset_instance
@@ -13,6 +13,7 @@ class FullStackTest < Test::Unit::TestCase
13
13
  config.reporting_frequency = 100.0
14
14
  config.store = Coverband::Adapters::RedisStore.new(Redis.new)
15
15
  config.s3_bucket = nil
16
+ config.background_reporting_enabled = false
16
17
  end
17
18
  Coverband.configuration.store.clear!
18
19
  Coverband.start
@@ -9,6 +9,7 @@ class MiddlewareTest < Test::Unit::TestCase
9
9
  def setup
10
10
  Coverband.configure do |config|
11
11
  config.store = Coverband::Adapters::RedisStore.new(Redis.new)
12
+ config.background_reporting_enabled = false
12
13
  end
13
14
  end
14
15
 
@@ -27,6 +28,24 @@ class MiddlewareTest < Test::Unit::TestCase
27
28
  app.call(env)
28
29
  end
29
30
 
31
+ test 'starts background reporter when configured' do
32
+ request = Rack::MockRequest.env_for('/anything.json')
33
+ Coverband.configuration.stubs(:background_reporting_enabled).returns(true)
34
+ Coverband::Collectors::Coverage.instance.expects(:report_coverage).never
35
+ Coverband::Background.expects(:start)
36
+ middleware = Coverband::Middleware.new(fake_app)
37
+ middleware.call(request)
38
+ end
39
+
40
+ test 'reports coverage when not set to background mode' do
41
+ request = Rack::MockRequest.env_for('/anything.json')
42
+ Coverband.configuration.stubs(:background_reporting_enabled).returns(false)
43
+ Coverband::Collectors::Coverage.instance.expects(:report_coverage)
44
+ Coverband::Background.expects(:start).never
45
+ middleware = Coverband::Middleware.new(fake_app)
46
+ middleware.call(request)
47
+ end
48
+
30
49
  test 'never be report coverage with reporting_frequency of 0' do
31
50
  request = Rack::MockRequest.env_for('/anything.json')
32
51
  Coverband::Collectors::Coverage.instance.reset_instance
@@ -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,60 @@
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
+
17
+ ###
18
+ # Please keep this test starting on line 22
19
+ # as we run it in single test mode via the benchmarks.
20
+ # Add new tests below this test
21
+ ###
22
+ test 'memory usage' do
23
+ return unless ENV['COVERBAND_MEMORY_TEST']
24
+ # we don't want this to run during our standard test suite
25
+ # as the below profiler changes the runtime
26
+ # and shold only be included for isolated processes
27
+ begin
28
+ require 'memory_profiler'
29
+
30
+ # warmup
31
+ 3.times do
32
+ get '/dummy/show'
33
+ assert_response :success
34
+ Coverband::Collectors::Coverage.instance.report_coverage(true)
35
+ end
36
+
37
+ previous_out = $stdout
38
+ capture = StringIO.new
39
+ $stdout = capture
40
+
41
+ MemoryProfiler.report do
42
+ 15.times do
43
+ get '/dummy/show'
44
+ assert_response :success
45
+ Coverband::Collectors::Coverage.instance.report_coverage(true)
46
+ # this is expected to retain memory across requests
47
+ # clear it to remove the false positive from test
48
+ Coverband::Collectors::Coverage.instance.send(:add_previous_results, nil)
49
+ end
50
+ end.pretty_print
51
+ data = $stdout.string
52
+ $stdout = previous_out
53
+ if data.match(/retained objects by gem(.*)retained objects by file/m)[0]&.match(/coverband/)
54
+ raise 'leaking memory!!!'
55
+ end
56
+ ensure
57
+ $stdout = previous_out
58
+ end
59
+ end
60
+ 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: 4.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-04 00:00:00.000000000 Z
11
+ date: 2018-12-05 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
@@ -39,21 +53,21 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.3'
41
55
  - !ruby/object:Gem::Dependency
42
- name: mocha
56
+ name: m
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: 0.14.0
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: 0.14.0
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rack
70
+ name: memory_profiler
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -67,7 +81,21 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rack-test
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.14.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.14.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: rack
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - ">="
@@ -81,7 +109,7 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: rake
112
+ name: rack-test
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ">="
@@ -95,7 +123,7 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: test-unit
126
+ name: rake
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
@@ -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: test-unit
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: classifier-reborn
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ">="
@@ -137,7 +165,7 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
139
167
  - !ruby/object:Gem::Dependency
140
- name: classifier-reborn
168
+ name: pry-byebug
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - ">="
@@ -151,13 +179,13 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
153
181
  - !ruby/object:Gem::Dependency
154
- name: byebug
182
+ name: redis
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
158
186
  - !ruby/object:Gem::Version
159
187
  version: '0'
160
- type: :development
188
+ type: :runtime
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
@@ -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,13 @@ 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/railtie.rb
243
+ - lib/coverband/utils/s3_report.rb
212
244
  - lib/coverband/utils/tasks.rb
213
245
  - lib/coverband/version.rb
214
246
  - test/benchmarks/.gitignore
@@ -216,20 +248,39 @@ files:
216
248
  - test/benchmarks/dog.rb
217
249
  - test/benchmarks/graph_bench.sh
218
250
  - test/fake_app/basic_rack.rb
251
+ - test/rails4_dummy/app/controllers/dummy_controller.rb
252
+ - test/rails4_dummy/config.ru
253
+ - test/rails4_dummy/config/application.rb
254
+ - test/rails4_dummy/config/boot.rb
255
+ - test/rails4_dummy/config/coverband.rb
256
+ - test/rails4_dummy/config/environment.rb
257
+ - test/rails4_dummy/config/routes.rb
258
+ - test/rails4_dummy/config/secrets.yml
259
+ - test/rails5_dummy/app/controllers/dummy_controller.rb
260
+ - test/rails5_dummy/config.ru
261
+ - test/rails5_dummy/config/application.rb
262
+ - test/rails5_dummy/config/coverband.rb
263
+ - test/rails5_dummy/config/environment.rb
264
+ - test/rails5_dummy/config/routes.rb
265
+ - test/rails_test_helper.rb
219
266
  - test/test_helper.rb
220
267
  - test/unit/adapters_base_test.rb
221
268
  - test/unit/adapters_file_store_test.rb
222
269
  - test/unit/adapters_redis_store_test.rb
270
+ - test/unit/background_test.rb
223
271
  - test/unit/collectors_coverage_test.rb
224
272
  - test/unit/configuration_test.rb
273
+ - test/unit/coverband_test.rb
225
274
  - test/unit/dog.rb
226
275
  - test/unit/full_stack_test.rb
227
276
  - test/unit/middleware_test.rb
277
+ - test/unit/rack_server_checkout_test.rb
278
+ - test/unit/rails_full_stack_test.rb
228
279
  - test/unit/reports_base_test.rb
229
280
  - test/unit/reports_console_test.rb
230
281
  - test/unit/reports_simple_cov_test.rb
231
282
  - test/unit/reports_web_test.rb
232
- - test/unit/utils_s3_report_writer_test.rb
283
+ - test/unit/utils_s3_report_test.rb
233
284
  homepage: https://github.com/danmayer/coverband
234
285
  licenses:
235
286
  - MIT
@@ -260,17 +311,36 @@ test_files:
260
311
  - test/benchmarks/dog.rb
261
312
  - test/benchmarks/graph_bench.sh
262
313
  - test/fake_app/basic_rack.rb
314
+ - test/rails4_dummy/app/controllers/dummy_controller.rb
315
+ - test/rails4_dummy/config.ru
316
+ - test/rails4_dummy/config/application.rb
317
+ - test/rails4_dummy/config/boot.rb
318
+ - test/rails4_dummy/config/coverband.rb
319
+ - test/rails4_dummy/config/environment.rb
320
+ - test/rails4_dummy/config/routes.rb
321
+ - test/rails4_dummy/config/secrets.yml
322
+ - test/rails5_dummy/app/controllers/dummy_controller.rb
323
+ - test/rails5_dummy/config.ru
324
+ - test/rails5_dummy/config/application.rb
325
+ - test/rails5_dummy/config/coverband.rb
326
+ - test/rails5_dummy/config/environment.rb
327
+ - test/rails5_dummy/config/routes.rb
328
+ - test/rails_test_helper.rb
263
329
  - test/test_helper.rb
264
330
  - test/unit/adapters_base_test.rb
265
331
  - test/unit/adapters_file_store_test.rb
266
332
  - test/unit/adapters_redis_store_test.rb
333
+ - test/unit/background_test.rb
267
334
  - test/unit/collectors_coverage_test.rb
268
335
  - test/unit/configuration_test.rb
336
+ - test/unit/coverband_test.rb
269
337
  - test/unit/dog.rb
270
338
  - test/unit/full_stack_test.rb
271
339
  - test/unit/middleware_test.rb
340
+ - test/unit/rack_server_checkout_test.rb
341
+ - test/unit/rails_full_stack_test.rb
272
342
  - test/unit/reports_base_test.rb
273
343
  - test/unit/reports_console_test.rb
274
344
  - test/unit/reports_simple_cov_test.rb
275
345
  - test/unit/reports_web_test.rb
276
- - test/unit/utils_s3_report_writer_test.rb
346
+ - 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