From 4d993bbe12fc20a6469a1e3074a74eabd2aba114 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Sun, 24 Jan 2016 17:32:29 -0800 Subject: [PATCH] add DefaultPartitioner test --- test/test_partitioner.py | 56 +++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/test/test_partitioner.py b/test/test_partitioner.py index 67cd83b..52b6b81 100644 --- a/test/test_partitioner.py +++ b/test/test_partitioner.py @@ -1,23 +1,43 @@ +import pytest import six -from . import unittest -from kafka.partitioner import (Murmur2Partitioner) +from kafka.partitioner import Murmur2Partitioner +from kafka.partitioner.default import DefaultPartitioner -class TestMurmurPartitioner(unittest.TestCase): - def test_hash_bytes(self): - p = Murmur2Partitioner(range(1000)) - self.assertEqual(p.partition(bytearray(b'test')), p.partition(b'test')) - def test_hash_encoding(self): - p = Murmur2Partitioner(range(1000)) - self.assertEqual(p.partition('test'), p.partition(u'test')) +def test_default_partitioner(): + partitioner = DefaultPartitioner() + all_partitions = list(range(100)) + available = all_partitions + # partitioner should return the same partition for the same key + p1 = partitioner(b'foo', all_partitions, available) + p2 = partitioner(b'foo', all_partitions, available) + assert p1 == p2 + assert p1 in all_partitions - def test_murmur2_java_compatibility(self): - p = Murmur2Partitioner(range(1000)) - # compare with output from Kafka's org.apache.kafka.clients.producer.Partitioner - self.assertEqual(681, p.partition(b'')) - self.assertEqual(524, p.partition(b'a')) - self.assertEqual(434, p.partition(b'ab')) - self.assertEqual(107, p.partition(b'abc')) - self.assertEqual(566, p.partition(b'123456789')) - self.assertEqual(742, p.partition(b'\x00 ')) + # when key is None, choose one of available partitions + assert partitioner(None, all_partitions, [123]) == 123 + + # with fallback to all_partitions + assert partitioner(None, all_partitions, []) in all_partitions + + +def test_hash_bytes(): + p = Murmur2Partitioner(range(1000)) + assert p.partition(bytearray(b'test')) == p.partition(b'test') + + +def test_hash_encoding(): + p = Murmur2Partitioner(range(1000)) + assert p.partition('test') == p.partition(u'test') + + +def test_murmur2_java_compatibility(): + p = Murmur2Partitioner(range(1000)) + # compare with output from Kafka's org.apache.kafka.clients.producer.Partitioner + assert p.partition(b'') == 681 + assert p.partition(b'a') == 524 + assert p.partition(b'ab') == 434 + assert p.partition(b'abc') == 107 + assert p.partition(b'123456789') == 566 + assert p.partition(b'\x00 ') == 742