Skip to content

Commit

Permalink
Merge pull request #15 from spiral/feature/rr-mode-enum
Browse files Browse the repository at this point in the history
Adds RoadRunnerMode enum
  • Loading branch information
butschster committed Jun 28, 2022
2 parents b8705b7 + 1eb90a8 commit 7191894
Show file tree
Hide file tree
Showing 11 changed files with 100 additions and 113 deletions.
9 changes: 4 additions & 5 deletions src/GRPC/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,23 @@
use Psr\Container\ContainerInterface;
use Spiral\Boot\DispatcherInterface;
use Spiral\Boot\FinalizerInterface;
use Spiral\RoadRunner\Environment\Mode;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\GRPC\Server;
use Spiral\RoadRunner\WorkerInterface;
use Spiral\Exceptions\ExceptionReporterInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;

final class Dispatcher implements DispatcherInterface
{
public function __construct(
private readonly EnvironmentInterface $env,
private readonly ContainerInterface $container,
private readonly FinalizerInterface $finalizer
private readonly FinalizerInterface $finalizer,
private readonly RoadRunnerMode $mode
) {
}

public function canServe(): bool
{
return \PHP_SAPI === 'cli' && $this->env->getMode() === Mode::MODE_GRPC;
return \PHP_SAPI === 'cli' && $this->mode === RoadRunnerMode::Grpc;
}

public function serve(): void
Expand Down
9 changes: 4 additions & 5 deletions src/Http/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,22 @@
use Spiral\Exceptions\ExceptionHandlerInterface;
use Spiral\Exceptions\Verbosity;
use Spiral\Http\Http;
use Spiral\RoadRunner\Environment\Mode;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\Http\PSR7WorkerInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;

final class Dispatcher implements DispatcherInterface
{
public function __construct(
private readonly EnvironmentInterface $env,
private readonly ContainerInterface $container,
private readonly ErrorHandlerInterface $errorHandler,
private readonly FinalizerInterface $finalizer
private readonly FinalizerInterface $finalizer,
private readonly RoadRunnerMode $mode
) {
}

public function canServe(): bool
{
return \PHP_SAPI === 'cli' && $this->env->getMode() === Mode::MODE_HTTP;
return \PHP_SAPI === 'cli' && $this->mode === RoadRunnerMode::Http;
}

public function serve(): void
Expand Down
7 changes: 3 additions & 4 deletions src/Queue/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,24 @@
use Spiral\Boot\DispatcherInterface;
use Spiral\Boot\FinalizerInterface;
use Spiral\Queue\HandlerRegistryInterface;
use Spiral\RoadRunner\Environment\Mode;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\Jobs\ConsumerInterface;
use Spiral\RoadRunner\Jobs\Exception\JobsException;
use Spiral\RoadRunner\Jobs\Task\ReceivedTaskInterface;
use Spiral\Queue\Failed\FailedJobHandlerInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;

final class Dispatcher implements DispatcherInterface
{
public function __construct(
private readonly ContainerInterface $container,
private readonly FinalizerInterface $finalizer,
private readonly EnvironmentInterface $env
private readonly RoadRunnerMode $mode
) {
}

public function canServe(): bool
{
return \PHP_SAPI === 'cli' && $this->env->getMode() === Mode::MODE_JOBS;
return \PHP_SAPI === 'cli' && $this->mode === RoadRunnerMode::Jobs;
}

/**
Expand Down
27 changes: 27 additions & 0 deletions src/RoadRunnerMode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace Spiral\RoadRunnerBridge;

use Spiral\Boot\Injector\InjectableEnumInterface;
use Spiral\Boot\Injector\ProvideFrom;
use Spiral\RoadRunner\EnvironmentInterface;

#[ProvideFrom(method: 'detect')]
enum RoadRunnerMode: string implements InjectableEnumInterface
{
case Unknown = 'unknown';
case Http = 'http';
case Temporal = 'temporal';
case Jobs = 'jobs';
case Grpc = 'grpc';
case Tcp = 'tcp';

public static function detect(EnvironmentInterface $environment): self
{
$value = $environment->getMode();

return self::tryFrom($value) ?? self::Unknown;
}
}
9 changes: 4 additions & 5 deletions src/Tcp/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,21 @@
use Spiral\Boot\DispatcherInterface;
use Spiral\Boot\FinalizerInterface;
use Spiral\Exceptions\ExceptionReporterInterface;
use Spiral\RoadRunner\Environment\Mode;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\WorkerInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;

final class Dispatcher implements DispatcherInterface
{
public function __construct(
private readonly EnvironmentInterface $env,
private readonly ContainerInterface $container,
private readonly FinalizerInterface $finalizer
private readonly FinalizerInterface $finalizer,
private readonly RoadRunnerMode $mode
) {
}

public function canServe(): bool
{
return \PHP_SAPI === 'cli' && $this->env->getMode() === Mode::MODE_TCP;
return \PHP_SAPI === 'cli' && $this->mode === RoadRunnerMode::Tcp;
}

public function serve(): void
Expand Down
17 changes: 3 additions & 14 deletions tests/src/GRPC/DispatcherTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@

use Spiral\App\GRPC\EchoService\Message;
use Spiral\Boot\FinalizerInterface;
use Spiral\RoadRunner\Environment;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\Payload;
use Spiral\RoadRunner\Worker;
use Spiral\RoadRunner\WorkerInterface;
use Spiral\RoadRunnerBridge\GRPC\Dispatcher;
use Spiral\RoadRunnerBridge\RoadRunnerMode;
use Spiral\Tests\ConsoleTestCase;

final class DispatcherTest extends ConsoleTestCase
Expand All @@ -29,24 +28,14 @@ public function testCanServeShouldReturnFalseWithWrongEnvironment(): void

public function testCanServe(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'grpc',
]);
});

$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Grpc);
$this->assertDispatcherCanBeServed(Dispatcher::class);
}

public function testServe()
{
$worker = $this->mockContainer(WorkerInterface::class, Worker::class);

$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'grpc',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Grpc);

$finalizer = $this->mockContainer(FinalizerInterface::class);
$finalizer->shouldReceive('finalize')->once()->with(false);
Expand Down
21 changes: 4 additions & 17 deletions tests/src/Http/DispatcherTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@
use Psr\Http\Server\RequestHandlerInterface;
use Spiral\Boot\FinalizerInterface;
use Spiral\Http\Http;
use Spiral\RoadRunner\Environment;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\Http\PSR7WorkerInterface;
use Spiral\RoadRunnerBridge\Http\Dispatcher;
use Spiral\RoadRunnerBridge\Http\ErrorHandlerInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;
use Spiral\Tests\TestCase;

final class DispatcherTest extends TestCase
Expand All @@ -28,22 +27,14 @@ public function testCanServeShouldReturnFalseWithWrongEnvironment(): void

public function testCanServe(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'http',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Http);

$this->assertDispatcherCanBeServed(Dispatcher::class);
}

public function testServe(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'http',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Http);

$finalizer = $this->mockContainer(FinalizerInterface::class);
$finalizer->shouldReceive('finalize')->once()->with(false);
Expand All @@ -68,11 +59,7 @@ public function testServe(): void

public function testServeWithError(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'http',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Http);

$finalizer = $this->mockContainer(FinalizerInterface::class);
$finalizer->shouldReceive('finalize')->once()->with(false);
Expand Down
22 changes: 4 additions & 18 deletions tests/src/Queue/DispatcherTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@
use Spiral\Queue\Failed\FailedJobHandlerInterface;
use Spiral\Queue\HandlerInterface;
use Spiral\Queue\HandlerRegistryInterface;
use Spiral\RoadRunner\Environment;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunner\Jobs\ConsumerInterface;
use Spiral\RoadRunner\Jobs\Task\ReceivedTaskInterface;
use Spiral\RoadRunnerBridge\Queue\Dispatcher;
use Spiral\RoadRunnerBridge\RoadRunnerMode;
use Spiral\Tests\TestCase;

final class DispatcherTest extends TestCase
Expand All @@ -25,22 +24,13 @@ public function testCanServeShouldReturnFalseWithWrongEnvironment(): void

public function testCanServe(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'jobs',
]);
});

$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Jobs);
$this->assertDispatcherCanBeServed(Dispatcher::class);
}

public function testServeReceivedTask(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'jobs',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Jobs);

$finalizer = $this->mockContainer(FinalizerInterface::class);
$finalizer->shouldReceive('finalize')->once()->with(false);
Expand All @@ -66,11 +56,7 @@ public function testServeReceivedTask(): void

public function testServeReceivedTaskWithThrownException(): void
{
$this->getContainer()->bind(EnvironmentInterface::class, function () {
return new Environment([
'RR_MODE' => 'jobs',
]);
});
$this->getContainer()->bind(RoadRunnerMode::class, RoadRunnerMode::Jobs);

$e = new \Exception('Something went wrong');

Expand Down
23 changes: 0 additions & 23 deletions tests/src/Queue/QueueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

use Mockery as m;
use Spiral\Core\Container;
use Spiral\Queue\Job\CallableJob;
use Spiral\Queue\Job\ObjectJob;
use Spiral\Queue\Options;
use Spiral\RoadRunner\Jobs\Queue\CreateInfoInterface;
Expand Down Expand Up @@ -112,26 +111,4 @@ public function testPushObject()

$this->assertSame('task-id', $this->queue->pushObject($object));
}

public function testPushCallable()
{
$this->registry->shouldReceive('getPipeline')
->once()
->with('default')
->andReturn($queue = m::mock(QueueInterface::class));

$callback = function () {
return 'bar';
};

$preparedTask = m::mock(PreparedTaskInterface::class);
$queuedTask = m::mock(QueuedTaskInterface::class);
$queue->shouldReceive('create')->once()
->withSomeOfArgs(CallableJob::class, ['callback' => $callback])
->andReturn($preparedTask);
$queue->shouldReceive('dispatch')->once()->with($preparedTask)->andReturn($queuedTask);
$queuedTask->shouldReceive('getId')->once()->andReturn('task-id');

$this->assertSame('task-id', $this->queue->pushCallable($callback));
}
}
42 changes: 42 additions & 0 deletions tests/src/RoadRunnerModeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace Spiral\Tests;

use Spiral\RoadRunner\Environment;
use Spiral\RoadRunner\EnvironmentInterface;
use Spiral\RoadRunnerBridge\RoadRunnerMode;

final class RoadRunnerModeTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
$this->getContainer()->removeBinding(RoadRunnerMode::class);
}

/**
* @dataProvider roadRunnerModes
*/
public function testDetectMode(string $mode, RoadRunnerMode $expected): void
{
$this->getContainer()->bind(EnvironmentInterface::class, static fn () => new Environment([
'RR_MODE' => $mode,
]));

$this->assertSame($expected, $this->getContainer()->get(RoadRunnerMode::class));
}

public function roadRunnerModes()
{
return [
'http' => ['http', RoadRunnerMode::Http],
'tcp' => ['tcp', RoadRunnerMode::Tcp],
'grpc' => ['grpc', RoadRunnerMode::Grpc],
'temporal' => ['temporal', RoadRunnerMode::Temporal],
'jobs' => ['jobs', RoadRunnerMode::Jobs],
'test' => ['test', RoadRunnerMode::Unknown],
];
}
}
Loading

0 comments on commit 7191894

Please sign in to comment.