From d66de3f984786cf48cca2afbbae4744281747277 Mon Sep 17 00:00:00 2001 From: Jovan Ruzic Date: Fri, 30 Dec 2022 10:21:59 +0100 Subject: [PATCH] feat(MPM-708/): drop php7.4 support (#75) --- README.md | 2 +- composer.json | 6 +++--- docker/dev/php/Dockerfile | 4 ++-- src/Message/AbstractKafkaMessage.php | 4 ++-- tests/Unit/Conf/KafkaConfigurationTest.php | 14 +++++++++++--- .../Unit/Consumer/KafkaHighLevelConsumerTest.php | 16 ++++++++++++++-- .../Unit/Consumer/KafkaLowLevelConsumerTest.php | 3 ++- tests/Unit/Message/Encoder/AvroEncoderTest.php | 4 +--- 8 files changed, 36 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 51598da..879e48a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The [documentation](https://arnaud.le-blanc.net/php-rdkafka/phpdoc/book.rdkafka. can help out to understand the internals of this library. ## Requirements -- php: ^7.3|^8.0 +- php: ^8.0 - ext-rdkafka: >=4.0.0 - librdkafka: >=0.11.6 (if you use `|null */ protected $headers; @@ -64,7 +64,7 @@ public function getPartition(): int } /** - * @return string[]|null + * @return array|null */ public function getHeaders(): ?array { diff --git a/tests/Unit/Conf/KafkaConfigurationTest.php b/tests/Unit/Conf/KafkaConfigurationTest.php index ab8e6a6..d2d9504 100644 --- a/tests/Unit/Conf/KafkaConfigurationTest.php +++ b/tests/Unit/Conf/KafkaConfigurationTest.php @@ -77,8 +77,6 @@ public function configValuesProvider(): array [ -0.99999, '-0.99999' ], [ true, 'true' ], [ false, 'false' ], - [ null, '' ], - [ '', '' ], [ ' ', ' ' ], [ [], null ], [ new stdClass(), null ], @@ -104,7 +102,7 @@ public function testConfigValues($inputValue, $expectedValue): void $config = $kafkaConfiguration->getConfiguration(); - if(null === $expectedValue) { + if (null === $expectedValue) { self::assertArrayNotHasKey('group.id', $config); return; } @@ -115,4 +113,14 @@ public function testConfigValues($inputValue, $expectedValue): void self::assertArrayHasKey('default_topic_conf', $config); self::assertIsString($config['default_topic_conf']); } + + public function testMethodVisibility(): void + { + $reflectionClass = new \ReflectionClass(KafkaConfiguration::class); + + $methodInitializedConfig = $reflectionClass->getMethod('initializeConfig'); + $methodInitializedConfig->setAccessible(true); + + $this->assertTrue($methodInitializedConfig->isProtected()); + } } diff --git a/tests/Unit/Consumer/KafkaHighLevelConsumerTest.php b/tests/Unit/Consumer/KafkaHighLevelConsumerTest.php index aca482a..9f43307 100644 --- a/tests/Unit/Consumer/KafkaHighLevelConsumerTest.php +++ b/tests/Unit/Consumer/KafkaHighLevelConsumerTest.php @@ -2,6 +2,7 @@ namespace Jobcloud\Kafka\Tests\Unit\Kafka\Consumer; +use Jobcloud\Kafka\Consumer\AbstractKafkaConsumer; use Jobcloud\Kafka\Consumer\KafkaHighLevelConsumer; use Jobcloud\Kafka\Consumer\TopicSubscriptionInterface; use Jobcloud\Kafka\Exception\KafkaConsumerConsumeException; @@ -465,7 +466,7 @@ public function testKafkaConsumeWithDecode(): void $message->partition = '9'; $message->offset = '501'; $message->timestamp = '500'; - $message->headers = 'header'; + $message->headers = ['key' => 'value']; $message->err = RD_KAFKA_RESP_ERR_NO_ERROR; $topics = [new TopicSubscription('testTopic')]; @@ -491,7 +492,7 @@ function (KafkaConsumerMessageInterface $message) { self::assertEquals(9, $message->getPartition()); self::assertEquals(501, $message->getOffset()); self::assertEquals(500, $message->getTimestamp()); - self::assertEquals(['header'], $message->getHeaders()); + self::assertEquals(['key' => 'value'], $message->getHeaders()); return true; } @@ -512,6 +513,7 @@ public function testKafkaConsumeWithoutDecode(): void $message->partition = 9; $message->offset = 501; $message->timestamp = 500; + $message->headers = ['key' => 'value']; $message->err = RD_KAFKA_RESP_ERR_NO_ERROR; $topics = [new TopicSubscription('testTopic')]; @@ -663,6 +665,16 @@ public function testGetTopicSubscriptionsReturnsTopicSubscriptions(): void self::assertSame($topicSubscriptionsMock, $kafkaConsumer->getTopicSubscriptions()); } + public function testMethodVisibility(): void + { + $reflectionClass = new \ReflectionClass(AbstractKafkaConsumer::class); + + $methodGetConsumerMessage = $reflectionClass->getMethod('getConsumerMessage'); + $methodGetConsumerMessage->setAccessible(true); + + $this->assertTrue($methodGetConsumerMessage->isProtected()); + } + /** * @param int $partitionId * @return RdKafkaMetadataPartition|MockObject diff --git a/tests/Unit/Consumer/KafkaLowLevelConsumerTest.php b/tests/Unit/Consumer/KafkaLowLevelConsumerTest.php index 64520b0..6ebb4b5 100644 --- a/tests/Unit/Consumer/KafkaLowLevelConsumerTest.php +++ b/tests/Unit/Consumer/KafkaLowLevelConsumerTest.php @@ -86,7 +86,7 @@ public function testConsumeWithTopicSubscriptionWithNoPartitionsIsSuccessful(): $rdKafkaMessageMock->partition = 0; $rdKafkaMessageMock->offset = 1; $rdKafkaMessageMock->timestamp = 1; - $rdKafkaMessageMock->headers = null; + $rdKafkaMessageMock->headers = ['key' => 'value']; $rdKafkaMessageMock ->expects(self::never()) ->method('errstr'); @@ -250,6 +250,7 @@ public function testConsumeThrowsExceptionIfConsumedMessageHasNoTopicAndErrorCod $rdKafkaMessageMock->partition = 1; $rdKafkaMessageMock->offset = 103; $rdKafkaMessageMock->topic_name = null; + $rdKafkaMessageMock->headers = []; $rdKafkaMessageMock ->expects(self::once()) ->method('errstr') diff --git a/tests/Unit/Message/Encoder/AvroEncoderTest.php b/tests/Unit/Message/Encoder/AvroEncoderTest.php index 866e43a..886687d 100644 --- a/tests/Unit/Message/Encoder/AvroEncoderTest.php +++ b/tests/Unit/Message/Encoder/AvroEncoderTest.php @@ -6,13 +6,11 @@ use FlixTech\AvroSerializer\Objects\RecordSerializer; use Jobcloud\Kafka\Exception\AvroEncoderException; -use Jobcloud\Kafka\Message\Encoder\AvroEncoderInterface; use Jobcloud\Kafka\Message\KafkaAvroSchemaInterface; use Jobcloud\Kafka\Message\KafkaProducerMessageInterface; use Jobcloud\Kafka\Message\Encoder\AvroEncoder; use Jobcloud\Kafka\Message\Registry\AvroSchemaRegistryInterface; -use PHPStan\Testing\TestCase; -use \AvroSchema; +use PHPUnit\Framework\TestCase; /** * @covers \Jobcloud\Kafka\Message\Encoder\AvroEncoder