18
18
*/
19
19
use elasticsearch:: {
20
20
auth:: Credentials ,
21
- cat:: { CatSnapshotsParts , CatTemplatesParts } ,
21
+ cat:: CatTemplatesParts ,
22
22
cert:: CertificateValidation ,
23
23
cluster:: ClusterHealthParts ,
24
24
http:: {
@@ -27,7 +27,10 @@ use elasticsearch::{
27
27
Method , StatusCode ,
28
28
} ,
29
29
ilm:: IlmRemovePolicyParts ,
30
- indices:: { IndicesDeleteParts , IndicesDeleteTemplateParts , IndicesRefreshParts } ,
30
+ indices:: {
31
+ IndicesDeleteIndexTemplateParts , IndicesDeleteParts , IndicesDeleteTemplateParts ,
32
+ IndicesRefreshParts ,
33
+ } ,
31
34
ml:: {
32
35
MlCloseJobParts , MlDeleteDatafeedParts , MlDeleteJobParts , MlGetDatafeedsParts ,
33
36
MlGetJobsParts , MlStopDatafeedParts ,
@@ -138,49 +141,55 @@ pub async fn read_response(
138
141
/// general setup step for an OSS yaml test
139
142
pub async fn general_oss_setup ( ) -> Result < ( ) , Error > {
140
143
let client = get ( ) ;
144
+ delete_data_streams ( client) . await ?;
141
145
delete_indices ( client) . await ?;
142
146
delete_templates ( client) . await ?;
147
+ delete_snapshots ( client) . await ?;
148
+
149
+ Ok ( ( ) )
150
+ }
143
151
144
- let cat_snapshot_response = client
152
+ pub async fn delete_snapshots ( client : & Elasticsearch ) -> Result < ( ) , Error > {
153
+ let cat_repo_response = client
145
154
. cat ( )
146
- . snapshots ( CatSnapshotsParts :: None )
147
- . h ( & [ "id" , "repository" ] )
155
+ . repositories ( )
156
+ . h ( & [ "id" ] )
148
157
. send ( )
158
+ . await ?
159
+ . error_for_status_code ( ) ?
160
+ . text ( )
149
161
. await ?;
150
162
151
- if cat_snapshot_response . status_code ( ) . is_success ( ) {
152
- let cat_snapshot_text = cat_snapshot_response . text ( ) . await ? ;
163
+ if cat_repo_response . len ( ) > 0 {
164
+ let repositories : Vec < & str > = cat_repo_response . split_terminator ( '\n' ) . collect ( ) ;
153
165
154
- let all_snapshots: Vec < ( & str , & str ) > = cat_snapshot_text
155
- . split ( '\n' )
156
- . map ( |s| s. split ( ' ' ) . collect :: < Vec < & str > > ( ) )
157
- . filter ( |s| s. len ( ) == 2 )
158
- . map ( |s| ( s[ 0 ] . trim ( ) , s[ 1 ] . trim ( ) ) )
159
- . filter ( |( id, repo) | !id. is_empty ( ) && !repo. is_empty ( ) )
160
- . collect ( ) ;
161
-
162
- for ( id, repo) in all_snapshots {
163
- let _snapshot_response = client
166
+ // Delete snapshots in each repository
167
+ for repo in repositories {
168
+ let delete_snapshots_response = client
164
169
. snapshot ( )
165
- . delete ( SnapshotDeleteParts :: RepositorySnapshot ( & repo, & [ & id ] ) )
170
+ . delete ( SnapshotDeleteParts :: RepositorySnapshot ( repo, & [ "*" ] ) )
166
171
. send ( )
167
172
. await ?;
173
+
174
+ assert_response_success ! ( delete_snapshots_response) ;
168
175
}
169
- }
170
176
171
- let _delete_repo_response = client
172
- . snapshot ( )
173
- . delete_repository ( SnapshotDeleteRepositoryParts :: Repository ( & [ "*" ] ) )
174
- . send ( )
175
- . await ?;
177
+ // Delete all snapshot repositories
178
+ let delete_repo_response = client
179
+ . snapshot ( )
180
+ . delete_repository ( SnapshotDeleteRepositoryParts :: Repository ( & [ "*" ] ) )
181
+ . send ( )
182
+ . await ?;
183
+
184
+ assert_response_success ! ( delete_repo_response) ;
185
+ }
176
186
177
187
Ok ( ( ) )
178
188
}
179
189
180
190
/// general setup step for an xpack yaml test
181
191
pub async fn general_xpack_setup ( ) -> Result < ( ) , Error > {
182
192
let client = get ( ) ;
183
- delete_templates ( client) . await ?;
184
193
185
194
let _delete_watch_response = client
186
195
. watcher ( )
@@ -193,22 +202,26 @@ pub async fn general_xpack_setup() -> Result<(), Error> {
193
202
delete_privileges ( client) . await ?;
194
203
stop_and_delete_datafeeds ( client) . await ?;
195
204
196
- let _ = client
205
+ let response = client
197
206
. ilm ( )
198
207
. remove_policy ( IlmRemovePolicyParts :: Index ( "_all" ) )
199
208
. send ( )
200
209
. await ?;
201
210
211
+ assert_response_success ! ( response) ;
212
+
202
213
close_and_delete_jobs ( client) . await ?;
203
214
204
215
// TODO: stop and delete rollup jobs once implemented in the client
205
216
206
217
cancel_tasks ( client) . await ?;
207
218
stop_and_delete_transforms ( client) . await ?;
208
219
wait_for_yellow_status ( client) . await ?;
220
+ delete_data_streams ( client) . await ?;
209
221
delete_indices ( client) . await ?;
222
+ delete_templates ( client) . await ?;
210
223
211
- let _ = client
224
+ let response = client
212
225
. security ( )
213
226
. put_user ( SecurityPutUserParts :: Username ( "x_pack_rest_user" ) )
214
227
. body ( json ! ( {
@@ -218,7 +231,9 @@ pub async fn general_xpack_setup() -> Result<(), Error> {
218
231
. send ( )
219
232
. await ?;
220
233
221
- let _ = client
234
+ assert_response_success ! ( response) ;
235
+
236
+ let response = client
222
237
. indices ( )
223
238
. refresh ( IndicesRefreshParts :: Index ( & [ "_all" ] ) )
224
239
. expand_wildcards ( & [
@@ -229,6 +244,8 @@ pub async fn general_xpack_setup() -> Result<(), Error> {
229
244
. send ( )
230
245
. await ?;
231
246
247
+ assert_response_success ! ( response) ;
248
+
232
249
wait_for_yellow_status ( client) . await ?;
233
250
234
251
Ok ( ( ) )
@@ -246,7 +263,7 @@ async fn wait_for_yellow_status(client: &Elasticsearch) -> Result<(), Error> {
246
263
Ok ( ( ) )
247
264
}
248
265
249
- async fn delete_indices ( client : & Elasticsearch ) -> Result < ( ) , Error > {
266
+ async fn delete_data_streams ( client : & Elasticsearch ) -> Result < ( ) , Error > {
250
267
// Hand-crafted request as the indices.delete_data_stream spec doesn't yet have the
251
268
// "expand_wildcards" parameter that is needed to delete ILM data streams
252
269
//
@@ -276,6 +293,10 @@ async fn delete_indices(client: &Elasticsearch) -> Result<(), Error> {
276
293
277
294
assert_response_success ! ( delete_response) ;
278
295
296
+ Ok ( ( ) )
297
+ }
298
+
299
+ async fn delete_indices ( client : & Elasticsearch ) -> Result < ( ) , Error > {
279
300
let delete_response = client
280
301
. indices ( )
281
302
. delete ( IndicesDeleteParts :: Index ( & [ "*" ] ) )
@@ -302,17 +323,21 @@ async fn stop_and_delete_transforms(client: &Elasticsearch) -> Result<(), Error>
302
323
303
324
for transform in transforms_response[ "transforms" ] . as_array ( ) . unwrap ( ) {
304
325
let id = transform[ "id" ] . as_str ( ) . unwrap ( ) ;
305
- let _ = client
326
+ let response = client
306
327
. transform ( )
307
328
. stop_transform ( TransformStopTransformParts :: TransformId ( id) )
308
329
. send ( )
309
330
. await ?;
310
331
311
- let _ = client
332
+ assert_response_success ! ( response) ;
333
+
334
+ let response = client
312
335
. transform ( )
313
336
. delete_transform ( TransformDeleteTransformParts :: TransformId ( id) )
314
337
. send ( )
315
338
. await ?;
339
+
340
+ assert_response_success ! ( response) ;
316
341
}
317
342
318
343
Ok ( ( ) )
@@ -325,11 +350,13 @@ async fn cancel_tasks(client: &Elasticsearch) -> Result<(), Error> {
325
350
for ( task_id, task) in nodes[ "tasks" ] . as_object ( ) . unwrap ( ) {
326
351
if let Some ( b) = task[ "cancellable" ] . as_bool ( ) {
327
352
if b {
328
- let _ = client
353
+ let response = client
329
354
. tasks ( )
330
355
. cancel ( TasksCancelParts :: TaskId ( task_id) )
331
356
. send ( )
332
357
. await ?;
358
+
359
+ assert_response_success ! ( response) ;
333
360
}
334
361
}
335
362
}
@@ -339,6 +366,8 @@ async fn cancel_tasks(client: &Elasticsearch) -> Result<(), Error> {
339
366
}
340
367
341
368
async fn delete_templates ( client : & Elasticsearch ) -> Result < ( ) , Error > {
369
+ // There are "legacy templates and "new templates"
370
+
342
371
let cat_template_response = client
343
372
. cat ( )
344
373
. templates ( CatTemplatesParts :: Name ( "*" ) )
@@ -349,16 +378,32 @@ async fn delete_templates(client: &Elasticsearch) -> Result<(), Error> {
349
378
. await ?;
350
379
351
380
let all_templates: Vec < & str > = cat_template_response
352
- . split ( '\n' )
353
- . filter ( |s| !s. is_empty ( ) && !s . starts_with ( '.' ) && s != & "security-audit-log" )
381
+ . split_terminator ( '\n' )
382
+ . filter ( |s| !s. starts_with ( '.' ) && s != & "security-audit-log" )
354
383
. collect ( ) ;
355
384
356
385
for template in all_templates {
357
- let _delete_template_response = client
386
+ if template == "ilm-history" {
387
+ // We may need to extend this to mimic ESRestTestCase.isXPackTemplate() from the ES
388
+ // test harness
389
+ continue ;
390
+ }
391
+
392
+ let mut delete_template_response = client
358
393
. indices ( )
359
- . delete_template ( IndicesDeleteTemplateParts :: Name ( & template) )
394
+ . delete_index_template ( IndicesDeleteIndexTemplateParts :: Name ( & template) )
360
395
. send ( )
361
396
. await ?;
397
+
398
+ if delete_template_response. status_code ( ) . as_u16 ( ) == 404 {
399
+ // Certainly an old-style template
400
+ delete_template_response = client
401
+ . indices ( )
402
+ . delete_template ( IndicesDeleteTemplateParts :: Name ( & template) )
403
+ . send ( )
404
+ . await ?;
405
+ }
406
+ assert_response_success ! ( delete_template_response) ;
362
407
}
363
408
364
409
Ok ( ( ) )
@@ -376,11 +421,13 @@ async fn delete_users(client: &Elasticsearch) -> Result<(), Error> {
376
421
for ( k, v) in users_response. as_object ( ) . unwrap ( ) {
377
422
if let Some ( b) = v[ "metadata" ] [ "_reserved" ] . as_bool ( ) {
378
423
if !b {
379
- let _ = client
424
+ let response = client
380
425
. security ( )
381
426
. delete_user ( SecurityDeleteUserParts :: Username ( k) )
382
427
. send ( )
383
428
. await ?;
429
+
430
+ assert_response_success ! ( response) ;
384
431
}
385
432
}
386
433
}
@@ -400,11 +447,13 @@ async fn delete_roles(client: &Elasticsearch) -> Result<(), Error> {
400
447
for ( k, v) in roles_response. as_object ( ) . unwrap ( ) {
401
448
if let Some ( b) = v[ "metadata" ] [ "_reserved" ] . as_bool ( ) {
402
449
if !b {
403
- let _ = client
450
+ let response = client
404
451
. security ( )
405
452
. delete_role ( SecurityDeleteRoleParts :: Name ( k) )
406
453
. send ( )
407
454
. await ?;
455
+
456
+ assert_response_success ! ( response) ;
408
457
}
409
458
}
410
459
}
@@ -424,11 +473,13 @@ async fn delete_privileges(client: &Elasticsearch) -> Result<(), Error> {
424
473
for ( k, v) in privileges_response. as_object ( ) . unwrap ( ) {
425
474
if let Some ( b) = v[ "metadata" ] [ "_reserved" ] . as_bool ( ) {
426
475
if !b {
427
- let _ = client
476
+ let response = client
428
477
. security ( )
429
478
. delete_privileges ( SecurityDeletePrivilegesParts :: ApplicationName ( k, "_all" ) )
430
479
. send ( )
431
480
. await ?;
481
+
482
+ assert_response_success ! ( response) ;
432
483
}
433
484
}
434
485
}
@@ -437,12 +488,14 @@ async fn delete_privileges(client: &Elasticsearch) -> Result<(), Error> {
437
488
}
438
489
439
490
async fn stop_and_delete_datafeeds ( client : & Elasticsearch ) -> Result < ( ) , Error > {
440
- let _stop_data_feed_response = client
491
+ let stop_data_feed_response = client
441
492
. ml ( )
442
493
. stop_datafeed ( MlStopDatafeedParts :: DatafeedId ( "_all" ) )
443
494
. send ( )
444
495
. await ?;
445
496
497
+ assert_response_success ! ( stop_data_feed_response) ;
498
+
446
499
let get_data_feeds_response = client
447
500
. ml ( )
448
501
. get_datafeeds ( MlGetDatafeedsParts :: None )
@@ -464,12 +517,14 @@ async fn stop_and_delete_datafeeds(client: &Elasticsearch) -> Result<(), Error>
464
517
}
465
518
466
519
async fn close_and_delete_jobs ( client : & Elasticsearch ) -> Result < ( ) , Error > {
467
- let _ = client
520
+ let response = client
468
521
. ml ( )
469
522
. close_job ( MlCloseJobParts :: JobId ( "_all" ) )
470
523
. send ( )
471
524
. await ?;
472
525
526
+ assert_response_success ! ( response) ;
527
+
473
528
let get_jobs_response = client
474
529
. ml ( )
475
530
. get_jobs ( MlGetJobsParts :: JobId ( "_all" ) )
@@ -480,11 +535,13 @@ async fn close_and_delete_jobs(client: &Elasticsearch) -> Result<(), Error> {
480
535
481
536
for job in get_jobs_response[ "jobs" ] . as_array ( ) . unwrap ( ) {
482
537
let id = job[ "job_id" ] . as_str ( ) . unwrap ( ) ;
483
- let _ = client
538
+ let response = client
484
539
. ml ( )
485
540
. delete_job ( MlDeleteJobParts :: JobId ( id) )
486
541
. send ( )
487
542
. await ?;
543
+
544
+ assert_response_success ! ( response) ;
488
545
}
489
546
490
547
Ok ( ( ) )
0 commit comments