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 {
35
35
36
36
if status. is_success ( ) {
37
37
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
+
38
45
Ok ( response)
39
46
} else {
40
47
Err ( VssError :: new ( status, payload) )
Original file line number Diff line number Diff line change @@ -173,6 +173,27 @@ mod tests {
173
173
mock_server. expect ( 1 ) . assert ( ) ;
174
174
}
175
175
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
+
176
197
#[ tokio:: test]
177
198
async fn test_invalid_request_err_handling ( ) {
178
199
let base_url = mockito:: server_url ( ) ;
You can’t perform that action at this time.
0 commit comments