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.
- checksums.yaml +5 -5
- data/.gitignore +2 -1
- data/.travis.yml +3 -0
- data/Gemfile +1 -0
- data/Gemfile.rails4 +7 -0
- data/Gemfile.rails4.lock +164 -0
- data/README.md +16 -14
- data/changes.md +17 -4
- data/coverband.gemspec +11 -4
- data/lib/coverband/adapters/base.rb +57 -8
- data/lib/coverband/adapters/file_store.rb +4 -22
- data/lib/coverband/adapters/redis_store.rb +7 -27
- data/lib/coverband/collectors/coverage.rb +5 -0
- data/lib/coverband/configuration.rb +4 -1
- data/lib/coverband/integrations/background.rb +25 -1
- data/lib/coverband/integrations/rack_server_check.rb +27 -0
- data/lib/coverband/reporters/simple_cov_report.rb +1 -7
- data/lib/coverband/reporters/web.rb +2 -20
- data/lib/coverband/utils/s3_report.rb +108 -0
- data/lib/coverband/version.rb +1 -1
- data/lib/coverband.rb +4 -1
- data/test/benchmarks/benchmark.rake +47 -1
- data/test/rails4_dummy/app/controllers/dummy_controller.rb +5 -0
- data/test/rails4_dummy/config/application.rb +15 -0
- data/test/rails4_dummy/config/boot.rb +3 -0
- data/test/rails4_dummy/config/coverband.rb +8 -0
- data/test/rails4_dummy/config/environment.rb +5 -0
- data/test/rails4_dummy/config/routes.rb +3 -0
- data/test/rails4_dummy/config/secrets.yml +3 -0
- data/test/rails4_dummy/config.ru +4 -0
- data/test/rails5_dummy/app/controllers/dummy_controller.rb +5 -0
- data/test/rails5_dummy/config/application.rb +16 -0
- data/test/rails5_dummy/config/coverband.rb +8 -0
- data/test/rails5_dummy/config/environment.rb +2 -0
- data/test/rails5_dummy/config/routes.rb +3 -0
- data/test/rails5_dummy/config.ru +3 -0
- data/test/rails_test_helper.rb +11 -0
- data/test/test_helper.rb +14 -9
- data/test/unit/adapters_base_test.rb +34 -13
- data/test/unit/adapters_file_store_test.rb +8 -4
- data/test/unit/adapters_redis_store_test.rb +7 -13
- data/test/unit/background_test.rb +16 -0
- data/test/unit/collectors_coverage_test.rb +24 -0
- data/test/unit/configuration_test.rb +12 -0
- data/test/unit/coverband_test.rb +26 -0
- data/test/unit/rack_server_checkout_test.rb +24 -0
- data/test/unit/rails_full_stack_test.rb +16 -0
- data/test/unit/reports_base_test.rb +0 -2
- data/test/unit/reports_console_test.rb +1 -0
- data/test/unit/reports_simple_cov_test.rb +1 -10
- data/test/unit/reports_web_test.rb +1 -3
- data/test/unit/utils_s3_report_test.rb +44 -0
- metadata +78 -9
- data/lib/coverband/utils/s3_report_writer.rb +0 -59
- 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
|
|
@@ -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
|
-
|
|
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.
|
|
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-
|
|
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:
|
|
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:
|
|
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/
|
|
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/
|
|
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.
|
|
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/
|
|
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
|