Update tests to cover both cmurmur3 and pure python impl

Also fix key inputs to use proper binary type for pypy3
This commit is contained in:
Adam Holmberg
2015-08-06 09:41:37 -05:00
parent e78bd4c48b
commit 4725abccc2

View File

@@ -18,6 +18,9 @@ except ImportError:
import unittest # noqa import unittest # noqa
from mock import Mock from mock import Mock
import os
import random
import six
import cassandra import cassandra
from cassandra.cqltypes import IntegerType, AsciiType, TupleType from cassandra.cqltypes import IntegerType, AsciiType, TupleType
@@ -215,19 +218,46 @@ class NameEscapingTest(unittest.TestCase):
self.assertEqual(is_valid_name(keyword), False) self.assertEqual(is_valid_name(keyword), False)
class TokensTest(unittest.TestCase): class Murmur3TokensTest(unittest.TestCase):
def test_murmur3_tokens(self): def test_murmur3_init(self):
try:
murmur3_token = Murmur3Token(cassandra.metadata.MIN_LONG - 1) murmur3_token = Murmur3Token(cassandra.metadata.MIN_LONG - 1)
self.assertEqual(murmur3_token.hash_fn('123'), -7468325962851647638)
self.assertEqual(murmur3_token.hash_fn(b'\x00\xff\x10\xfa\x99' * 10), 5837342703291459765)
self.assertEqual(murmur3_token.hash_fn(b'\xfe' * 8), -8927430733708461935)
self.assertEqual(murmur3_token.hash_fn(b'\x10' * 8), 1446172840243228796)
self.assertEqual(murmur3_token.hash_fn(str(cassandra.metadata.MAX_LONG)), 7162290910810015547)
self.assertEqual(str(murmur3_token), '<Murmur3Token: -9223372036854775809>') self.assertEqual(str(murmur3_token), '<Murmur3Token: -9223372036854775809>')
except NoMurmur3:
raise unittest.SkipTest('The murmur3 extension is not available') def test_python_vs_c(self):
from cassandra.murmur3 import _murmur3 as mm3_python
try:
from cassandra.cmurmur3 import murmur3 as mm3_c
iterations = 100
for _ in range(iterations):
for len in range(0, 32): # zero to one block plus full range of tail lengths
key = os.urandom(len)
self.assertEqual(mm3_python(key), mm3_c(key))
except ImportError:
raise unittest.SkipTest('The cmurmur3 extension is not available')
def test_murmur3_python(self):
from cassandra.murmur3 import _murmur3
self._verify_hash(_murmur3)
def test_murmur3_c(self):
try:
from cassandra.cmurmur3 import murmur3
self._verify_hash(murmur3)
except ImportError:
raise unittest.SkipTest('The cmurmur3 extension is not available')
def _verify_hash(self, fn):
self.assertEqual(fn(six.b('123')), -7468325962851647638)
self.assertEqual(fn(b'\x00\xff\x10\xfa\x99' * 10), 5837342703291459765)
self.assertEqual(fn(b'\xfe' * 8), -8927430733708461935)
self.assertEqual(fn(b'\x10' * 8), 1446172840243228796)
self.assertEqual(fn(six.b(str(cassandra.metadata.MAX_LONG))), 7162290910810015547)
class MD5TokensTest(unittest.TestCase):
def test_md5_tokens(self): def test_md5_tokens(self):
md5_token = MD5Token(cassandra.metadata.MIN_LONG - 1) md5_token = MD5Token(cassandra.metadata.MIN_LONG - 1)
@@ -235,6 +265,9 @@ class TokensTest(unittest.TestCase):
self.assertEqual(md5_token.hash_fn(str(cassandra.metadata.MAX_LONG)), 28528976619278518853815276204542453639) self.assertEqual(md5_token.hash_fn(str(cassandra.metadata.MAX_LONG)), 28528976619278518853815276204542453639)
self.assertEqual(str(md5_token), '<MD5Token: %s>' % -9223372036854775809) self.assertEqual(str(md5_token), '<MD5Token: %s>' % -9223372036854775809)
class BytesTokensTest(unittest.TestCase):
def test_bytes_tokens(self): def test_bytes_tokens(self):
bytes_token = BytesToken(str(cassandra.metadata.MIN_LONG - 1)) bytes_token = BytesToken(str(cassandra.metadata.MIN_LONG - 1))
self.assertEqual(bytes_token.hash_fn('123'), '123') self.assertEqual(bytes_token.hash_fn('123'), '123')