@@ -255,6 +255,56 @@ mod tests {
255255 mock_server. expect ( 4 ) . assert ( ) ;
256256 }
257257
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 ( 401 )
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+
258308 #[ tokio:: test]
259309 async fn test_conflict_err_handling ( ) {
260310 let base_url = mockito:: server_url ( ) ;
@@ -401,7 +451,10 @@ mod tests {
401451 . skip_retry_on_error ( |e| {
402452 matches ! (
403453 e,
404- VssError :: NoSuchKeyError ( ..) | VssError :: InvalidRequestError ( ..) | VssError :: ConflictError ( ..)
454+ VssError :: NoSuchKeyError ( ..)
455+ | VssError :: InvalidRequestError ( ..)
456+ | VssError :: ConflictError ( ..)
457+ | VssError :: AuthError ( ..)
405458 )
406459 } )
407460 }
0 commit comments