coverband 1.3.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +39 -6
- data/changes.md +23 -0
- data/coverband.gemspec +2 -1
- data/lib/coverband.rb +12 -11
- data/lib/coverband/adapters/file_store.rb +59 -0
- data/lib/coverband/adapters/memory_cache_store.rb +46 -0
- data/lib/coverband/adapters/redis_store.rb +101 -0
- data/lib/coverband/base.rb +4 -7
- data/lib/coverband/baseline.rb +35 -0
- data/lib/coverband/configuration.rb +20 -5
- data/lib/coverband/reporters/base.rb +150 -0
- data/lib/coverband/reporters/console_report.rb +17 -0
- data/lib/coverband/reporters/simple_cov_report.rb +46 -0
- data/lib/coverband/s3_report_writer.rb +6 -1
- data/lib/coverband/tasks.rb +26 -16
- data/lib/coverband/version.rb +1 -1
- data/test/benchmarks/benchmark.rake +57 -7
- data/test/test_helper.rb +20 -0
- data/test/unit/adapters_file_store_test.rb +41 -0
- data/test/unit/{memory_cache_store_test.rb → adapters_memory_cache_store_test.rb} +12 -12
- data/test/unit/adapters_redis_store_test.rb +164 -0
- data/test/unit/base_test.rb +8 -7
- data/test/unit/baseline_test.rb +50 -0
- data/test/unit/middleware_test.rb +8 -8
- data/test/unit/reports_base_test.rb +140 -0
- data/test/unit/reports_console_test.rb +37 -0
- data/test/unit/reports_simple_cov_test.rb +68 -0
- data/test/unit/s3_report_writer_test.rb +1 -0
- metadata +37 -24
- data/lib/coverband/memory_cache_store.rb +0 -42
- data/lib/coverband/redis_store.rb +0 -57
- data/lib/coverband/reporter.rb +0 -223
- data/test/unit/redis_store_test.rb +0 -107
- data/test/unit/reporter_test.rb +0 -207
data/test/test_helper.rb
CHANGED
@@ -28,6 +28,26 @@ def test(name, &block)
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
def fake_redis
|
32
|
+
@redis ||= begin
|
33
|
+
redis = OpenStruct.new()
|
34
|
+
def redis.smembers(key)
|
35
|
+
end
|
36
|
+
redis
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def fake_coverband_members
|
41
|
+
["/Users/danmayer/projects/hearno/script/tester.rb",
|
42
|
+
"/Users/danmayer/projects/hearno/app/controllers/application_controller.rb",
|
43
|
+
"/Users/danmayer/projects/hearno/app/models/account.rb"
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|
47
|
+
def fake_coverage_report
|
48
|
+
{"/Users/danmayer/projects/hearno/script/tester.rb"=>[1, nil, 1, 1, nil, nil, nil]}
|
49
|
+
end
|
50
|
+
|
31
51
|
require 'coverband'
|
32
52
|
|
33
53
|
unless File.exist?('./tmp/coverband_baseline.json')
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class AdaptersFileStoreTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@test_file_path = "/tmp/coverband_filestore_test_path.json"
|
7
|
+
File.open(@test_file_path, 'w') { |f| f.write(test_data.to_json) }
|
8
|
+
@store = Coverband::Adapters::FileStore.new(@test_file_path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_covered_lines_for_file
|
12
|
+
assert_equal @store.covered_lines_for_file('dog.rb')["1"], 1
|
13
|
+
assert_equal @store.covered_lines_for_file('dog.rb')["2"], 2
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_covered_lines_when_null
|
17
|
+
assert_equal @store.covered_lines_for_file('none.rb'), []
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_covered_files
|
21
|
+
assert_equal @store.covered_files(), ['dog.rb']
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_clear
|
25
|
+
@store.clear!
|
26
|
+
assert_equal false, File.exist?(@test_file_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_save_report
|
30
|
+
@store.save_report({"cat.rb" => {1 => 1}})
|
31
|
+
assert_equal @store.covered_lines_for_file('cat.rb')["1"], 1
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def test_data
|
37
|
+
{
|
38
|
+
"dog.rb" => { 1 => 1, 2 => 2 },
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
@@ -4,9 +4,9 @@ module Coverband
|
|
4
4
|
class MemoryCacheStoreTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
def setup
|
7
|
-
MemoryCacheStore.reset!
|
7
|
+
Adapters::MemoryCacheStore.reset!
|
8
8
|
@store = mock('store')
|
9
|
-
@memory_store = MemoryCacheStore.new(@store)
|
9
|
+
@memory_store = Adapters::MemoryCacheStore.new(@store)
|
10
10
|
end
|
11
11
|
|
12
12
|
def data
|
@@ -17,17 +17,17 @@ module Coverband
|
|
17
17
|
end
|
18
18
|
|
19
19
|
test 'it passes data into store' do
|
20
|
-
@store.expects(:
|
20
|
+
@store.expects(:save_report).with data
|
21
21
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
22
22
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
23
|
-
@memory_store.
|
23
|
+
@memory_store.save_report data
|
24
24
|
end
|
25
25
|
|
26
26
|
test 'it passes data into store only once' do
|
27
|
-
@store.expects(:
|
27
|
+
@store.expects(:save_report).once.with data
|
28
28
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
29
29
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
30
|
-
2.times { @memory_store.
|
30
|
+
2.times { @memory_store.save_report data }
|
31
31
|
end
|
32
32
|
|
33
33
|
test 'it only passes files and lines we have not hit yet' do
|
@@ -37,19 +37,19 @@ module Coverband
|
|
37
37
|
}
|
38
38
|
@store.expects(:covered_lines_for_file).with('file1').returns []
|
39
39
|
@store.expects(:covered_lines_for_file).with('file2').returns []
|
40
|
-
@store.expects(:
|
41
|
-
@store.expects(:
|
40
|
+
@store.expects(:save_report).once.with data
|
41
|
+
@store.expects(:save_report).once.with(
|
42
42
|
'file1' => { 10 => 1 }
|
43
43
|
)
|
44
|
-
@memory_store.
|
45
|
-
@memory_store.
|
44
|
+
@memory_store.save_report data
|
45
|
+
@memory_store.save_report second_data
|
46
46
|
end
|
47
47
|
|
48
48
|
test 'it initializes cache with what is in store' do
|
49
49
|
@store.expects(:covered_lines_for_file).with('file1').returns [3,5]
|
50
50
|
@store.expects(:covered_lines_for_file).with('file2').returns [2]
|
51
|
-
@store.expects(:
|
52
|
-
@memory_store.
|
51
|
+
@store.expects(:save_report).with('file2' => { 1 => 1 })
|
52
|
+
@memory_store.save_report data
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class RedisTest < Test::Unit::TestCase
|
4
|
+
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@redis = Redis.new
|
8
|
+
@redis.flushdb
|
9
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_coverage
|
13
|
+
@redis.sadd(BASE_KEY, 'dog.rb')
|
14
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 1)
|
15
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 2)
|
16
|
+
expected = {'dog.rb' => [1,2]}
|
17
|
+
assert_equal expected, @store.coverage
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_covered_lines_for_file
|
21
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 1)
|
22
|
+
@redis.sadd("#{BASE_KEY}.dog.rb", 2)
|
23
|
+
assert_equal [1, 2], @store.covered_lines_for_file('dog.rb').sort
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_covered_lines_for_file__hash
|
27
|
+
@redis.mapped_hmset("#{BASE_KEY}.dog.rb", {"1" => 1, "2" => 2})
|
28
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: false)
|
29
|
+
expected = [["1", "1"], ["2", "2"]]
|
30
|
+
assert_equal expected, @store.covered_lines_for_file('dog.rb').sort
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_covered_lines_when_null
|
34
|
+
assert_equal @store.covered_lines_for_file('dog.rb'), []
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_clear
|
38
|
+
@redis.expects(:smembers).with(BASE_KEY).once.returns([])
|
39
|
+
@redis.expects(:del).with(BASE_KEY).once
|
40
|
+
@store.clear!
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def test_data
|
46
|
+
{
|
47
|
+
"/Users/danmayer/projects/cover_band_server/app.rb" => { 54 => 1, 55 => 2 },
|
48
|
+
"/Users/danmayer/projects/cover_band_server/server.rb" => { 5 => 1 }
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class RedisStoreTestV3Array < RedisTest
|
54
|
+
|
55
|
+
def setup
|
56
|
+
@redis = Redis.current.tap { |redis|
|
57
|
+
redis.stubs(:sadd).with(anything, anything)
|
58
|
+
redis.stubs(:info).returns({'redis_version' => 3.0})
|
59
|
+
}
|
60
|
+
|
61
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
62
|
+
end
|
63
|
+
|
64
|
+
test "it stores the files into coverband" do
|
65
|
+
@redis.expects(:sadd).with(BASE_KEY, [
|
66
|
+
'/Users/danmayer/projects/cover_band_server/app.rb',
|
67
|
+
'/Users/danmayer/projects/cover_band_server/server.rb'
|
68
|
+
])
|
69
|
+
|
70
|
+
@store.save_report(test_data)
|
71
|
+
end
|
72
|
+
|
73
|
+
test "it stores the file lines of the file app.rb" do
|
74
|
+
@redis.expects(:sadd).with(
|
75
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/app.rb",
|
76
|
+
[54, 55]
|
77
|
+
)
|
78
|
+
|
79
|
+
@store.save_report(test_data)
|
80
|
+
end
|
81
|
+
|
82
|
+
test "it stores the file lines of the file server.rb" do
|
83
|
+
@redis.expects(:sadd).with(
|
84
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/server.rb",
|
85
|
+
[5]
|
86
|
+
)
|
87
|
+
|
88
|
+
@store.save_report(test_data)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
class RedisStoreTestV3Hash < RedisTest
|
94
|
+
|
95
|
+
def setup
|
96
|
+
@redis = Redis.current.tap { |redis|
|
97
|
+
redis.stubs(:sadd).with(anything, anything)
|
98
|
+
redis.stubs(:info).returns({'redis_version' => 3.0})
|
99
|
+
}
|
100
|
+
|
101
|
+
@store = Coverband::Adapters::RedisStore.new(@redis)
|
102
|
+
end
|
103
|
+
|
104
|
+
test "it stores the files into coverband" do
|
105
|
+
@redis.expects(:sadd).with(BASE_KEY, [
|
106
|
+
'/Users/danmayer/projects/cover_band_server/app.rb',
|
107
|
+
'/Users/danmayer/projects/cover_band_server/server.rb'
|
108
|
+
])
|
109
|
+
|
110
|
+
@store.save_report(test_data)
|
111
|
+
end
|
112
|
+
|
113
|
+
test "it stores the file lines of the file app.rb" do
|
114
|
+
@redis.expects(:mapped_hmset).with(
|
115
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/app.rb",
|
116
|
+
{'54' => 1, '55' => 2}
|
117
|
+
)
|
118
|
+
@redis.expects(:mapped_hmset).with(
|
119
|
+
"#{BASE_KEY}./Users/danmayer/projects/cover_band_server/server.rb",
|
120
|
+
{'5' => 1}
|
121
|
+
)
|
122
|
+
|
123
|
+
@store.save_report(test_data)
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
class RedisStoreTestV223 < RedisTest
|
129
|
+
|
130
|
+
def setup
|
131
|
+
@redis = Redis.current.tap { |redis|
|
132
|
+
redis.stubs(:sadd).with(anything, anything)
|
133
|
+
redis.stubs(:info).returns({'redis_version' => "2.2.3"})
|
134
|
+
}
|
135
|
+
|
136
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
137
|
+
end
|
138
|
+
|
139
|
+
test "it store the files with separate calls into coverband" do
|
140
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/app.rb')
|
141
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/server.rb')
|
142
|
+
|
143
|
+
@store.save_report(test_data)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
class RedisStoreTestV222 < RedisTest
|
148
|
+
|
149
|
+
def setup
|
150
|
+
@redis = Redis.current.tap { |redis|
|
151
|
+
redis.stubs(:sadd).with(anything, anything)
|
152
|
+
redis.stubs(:info).returns({'redis_version' => "2.2.2"})
|
153
|
+
}
|
154
|
+
|
155
|
+
@store = Coverband::Adapters::RedisStore.new(@redis, array: true)
|
156
|
+
end
|
157
|
+
|
158
|
+
test "it store the files with separate calls into coverband" do
|
159
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/app.rb')
|
160
|
+
@redis.expects(:sadd).with(BASE_KEY, '/Users/danmayer/projects/cover_band_server/server.rb')
|
161
|
+
|
162
|
+
@store.save_report(test_data)
|
163
|
+
end
|
164
|
+
end
|
data/test/unit/base_test.rb
CHANGED
@@ -5,13 +5,13 @@ class BaseTest < Test::Unit::TestCase
|
|
5
5
|
|
6
6
|
test 'defaults to a redis store' do
|
7
7
|
coverband = Coverband::Base.instance.reset_instance
|
8
|
-
assert_equal Coverband::RedisStore, coverband.instance_variable_get('@
|
8
|
+
assert_equal Coverband::Adapters::RedisStore, coverband.instance_variable_get('@store').class
|
9
9
|
end
|
10
10
|
|
11
11
|
test 'configure memory caching' do
|
12
12
|
Coverband.configuration.memory_caching = true
|
13
13
|
coverband = Coverband::Base.instance.reset_instance
|
14
|
-
assert_equal Coverband::MemoryCacheStore, coverband.instance_variable_get('@
|
14
|
+
assert_equal Coverband::Adapters::MemoryCacheStore, coverband.instance_variable_get('@store').class
|
15
15
|
Coverband.configuration.memory_caching = false
|
16
16
|
end
|
17
17
|
|
@@ -45,7 +45,7 @@ class BaseTest < Test::Unit::TestCase
|
|
45
45
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
46
46
|
coverband.instance_variable_set("@verbose", true)
|
47
47
|
coverband.instance_variable_set("@logger", logger)
|
48
|
-
coverband.instance_variable_set("@
|
48
|
+
coverband.instance_variable_set("@store", nil)
|
49
49
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
50
50
|
logger.expects(:info).at_least_once
|
51
51
|
coverband.sample { 1 + 1 }
|
@@ -58,7 +58,7 @@ class BaseTest < Test::Unit::TestCase
|
|
58
58
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
59
59
|
coverband.instance_variable_set("@verbose", true)
|
60
60
|
coverband.instance_variable_set("@logger", logger)
|
61
|
-
coverband.instance_variable_set("@
|
61
|
+
coverband.instance_variable_set("@store", nil)
|
62
62
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
63
63
|
logger.expects(:info).at_least_once
|
64
64
|
coverband.start
|
@@ -72,9 +72,10 @@ class BaseTest < Test::Unit::TestCase
|
|
72
72
|
coverband = Coverband::Base.instance.reset_instance
|
73
73
|
coverband.instance_variable_set("@sample_percentage", 100.0)
|
74
74
|
coverband.instance_variable_set("@verbose", true)
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
Coverband.configuration.logger.stubs('info')
|
76
|
+
store = Coverband::Adapters::RedisStore.new(Redis.new)
|
77
|
+
coverband.instance_variable_set("@store", store)
|
78
|
+
store.expects(:save_report).once.with(has_entries(dog_file => { 3 => 5 }) )
|
78
79
|
assert_equal false, coverband.instance_variable_get("@enabled")
|
79
80
|
coverband.start
|
80
81
|
5.times { Dog.new.bark }
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class ReporterTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
test "record baseline" do
|
6
|
+
Coverband.configure do |config|
|
7
|
+
config.redis = nil
|
8
|
+
config.store = nil
|
9
|
+
config.root = '/full/remote_app/path'
|
10
|
+
config.coverage_file = '/tmp/fake_file.json'
|
11
|
+
end
|
12
|
+
Coverage.expects(:start).returns(true).at_least_once
|
13
|
+
Coverage.expects(:result).returns({'fake' => [0,1]}).at_least_once
|
14
|
+
File.expects(:open).once
|
15
|
+
|
16
|
+
File.expects(:exist?).at_least_once.returns(true)
|
17
|
+
expected = {"filename.rb" => [0,nil,1]}
|
18
|
+
fake_file_data = expected.to_json
|
19
|
+
File.expects(:read).at_least_once.returns(fake_file_data)
|
20
|
+
|
21
|
+
Coverband::Baseline.record{
|
22
|
+
#nothing
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
test "parse baseline" do
|
27
|
+
Coverband.configure do |config|
|
28
|
+
config.redis = nil
|
29
|
+
config.store = nil
|
30
|
+
config.root = '/full/remote_app/path'
|
31
|
+
config.coverage_file = '/tmp/fake_file.json'
|
32
|
+
end
|
33
|
+
File.expects(:exist?).at_least_once.returns(true)
|
34
|
+
expected = {"filename.rb" => [0,nil,1]}
|
35
|
+
fake_file_data = expected.to_json
|
36
|
+
File.expects(:read).at_least_once.returns(fake_file_data)
|
37
|
+
results = Coverband::Baseline.parse_baseline
|
38
|
+
assert_equal(results, {"filename.rb" => [0,nil,1]})
|
39
|
+
end
|
40
|
+
|
41
|
+
# todo test redis and file stores baseline
|
42
|
+
|
43
|
+
test "convert_coverage_format" do
|
44
|
+
results = {"fake_file.rb" => [1,nil,0,2]}
|
45
|
+
expected = {"fake_file.rb"=>{1=>1, 3=>0, 4=>2}}
|
46
|
+
assert_equal(expected, Coverband::Baseline.convert_coverage_format(results))
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
@@ -3,6 +3,8 @@ require File.expand_path('../fake_app/basic_rack', File.dirname(__FILE__))
|
|
3
3
|
require 'rack'
|
4
4
|
|
5
5
|
class MiddlewareTest < Test::Unit::TestCase
|
6
|
+
BASE_KEY = Coverband::Adapters::RedisStore::BASE_KEY
|
7
|
+
|
6
8
|
test "call app" do
|
7
9
|
request = Rack::MockRequest.env_for("/anything.json")
|
8
10
|
Coverband::Base.instance.reset_instance
|
@@ -76,7 +78,6 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
76
78
|
middleware.call(request) rescue nil
|
77
79
|
end
|
78
80
|
|
79
|
-
|
80
81
|
test 'always report coverage when sampling' do
|
81
82
|
request = Rack::MockRequest.env_for("/anything.json")
|
82
83
|
Coverband::Base.instance.reset_instance
|
@@ -84,15 +85,15 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
84
85
|
assert_equal false, Coverband::Base.instance.instance_variable_get("@enabled")
|
85
86
|
Coverband::Base.instance.instance_variable_set("@sample_percentage", 100.0)
|
86
87
|
fake_redis = Redis.new
|
87
|
-
Coverband::Base.instance.instance_variable_set("@
|
88
|
+
Coverband::Base.instance.instance_variable_set("@store", Coverband::Adapters::RedisStore.new(fake_redis))
|
88
89
|
fake_redis.stubs(:info).returns({'redis_version' => 3.0})
|
89
90
|
fake_redis.expects(:sadd).at_least_once
|
90
|
-
fake_redis.expects(:
|
91
|
+
fake_redis.expects(:mapped_hmset).at_least_once
|
92
|
+
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", {'5' => 1})
|
91
93
|
results = middleware.call(request)
|
92
94
|
assert_equal true, Coverband::Base.instance.instance_variable_get("@enabled")
|
93
95
|
end
|
94
96
|
|
95
|
-
|
96
97
|
test 'report only on calls when configured' do
|
97
98
|
request = Rack::MockRequest.env_for("/anything.json")
|
98
99
|
Coverband.configuration.trace_point_events = [:call]
|
@@ -101,16 +102,15 @@ class MiddlewareTest < Test::Unit::TestCase
|
|
101
102
|
assert_equal false, Coverband::Base.instance.instance_variable_get("@enabled")
|
102
103
|
Coverband::Base.instance.instance_variable_set("@sample_percentage", 100.0)
|
103
104
|
fake_redis = Redis.new
|
104
|
-
Coverband::Base.instance.instance_variable_set("@
|
105
|
+
Coverband::Base.instance.instance_variable_set("@store", Coverband::Adapters::RedisStore.new(fake_redis))
|
105
106
|
fake_redis.stubs(:info).returns({'redis_version' => 3.0})
|
106
107
|
fake_redis.expects(:sadd).at_least_once
|
107
|
-
fake_redis.expects(:
|
108
|
+
fake_redis.expects(:mapped_hmset).at_least_once
|
109
|
+
fake_redis.expects(:mapped_hmset).at_least_once.with("#{BASE_KEY}.#{basic_rack_ruby_file}", {'4'=>1})
|
108
110
|
results = middleware.call(request)
|
109
111
|
assert_equal true, Coverband::Base.instance.instance_variable_get("@enabled")
|
110
112
|
end
|
111
113
|
|
112
|
-
|
113
|
-
|
114
114
|
private
|
115
115
|
|
116
116
|
def fake_app
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require File.expand_path('../test_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class ReportsBaseTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
test "filename_from_key fix filename from a key with a swappable path" do
|
6
|
+
Coverband.configure do |config|
|
7
|
+
config.reporter = 'std_out'
|
8
|
+
config.root = '/full/remote_app/path'
|
9
|
+
end
|
10
|
+
|
11
|
+
key = "/app/is/a/path.rb"
|
12
|
+
#the code takes config.root expands and adds a '/' for the final path in roots
|
13
|
+
roots = ["/app/", '/full/remote_app/path/']
|
14
|
+
|
15
|
+
assert_equal "/full/remote_app/path/is/a/path.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
16
|
+
end
|
17
|
+
|
18
|
+
test "filename_from_key fix filename a changing deploy path with double quotes" do
|
19
|
+
Coverband.configure do |config|
|
20
|
+
config.reporter = 'std_out'
|
21
|
+
config.root = '/full/remote_app/path'
|
22
|
+
end
|
23
|
+
|
24
|
+
key = "/box/apps/app_name/releases/20140725203539/app/models/user.rb"
|
25
|
+
# the code takes config.root expands and adds a '/' for the final path in roots
|
26
|
+
# note to get regex to work for changing deploy directories it must be double escaped in double quotes or use single qoutes
|
27
|
+
roots = ["/box/apps/app_name/releases/\\d+/", '/full/remote_app/path/']
|
28
|
+
|
29
|
+
assert_equal "/full/remote_app/path/app/models/user.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
30
|
+
end
|
31
|
+
|
32
|
+
test "filename_from_key fix filename a changing deploy path with single quotes" do
|
33
|
+
Coverband.configure do |config|
|
34
|
+
config.reporter = 'std_out'
|
35
|
+
config.root = '/full/remote_app/path'
|
36
|
+
end
|
37
|
+
|
38
|
+
key = "/box/apps/app_name/releases/20140725203539/app/models/user.rb"
|
39
|
+
# the code takes config.root expands and adds a '/' for the final path in roots
|
40
|
+
# note to get regex to work for changing deploy directories it must be double escaped in double quotes or use single qoutes
|
41
|
+
roots = ['/box/apps/app_name/releases/\d+/', '/full/remote_app/path/']
|
42
|
+
|
43
|
+
assert_equal "/full/remote_app/path/app/models/user.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
44
|
+
end
|
45
|
+
|
46
|
+
test "filename_from_key leave filename from a key with a local path" do
|
47
|
+
Coverband.configure do |config|
|
48
|
+
config.reporter = 'std_out'
|
49
|
+
config.root = '/full/remote_app/path'
|
50
|
+
end
|
51
|
+
|
52
|
+
key = "/full/remote_app/path/is/a/path.rb"
|
53
|
+
#the code takes config.root expands and adds a '/' for the final path in roots
|
54
|
+
roots = ["/app/", '/full/remote_app/path/']
|
55
|
+
|
56
|
+
assert_equal "/full/remote_app/path/is/a/path.rb", Coverband::Reporters::Base.filename_from_key(key, roots)
|
57
|
+
end
|
58
|
+
|
59
|
+
test "line_hash gets correct hash entry for a line key" do
|
60
|
+
@fake_redis = fake_redis
|
61
|
+
store = Coverband::Adapters::RedisStore.new(@fake_redis, array: true)
|
62
|
+
|
63
|
+
Coverband.configure do |config|
|
64
|
+
config.redis = @fake_redis
|
65
|
+
config.reporter = 'std_out'
|
66
|
+
config.root = '/full/remote_app/path'
|
67
|
+
end
|
68
|
+
|
69
|
+
key = "/full/remote_app/path/is/a/path.rb"
|
70
|
+
#the code takes config.root expands and adds a '/'
|
71
|
+
roots = ["/app/", '/full/remote_app/path/']
|
72
|
+
|
73
|
+
lines_hit = ['1','3','6']
|
74
|
+
@fake_redis.stubs(:smembers).returns(lines_hit)
|
75
|
+
#expects to show hit counts on 1,3,6
|
76
|
+
expected = {"/full/remote_app/path/is/a/path.rb" => [1,nil,1,nil,nil,1]}
|
77
|
+
File.stubs(:exists?).returns(true)
|
78
|
+
File.stubs(:foreach).returns(['line 1','line2','line3','line4','line5','line6'])
|
79
|
+
|
80
|
+
assert_equal expected, Coverband::Reporters::Base.line_hash(store, key, roots)
|
81
|
+
end
|
82
|
+
|
83
|
+
test "line_hash adjusts relative paths" do
|
84
|
+
@fake_redis = fake_redis
|
85
|
+
store = Coverband::Adapters::RedisStore.new(@fake_redis, array: true)
|
86
|
+
|
87
|
+
Coverband.configure do |config|
|
88
|
+
config.redis = @fake_redis
|
89
|
+
config.reporter = 'std_out'
|
90
|
+
config.root = '/full/remote_app/path'
|
91
|
+
end
|
92
|
+
|
93
|
+
key = "./is/a/path.rb"
|
94
|
+
#the code takes config.root expands and adds a '/'
|
95
|
+
roots = ["/app/", '/full/remote_app/path/']
|
96
|
+
|
97
|
+
lines_hit = ['1','3','6']
|
98
|
+
@fake_redis.stubs(:smembers).returns(lines_hit)
|
99
|
+
#expects to show hit counts on 1,3,6
|
100
|
+
expected = {"/full/remote_app/path/is/a/path.rb" => [1,nil,1,nil,nil,1]}
|
101
|
+
File.stubs(:exists?).returns(true)
|
102
|
+
File.stubs(:foreach).returns(['line 1','line2','line3','line4','line5','line6'])
|
103
|
+
|
104
|
+
assert_equal expected, Coverband::Reporters::Base.line_hash(store, key, roots)
|
105
|
+
end
|
106
|
+
|
107
|
+
test "#merge_arrays basic merge preserves order and counts" do
|
108
|
+
first = [0,0,1,0,1]
|
109
|
+
second = [nil,0,1,0,0]
|
110
|
+
expects = [0,0,2,0,1]
|
111
|
+
|
112
|
+
assert_equal expects, Coverband::Reporters::Base.merge_arrays(first, second)
|
113
|
+
end
|
114
|
+
|
115
|
+
test "#merge_arrays basic merge preserves order and counts different lengths" do
|
116
|
+
first = [0,0,1,0,1]
|
117
|
+
second = [nil,0,1,0,0,0,0,1]
|
118
|
+
expects = [0,0,2,0,1,0,0,1]
|
119
|
+
|
120
|
+
assert_equal expects, Coverband::Reporters::Base.merge_arrays(first, second)
|
121
|
+
end
|
122
|
+
|
123
|
+
test "#merge_existing_coverage basic merge preserves order and counts different lengths" do
|
124
|
+
first = {"file.rb" => [0,1,2,nil,nil,nil]}
|
125
|
+
second = {"file.rb" => [0,1,2,nil,0,1,2]}
|
126
|
+
expects = {"file.rb" => [0,2,4,nil,0,1,2]}
|
127
|
+
|
128
|
+
assert_equal expects, Coverband::Reporters::Base.merge_existing_coverage(first, second)
|
129
|
+
end
|
130
|
+
|
131
|
+
test "#merge_existing_coverage mismatched" do
|
132
|
+
first = {"file.rb" => [0,1,2,nil,nil,nil]}
|
133
|
+
second = {"diff.rb" => [0,1,2,nil,0,1,2]}
|
134
|
+
expects = {"file.rb" => [0,1,2,nil,nil,nil],
|
135
|
+
"diff.rb" => [0,1,2,nil,0,1,2]}
|
136
|
+
|
137
|
+
assert_equal expects, Coverband::Reporters::Base.merge_existing_coverage(first, second)
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|