File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -35,6 +35,13 @@ impl VssClient {
3535
3636 if status. is_success ( ) {
3737 let response = GetObjectResponse :: decode ( & payload[ ..] ) ?;
38+
39+ if response. value . is_none ( ) {
40+ return Err ( VssError :: InternalServerError (
41+ "VSS Server API Violation, expected value in GetObjectResponse but found none" . to_string ( ) ,
42+ ) ) ;
43+ }
44+
3845 Ok ( response)
3946 } else {
4047 Err ( VssError :: new ( status, payload) )
Original file line number Diff line number Diff line change @@ -173,6 +173,27 @@ mod tests {
173173 mock_server. expect ( 1 ) . assert ( ) ;
174174 }
175175
176+ #[ tokio:: test]
177+ async fn test_get_response_without_value ( ) {
178+ let base_url = mockito:: server_url ( ) ;
179+ let vss_client = VssClient :: new ( & base_url) ;
180+
181+ // GetObjectResponse with None value
182+ let mock_response = GetObjectResponse { value : None , ..Default :: default ( ) } ;
183+ let mock_server = mockito:: mock ( "POST" , GET_OBJECT_ENDPOINT )
184+ . with_status ( 200 )
185+ . with_body ( & mock_response. encode_to_vec ( ) )
186+ . create ( ) ;
187+
188+ let get_result = vss_client
189+ . get_object ( & GetObjectRequest { store_id : "store" . to_string ( ) , key : "k1" . to_string ( ) } )
190+ . await ;
191+ assert ! ( matches!( get_result. unwrap_err( ) , VssError :: InternalServerError { .. } ) ) ;
192+
193+ // Verify 1 request hit the server
194+ mock_server. expect ( 1 ) . assert ( ) ;
195+ }
196+
176197 #[ tokio:: test]
177198 async fn test_invalid_request_err_handling ( ) {
178199 let base_url = mockito:: server_url ( ) ;
You can’t perform that action at this time.
0 commit comments