Skip to content

Commit 17dd61e

Browse files
committed
ci: Add build for pheanstalk compatibility
1 parent 34d4795 commit 17dd61e

3 files changed

Lines changed: 134 additions & 1 deletion

File tree

.github/workflows/php.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,42 @@ jobs:
4040
- name: Run test suite
4141
run: composer run-script tests
4242

43+
pheanstalk_compatibility:
44+
runs-on: ubuntu-latest
45+
strategy:
46+
matrix:
47+
pheanstalk-versions: ['3.2.1']
48+
name: Pheanstalk ${{ matrix.pheanstalk-versions }}
49+
50+
steps:
51+
- uses: actions/checkout@v2
52+
53+
- name: Set Timezone
54+
uses: szenius/set-timezone@v1.0
55+
with:
56+
timezoneLinux: "Europe/Paris"
57+
58+
- name: Install PHP
59+
uses: shivammathur/setup-php@v2
60+
with:
61+
php-version: 8.4
62+
extensions: json
63+
ini-values: date.timezone=Europe/Paris
64+
65+
- name: Install & run Beanstalkd
66+
run: |
67+
sudo apt-get install -y beanstalkd
68+
sudo service beanstalkd start
69+
70+
- name: Install dependencies
71+
run: composer install --prefer-dist --no-progress
72+
73+
- name: Require Pheanstalk version
74+
run: composer require --dev "pda/pheanstalk:~${{ matrix.pheanstalk-versions }}"
75+
76+
- name: Run test suite
77+
run: composer run-script tests
78+
4379
analysis:
4480
name: Analysis
4581
runs-on: ubuntu-latest

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"enqueue/fs": "~0.9",
3838
"league/container": "~3.0",
3939
"monolog/monolog": "~2.0",
40-
"pda/pheanstalk": "^3.1@dev",
40+
"pda/pheanstalk": "~3.2",
4141
"php-amqplib/php-amqplib": "~3.0",
4242
"phpbench/phpbench": "~0.0|~1.0",
4343
"phpunit/phpunit": "~9.6",
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
3+
namespace Connection\Pheanstalk;
4+
5+
use Bdf\Queue\Connection\Pheanstalk\PheanstalkConnection;
6+
use Bdf\Queue\Message\Message;
7+
use Bdf\Queue\Message\QueueEnvelope;
8+
use Bdf\Queue\Message\TopicEnvelope;
9+
use Bdf\Queue\Serializer\JsonSerializer;
10+
use PHPUnit\Framework\TestCase;
11+
12+
use function pcntl_fork;
13+
use function usleep;
14+
15+
class PheanstalkFunctionalTest extends TestCase
16+
{
17+
private PheanstalkConnection $connection;
18+
19+
protected function setUp(): void
20+
{
21+
$host = getenv('PHEANSTALK_HOST') ?: '127.0.0.1';
22+
$port = getenv('PHEANSTALK_PORT') ?: 11300;
23+
24+
if (!@fsockopen($host, $port, $errno, $errstr, 1)) {
25+
$this->markTestSkipped('Pheanstalk server is not available');
26+
}
27+
28+
$this->connection = new PheanstalkConnection('test', new JsonSerializer());
29+
$this->connection->setConfig([
30+
'host' => $host,
31+
'port' => $port,
32+
]);
33+
}
34+
35+
public function test_queuePushPop()
36+
{
37+
$queue = $this->connection->queue();
38+
$queue->push(
39+
(new Message(['foo' => 'bar']))
40+
->setQueue('test')
41+
);
42+
43+
$message = $queue->pop('test');
44+
$this->assertEquals('test', $message->message()->destination());
45+
$this->assertSame(['foo' => 'bar'], $message->message()->data());
46+
$this->assertFalse($message->isRejected());
47+
$this->assertFalse($message->isDeleted());
48+
49+
$message->acknowledge();
50+
51+
$this->assertNull($queue->pop('test'));
52+
}
53+
54+
public function test_queueRelease()
55+
{
56+
$queue = $this->connection->queue();
57+
$queue->push(
58+
(new Message(['foo' => 'bar']))
59+
->setQueue('test')
60+
);
61+
62+
$message = $queue->pop('test');
63+
$this->assertSame(['foo' => 'bar'], $message->message()->data());
64+
$this->assertFalse($message->isRejected());
65+
$this->assertFalse($message->isDeleted());
66+
67+
$queue->release($message->message());
68+
$this->assertEquals($message, $queue->pop('test'));
69+
$this->assertFalse($message->isRejected());
70+
$this->assertFalse($message->isDeleted());
71+
72+
$message->acknowledge();
73+
}
74+
75+
public function test_topic()
76+
{
77+
$messages = [];
78+
79+
$topic = $this->connection->topic();
80+
$topic->subscribe(['topic.test'], function (QueueEnvelope $envelope) use (&$messages) {
81+
$messages[] = $envelope->message()->data();
82+
$envelope->acknowledge();
83+
});
84+
85+
if (pcntl_fork() === 0) {
86+
usleep(50000);
87+
$topic->publish(
88+
(new Message(['foo' => 'bar']))
89+
->setTopic('topic.test')
90+
);
91+
exit;
92+
}
93+
94+
$topic->consume(2);
95+
$this->assertEquals([['foo' => 'bar']], $messages);
96+
}
97+
}

0 commit comments

Comments
 (0)