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:
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user