summaryrefslogtreecommitdiff
path: root/plugins/jobs/oooold/tests
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jobs/oooold/tests')
-rw-r--r--plugins/jobs/oooold/tests/.rr.yaml63
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Amqp/BrokerTest.php20
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Amqp/ErrorJob.php22
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Amqp/Job.php26
-rw-r--r--plugins/jobs/oooold/tests/Jobs/BaseTest.php115
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Beanstalk/BrokerTest.php20
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Beanstalk/ErrorJob.php22
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Beanstalk/Job.php26
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Local/BrokerTest.php20
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Local/ErrorJob.php22
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Local/Job.php26
-rw-r--r--plugins/jobs/oooold/tests/Jobs/OptionsTest.php34
-rw-r--r--plugins/jobs/oooold/tests/Jobs/RegistryTest.php43
-rw-r--r--plugins/jobs/oooold/tests/Jobs/ShortCircuitTest.php90
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Sqs/BrokerTest.php20
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Sqs/ErrorJob.php22
-rw-r--r--plugins/jobs/oooold/tests/Jobs/Sqs/Job.php26
-rw-r--r--plugins/jobs/oooold/tests/bootstrap.php16
-rw-r--r--plugins/jobs/oooold/tests/consumer.php22
-rw-r--r--plugins/jobs/oooold/tests/docker-compose.yml22
20 files changed, 677 insertions, 0 deletions
diff --git a/plugins/jobs/oooold/tests/.rr.yaml b/plugins/jobs/oooold/tests/.rr.yaml
new file mode 100644
index 00000000..2fd323db
--- /dev/null
+++ b/plugins/jobs/oooold/tests/.rr.yaml
@@ -0,0 +1,63 @@
+jobs:
+ # worker pool configuration
+ workers:
+ command: "php consumer.php"
+ pool:
+ numWorkers: 4
+
+ # rabbitmq and similar servers
+ amqp:
+ addr: amqp://guest:guest@localhost:5672/
+
+ # beanstalk configuration
+ beanstalk:
+ addr: tcp://localhost:11300
+
+ # amazon sqs configuration
+ sqs:
+ key: api-key
+ secret: api-secret
+ region: us-west-1
+ endpoint: http://localhost:9324
+
+ # job destinations and options
+ dispatch:
+ spiral-jobs-tests-amqp-*.pipeline: amqp
+ spiral-jobs-tests-local-*.pipeline: local
+ spiral-jobs-tests-beanstalk-*.pipeline: beanstalk
+ spiral-jobs-tests-sqs-*.pipeline: sqs
+
+ # list of broker pipelines associated with endpoints
+ pipelines:
+ local:
+ broker: ephemeral
+
+ amqp:
+ broker: amqp
+ queue: default
+
+ beanstalk:
+ broker: beanstalk
+ tube: default
+
+ sqs:
+ broker: sqs
+ queue: default
+ declare:
+ MessageRetentionPeriod: 86400
+
+ # list of pipelines to be consumed by the server, keep empty if you want to start consuming manually
+ consume: ["local", "amqp", "beanstalk", "sqs"]
+
+metrics:
+ address: localhost:2112
+
+# monitors rr server(s)
+limit:
+ interval: 1
+ services:
+ jobs:
+ maxMemory: 100
+ TTL: 0
+ idleTTL: 0
+ execTTL: 60 \ No newline at end of file
diff --git a/plugins/jobs/oooold/tests/Jobs/Amqp/BrokerTest.php b/plugins/jobs/oooold/tests/Jobs/Amqp/BrokerTest.php
new file mode 100644
index 00000000..637c14d6
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Amqp/BrokerTest.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Amqp;
+
+use Spiral\Jobs\Tests\BaseTest;
+
+class BrokerTest extends BaseTest
+{
+ public const JOB = Job::class;
+ public const ERROR_JOB = ErrorJob::class;
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Amqp/ErrorJob.php b/plugins/jobs/oooold/tests/Jobs/Amqp/ErrorJob.php
new file mode 100644
index 00000000..82b6e7e0
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Amqp/ErrorJob.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Amqp;
+
+use Spiral\Jobs\JobHandler;
+
+class ErrorJob extends JobHandler
+{
+ public function invoke(string $id): void
+ {
+ throw new \Error('something is wrong');
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Amqp/Job.php b/plugins/jobs/oooold/tests/Jobs/Amqp/Job.php
new file mode 100644
index 00000000..2c6ad819
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Amqp/Job.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Amqp;
+
+use Spiral\Jobs\JobHandler;
+
+class Job extends JobHandler
+{
+ public const JOB_FILE = __DIR__ . '/../../local.job';
+
+ public function invoke(string $id, array $payload): void
+ {
+ file_put_contents(self::JOB_FILE, json_encode(
+ $payload + compact('id')
+ ));
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/BaseTest.php b/plugins/jobs/oooold/tests/Jobs/BaseTest.php
new file mode 100644
index 00000000..67f280b5
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/BaseTest.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Spiral\Core\Container;
+use Spiral\Goridge\RPC;
+use Spiral\Goridge\SocketRelay;
+use Spiral\Jobs\Options;
+use Spiral\Jobs\Queue;
+use Spiral\Jobs\Registry\ContainerRegistry;
+
+abstract class BaseTest extends TestCase
+{
+ public const JOB = null;
+ public const ERROR_JOB = null;
+
+ private $job;
+ private $errorJob;
+
+ public function setUp(): void
+ {
+ $this->job = static::JOB;
+ $this->errorJob = static::ERROR_JOB;
+ }
+
+ protected function tearDown(): void
+ {
+ if (file_exists((static::JOB)::JOB_FILE)) {
+ unlink((static::JOB)::JOB_FILE);
+ }
+ }
+
+ public function testJob(): void
+ {
+ $jobs = $this->makeJobs();
+
+ $id = $jobs->push($this->job, ['data' => 100]);
+
+ $this->assertNotEmpty($id);
+
+ $this->waitForJob();
+ $this->assertFileExists($this->job::JOB_FILE);
+
+ $data = json_decode(file_get_contents($this->job::JOB_FILE), true);
+ $this->assertSame($id, $data['id']);
+ $this->assertSame(100, $data['data']);
+ }
+
+ public function testErrorJob(): void
+ {
+ $jobs = $this->makeJobs();
+
+ $id = $jobs->push($this->errorJob, ['data' => 100]);
+ $this->assertNotEmpty($id);
+ }
+
+ public function testDelayJob(): void
+ {
+ $jobs = $this->makeJobs();
+
+ $id = $jobs->push($this->job, ['data' => 100], Options::delayed(1));
+
+ $this->assertNotEmpty($id);
+
+ $this->assertTrue($this->waitForJob() > 1);
+ $this->assertFileExists($this->job::JOB_FILE);
+
+ $data = json_decode(file_get_contents($this->job::JOB_FILE), true);
+ $this->assertSame($id, $data['id']);
+ $this->assertSame(100, $data['data']);
+ }
+
+ /**
+ * @expectedException \Spiral\Jobs\Exception\JobException
+ */
+ public function testConnectionException(): void
+ {
+ $jobs = new Queue(
+ new RPC(new SocketRelay('localhost', 6002)),
+ new ContainerRegistry(new Container())
+ );
+
+ $jobs->push($this->job, ['data' => 100]);
+ }
+
+ public function makeJobs(): Queue
+ {
+ return new Queue(
+ new RPC(new SocketRelay('localhost', 6001)),
+ new ContainerRegistry(new Container())
+ );
+ }
+
+ private function waitForJob(): float
+ {
+ $start = microtime(true);
+ $try = 0;
+ while (!file_exists($this->job::JOB_FILE) && $try < 10) {
+ usleep(250000);
+ $try++;
+ }
+
+ return microtime(true) - $start;
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Beanstalk/BrokerTest.php b/plugins/jobs/oooold/tests/Jobs/Beanstalk/BrokerTest.php
new file mode 100644
index 00000000..d1ea4682
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Beanstalk/BrokerTest.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Beanstalk;
+
+use Spiral\Jobs\Tests\BaseTest;
+
+class BrokerTest extends BaseTest
+{
+ public const JOB = Job::class;
+ public const ERROR_JOB = ErrorJob::class;
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Beanstalk/ErrorJob.php b/plugins/jobs/oooold/tests/Jobs/Beanstalk/ErrorJob.php
new file mode 100644
index 00000000..c4349871
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Beanstalk/ErrorJob.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Beanstalk;
+
+use Spiral\Jobs\JobHandler;
+
+class ErrorJob extends JobHandler
+{
+ public function invoke(string $id): void
+ {
+ throw new \Error('something is wrong');
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Beanstalk/Job.php b/plugins/jobs/oooold/tests/Jobs/Beanstalk/Job.php
new file mode 100644
index 00000000..f8bd541a
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Beanstalk/Job.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Beanstalk;
+
+use Spiral\Jobs\JobHandler;
+
+class Job extends JobHandler
+{
+ public const JOB_FILE = __DIR__ . '/../../local.job';
+
+ public function invoke(string $id, array $payload): void
+ {
+ file_put_contents(self::JOB_FILE, json_encode(
+ $payload + compact('id')
+ ));
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Local/BrokerTest.php b/plugins/jobs/oooold/tests/Jobs/Local/BrokerTest.php
new file mode 100644
index 00000000..9ba83de6
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Local/BrokerTest.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Local;
+
+use Spiral\Jobs\Tests\BaseTest;
+
+class BrokerTest extends BaseTest
+{
+ public const JOB = Job::class;
+ public const ERROR_JOB = ErrorJob::class;
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Local/ErrorJob.php b/plugins/jobs/oooold/tests/Jobs/Local/ErrorJob.php
new file mode 100644
index 00000000..70b1365b
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Local/ErrorJob.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Local;
+
+use Spiral\Jobs\JobHandler;
+
+class ErrorJob extends JobHandler
+{
+ public function invoke(string $id): void
+ {
+ throw new \Error('something is wrong');
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Local/Job.php b/plugins/jobs/oooold/tests/Jobs/Local/Job.php
new file mode 100644
index 00000000..2f5803c8
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Local/Job.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Local;
+
+use Spiral\Jobs\JobHandler;
+
+class Job extends JobHandler
+{
+ public const JOB_FILE = __DIR__ . '/../../local.job';
+
+ public function invoke(string $id, array $payload): void
+ {
+ file_put_contents(self::JOB_FILE, json_encode(
+ $payload + compact('id')
+ ));
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/OptionsTest.php b/plugins/jobs/oooold/tests/Jobs/OptionsTest.php
new file mode 100644
index 00000000..5d00794e
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/OptionsTest.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Spiral\Jobs\Options;
+
+class OptionsTest extends TestCase
+{
+ public function testDelay(): void
+ {
+ $o = new Options();
+ $this->assertNull($o->getDelay());
+ $o = $o->withDelay(10);
+ $this->assertSame(10, $o->getDelay());
+ }
+
+ public function testPipeline(): void
+ {
+ $o = new Options();
+ $this->assertNull($o->getPipeline());
+ $o = $o->withPipeline('custom');
+ $this->assertSame('custom', $o->getPipeline());
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/RegistryTest.php b/plugins/jobs/oooold/tests/Jobs/RegistryTest.php
new file mode 100644
index 00000000..7abd75f7
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/RegistryTest.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Spiral\Core\Container;
+use Spiral\Jobs\Registry\ContainerRegistry;
+use Spiral\Jobs\Tests\Local\Job;
+
+class RegistryTest extends TestCase
+{
+ public function testMakeJob(): void
+ {
+ $factory = new ContainerRegistry(new Container());
+
+ $j = $factory->getHandler('spiral.jobs.tests.local.job');
+ $this->assertInstanceOf(Job::class, $j);
+
+ $this->assertSame(json_encode(['data' => 200]), $j->serialize(
+ 'spiral.jobs.tests.local.job',
+ ['data' => 200]
+ ));
+ }
+
+ /**
+ * @expectedException \Spiral\Jobs\Exception\JobException
+ */
+ public function testMakeUndefined(): void
+ {
+ $factory = new ContainerRegistry(new Container());
+
+ $factory->getHandler('spiral.jobs.undefined');
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/ShortCircuitTest.php b/plugins/jobs/oooold/tests/Jobs/ShortCircuitTest.php
new file mode 100644
index 00000000..c3306385
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/ShortCircuitTest.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Spiral\Core\Container;
+use Spiral\Jobs\Options;
+use Spiral\Jobs\Registry\ContainerRegistry;
+use Spiral\Jobs\ShortCircuit;
+use Spiral\Jobs\Tests\Local\ErrorJob;
+use Spiral\Jobs\Tests\Local\Job;
+
+class ShortCircuitTest extends TestCase
+{
+ protected function tearDown(): void
+ {
+ if (file_exists(Job::JOB_FILE)) {
+ unlink(Job::JOB_FILE);
+ }
+ }
+
+ public function testLocal(): void
+ {
+ $c = new ContainerRegistry(new Container());
+ $jobs = new ShortCircuit($c, $c);
+
+ $id = $jobs->push(Job::class, ['data' => 100]);
+
+ $this->assertNotEmpty($id);
+
+ $this->assertFileExists(Job::JOB_FILE);
+
+ $data = json_decode(file_get_contents(Job::JOB_FILE), true);
+ $this->assertSame($id, $data['id']);
+ $this->assertSame(100, $data['data']);
+ }
+
+ public function testLocalDelayed(): void
+ {
+ $c = new ContainerRegistry(new Container());
+ $jobs = new ShortCircuit($c, $c);
+
+ $t = microtime(true);
+ $id = $jobs->push(Job::class, ['data' => 100], Options::delayed(1));
+
+ $this->assertTrue(microtime(true) - $t >= 1);
+
+ $this->assertNotEmpty($id);
+
+ $this->assertFileExists(Job::JOB_FILE);
+
+ $data = json_decode(file_get_contents(Job::JOB_FILE), true);
+ $this->assertSame($id, $data['id']);
+ $this->assertSame(100, $data['data']);
+ }
+
+ /**
+ * @expectedException \Spiral\Jobs\Exception\JobException
+ */
+ public function testError(): void
+ {
+ $c = new ContainerRegistry(new Container());
+ $jobs = new ShortCircuit($c, $c);
+ $jobs->push(ErrorJob::class);
+ }
+
+ public function testLocalDelay(): void
+ {
+ $c = new ContainerRegistry(new Container());
+ $jobs = new ShortCircuit($c, $c);
+
+ $id = $jobs->push(Job::class, ['data' => 100], Options::delayed(1));
+ $this->assertNotEmpty($id);
+
+ $this->assertFileExists(Job::JOB_FILE);
+
+ $data = json_decode(file_get_contents(Job::JOB_FILE), true);
+ $this->assertSame($id, $data['id']);
+ $this->assertSame(100, $data['data']);
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Sqs/BrokerTest.php b/plugins/jobs/oooold/tests/Jobs/Sqs/BrokerTest.php
new file mode 100644
index 00000000..ccaa96de
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Sqs/BrokerTest.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Sqs;
+
+use Spiral\Jobs\Tests\BaseTest;
+
+class BrokerTest extends BaseTest
+{
+ public const JOB = Job::class;
+ public const ERROR_JOB = ErrorJob::class;
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Sqs/ErrorJob.php b/plugins/jobs/oooold/tests/Jobs/Sqs/ErrorJob.php
new file mode 100644
index 00000000..738b9f2b
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Sqs/ErrorJob.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Sqs;
+
+use Spiral\Jobs\JobHandler;
+
+class ErrorJob extends JobHandler
+{
+ public function invoke(string $id): void
+ {
+ throw new \Error('something is wrong');
+ }
+}
diff --git a/plugins/jobs/oooold/tests/Jobs/Sqs/Job.php b/plugins/jobs/oooold/tests/Jobs/Sqs/Job.php
new file mode 100644
index 00000000..e22483a8
--- /dev/null
+++ b/plugins/jobs/oooold/tests/Jobs/Sqs/Job.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+namespace Spiral\Jobs\Tests\Sqs;
+
+use Spiral\Jobs\JobHandler;
+
+class Job extends JobHandler
+{
+ public const JOB_FILE = __DIR__ . '/../../local.job';
+
+ public function invoke(string $id, array $payload): void
+ {
+ file_put_contents(self::JOB_FILE, json_encode(
+ $payload + compact('id')
+ ));
+ }
+}
diff --git a/plugins/jobs/oooold/tests/bootstrap.php b/plugins/jobs/oooold/tests/bootstrap.php
new file mode 100644
index 00000000..b25fdc9d
--- /dev/null
+++ b/plugins/jobs/oooold/tests/bootstrap.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+error_reporting(E_ALL | E_STRICT);
+ini_set('display_errors', 'stderr');
+
+//Composer
+require dirname(__DIR__) . '/vendor_php/autoload.php';
diff --git a/plugins/jobs/oooold/tests/consumer.php b/plugins/jobs/oooold/tests/consumer.php
new file mode 100644
index 00000000..ed56edff
--- /dev/null
+++ b/plugins/jobs/oooold/tests/consumer.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Spiral Framework.
+ *
+ * @license MIT
+ * @author Anton Titov (Wolfy-J)
+ */
+
+declare(strict_types=1);
+
+use Spiral\Core\Container;
+use Spiral\Goridge;
+use Spiral\Jobs;
+use Spiral\RoadRunner;
+
+require 'bootstrap.php';
+
+$rr = new RoadRunner\Worker(new Goridge\StreamRelay(STDIN, STDOUT));
+
+$consumer = new Jobs\Consumer(new Jobs\Registry\ContainerRegistry(new Container()));
+$consumer->serve($rr);
diff --git a/plugins/jobs/oooold/tests/docker-compose.yml b/plugins/jobs/oooold/tests/docker-compose.yml
new file mode 100644
index 00000000..7b88c9cf
--- /dev/null
+++ b/plugins/jobs/oooold/tests/docker-compose.yml
@@ -0,0 +1,22 @@
+version: "3"
+
+services:
+ beanstalk:
+ image: schickling/beanstalkd
+ ports:
+ - "11300:11300"
+
+ sqs:
+ image: vsouza/sqs-local
+ ports:
+ - "9324:9324"
+
+ rabbitmq:
+ image: rabbitmq:3-management
+ environment:
+ RABBITMQ_DEFAULT_USER: guest
+ RABBITMQ_DEFAULT_PASS: guest
+ RABBITMQ_DEFAULT_VHOST: /
+ ports:
+ - "15672:15672"
+ - "5672:5672" \ No newline at end of file