This test (adapted from Django's test suite) passes on Python 2, but fails on Python 3:
diff --git a/tests/test_memcache.py b/tests/test_memcache.py
index 321dc7b..0415de9 100644
--- a/tests/test_memcache.py
+++ b/tests/test_memcache.py
@@ -137,6 +137,30 @@ class TestMemcache(unittest.TestCase):
value = self.mc.get(key)
self.assertEqual(value, 5)
+ def test_binary_string(self):
+ # Binary strings should be cacheable
+ from zlib import compress, decompress
+ value = 'value_to_be_compressed'
+ compressed_value = compress(value.encode())
+
+ # Test set
+ self.mc.set('binary1', compressed_value)
+ compressed_result = self.mc.get('binary1')
+ self.assertEqual(compressed_value, compressed_result)
+ self.assertEqual(value, decompress(compressed_result).decode())
+
+ # Test add
+ self.mc.add('binary1-add', compressed_value)
+ compressed_result = self.mc.get('binary1-add')
+ self.assertEqual(compressed_value, compressed_result)
+ self.assertEqual(value, decompress(compressed_result).decode())
+
+ # Test set_many
+ self.mc.set_multi({'binary1-set_many': compressed_value})
+ compressed_result = self.mc.get('binary1-set_many')
+ self.assertEqual(compressed_value, compressed_result)
+ self.assertEqual(value, decompress(compressed_result).decode())
+
def test_ignore_too_large_value(self):
# NOTE: "MemCached: while expecting[...]" is normal...
key = 'keyhere'
======================================================================
ERROR: test_binary_string (__main__.TestMemcache)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests/test_memcache3.py", line 53, in test_binary_string
compressed_result = self.mc.get('binary1')
File "/home/tim/code/python-memcached/memcache.py", line 1093, in get
return self._get('get', key)
File "/home/tim/code/python-memcached/memcache.py", line 1077, in _get
return _unsafe_get()
File "/home/tim/code/python-memcached/memcache.py", line 1065, in _unsafe_get
value = self._recv_value(server, flags, rlen)
File "/home/tim/code/python-memcached/memcache.py", line 1235, in _recv_value
val = buf.decode('utf8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9c in position 1: invalid start byte
This test (adapted from Django's test suite) passes on Python 2, but fails on Python 3: