@@ -255,6 +255,56 @@ mod tests {
255
255
mock_server. expect ( 4 ) . assert ( ) ;
256
256
}
257
257
258
+ #[ tokio:: test]
259
+ async fn test_auth_err_handling ( ) {
260
+ let base_url = mockito:: server_url ( ) ;
261
+ let vss_client = VssClient :: new ( & base_url, retry_policy ( ) ) ;
262
+
263
+ // Invalid Request Error
264
+ let error_response =
265
+ ErrorResponse { error_code : ErrorCode :: AuthException . into ( ) , message : "AuthException" . to_string ( ) } ;
266
+ let mock_server = mockito:: mock ( "POST" , Matcher :: Any )
267
+ . with_status ( 400 )
268
+ . with_body ( & error_response. encode_to_vec ( ) )
269
+ . create ( ) ;
270
+
271
+ let get_result = vss_client
272
+ . get_object ( & GetObjectRequest { store_id : "store" . to_string ( ) , key : "k1" . to_string ( ) } )
273
+ . await ;
274
+ assert ! ( matches!( get_result. unwrap_err( ) , VssError :: AuthError { .. } ) ) ;
275
+
276
+ let put_result = vss_client
277
+ . put_object ( & PutObjectRequest {
278
+ store_id : "store" . to_string ( ) ,
279
+ global_version : Some ( 4 ) ,
280
+ transaction_items : vec ! [ KeyValue { key: "k1" . to_string( ) , version: 2 , value: b"k1v3" . to_vec( ) } ] ,
281
+ delete_items : vec ! [ ] ,
282
+ } )
283
+ . await ;
284
+ assert ! ( matches!( put_result. unwrap_err( ) , VssError :: AuthError { .. } ) ) ;
285
+
286
+ let delete_result = vss_client
287
+ . delete_object ( & DeleteObjectRequest {
288
+ store_id : "store" . to_string ( ) ,
289
+ key_value : Some ( KeyValue { key : "k1" . to_string ( ) , version : 2 , value : b"k1v3" . to_vec ( ) } ) ,
290
+ } )
291
+ . await ;
292
+ assert ! ( matches!( delete_result. unwrap_err( ) , VssError :: AuthError { .. } ) ) ;
293
+
294
+ let list_result = vss_client
295
+ . list_key_versions ( & ListKeyVersionsRequest {
296
+ store_id : "store" . to_string ( ) ,
297
+ page_size : Some ( 5 ) ,
298
+ page_token : None ,
299
+ key_prefix : Some ( "k" . into ( ) ) ,
300
+ } )
301
+ . await ;
302
+ assert ! ( matches!( list_result. unwrap_err( ) , VssError :: AuthError { .. } ) ) ;
303
+
304
+ // Verify 4 requests hit the server
305
+ mock_server. expect ( 4 ) . assert ( ) ;
306
+ }
307
+
258
308
#[ tokio:: test]
259
309
async fn test_conflict_err_handling ( ) {
260
310
let base_url = mockito:: server_url ( ) ;
@@ -401,7 +451,10 @@ mod tests {
401
451
. skip_retry_on_error ( |e| {
402
452
matches ! (
403
453
e,
404
- VssError :: NoSuchKeyError ( ..) | VssError :: InvalidRequestError ( ..) | VssError :: ConflictError ( ..)
454
+ VssError :: NoSuchKeyError ( ..)
455
+ | VssError :: InvalidRequestError ( ..)
456
+ | VssError :: ConflictError ( ..)
457
+ | VssError :: AuthError ( ..)
405
458
)
406
459
} )
407
460
}
0 commit comments