assert(isset($messageQueue['topic1'])); $topic1Queue = $messageQueue['topic1']; assert(count($topic1Queue[0]) == 2); assert(count($topic1Queue[1]) == 2); foreach ($topic1Queue as $partition => $messages) { foreach ($messages as $message) { assert($message instanceof \Kafka\Message); assert($message->partition() == $partition); assert($message->payload() === 'hello 2'); assert($message->compression() == \Kafka\Kafka::COMPRESSION_GZIP); } } $producerConnector->produce(); assert($producer1->getStreamContents() === ''); // nothing should go to the producer 1 assert($producer2->getStreamContents() === chr(0) . chr(0) . chr(0) . chr(68) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(50) . chr(0) . chr(0) . chr(0) . chr(46) . chr(1) . chr(1) . chr(39) . chr(126) . chr(11) . chr(89) . chr(31) . chr(139) . chr(8) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(3) . chr(99) . chr(96) . chr(96) . chr(224) . chr(101) . chr(100) . chr(240) . chr(123) . chr(150) . chr(113) . chr(55) . chr(35) . chr(53) . chr(39) . chr(39) . chr(95) . chr(193) . chr(136) . chr(1) . chr(93) . chr(0) . chr(0) . chr(172) . chr(130) . chr(171) . chr(95) . chr(34) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(68) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(1) . chr(0) . chr(0) . chr(0) . chr(50) . chr(0) . chr(0) . chr(0) . chr(46) . chr(1) . chr(1) . chr(39) . chr(126) . chr(11) . chr(89) . chr(31) . chr(139) . chr(8) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(3) . chr(99) . chr(96) . chr(96) . chr(224) . chr(101) . chr(100) . chr(240) . chr(123) . chr(150) . chr(113) . chr(55) . chr(35) . chr(53) . chr(39) . chr(39) . chr(95) . chr(193) . chr(136) . chr(1) . chr(93) . chr(0) . chr(0) . chr(172) . chr(130) . chr(171) . chr(95) . chr(34) . chr(0) . chr(0) . chr(0)); //test invalid valid key type for default partitioner try { $producerConnector->addMessage("topic1", "hello 2", "StringKey"); throw new Exception("Expected \\Kafka\\Exception with invalid partitioner key type."); } catch (\Kafka\Exception $e) { assert($e->getMessage() === "Default Kafka Partitioner only accepts integer keys"); } //test test unknown topic exception try { $producerConnector->addMessage("topicX", "hello", 0); throw new Exception("Expected \\Kafka\\Exception with invalid partitioner key type."); } catch (\Kafka\Exception\TopicUnavailable $e) { assert($e->getMessage() === "Kafka topic `topicX` not available"); } //test custom partitioner by date-as-day-of-week
} protected function createSocket() { if (!is_resource($this->socket)) { $this->socket = fopen("php://memory", "rw"); } } } //test single message for multiple partitions of one topic without compression $channel = new TestV07ProducerChannel(new Kafka()); $channel->add(new Message("topic1", 0, "Hello World 1!", Kafka::COMPRESSION_NONE)); $channel->add(new Message("topic1", 1, "Hello World 2!", Kafka::COMPRESSION_NONE)); $channel->add(new Message("topic1", 2, "Hello World 3!", Kafka::COMPRESSION_NONE)); $channel->produce(); assert($channel->getStreamContents() === chr(0) . chr(0) . chr(0) . chr(42) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(24) . chr(0) . chr(0) . chr(0) . chr(20) . chr(1) . chr(0) . chr(91) . chr(4) . chr(192) . chr(104) . chr(72) . chr(101) . chr(108) . chr(108) . chr(111) . chr(32) . chr(87) . chr(111) . chr(114) . chr(108) . chr(100) . chr(32) . chr(49) . chr(33) . chr(0) . chr(0) . chr(0) . chr(42) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(1) . chr(0) . chr(0) . chr(0) . chr(24) . chr(0) . chr(0) . chr(0) . chr(20) . chr(1) . chr(0) . chr(112) . chr(41) . chr(147) . chr(171) . chr(72) . chr(101) . chr(108) . chr(108) . chr(111) . chr(32) . chr(87) . chr(111) . chr(114) . chr(108) . chr(100) . chr(32) . chr(50) . chr(33) . chr(0) . chr(0) . chr(0) . chr(42) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(2) . chr(0) . chr(0) . chr(0) . chr(24) . chr(0) . chr(0) . chr(0) . chr(20) . chr(1) . chr(0) . chr(105) . chr(50) . chr(162) . chr(234) . chr(72) . chr(101) . chr(108) . chr(108) . chr(111) . chr(32) . chr(87) . chr(111) . chr(114) . chr(108) . chr(100) . chr(32) . chr(51) . chr(33)); //test single message set compressed with gzip $channel = new TestV07ProducerChannel(new Kafka()); $channel->add(new Message("topic1", 0, "Hello World! A", Kafka::COMPRESSION_GZIP)); $channel->add(new Message("topic1", 0, "Hello World! B", Kafka::COMPRESSION_GZIP)); $channel->add(new Message("topic1", 0, "Hello World! C", Kafka::COMPRESSION_GZIP)); $channel->produce(); assert($channel->getStreamContents() === chr(0) . chr(0) . chr(0) . chr(91) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(73) . chr(0) . chr(0) . chr(0) . chr(69) . chr(1) . chr(1) . chr(60) . chr(246) . chr(98) . chr(88) . chr(31) . chr(139) . chr(8) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(3) . chr(99) . chr(96) . chr(96) . chr(16) . chr(97) . chr(100) . chr(112) . chr(89) . chr(251) . chr(66) . chr(220) . chr(35) . chr(53) . chr(39) . chr(39) . chr(95) . chr(33) . chr(60) . chr(191) . chr(40) . chr(39) . chr(69) . chr(81) . chr(193) . chr(145) . chr(1) . chr(44) . chr(126) . chr(119) . chr(201) . chr(206) . chr(181) . chr(40) . chr(226) . chr(78) . chr(16) . chr(241) . chr(85) . chr(139) . chr(59) . chr(173) . chr(81) . chr(196) . chr(157) . chr(1) . chr(143) . chr(150) . chr(159) . chr(232) . chr(72) . chr(0) . chr(0) . chr(0)); //test uncompressed message followed by a message set compressed with gzip $channel = new TestV07ProducerChannel(new Kafka()); $channel->add(new Message("topic1", 0, "Hello World!", Kafka::COMPRESSION_NONE)); $channel->add(new Message("topic1", 0, "Hello World! A", Kafka::COMPRESSION_GZIP)); $channel->add(new Message("topic1", 0, "Hello World! B", Kafka::COMPRESSION_GZIP)); $channel->add(new Message("topic1", 0, "Hello World! C", Kafka::COMPRESSION_GZIP)); $channel->produce(); assert($channel->getStreamContents() === chr(0) . chr(0) . chr(0) . chr(113) . chr(0) . chr(0) . chr(0) . chr(6) . chr(116) . chr(111) . chr(112) . chr(105) . chr(99) . chr(49) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(95) . chr(0) . chr(0) . chr(0) . chr(18) . chr(1) . chr(0) . chr(28) . chr(41) . chr(28) . chr(163) . chr(72) . chr(101) . chr(108) . chr(108) . chr(111) . chr(32) . chr(87) . chr(111) . chr(114) . chr(108) . chr(100) . chr(33) . chr(0) . chr(0) . chr(0) . chr(69) . chr(1) . chr(1) . chr(60) . chr(246) . chr(98) . chr(88) . chr(31) . chr(139) . chr(8) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(3) . chr(99) . chr(96) . chr(96) . chr(16) . chr(97) . chr(100) . chr(112) . chr(89) . chr(251) . chr(66) . chr(220) . chr(35) . chr(53) . chr(39) . chr(39) . chr(95) . chr(33) . chr(60) . chr(191) . chr(40) . chr(39) . chr(69) . chr(81) . chr(193) . chr(145) . chr(1) . chr(44) . chr(126) . chr(119) . chr(201) . chr(206) . chr(181) . chr(40) . chr(226) . chr(78) . chr(16) . chr(241) . chr(85) . chr(139) . chr(59) . chr(173) . chr(81) . chr(196) . chr(157) . chr(1) . chr(143) . chr(150) . chr(159) . chr(232) . chr(72) . chr(0) . chr(0) . chr(0));