leafy-rack 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,141 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/rack/admin'
4
+ require 'yaml'
5
+ require 'json'
6
+
7
+ describe Leafy::Rack::Admin do
8
+
9
+ subject { Leafy::Rack::Admin }
10
+
11
+ let( :expected_headers ) do
12
+ { 'Content-Type' => 'text/html' }
13
+ end
14
+
15
+ let( :metrics ) { Leafy::Metrics::Registry.new }
16
+
17
+ let( :health ) { Leafy::Health::Registry.new }
18
+
19
+ let( :health_report ) do
20
+ { 'version' => '3.0.0',
21
+ 'gauges' => {},
22
+ 'counters' => {},
23
+ 'histograms' => {},
24
+ 'meters' => {},
25
+ 'timers' => {}
26
+ }
27
+ end
28
+
29
+ let( :result ){ [ 200, nil, [] ] }
30
+ let( :app ) do
31
+ Proc.new() { result }
32
+ end
33
+
34
+ it 'has response' do
35
+ status, headers, body = subject.response( "/path" )
36
+ expect( status ).to eq 200
37
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
38
+ expect( body.join.count("\n" ) ).to eq 15
39
+ expect( body.join.gsub( '/path/' ).collect { |f| f }.size ).to eq 6
40
+ end
41
+
42
+ describe 'default path' do
43
+ subject { Leafy::Rack::Admin.new( app, metrics, health ) }
44
+
45
+ it 'passes request if not matches the given path' do
46
+ env = { 'PATH_INFO'=> '/something' }
47
+ expect( subject.call( env ) ).to eq result
48
+ end
49
+
50
+ it 'shows menu page on admin path' do
51
+ env = { 'PATH_INFO'=> '/admin' }
52
+ status, headers, body = subject.call( env )
53
+ expect( status ).to eq 200
54
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
55
+ expect( body.join.count("\n" ) ).to eq 15
56
+ end
57
+
58
+ it 'pongs on ping path' do
59
+ env = { 'PATH_INFO'=> '/admin/ping' }
60
+ status, _, body = subject.call( env )
61
+ expect( status ).to eq 200
62
+ expect( body.join ).to eq 'pong'
63
+ end
64
+
65
+ it 'thread dump on threads path' do
66
+ env = { 'PATH_INFO'=> '/admin/threads' }
67
+ status, _, body = subject.call( env )
68
+ expect( status ).to eq 200
69
+ expect( body.join.count( "\n" ) ).to be > 100
70
+ end
71
+
72
+ it 'reports metrics on metrics path' do
73
+ env = { 'PATH_INFO'=> '/admin/metrics' }
74
+ status, _, body = subject.call( env )
75
+ expect( status ).to eq 200
76
+ expect( body.join.count( "\n" ) ).to eq 0
77
+ body = JSON.parse(body.join)
78
+ expect( body.to_yaml ).to eq health_report.to_yaml
79
+ end
80
+
81
+ it 'reports health-checks on health path' do
82
+ env = { 'PATH_INFO'=> '/admin/health' }
83
+ status, _, body = subject.call( env )
84
+ expect( status ).to eq 200
85
+ expect( body.join.count( "\n" ) ).to eq 0
86
+ body = JSON.parse(body.join)
87
+ expect( body.to_yaml ).to eq "--- {}\n"
88
+ end
89
+ end
90
+
91
+ describe 'custom path' do
92
+ subject { Leafy::Rack::Admin.new( app, metrics, health, '/custom' ) }
93
+
94
+ it 'passes request if not matches the given path' do
95
+ env = { 'PATH_INFO'=> '/something' }
96
+ expect( subject.call( env ) ).to eq result
97
+ env = { 'PATH_INFO'=> '/ping' }
98
+ expect( subject.call( env ) ).to eq result
99
+ end
100
+
101
+ it 'shows menu page on admin path' do
102
+ env = { 'PATH_INFO'=> '/custom' }
103
+ status, headers, body = subject.call( env )
104
+ expect( status ).to eq 200
105
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
106
+ expect( body.join.count("\n" ) ).to eq 15
107
+ end
108
+
109
+ it 'pongs on ping path' do
110
+ env = { 'PATH_INFO'=> '/custom/ping' }
111
+ status, _, body = subject.call( env )
112
+ expect( status ).to eq 200
113
+ expect( body.join ).to eq 'pong'
114
+ end
115
+
116
+ it 'thread dump on threads path' do
117
+ env = { 'PATH_INFO'=> '/custom/threads' }
118
+ status, _, body = subject.call( env )
119
+ expect( status ).to eq 200
120
+ expect( body.join.count( "\n" ) ).to be > 100
121
+ end
122
+
123
+ it 'reports metrics on metrics path' do
124
+ env = { 'PATH_INFO'=> '/custom/metrics' }
125
+ status, _, body = subject.call( env )
126
+ expect( status ).to eq 200
127
+ expect( body.join.count( "\n" ) ).to eq 0
128
+ body = JSON.parse(body.join)
129
+ expect( body.to_yaml ).to eq health_report.to_yaml
130
+ end
131
+
132
+ it 'reports health-checks on health path' do
133
+ env = { 'PATH_INFO'=> '/custom/health' }
134
+ status, _, body = subject.call( env )
135
+ expect( status ).to eq 200
136
+ expect( body.join.count( "\n" ) ).to eq 0
137
+ body = JSON.parse(body.join)
138
+ expect( body.to_yaml ).to eq "--- {}\n"
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/instrumented/basic_instrumented'
4
+
5
+ describe Leafy::Instrumented::BasicInstrumented do
6
+
7
+ subject { Leafy::Instrumented::BasicInstrumented.new( registry, "name" ) }
8
+
9
+ let( :registry ) { Leafy::Metrics::Registry.new }
10
+
11
+ let( :app ) do
12
+ Proc.new() do
13
+ sleep 0.1
14
+ [ 200, nil, registry.metrics.counters.values.first.count ]
15
+ end
16
+ end
17
+
18
+ it 'collects metrics for a call' do
19
+ _, _, count = subject.call do
20
+ app.call
21
+ end
22
+ expect( count ).to eq 1
23
+ expect( registry.metrics.timers.keys ).to eq [ 'name.requests' ]
24
+ expect( registry.metrics.timers.values.first.mean_rate ).to be > 0.9
25
+ expect( registry.metrics.counters.keys ).to eq [ 'name.active_requests' ]
26
+ expect( registry.metrics.counters.values.collect { |a| a.count } ).to eq [ 0 ]
27
+ expect( registry.metrics.meters.keys ).to eq [ 'name.responseCodes.other' ]
28
+ expect( registry.metrics.meters.values.collect { |a| a.count } ).to eq [ 1 ]
29
+ expect( registry.metrics.meters.values.first.mean_rate ).to be > 5.0
30
+ end
31
+ end
@@ -0,0 +1,136 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/rack/health'
4
+ require 'yaml'
5
+ require 'json'
6
+
7
+ describe Leafy::Rack::Health do
8
+
9
+ subject { Leafy::Rack::Health }
10
+
11
+ let( :registry ) { Leafy::Health::Registry.new }
12
+
13
+ let( :expected_headers ) do
14
+ { 'Content-Type' => 'application/json',
15
+ 'Cache-Control' => 'must-revalidate,no-cache,no-store' }
16
+ end
17
+
18
+ let( :result ){ [ 200, nil, [] ] }
19
+ let( :app ) do
20
+ Proc.new() { result }
21
+ end
22
+
23
+ describe 'healthy' do
24
+
25
+ let( :health ) do
26
+ m = registry
27
+ m.register( 'two' ) do |ctx|
28
+ ctx.healthy 'ok'
29
+ end
30
+ m.health
31
+ end
32
+ let( :report ) do
33
+ { 'two' => { 'healthy' => true, 'message' => 'ok' } }
34
+ end
35
+
36
+ it 'has response' do
37
+ status, headers, body = subject.response( health, {} )
38
+ expect( status ).to eq 200
39
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
40
+ body = JSON.parse( body.join )
41
+ expect( body.to_yaml ).to eq report.to_yaml
42
+ end
43
+
44
+ it 'has pretty response' do
45
+ status, headers, body = subject.response( health, { 'QUERY_STRING' => 'pretty' } )
46
+ expect( status ).to eq 200
47
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
48
+ expect( body.join.count( "\n" ) ).to eq 5
49
+ body = JSON.parse( body.join )
50
+ expect( body.to_yaml ).to eq report.to_yaml
51
+ end
52
+ end
53
+
54
+ describe 'unhealthy' do
55
+ let( :health ) do
56
+ m = registry
57
+ m.register( 'one' ) do |ctx|
58
+ 'error'
59
+ end
60
+ m.health
61
+ end
62
+
63
+ let( :report ) do
64
+ { 'one' => { 'healthy' => false, 'message' => 'error' } }
65
+ end
66
+
67
+ it 'has response' do
68
+ status, headers, body = subject.response( health, {} )
69
+ expect( status ).to eq 500
70
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
71
+ body = JSON.parse( body.join )
72
+ expect( body.to_yaml ).to eq report.to_yaml
73
+ end
74
+
75
+ it 'has pretty response' do
76
+ status, headers, body = subject.response( health, { 'QUERY_STRING' => 'pretty' } )
77
+ expect( status ).to eq 500
78
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
79
+ expect( body.join.count( "\n" ) ).to eq 5
80
+ body = JSON.parse( body.join )
81
+ expect( body.to_yaml ).to eq report.to_yaml
82
+ end
83
+ end
84
+
85
+ describe 'default path' do
86
+ subject { Leafy::Rack::Health.new( app, registry ) }
87
+
88
+ it 'passes request if not matches the given path' do
89
+ env = { 'PATH_INFO'=> '/something' }
90
+ expect( subject.call( env ) ).to eq result
91
+ end
92
+
93
+ it 'reports health-checks on health path' do
94
+ env = { 'PATH_INFO'=> '/health' }
95
+ status, headers, body = subject.call( env )
96
+ expect( status ).to eq 200
97
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
98
+ expect( body.join ).to eq '{}'
99
+ end
100
+
101
+ it 'reports "pretty" health-checks on health path' do
102
+ env = { 'PATH_INFO'=> '/health', 'QUERY_STRING' => 'pretty' }
103
+ status, headers, body = subject.call( env )
104
+ expect( status ).to eq 200
105
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
106
+ expect( body.join ).to eq '{ }'
107
+ end
108
+ end
109
+
110
+ describe 'custom path' do
111
+ subject { Leafy::Rack::Health.new( app, registry, '/custom' ) }
112
+
113
+ it 'passes request if not matches the given path' do
114
+ env = { 'PATH_INFO'=> '/something' }
115
+ expect( subject.call( env ) ).to eq result
116
+ env = { 'PATH_INFO'=> '/health' }
117
+ expect( subject.call( env ) ).to eq result
118
+ end
119
+
120
+ it 'reports health-checks on health path' do
121
+ env = { 'PATH_INFO'=> '/custom' }
122
+ status, headers, body = subject.call( env )
123
+ expect( status ).to eq 200
124
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
125
+ expect( body.join ).to eq '{}'
126
+ end
127
+
128
+ it 'reports "pretty" health-checks on health path' do
129
+ env = { 'PATH_INFO'=> '/custom', 'QUERY_STRING' => 'pretty' }
130
+ status, headers, body = subject.call( env )
131
+ expect( status ).to eq 200
132
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
133
+ expect( body.join ).to eq '{ }'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/health'
4
+ require 'leafy/json/health_writer'
5
+ require 'yaml'
6
+ require 'json'
7
+
8
+ describe Leafy::Json::HealthWriter do
9
+
10
+ subject { Leafy::Json::HealthWriter.new }
11
+
12
+ let( :health ) do
13
+ m = Leafy::Health::Registry.new
14
+ m.register( 'one' ) do
15
+ 'error'
16
+ end
17
+ m.register( 'two' ) do |ctx|
18
+ ctx.healthy 'ok'
19
+ end
20
+ m.register( 'three' ) do |ctx|
21
+ ctx.unhealthy 'no ok'
22
+ end
23
+ m.health
24
+ end
25
+
26
+ let( :expected ) do
27
+ {
28
+ "one"=> {"healthy"=>false, "message"=>"error"},
29
+ "three"=>{"healthy"=>false, "message"=>"no ok"},
30
+ "two"=>{"healthy"=>true, "message"=>"ok"}
31
+ }
32
+ end
33
+
34
+ it 'serializes health-check data to json' do
35
+ data = subject.to_json( health.run_health_checks )
36
+ expect( data.count( "\n" ) ).to eq 0
37
+ data = JSON.parse( data )
38
+ expect( data.to_yaml ).to eq expected.to_yaml
39
+ end
40
+
41
+ it 'serializes health-check data to json (pretty print)' do
42
+ data = subject.to_json( health.run_health_checks, true )
43
+ expect( data.count( "\n" ) ).to eq 13
44
+ data = JSON.parse( data )
45
+ expect( data.to_yaml ).to eq expected.to_yaml
46
+ end
47
+ end
@@ -0,0 +1,37 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/rack/instrumented'
4
+
5
+ describe Leafy::Rack::Instrumented do
6
+
7
+ subject { Leafy::Rack::Instrumented.new( app, instrumented ) }
8
+
9
+ let( :instrumented ) { Leafy::Instrumented::Instrumented.new( registry, "name" ) }
10
+
11
+ let( :registry ) { Leafy::Metrics::Registry.new }
12
+
13
+ let( :status ) { (Random.rand * 500 + 100).to_i }
14
+
15
+ let( :random ) { Random.rand.to_s }
16
+
17
+ let( :app ) do
18
+ Proc.new do
19
+ [ status, {}, [ random ] ]
20
+ end
21
+ end
22
+
23
+ it "collects metrics for a call and pass result on" do
24
+ result, _, body = subject.call( {} )
25
+ expect( result ).to eq status
26
+ expect( body.join ).to eq random
27
+
28
+ expect( registry.metrics.timers.keys ).to eq [ 'name.requests' ]
29
+ expect( registry.metrics.timers.values.first.mean_rate ).to be > 0.09
30
+
31
+ expect( registry.metrics.counters.keys ).to eq [ 'name.active_requests' ]
32
+ expect( registry.metrics.counters.values.collect { |a| a.count } ).to eq [ 0 ]
33
+
34
+ expect( registry.metrics.meters.values.select{ |a| a.count == 0 }.size ).to eq 7
35
+ expect( registry.metrics.meters.values.select{ |a| a.count == 1 }.size ).to eq 1
36
+ end
37
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/instrumented/instrumented'
4
+
5
+ describe Leafy::Instrumented::Instrumented do
6
+
7
+ subject { Leafy::Instrumented::Instrumented.new( registry, "name" ) }
8
+
9
+ let( :registry ) { Leafy::Metrics::Registry.new }
10
+
11
+ [ 400, 201, 204, 404, 200, 123, 205, 500 ].each_with_index do |status, index|
12
+ it "collects metrics for a call for status #{status}" do
13
+ result, _, _ = subject.call do
14
+ sleep 0.01
15
+ [ status, nil, nil ]
16
+ end
17
+
18
+ expect( result ).to eq status
19
+
20
+ expect( registry.metrics.timers.keys ).to eq [ 'name.requests' ]
21
+ expect( registry.metrics.timers.values.first.mean_rate ).to be > 0.09
22
+
23
+ expect( registry.metrics.counters.keys ).to eq [ 'name.active_requests' ]
24
+ expect( registry.metrics.counters.values.collect { |a| a.count } ).to eq [ 0 ]
25
+
26
+ expect( registry.metrics.meters.keys.sort ).to eq [ 'name.responseCodes.badRequest', 'name.responseCodes.created', 'name.responseCodes.noContent', 'name.responseCodes.notFound', 'name.responseCodes.ok', 'name.responseCodes.other', 'name.responseCodes.resetContent', 'name.responseCodes.serverError' ]
27
+
28
+ stati = registry.metrics.meters.values.collect { |a| a.count }
29
+ expect( stati[ index ] ).to eq 1
30
+ stati.delete 1
31
+ expect( stati ).to eq [0,0,0,0,0,0,0]
32
+
33
+ expect( registry.metrics.meters.values.to_a[ index ].mean_rate ).to be > 50
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,110 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/rack/metrics'
4
+ require 'yaml'
5
+ require 'json'
6
+
7
+ describe Leafy::Rack::Metrics do
8
+
9
+ subject { Leafy::Rack::Metrics }
10
+
11
+ let( :registry ) { Leafy::Metrics::Registry.new }
12
+
13
+ let( :expected_headers ) do
14
+ { 'Content-Type' => 'application/json',
15
+ 'Cache-Control' => 'must-revalidate,no-cache,no-store' }
16
+ end
17
+ let( :report ) do
18
+ { 'version' => '3.0.0',
19
+ 'gauges' => {},
20
+ 'counters' => {},
21
+ 'histograms' => {},
22
+ 'meters' => {},
23
+ 'timers' => {}
24
+ }
25
+ end
26
+
27
+ let( :result ){ [ 200, nil, [] ] }
28
+ let( :app ) do
29
+ Proc.new() { result }
30
+ end
31
+
32
+ it 'has response' do
33
+ status, headers, body = subject.response( registry.metrics, {} )
34
+ expect( status ).to eq 200
35
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
36
+ expect( body.join.count( "\n" ) ).to eq 0
37
+ body = JSON.parse( body.join )
38
+ expect( body.to_yaml ).to eq report.to_yaml
39
+ end
40
+
41
+ it 'has pretty response' do
42
+ status, headers, body = subject.response( registry.metrics,
43
+ { 'QUERY_STRING' => 'pretty' } )
44
+ expect( status ).to eq 200
45
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
46
+ expect( body.join.count( "\n" ) ).to eq 7
47
+ body = JSON.parse( body.join )
48
+ expect( body.to_yaml ).to eq report.to_yaml
49
+ end
50
+
51
+ describe 'default path' do
52
+ subject { Leafy::Rack::Metrics.new( app, registry ) }
53
+
54
+ it 'passes request if not matches the given path' do
55
+ env = { 'PATH_INFO'=> '/something' }
56
+ expect( subject.call( env ) ).to eq result
57
+ end
58
+
59
+ it 'reports metricss on metrics path' do
60
+ env = { 'PATH_INFO'=> '/metrics' }
61
+ status, headers, body = subject.call( env )
62
+ expect( status ).to eq 200
63
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
64
+ expect( body.join.count( "\n" ) ).to eq 0
65
+ body = JSON.parse(body.join)
66
+ expect( body.to_yaml ).to eq report.to_yaml
67
+ end
68
+
69
+ it 'reports "pretty" health-checks on health path' do
70
+ env = { 'PATH_INFO'=> '/metrics', 'QUERY_STRING' => 'pretty' }
71
+ status, headers, body = subject.call( env )
72
+ expect( status ).to eq 200
73
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
74
+ expect( body.join.count( "\n" ) ).to eq 7
75
+ body = JSON.parse(body.join)
76
+ expect( body.to_yaml ).to eq report.to_yaml
77
+ end
78
+ end
79
+
80
+ describe 'custom path' do
81
+ subject { Leafy::Rack::Metrics.new( app, registry, '/custom' ) }
82
+
83
+ it 'passes request if not matches the given path' do
84
+ env = { 'PATH_INFO'=> '/something' }
85
+ expect( subject.call( env ) ).to eq result
86
+ env = { 'PATH_INFO'=> '/metrics' }
87
+ expect( subject.call( env ) ).to eq result
88
+ end
89
+
90
+ it 'reports metricss on metrics path' do
91
+ env = { 'PATH_INFO'=> '/custom' }
92
+ status, headers, body = subject.call( env )
93
+ expect( status ).to eq 200
94
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
95
+ expect( body.join.count( "\n" ) ).to eq 0
96
+ body = JSON.parse(body.join)
97
+ expect( body.to_yaml ).to eq report.to_yaml
98
+ end
99
+
100
+ it 'reports "pretty" health-checks on health path' do
101
+ env = { 'PATH_INFO'=> '/custom', 'QUERY_STRING' => 'pretty' }
102
+ status, headers, body = subject.call( env )
103
+ expect( status ).to eq 200
104
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
105
+ expect( body.join.count( "\n" ) ).to eq 7
106
+ body = JSON.parse(body.join)
107
+ expect( body.to_yaml ).to eq report.to_yaml
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/metrics'
4
+ require 'leafy/json/metrics_writer'
5
+ require 'yaml'
6
+ require 'json'
7
+
8
+ describe Leafy::Json::MetricsWriter do
9
+
10
+ subject { Leafy::Json::MetricsWriter.new }
11
+
12
+ let( :metrics ) do
13
+ m = Leafy::Metrics::Registry.new
14
+ m.register_meter( 'one' ).mark
15
+ m.register_meter( 'two' ).mark
16
+ c = m.register_counter( 'three' )
17
+ c.inc
18
+ c.inc
19
+ m.metrics
20
+ end
21
+
22
+ let( :expected ) do
23
+ {
24
+ "two"=> {"count"=>1,
25
+ "m15_rate"=>0.0,
26
+ "m1_rate"=>0.0,
27
+ "m5_rate"=>0.0,
28
+ "units"=>"events/second"},
29
+ "one"=> {"count"=>1,
30
+ "m15_rate"=>0.0,
31
+ "m1_rate"=>0.0,
32
+ "m5_rate"=>0.0,
33
+ "units"=>"events/second"},
34
+ "three"=>{"count"=>2}
35
+ }
36
+ end
37
+
38
+ it 'serializes metrics data to json' do
39
+ data = subject.to_json( metrics.metrics )
40
+ expect( data.count( "\n" ) ).to eq 0
41
+ data = JSON.parse( data )
42
+ expect( data['one'].delete('mean_rate') ).to be >0
43
+ expect( data['two'].delete('mean_rate') ).to be >0
44
+ expect( data.to_yaml ).to eq expected.to_yaml
45
+ end
46
+
47
+ it 'serializes metrics data to json (pretty print)' do
48
+ data = subject.to_json( metrics.metrics, true )
49
+ expect( data.count( "\n" ) ).to eq 20
50
+ data = JSON.parse( data )
51
+ expect( data['one'].delete('mean_rate') ).to be >0
52
+ expect( data['two'].delete('mean_rate') ).to be >0
53
+ expect( data.to_yaml ).to eq expected.to_yaml
54
+ end
55
+ end
@@ -0,0 +1,63 @@
1
+ require_relative 'setup'
2
+
3
+ require 'leafy/rack/ping'
4
+ require 'yaml'
5
+ require 'json'
6
+
7
+ describe Leafy::Rack::Ping do
8
+
9
+ subject { Leafy::Rack::Ping }
10
+
11
+ let( :expected_headers ) do
12
+ { 'Content-Type' => 'text/plain',
13
+ 'Cache-Control' => 'must-revalidate,no-cache,no-store' }
14
+ end
15
+
16
+ let( :result ){ [ 200, nil, [] ] }
17
+ let( :app ) do
18
+ Proc.new() { result }
19
+ end
20
+
21
+ it 'has response' do
22
+ status, headers, body = subject.response
23
+ expect( status ).to eq 200
24
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
25
+ expect( body ).to eq ['pong']
26
+ end
27
+
28
+ describe 'default path' do
29
+ subject { Leafy::Rack::Ping.new( app ) }
30
+
31
+ it 'passes request if not matches the given path' do
32
+ env = { 'PATH_INFO'=> '/something' }
33
+ expect( subject.call( env ) ).to eq result
34
+ end
35
+
36
+ it 'pongs on ping path' do
37
+ env = { 'PATH_INFO'=> '/ping' }
38
+ status, headers, body = subject.call( env )
39
+ expect( status ).to eq 200
40
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
41
+ expect( body ).to eq ['pong']
42
+ end
43
+ end
44
+
45
+ describe 'custom path' do
46
+ subject { Leafy::Rack::Ping.new( app, '/custom' ) }
47
+
48
+ it 'passes request if not matches the given path' do
49
+ env = { 'PATH_INFO'=> '/something' }
50
+ expect( subject.call( env ) ).to eq result
51
+ env = { 'PATH_INFO'=> '/ping' }
52
+ expect( subject.call( env ) ).to eq result
53
+ end
54
+
55
+ it 'pongs on ping path' do
56
+ env = { 'PATH_INFO'=> '/custom' }
57
+ status, headers, body = subject.call( env )
58
+ expect( status ).to eq 200
59
+ expect( headers.to_yaml).to eq expected_headers.to_yaml
60
+ expect( body ).to eq ['pong']
61
+ end
62
+ end
63
+ end
data/spec/setup.rb ADDED
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift File.expand_path( '../../lib', __FILE__ )
2
+ $LOAD_PATH.unshift File.expand_path( '../../../leafy-health/lib', __FILE__ )
3
+ $LOAD_PATH.unshift File.expand_path( '../../../leafy-metrics/lib', __FILE__ )