From f15f006f7834ab69a5ee38ae30955fdc3863562e Mon Sep 17 00:00:00 2001 From: Diego Argueta <620513-dargueta@users.noreply.github.com> Date: Thu, 20 Dec 2018 00:34:04 -0800 Subject: [PATCH] Hack around text problem in unit tests. Now that payloads are not allowed to be text, some unit tests will cause crashes on Python 3 because the payload sent by requests gets passed to FakeKey as a string instead of raw bytes. I haven't been able to figure out a way around the issue that doesn't get super messy inside s3/responses.py so I'm just converting the value to bytes using the system's default encoding. --- moto/s3/models.py | 7 +++++++ tox.ini | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/moto/s3/models.py b/moto/s3/models.py index 4ce2afb34..525b3c81a 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -9,6 +9,7 @@ import codecs import random import string import tempfile +import sys import six @@ -23,6 +24,7 @@ UPLOAD_ID_BYTES = 43 UPLOAD_PART_MIN_SIZE = 5242880 STORAGE_CLASS = ["STANDARD", "REDUCED_REDUNDANCY", "STANDARD_IA", "ONEZONE_IA"] DEFAULT_KEY_BUFFER_SIZE = 2 ** 24 +DEFAULT_TEXT_ENCODING = sys.getdefaultencoding() class FakeDeleteMarker(BaseModel): @@ -74,6 +76,11 @@ class FakeKey(BaseModel): def value(self, new_value): self.value_buffer.seek(0) self.value_buffer.truncate() + + # Hack for working around moto's own unit tests; this probably won't + # actually get hit in normal use. + if isinstance(new_value, six.text_type): + new_value = new_value.encode(DEFAULT_TEXT_ENCODING) self.value_buffer.write(new_value) def copy(self, new_name=None): diff --git a/tox.ini b/tox.ini index 0f3f1466a..454409d72 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,10 @@ envlist = py27, py36 [testenv] +setenv = + BOTO_CONFIG=/dev/null + AWS_SECRET_ACCESS_KEY=foobar_secret + AWS_ACCESS_KEY_ID=foobar_key deps = -r{toxinidir}/requirements.txt -r{toxinidir}/requirements-dev.txt