Skip to content

Commit d66de3f

Browse files
authored
feat(MPM-708/): drop php7.4 support (#75)
1 parent 2bb7f9c commit d66de3f

File tree

8 files changed

+36
-17
lines changed

8 files changed

+36
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ The [documentation](https://arnaud.le-blanc.net/php-rdkafka/phpdoc/book.rdkafka.
1515
can help out to understand the internals of this library.
1616

1717
## Requirements
18-
- php: ^7.3|^8.0
18+
- php: ^8.0
1919
- ext-rdkafka: >=4.0.0
2020
- librdkafka: >=0.11.6 (if you use `<librdkafka:1.x` please define your own error callback)
2121

composer.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@
1717
"rdkafka"
1818
],
1919
"require": {
20-
"php": "^7.3|^8.0",
20+
"php": "^8.0",
2121
"ext-rdkafka": "^4.0|^5.0|^6.0",
2222
"ext-json": "*"
2323
},
2424
"require-dev": {
2525
"phpunit/phpunit": "^9.4",
2626
"squizlabs/php_codesniffer": "^3.5.4",
27-
"phpstan/phpstan": "^0.12",
27+
"phpstan/phpstan": "^1.8",
2828
"php-mock/php-mock-phpunit": "^2.6",
2929
"kwn/php-rdkafka-stubs": "^2.0.0",
3030
"rregeer/phpunit-coverage-check": "^0.3.1",
3131
"johnkary/phpunit-speedtrap": "^3.1",
3232
"flix-tech/avro-serde-php": "^1.4",
33-
"infection/infection": "^0.22"
33+
"infection/infection": "^0.26"
3434
},
3535
"autoload": {
3636
"psr-4": {

docker/dev/php/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM php:7.4-cli-alpine3.16
1+
FROM php:8.0-cli-alpine3.16
22

33
ARG HOST_USER_ID
44
ARG HOST_USER
@@ -28,7 +28,7 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin -
2828

2929
# PHP: Install php extensions
3030
RUN pecl channel-update pecl.php.net && \
31-
pecl install rdkafka-6.0.1 pcov && \
31+
pecl install rdkafka-6.0.3 pcov && \
3232
docker-php-ext-install pcntl && \
3333
php-ext-enable rdkafka pcntl pcov
3434

src/Message/AbstractKafkaMessage.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ abstract class AbstractKafkaMessage implements KafkaMessageInterface
2727
protected $partition;
2828

2929
/**
30-
* @var string[]|null
30+
* @var array<string, int|string>|null
3131
*/
3232
protected $headers;
3333

@@ -64,7 +64,7 @@ public function getPartition(): int
6464
}
6565

6666
/**
67-
* @return string[]|null
67+
* @return array<string, int|string>|null
6868
*/
6969
public function getHeaders(): ?array
7070
{

tests/Unit/Conf/KafkaConfigurationTest.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ public function configValuesProvider(): array
7777
[ -0.99999, '-0.99999' ],
7878
[ true, 'true' ],
7979
[ false, 'false' ],
80-
[ null, '' ],
81-
[ '', '' ],
8280
[ ' ', ' ' ],
8381
[ [], null ],
8482
[ new stdClass(), null ],
@@ -104,7 +102,7 @@ public function testConfigValues($inputValue, $expectedValue): void
104102

105103
$config = $kafkaConfiguration->getConfiguration();
106104

107-
if(null === $expectedValue) {
105+
if (null === $expectedValue) {
108106
self::assertArrayNotHasKey('group.id', $config);
109107
return;
110108
}
@@ -115,4 +113,14 @@ public function testConfigValues($inputValue, $expectedValue): void
115113
self::assertArrayHasKey('default_topic_conf', $config);
116114
self::assertIsString($config['default_topic_conf']);
117115
}
116+
117+
public function testMethodVisibility(): void
118+
{
119+
$reflectionClass = new \ReflectionClass(KafkaConfiguration::class);
120+
121+
$methodInitializedConfig = $reflectionClass->getMethod('initializeConfig');
122+
$methodInitializedConfig->setAccessible(true);
123+
124+
$this->assertTrue($methodInitializedConfig->isProtected());
125+
}
118126
}

tests/Unit/Consumer/KafkaHighLevelConsumerTest.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Jobcloud\Kafka\Tests\Unit\Kafka\Consumer;
44

5+
use Jobcloud\Kafka\Consumer\AbstractKafkaConsumer;
56
use Jobcloud\Kafka\Consumer\KafkaHighLevelConsumer;
67
use Jobcloud\Kafka\Consumer\TopicSubscriptionInterface;
78
use Jobcloud\Kafka\Exception\KafkaConsumerConsumeException;
@@ -465,7 +466,7 @@ public function testKafkaConsumeWithDecode(): void
465466
$message->partition = '9';
466467
$message->offset = '501';
467468
$message->timestamp = '500';
468-
$message->headers = 'header';
469+
$message->headers = ['key' => 'value'];
469470
$message->err = RD_KAFKA_RESP_ERR_NO_ERROR;
470471

471472
$topics = [new TopicSubscription('testTopic')];
@@ -491,7 +492,7 @@ function (KafkaConsumerMessageInterface $message) {
491492
self::assertEquals(9, $message->getPartition());
492493
self::assertEquals(501, $message->getOffset());
493494
self::assertEquals(500, $message->getTimestamp());
494-
self::assertEquals(['header'], $message->getHeaders());
495+
self::assertEquals(['key' => 'value'], $message->getHeaders());
495496

496497
return true;
497498
}
@@ -512,6 +513,7 @@ public function testKafkaConsumeWithoutDecode(): void
512513
$message->partition = 9;
513514
$message->offset = 501;
514515
$message->timestamp = 500;
516+
$message->headers = ['key' => 'value'];
515517
$message->err = RD_KAFKA_RESP_ERR_NO_ERROR;
516518

517519
$topics = [new TopicSubscription('testTopic')];
@@ -663,6 +665,16 @@ public function testGetTopicSubscriptionsReturnsTopicSubscriptions(): void
663665
self::assertSame($topicSubscriptionsMock, $kafkaConsumer->getTopicSubscriptions());
664666
}
665667

668+
public function testMethodVisibility(): void
669+
{
670+
$reflectionClass = new \ReflectionClass(AbstractKafkaConsumer::class);
671+
672+
$methodGetConsumerMessage = $reflectionClass->getMethod('getConsumerMessage');
673+
$methodGetConsumerMessage->setAccessible(true);
674+
675+
$this->assertTrue($methodGetConsumerMessage->isProtected());
676+
}
677+
666678
/**
667679
* @param int $partitionId
668680
* @return RdKafkaMetadataPartition|MockObject

tests/Unit/Consumer/KafkaLowLevelConsumerTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public function testConsumeWithTopicSubscriptionWithNoPartitionsIsSuccessful():
8686
$rdKafkaMessageMock->partition = 0;
8787
$rdKafkaMessageMock->offset = 1;
8888
$rdKafkaMessageMock->timestamp = 1;
89-
$rdKafkaMessageMock->headers = null;
89+
$rdKafkaMessageMock->headers = ['key' => 'value'];
9090
$rdKafkaMessageMock
9191
->expects(self::never())
9292
->method('errstr');
@@ -250,6 +250,7 @@ public function testConsumeThrowsExceptionIfConsumedMessageHasNoTopicAndErrorCod
250250
$rdKafkaMessageMock->partition = 1;
251251
$rdKafkaMessageMock->offset = 103;
252252
$rdKafkaMessageMock->topic_name = null;
253+
$rdKafkaMessageMock->headers = [];
253254
$rdKafkaMessageMock
254255
->expects(self::once())
255256
->method('errstr')

tests/Unit/Message/Encoder/AvroEncoderTest.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66

77
use FlixTech\AvroSerializer\Objects\RecordSerializer;
88
use Jobcloud\Kafka\Exception\AvroEncoderException;
9-
use Jobcloud\Kafka\Message\Encoder\AvroEncoderInterface;
109
use Jobcloud\Kafka\Message\KafkaAvroSchemaInterface;
1110
use Jobcloud\Kafka\Message\KafkaProducerMessageInterface;
1211
use Jobcloud\Kafka\Message\Encoder\AvroEncoder;
1312
use Jobcloud\Kafka\Message\Registry\AvroSchemaRegistryInterface;
14-
use PHPStan\Testing\TestCase;
15-
use \AvroSchema;
13+
use PHPUnit\Framework\TestCase;
1614

1715
/**
1816
* @covers \Jobcloud\Kafka\Message\Encoder\AvroEncoder

0 commit comments

Comments
 (0)