20
20
21
21
describe 'Elasticsearch: Validation' do
22
22
let ( :host ) { 'http://localhost:9200' }
23
- let ( :verify_request_stub ) do
24
- stub_request ( :get , host )
25
- . to_return ( status : status , body : body , headers : headers )
26
- end
27
23
let ( :count_request_stub ) do
28
24
stub_request ( :get , "#{ host } /_count" )
29
- . to_return ( status : 200 , body : nil , headers : { } )
25
+ . to_return ( status : status , body : nil , headers : headers )
30
26
end
31
27
let ( :status ) { 200 }
32
- let ( :body ) { { } . to_json }
28
+ let ( :body ) { nil }
29
+ let ( :headers ) { { } }
33
30
let ( :client ) { Elasticsearch ::Client . new }
34
- let ( :headers ) do
35
- { 'content-type' => 'application/json' }
36
- end
37
-
38
- def error_requests_and_expectations ( message = Elasticsearch ::NOT_ELASTICSEARCH_WARNING )
39
- expect { client . count } . to raise_error Elasticsearch ::UnsupportedProductError , message
40
- assert_requested :get , host
41
- assert_not_requested :post , "#{ host } /_count"
42
- expect { client . cluster . health } . to raise_error Elasticsearch ::UnsupportedProductError , message
43
- expect ( client . instance_variable_get ( '@verified' ) ) . to be false
44
- expect { client . cluster . health } . to raise_error Elasticsearch ::UnsupportedProductError , message
45
- end
46
-
47
- def valid_requests_and_expectations
48
- expect ( client . instance_variable_get ( '@verified' ) ) . to be false
49
- assert_not_requested :get , host
50
-
51
- client . count
52
- expect ( client . instance_variable_get ( '@verified' ) )
53
- assert_requested :get , host
54
- assert_requested :get , "#{ host } /_count"
55
- end
56
31
57
32
context 'When Elasticsearch replies with status 401' do
58
33
let ( :status ) { 401 }
59
- let ( :body ) { { } . to_json }
60
34
61
35
it 'Verifies the request but shows a warning' do
62
36
stderr = $stderr
63
37
fake_stderr = StringIO . new
64
38
$stderr = fake_stderr
65
-
66
- verify_request_stub
39
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be false
67
40
count_request_stub
68
- valid_requests_and_expectations
41
+ expect do
42
+ client . count
43
+ end . to raise_error Elastic ::Transport ::Transport ::Errors ::Unauthorized
44
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be true
69
45
70
46
fake_stderr . rewind
71
47
expect ( fake_stderr . string ) . to eq ( "#{ Elasticsearch ::SECURITY_PRIVILEGES_VALIDATION_WARNING } \n " )
@@ -76,16 +52,18 @@ def valid_requests_and_expectations
76
52
77
53
context 'When Elasticsearch replies with status 403' do
78
54
let ( :status ) { 403 }
79
- let ( :body ) { { } . to_json }
80
55
81
56
it 'Verifies the request but shows a warning' do
82
57
stderr = $stderr
83
58
fake_stderr = StringIO . new
84
59
$stderr = fake_stderr
85
60
86
- verify_request_stub
61
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be false
87
62
count_request_stub
88
- valid_requests_and_expectations
63
+ expect do
64
+ client . count
65
+ end . to raise_error Elastic ::Transport ::Transport ::Errors ::Forbidden
66
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be true
89
67
90
68
fake_stderr . rewind
91
69
expect ( fake_stderr . string ) . to eq ( "#{ Elasticsearch ::SECURITY_PRIVILEGES_VALIDATION_WARNING } \n " )
@@ -96,17 +74,17 @@ def valid_requests_and_expectations
96
74
97
75
context 'When Elasticsearch replies with status 413' do
98
76
let ( :status ) { 413 }
99
- let ( :body ) { { } . to_json }
100
77
101
78
it 'Verifies the request and shows a warning' do
102
79
stderr = $stderr
103
80
fake_stderr = StringIO . new
104
81
$stderr = fake_stderr
105
82
106
83
expect ( client . instance_variable_get ( '@verified' ) ) . to be false
107
- assert_not_requested :get , host
108
- verify_request_stub
109
- expect { client . info } . to raise_error Elastic ::Transport ::Transport ::Errors ::RequestEntityTooLarge
84
+ count_request_stub
85
+ expect do
86
+ client . count
87
+ end . to raise_error Elastic ::Transport ::Transport ::Errors ::RequestEntityTooLarge
110
88
expect ( client . instance_variable_get ( '@verified' ) ) . to be true
111
89
112
90
fake_stderr . rewind
@@ -127,10 +105,10 @@ def valid_requests_and_expectations
127
105
$stderr = fake_stderr
128
106
129
107
expect ( client . instance_variable_get ( '@verified' ) ) . to be false
130
- assert_not_requested :get , host
131
- verify_request_stub
132
- expect { client . info } . to raise_error Elastic :: Transport :: Transport :: Errors :: ServiceUnavailable
133
- assert_not_requested :post , " #{ host } /_count"
108
+ count_request_stub
109
+ expect do
110
+ client . count
111
+ end . to raise_error Elastic :: Transport :: Transport :: Errors :: ServiceUnavailable
134
112
expect ( client . instance_variable_get ( '@verified' ) ) . to be false
135
113
136
114
fake_stderr . rewind
@@ -147,156 +125,24 @@ def valid_requests_and_expectations
147
125
end
148
126
end
149
127
128
+ context 'When the header is present' do
129
+ let ( :headers ) { { 'X-Elastic-Product' => 'Elasticsearch' } }
150
130
151
- context 'When the Elasticsearch version is >= 8.0.0' do
152
- context 'With a valid Elasticsearch response' do
153
- let ( :body ) { { 'version' => { 'number' => '8.0.0' } } . to_json }
154
- let ( :headers ) do
155
- {
156
- 'X-Elastic-Product' => 'Elasticsearch' ,
157
- 'content-type' => 'json'
158
- }
159
- end
160
-
161
- it 'Makes requests and passes validation' do
162
- verify_request_stub
163
- count_request_stub
164
-
165
- valid_requests_and_expectations
166
- end
167
- end
168
-
169
- context 'When the header is not present' do
170
- it 'Fails validation' do
171
- verify_request_stub
172
-
173
- expect ( client . instance_variable_get ( '@verified' ) ) . to be false
174
- assert_not_requested :get , host
175
-
176
- error_requests_and_expectations
177
- end
178
- end
179
- end
180
-
181
- context 'When the Elasticsearch version is >= 8.1.0' do
182
- context 'With a valid Elasticsearch response' do
183
- let ( :body ) { { 'version' => { 'number' => '8.1.0' } } . to_json }
184
- let ( :headers ) do
185
- {
186
- 'X-Elastic-Product' => 'Elasticsearch' ,
187
- 'content-type' => 'json'
188
- }
189
- end
190
-
191
- it 'Makes requests and passes validation' do
192
- verify_request_stub
193
- count_request_stub
194
-
195
- valid_requests_and_expectations
196
- end
197
- end
198
-
199
- context 'When the header is not present' do
200
- it 'Fails validation' do
201
- verify_request_stub
202
-
203
- expect ( client . instance_variable_get ( '@verified' ) ) . to be false
204
- assert_not_requested :get , host
205
-
206
- error_requests_and_expectations
207
- end
208
- end
209
- end
210
-
211
-
212
- context 'When the Elasticsearch version is 8.0.0.pre' do
213
- context 'With a valid Elasticsearch response' do
214
- let ( :body ) { { 'version' => { 'number' => '8.0.0.pre' } } . to_json }
215
- let ( :headers ) do
216
- {
217
- 'X-Elastic-Product' => 'Elasticsearch' ,
218
- 'content-type' => 'json'
219
- }
220
- end
221
-
222
- it 'Makes requests and passes validation' do
223
- verify_request_stub
224
- count_request_stub
225
-
226
- valid_requests_and_expectations
227
- end
228
- end
229
-
230
- context 'When the header is not present' do
231
- it 'Fails validation' do
232
- verify_request_stub
233
-
234
- expect ( client . instance_variable_get ( '@verified' ) ) . to be false
235
- assert_not_requested :get , host
236
-
237
- error_requests_and_expectations
238
- end
239
- end
240
- end
241
-
242
- context 'When the version is 8.0.0-SNAPSHOT' do
243
- let ( :body ) { { 'version' => { 'number' => '8.0.0-SNAPSHOT' } } . to_json }
244
-
245
- context 'When the header is not present' do
246
- it 'Fails validation' do
247
- verify_request_stub
248
- count_request_stub
249
-
250
- error_requests_and_expectations
251
- end
252
- end
253
-
254
- context 'With a valid Elasticsearch response' do
255
- let ( :headers ) do
256
- {
257
- 'X-Elastic-Product' => 'Elasticsearch' ,
258
- 'content-type' => 'json'
259
- }
260
- end
261
-
262
- it 'Makes requests and passes validation' do
263
- verify_request_stub
264
- count_request_stub
265
-
266
- valid_requests_and_expectations
267
- end
268
- end
269
- end
270
-
271
- context 'When Elasticsearch version is < 8.0.0' do
272
- let ( :body ) { { 'version' => { 'number' => '7.16.0' } } . to_json }
273
-
274
- it 'Raises an exception and client doesnae work' do
275
- verify_request_stub
276
- error_requests_and_expectations
277
- end
278
- end
279
-
280
- context 'When there is no version data' do
281
- let ( :body ) { { } . to_json }
282
- it 'Raises an exception and client doesnae work' do
283
- verify_request_stub
284
- error_requests_and_expectations
131
+ it 'Makes requests and passes validation' do
132
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be false
133
+ count_request_stub
134
+ client . count
135
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be true
285
136
end
286
137
end
287
138
288
- context 'When doing a yaml content-type request' do
289
- let ( :client ) do
290
- Elasticsearch ::Client . new ( transport_options : { headers : { accept : 'application/yaml' , content_type : 'application/yaml' } } )
291
- end
292
-
293
- let ( :headers ) { { 'content-type' => 'application/yaml' , 'X-Elastic-Product' => 'Elasticsearch' } }
294
- let ( :body ) { "---\n version:\n number: \" 8.0.0-SNAPSHOT\" \n " }
295
-
296
- it 'validates' do
297
- verify_request_stub
298
- count_request_stub
299
- valid_requests_and_expectations
139
+ context 'When the header is not present' do
140
+ it 'Fails validation' do
141
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be false
142
+ stub_request ( :get , "#{ host } /_cluster/health" )
143
+ . to_return ( status : status , body : nil , headers : { } )
144
+ expect { client . cluster . health } . to raise_error Elasticsearch ::UnsupportedProductError , Elasticsearch ::NOT_ELASTICSEARCH_WARNING
145
+ expect ( client . instance_variable_get ( '@verified' ) ) . to be false
300
146
end
301
147
end
302
148
end
0 commit comments