Skip to content

Commit 9def123

Browse files
alex-aparinrobot-piglet
authored andcommitted
fix s3 mock: compatibility of response body for aws sdk clients
AWS S3 storage does not specify strictly content of body for several endpoints like [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject_ResponseSyntax) or [DeleteObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html#API_DeleteObject_ResponseSyntax). But I have encountered behaviour when some s3 clients like `aws sdk cpp` try to parse not empty body and give `xml parsing text error`. In this pr I have removed `OK` text from body for 200 responses. List of affected methods: 1. PutObject 2. DeleteObject 3. CopyObject 4. HeadObject --- Pull Request resolved: #1055 commit_hash:e05725086ea4261f0af9ec785865d8b5718bfcb9
1 parent 6c3674e commit 9def123

File tree

1 file changed

+8
-4
lines changed
  • testsuite/pytest_plugins/pytest_userver

1 file changed

+8
-4
lines changed

testsuite/pytest_plugins/pytest_userver/s3api.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ def put_object(self, request):
168168
user_defined_meta[meta_key] = meta_value
169169

170170
meta = bucket_storage.put_object(key, data, user_defined_meta)
171-
return self._mockserver.make_response('OK', 200, headers=meta)
171+
# Some clients like aws sdk cpp can parse not empty body
172+
return self._mockserver.make_response('', 200, headers=meta)
172173

173174
def copy_object(self, request):
174175
key = self._extract_key(request)
@@ -184,7 +185,8 @@ def copy_object(self, request):
184185
src_data = src_obj.data
185186
src_meta = src_obj.meta
186187
meta = dst_bucket_storage.put_object(key, src_data, src_meta)
187-
return self._mockserver.make_response('OK', 200, headers=meta)
188+
# Some clients like aws sdk cpp can parse not empty body
189+
return self._mockserver.make_response('', 200, headers=meta)
188190

189191
def get_objects(self, request):
190192
prefix = request.query['prefix']
@@ -218,7 +220,8 @@ def delete_object(self, request):
218220

219221
bucket_storage.delete_object(key)
220222
# S3 always return 204, even if file doesn't exist
221-
return self._mockserver.make_response('OK', 204)
223+
# Some clients like aws sdk cpp can parse not empty body
224+
return self._mockserver.make_response('', 204)
222225

223226
def get_object_head(self, request):
224227
key = self._extract_key(request)
@@ -228,8 +231,9 @@ def get_object_head(self, request):
228231
s3_object = bucket_storage.get_object(key)
229232
if not s3_object:
230233
return self._mockserver.make_response('Object not found', 404)
234+
# Some clients like aws sdk cpp can parse not empty body
231235
return self._mockserver.make_response(
232-
'OK',
236+
'',
233237
200,
234238
headers=s3_object.meta,
235239
)

0 commit comments

Comments
 (0)