routemaster-drain 3.6.5 → 3.7.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +23 -171
- data/CHANGELOG.md +18 -0
- data/gemfiles/rails_6.gemfile +24 -0
- data/lib/routemaster/api_client.rb +11 -7
- data/lib/routemaster/api_client_circuit.rb +1 -1
- data/lib/routemaster/drain.rb +1 -1
- data/lib/routemaster/errors.rb +6 -0
- data/lib/routemaster/middleware/error_handling.rb +1 -0
- data/routemaster-drain.gemspec +1 -0
- data/spec/core_ext/forwardable_spec.rb +12 -10
- data/spec/routemaster/api_client_circuit_spec.rb +4 -1
- data/spec/routemaster/api_client_spec.rb +37 -0
- data/spec/routemaster/integration/api_client_spec.rb +5 -1
- metadata +22 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 91d53145809f5384fe911262c83306264381e1915ce6b6aef4a7de3299fd8eee
|
|
4
|
+
data.tar.gz: 2a7860c5a46d018aa7e10d82aad853066e5daf5851b6deba44e900985c7218c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4119a30f7b34f48fcca01432718968523f71ebc9b298c78b6aa1d162c48108db631622ce94ec1859c5715642aa554f009b216cdf016b5391945722302a45ae42
|
|
7
|
+
data.tar.gz: fa0f8e231efdc36f2bf1f88e0a6a8f9cc14ae3b494761756317cc1924b8f8e505f2e6ca3651132a2e3e2bcddc313071b66523d4626308c324fa8722556ab6ebc
|
data/.circleci/config.yml
CHANGED
|
@@ -3,161 +3,24 @@
|
|
|
3
3
|
|
|
4
4
|
version: 2
|
|
5
5
|
jobs:
|
|
6
|
-
|
|
7
|
-
build_2.3.4_rails_3:
|
|
8
|
-
docker:
|
|
9
|
-
- image: deliveroo/multiruby
|
|
10
|
-
- image: redis:3-alpine
|
|
11
|
-
steps:
|
|
12
|
-
- checkout
|
|
13
|
-
|
|
14
|
-
- run:
|
|
15
|
-
name: Select build variant (Ruby 2.3.4, rails_3)
|
|
16
|
-
command: |
|
|
17
|
-
rbenv local 2.3.4 ;
|
|
18
|
-
gem install bundler -v '~> 1.17' ;
|
|
19
|
-
bundle config --local gemfile $PWD/gemfiles/rails_3.gemfile
|
|
20
|
-
|
|
21
|
-
- restore_cache:
|
|
22
|
-
keys:
|
|
23
|
-
- v2-bundle-2.3.4-rails_3-{{ .Branch }}
|
|
24
|
-
- v2-bundle-2.3.4-rails_3
|
|
25
|
-
- v2-bundle-2.3.4
|
|
26
|
-
|
|
27
|
-
- run:
|
|
28
|
-
name: Install dependencies
|
|
29
|
-
command: |
|
|
30
|
-
bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
|
|
31
|
-
|
|
32
|
-
- run:
|
|
33
|
-
name: Run test suite
|
|
34
|
-
command: |
|
|
35
|
-
unset RACK_ENV &&
|
|
36
|
-
unset RAILS_ENV &&
|
|
37
|
-
bundle exec rspec
|
|
38
|
-
|
|
39
|
-
- save_cache:
|
|
40
|
-
key: v2-bundle-2.3.4-rails_3-{{ .Branch }}
|
|
41
|
-
paths:
|
|
42
|
-
- ~/project/vendor/bundle
|
|
43
|
-
- save_cache:
|
|
44
|
-
key: v2-bundle-2.3.4-rails_3
|
|
45
|
-
paths:
|
|
46
|
-
- ~/project/vendor/bundle
|
|
47
|
-
- save_cache:
|
|
48
|
-
key: v2-bundle-2.3.4
|
|
49
|
-
paths:
|
|
50
|
-
- ~/project/vendor/bundle
|
|
51
|
-
|
|
52
|
-
build_2.3.4_rails_4:
|
|
6
|
+
build_2.5_rails_5:
|
|
53
7
|
docker:
|
|
54
|
-
- image:
|
|
8
|
+
- image: circleci/ruby:2.4.1
|
|
55
9
|
- image: redis:3-alpine
|
|
56
10
|
steps:
|
|
57
11
|
- checkout
|
|
58
12
|
|
|
59
13
|
- run:
|
|
60
|
-
name:
|
|
14
|
+
name: Install bundler
|
|
61
15
|
command: |
|
|
62
|
-
rbenv local 2.3.4 ;
|
|
63
|
-
gem install bundler -v '~> 1.17' ;
|
|
64
|
-
bundle config --local gemfile $PWD/gemfiles/rails_4.gemfile
|
|
65
|
-
|
|
66
|
-
- restore_cache:
|
|
67
|
-
keys:
|
|
68
|
-
- v2-bundle-2.3.4-rails_4-{{ .Branch }}
|
|
69
|
-
- v2-bundle-2.3.4-rails_4
|
|
70
|
-
- v2-bundle-2.3.4
|
|
71
|
-
|
|
72
|
-
- run:
|
|
73
|
-
name: Install dependencies
|
|
74
|
-
command: |
|
|
75
|
-
bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
|
|
76
|
-
|
|
77
|
-
- run:
|
|
78
|
-
name: Run test suite
|
|
79
|
-
command: |
|
|
80
|
-
unset RACK_ENV &&
|
|
81
|
-
unset RAILS_ENV &&
|
|
82
|
-
bundle exec rspec
|
|
83
|
-
|
|
84
|
-
- save_cache:
|
|
85
|
-
key: v2-bundle-2.3.4-rails_4-{{ .Branch }}
|
|
86
|
-
paths:
|
|
87
|
-
- ~/project/vendor/bundle
|
|
88
|
-
- save_cache:
|
|
89
|
-
key: v2-bundle-2.3.4-rails_4
|
|
90
|
-
paths:
|
|
91
|
-
- ~/project/vendor/bundle
|
|
92
|
-
- save_cache:
|
|
93
|
-
key: v2-bundle-2.3.4
|
|
94
|
-
paths:
|
|
95
|
-
- ~/project/vendor/bundle
|
|
96
|
-
|
|
97
|
-
build_2.4.1_rails_4:
|
|
98
|
-
docker:
|
|
99
|
-
- image: deliveroo/multiruby
|
|
100
|
-
- image: redis:3-alpine
|
|
101
|
-
steps:
|
|
102
|
-
- checkout
|
|
103
|
-
|
|
104
|
-
- run:
|
|
105
|
-
name: Select build variant (Ruby 2.4.1, rails_4)
|
|
106
|
-
command: |
|
|
107
|
-
rbenv local 2.4.1 ;
|
|
108
|
-
gem install bundler -v '~> 1.17' ;
|
|
109
|
-
bundle config --local gemfile $PWD/gemfiles/rails_4.gemfile
|
|
110
|
-
|
|
111
|
-
- restore_cache:
|
|
112
|
-
keys:
|
|
113
|
-
- v2-bundle-2.4.1-rails_4-{{ .Branch }}
|
|
114
|
-
- v2-bundle-2.4.1-rails_4
|
|
115
|
-
- v2-bundle-2.4.1
|
|
116
|
-
|
|
117
|
-
- run:
|
|
118
|
-
name: Install dependencies
|
|
119
|
-
command: |
|
|
120
|
-
bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
|
|
121
|
-
|
|
122
|
-
- run:
|
|
123
|
-
name: Run test suite
|
|
124
|
-
command: |
|
|
125
|
-
unset RACK_ENV &&
|
|
126
|
-
unset RAILS_ENV &&
|
|
127
|
-
bundle exec rspec
|
|
128
|
-
|
|
129
|
-
- save_cache:
|
|
130
|
-
key: v2-bundle-2.4.1-rails_4-{{ .Branch }}
|
|
131
|
-
paths:
|
|
132
|
-
- ~/project/vendor/bundle
|
|
133
|
-
- save_cache:
|
|
134
|
-
key: v2-bundle-2.4.1-rails_4
|
|
135
|
-
paths:
|
|
136
|
-
- ~/project/vendor/bundle
|
|
137
|
-
- save_cache:
|
|
138
|
-
key: v2-bundle-2.4.1
|
|
139
|
-
paths:
|
|
140
|
-
- ~/project/vendor/bundle
|
|
141
|
-
|
|
142
|
-
build_2.3.4_rails_5:
|
|
143
|
-
docker:
|
|
144
|
-
- image: deliveroo/multiruby
|
|
145
|
-
- image: redis:3-alpine
|
|
146
|
-
steps:
|
|
147
|
-
- checkout
|
|
148
|
-
|
|
149
|
-
- run:
|
|
150
|
-
name: Select build variant (Ruby 2.3.4, rails_5)
|
|
151
|
-
command: |
|
|
152
|
-
rbenv local 2.3.4 ;
|
|
153
16
|
gem install bundler -v '~> 1.17' ;
|
|
154
17
|
bundle config --local gemfile $PWD/gemfiles/rails_5.gemfile
|
|
155
18
|
|
|
156
19
|
- restore_cache:
|
|
157
20
|
keys:
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
21
|
+
- v3-bundle-2.5.0-rails_5-{{ .Branch }}
|
|
22
|
+
- v3-bundle-2.5.0-rails_5
|
|
23
|
+
- v3-bundle-2.5.0
|
|
161
24
|
|
|
162
25
|
- run:
|
|
163
26
|
name: Install dependencies
|
|
@@ -172,37 +35,36 @@ jobs:
|
|
|
172
35
|
bundle exec rspec
|
|
173
36
|
|
|
174
37
|
- save_cache:
|
|
175
|
-
key:
|
|
38
|
+
key: v3-bundle-2.5.0-rails_5-{{ .Branch }}
|
|
176
39
|
paths:
|
|
177
40
|
- ~/project/vendor/bundle
|
|
178
41
|
- save_cache:
|
|
179
|
-
key:
|
|
42
|
+
key: v3-bundle-2.5.0-rails_5
|
|
180
43
|
paths:
|
|
181
44
|
- ~/project/vendor/bundle
|
|
182
45
|
- save_cache:
|
|
183
|
-
key:
|
|
46
|
+
key: v3-bundle-2.5.0
|
|
184
47
|
paths:
|
|
185
48
|
- ~/project/vendor/bundle
|
|
186
49
|
|
|
187
|
-
build_2.
|
|
50
|
+
build_2.7_rails_6:
|
|
188
51
|
docker:
|
|
189
|
-
- image:
|
|
190
|
-
- image: redis:
|
|
52
|
+
- image: circleci/ruby:2.7.4
|
|
53
|
+
- image: redis:6-alpine
|
|
191
54
|
steps:
|
|
192
55
|
- checkout
|
|
193
56
|
|
|
194
57
|
- run:
|
|
195
|
-
name:
|
|
58
|
+
name: Install bundler
|
|
196
59
|
command: |
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
bundle config --local gemfile $PWD/gemfiles/rails_5.gemfile
|
|
60
|
+
gem install bundler -v '~> 2' ;
|
|
61
|
+
bundle config --local gemfile $PWD/gemfiles/rails_6.gemfile
|
|
200
62
|
|
|
201
63
|
- restore_cache:
|
|
202
64
|
keys:
|
|
203
|
-
-
|
|
204
|
-
-
|
|
205
|
-
-
|
|
65
|
+
- bundle-2.7.4-rails_6-{{ .Branch }}
|
|
66
|
+
- bundle-2.7.4-rails_6
|
|
67
|
+
- bundle-2.7.4
|
|
206
68
|
|
|
207
69
|
- run:
|
|
208
70
|
name: Install dependencies
|
|
@@ -217,31 +79,21 @@ jobs:
|
|
|
217
79
|
bundle exec rspec
|
|
218
80
|
|
|
219
81
|
- save_cache:
|
|
220
|
-
key:
|
|
82
|
+
key: bundle-2.7.4-rails_6-{{ .Branch }}
|
|
221
83
|
paths:
|
|
222
84
|
- ~/project/vendor/bundle
|
|
223
85
|
- save_cache:
|
|
224
|
-
key:
|
|
86
|
+
key: bundle-2.7.4-rails_6
|
|
225
87
|
paths:
|
|
226
88
|
- ~/project/vendor/bundle
|
|
227
89
|
- save_cache:
|
|
228
|
-
key:
|
|
90
|
+
key: bundle-2.7.4
|
|
229
91
|
paths:
|
|
230
92
|
- ~/project/vendor/bundle
|
|
231
93
|
|
|
232
|
-
|
|
233
94
|
workflows:
|
|
234
95
|
version: 2
|
|
235
96
|
test:
|
|
236
97
|
jobs:
|
|
237
|
-
|
|
238
|
-
- build_2.
|
|
239
|
-
|
|
240
|
-
- build_2.3.4_rails_4
|
|
241
|
-
|
|
242
|
-
- build_2.4.1_rails_4
|
|
243
|
-
|
|
244
|
-
- build_2.3.4_rails_5
|
|
245
|
-
|
|
246
|
-
- build_2.4.1_rails_5
|
|
247
|
-
|
|
98
|
+
- build_2.5_rails_5
|
|
99
|
+
- build_2.7_rails_6
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
_A description of your awesome changes here!_
|
|
4
4
|
|
|
5
|
+
### 3.7.0
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
|
|
9
|
+
- Adds circuit breaker to PATCH PUT POST requests (#66)
|
|
10
|
+
|
|
11
|
+
### 3.6.8
|
|
12
|
+
|
|
13
|
+
Features:
|
|
14
|
+
|
|
15
|
+
- Raises error on `502 Bad Gateway` [#94](https://github.com/deliveroo/routemaster-drain/pull/94)
|
|
16
|
+
|
|
17
|
+
### 3.6.7 (2021-02-11)
|
|
18
|
+
|
|
19
|
+
Features:
|
|
20
|
+
|
|
21
|
+
- APIClient accepts timeout and open_timeout options
|
|
22
|
+
|
|
5
23
|
### 3.6.5 (2019-02-08)
|
|
6
24
|
|
|
7
25
|
Bug fix:
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "psych", :require => false
|
|
6
|
+
gem "bundler", :require => false
|
|
7
|
+
gem "rake", :require => false
|
|
8
|
+
gem "webmock", :require => false
|
|
9
|
+
gem "rack-test", :require => false
|
|
10
|
+
gem "dotenv", :require => false
|
|
11
|
+
gem "simplecov", :require => false
|
|
12
|
+
gem "codecov", :require => false
|
|
13
|
+
gem "resque", :require => false
|
|
14
|
+
gem "sidekiq", :require => false
|
|
15
|
+
gem "guard-rspec", :require => false
|
|
16
|
+
gem "pry", :require => false
|
|
17
|
+
gem "byebug", :require => false
|
|
18
|
+
gem "rspec", :require => false
|
|
19
|
+
gem "appraisal", :require => false
|
|
20
|
+
gem "dogstatsd", :require => false
|
|
21
|
+
gem "fork_break", :require => false
|
|
22
|
+
gem "rails", "~> 6.0"
|
|
23
|
+
|
|
24
|
+
gemspec :path => "../"
|
|
@@ -45,6 +45,8 @@ module Routemaster
|
|
|
45
45
|
@retry_attempts = options.fetch :retry_attempts, 2
|
|
46
46
|
@retry_methods = options.fetch :retry_methods, Faraday::Request::Retry::IDEMPOTENT_METHODS
|
|
47
47
|
@retry_exceptions = options.fetch :retry_exceptions, Faraday::Request::Retry::Options.new.exceptions
|
|
48
|
+
@timeout = options.fetch :timeout, nil
|
|
49
|
+
@open_timeout = options.fetch :open_timeout, nil
|
|
48
50
|
|
|
49
51
|
connection # warm up connection so Faraday does all it's magical file loading in the main thread
|
|
50
52
|
end
|
|
@@ -97,11 +99,13 @@ module Routemaster
|
|
|
97
99
|
private
|
|
98
100
|
|
|
99
101
|
def patch_post_or_put(type, url, body, headers)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
APIClientCircuit.new(url).call do
|
|
103
|
+
_wrapped_response _request(
|
|
104
|
+
type,
|
|
105
|
+
url: url,
|
|
106
|
+
body: body,
|
|
107
|
+
headers: headers)
|
|
108
|
+
end
|
|
105
109
|
end
|
|
106
110
|
|
|
107
111
|
def _assert_uri(url)
|
|
@@ -147,8 +151,8 @@ module Routemaster
|
|
|
147
151
|
|
|
148
152
|
f.adapter :typhoeus
|
|
149
153
|
|
|
150
|
-
f.options.timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
|
|
151
|
-
f.options.open_timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
|
|
154
|
+
f.options.timeout = (@timeout || ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1)).to_f
|
|
155
|
+
f.options.open_timeout = (@open_timeout || ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1)).to_f
|
|
152
156
|
f.ssl.verify = ENV.fetch('ROUTEMASTER_CACHE_VERIFY_SSL', 'false') == 'true'
|
|
153
157
|
end
|
|
154
158
|
end
|
|
@@ -31,7 +31,7 @@ module Routemaster
|
|
|
31
31
|
time_window: configuration_setting(@circuit_name, 'ROUTEMASTER_CIRCUIT_BREAKER_TIME_WINDOW', 120).to_i,
|
|
32
32
|
volume_threshold: configuration_setting(@circuit_name, 'ROUTEMASTER_CIRCUIT_BREAKER_VOLUME_THRESHOLD', 50).to_i,
|
|
33
33
|
error_threshold: configuration_setting(@circuit_name, 'ROUTEMASTER_CIRCUIT_BREAKER_ERROR_THRESHOLD', 50).to_i,
|
|
34
|
-
cache: Moneta.new(
|
|
34
|
+
cache: Moneta::Adapters::Redis.new(backend: Config.cache_redis),
|
|
35
35
|
exceptions: [Routemaster::Errors::FatalResource, Faraday::TimeoutError]
|
|
36
36
|
})
|
|
37
37
|
end
|
data/lib/routemaster/drain.rb
CHANGED
data/lib/routemaster/errors.rb
CHANGED
data/routemaster-drain.gemspec
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
require 'core_ext/forwardable'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
if RUBY_VERSION == '2.4.0'
|
|
4
|
+
describe Forwardable do
|
|
5
|
+
class Foo
|
|
6
|
+
extend Forwardable
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
def initialize
|
|
9
|
+
@bar = :bar
|
|
10
|
+
end
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
def_delegator :@bar, :to_s, :qux
|
|
13
|
+
end
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
it 'expect delegation to work' do
|
|
16
|
+
expect(Foo.new.qux).to eq 'bar'
|
|
17
|
+
end
|
|
16
18
|
end
|
|
17
19
|
end
|
|
@@ -12,7 +12,10 @@ describe Routemaster::APIClientCircuit do
|
|
|
12
12
|
context "when enabled" do
|
|
13
13
|
before do
|
|
14
14
|
sb_req
|
|
15
|
-
|
|
15
|
+
allow(ENV).to receive(:fetch).and_call_original
|
|
16
|
+
allow(ENV)
|
|
17
|
+
.to receive(:fetch)
|
|
18
|
+
.with('ROUTEMASTER_ENABLE_API_CLIENT_CIRCUIT', 'NO').and_return('YES')
|
|
16
19
|
end
|
|
17
20
|
|
|
18
21
|
let(:url){ 'http://example.com/foobar' }
|
|
@@ -109,10 +109,38 @@ describe Routemaster::APIClient do
|
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
+
shared_examples 'a circuit breaker wrapped request' do
|
|
113
|
+
let(:fetcher) { described_class.new(retry_attempts: 0) }
|
|
114
|
+
let(:url) { 'https://circuit.example.com/circuit/132' }
|
|
115
|
+
let(:method) { :get }
|
|
116
|
+
|
|
117
|
+
before do
|
|
118
|
+
allow(ENV).to receive(:fetch).and_call_original
|
|
119
|
+
allow(ENV)
|
|
120
|
+
.to receive(:fetch)
|
|
121
|
+
.with('ROUTEMASTER_ENABLE_API_CLIENT_CIRCUIT', 'NO').and_return('YES')
|
|
122
|
+
allow(ENV)
|
|
123
|
+
.to receive(:fetch)
|
|
124
|
+
.with('ROUTEMASTER_CIRCUIT_BREAKER_ERROR_THRESHOLD', 50).and_return('1')
|
|
125
|
+
allow(ENV)
|
|
126
|
+
.to receive(:fetch)
|
|
127
|
+
.with('ROUTEMASTER_CIRCUIT_BREAKER_VOLUME_THRESHOLD', 50).and_return('1')
|
|
128
|
+
|
|
129
|
+
stub_request(method, url).to_timeout
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'trips after the second request' do
|
|
133
|
+
5.times { expect { subject }.to raise_error StandardError }
|
|
134
|
+
expect(a_request(method, url)).to have_been_made.at_most_times(2)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
112
138
|
describe '#get' do
|
|
113
139
|
subject { fetcher.get(url, headers: headers) }
|
|
140
|
+
|
|
114
141
|
it_behaves_like 'a GET requester'
|
|
115
142
|
it_behaves_like 'a wrappable response'
|
|
143
|
+
it_behaves_like 'a circuit breaker wrapped request'
|
|
116
144
|
end
|
|
117
145
|
|
|
118
146
|
describe '#fget' do
|
|
@@ -183,6 +211,9 @@ describe Routemaster::APIClient do
|
|
|
183
211
|
end
|
|
184
212
|
|
|
185
213
|
it_behaves_like 'a wrappable response'
|
|
214
|
+
it_behaves_like 'a circuit breaker wrapped request' do
|
|
215
|
+
let(:method) { :post }
|
|
216
|
+
end
|
|
186
217
|
end
|
|
187
218
|
|
|
188
219
|
describe '#put' do
|
|
@@ -206,6 +237,9 @@ describe Routemaster::APIClient do
|
|
|
206
237
|
end
|
|
207
238
|
|
|
208
239
|
it_behaves_like 'a wrappable response'
|
|
240
|
+
it_behaves_like 'a circuit breaker wrapped request' do
|
|
241
|
+
let(:method) { :put }
|
|
242
|
+
end
|
|
209
243
|
end
|
|
210
244
|
|
|
211
245
|
context 'when request times out' do
|
|
@@ -282,6 +316,9 @@ describe Routemaster::APIClient do
|
|
|
282
316
|
end
|
|
283
317
|
|
|
284
318
|
it_behaves_like 'a wrappable response'
|
|
319
|
+
it_behaves_like 'a circuit breaker wrapped request' do
|
|
320
|
+
let(:method) { :patch }
|
|
321
|
+
end
|
|
285
322
|
end
|
|
286
323
|
|
|
287
324
|
context 'when request times out' do
|
|
@@ -21,7 +21,7 @@ describe Routemaster::APIClient do
|
|
|
21
21
|
let(:port) { 8080 }
|
|
22
22
|
let(:service) do
|
|
23
23
|
TestServer.new(port) do |server|
|
|
24
|
-
[400, 401, 403, 404, 405, 409, 412, 413, 429, 500, 503].each do |status_code|
|
|
24
|
+
[400, 401, 403, 404, 405, 409, 412, 413, 429, 500, 502, 503].each do |status_code|
|
|
25
25
|
server.mount_proc "/#{status_code}" do |req, res|
|
|
26
26
|
res.status = status_code
|
|
27
27
|
res.body = { field: 'test' }.to_json
|
|
@@ -163,6 +163,10 @@ describe Routemaster::APIClient do
|
|
|
163
163
|
expect { perform.(host + '/500') }.to raise_error(Routemaster::Errors::FatalResource)
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
+
it 'raises a BadGateway on 502' do
|
|
167
|
+
expect { perform.(host + '/502') }.to raise_error(Routemaster::Errors::BadGateway)
|
|
168
|
+
end
|
|
169
|
+
|
|
166
170
|
it 'raises a ServiceNotAvailable on 503' do
|
|
167
171
|
expect { perform.(host + '/503') }.to raise_error(Routemaster::Errors::ServiceNotAvailable)
|
|
168
172
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: routemaster-drain
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Julien Letessier
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-12-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -150,7 +150,21 @@ dependencies:
|
|
|
150
150
|
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
|
-
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: moneta
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - '='
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: 1.0.0
|
|
160
|
+
type: :runtime
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - '='
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: 1.0.0
|
|
167
|
+
description:
|
|
154
168
|
email:
|
|
155
169
|
- julien.letessier@gmail.com
|
|
156
170
|
executables: []
|
|
@@ -179,6 +193,7 @@ files:
|
|
|
179
193
|
- gemfiles/rails_3.gemfile
|
|
180
194
|
- gemfiles/rails_4.gemfile
|
|
181
195
|
- gemfiles/rails_5.gemfile
|
|
196
|
+
- gemfiles/rails_6.gemfile
|
|
182
197
|
- lib/core_ext/forwardable.rb
|
|
183
198
|
- lib/routemaster/api_client.rb
|
|
184
199
|
- lib/routemaster/api_client_circuit.rb
|
|
@@ -271,7 +286,7 @@ homepage: http://github.com/deliveroo/routemaster-drain
|
|
|
271
286
|
licenses:
|
|
272
287
|
- MIT
|
|
273
288
|
metadata: {}
|
|
274
|
-
post_install_message:
|
|
289
|
+
post_install_message:
|
|
275
290
|
rdoc_options: []
|
|
276
291
|
require_paths:
|
|
277
292
|
- lib
|
|
@@ -286,8 +301,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
286
301
|
- !ruby/object:Gem::Version
|
|
287
302
|
version: '0'
|
|
288
303
|
requirements: []
|
|
289
|
-
rubygems_version: 3.0.
|
|
290
|
-
signing_key:
|
|
304
|
+
rubygems_version: 3.0.9
|
|
305
|
+
signing_key:
|
|
291
306
|
specification_version: 4
|
|
292
307
|
summary: Event receiver for the Routemaster bus
|
|
293
308
|
test_files:
|