Merge branch '4.3' into 4.4
* 4.3: [DependencyInjection] Fixed the `getServiceIds` implementation to always return aliases [Messenger] Stop worker when it should stop
This commit is contained in:
commit
c1bca297cf
@ -332,7 +332,7 @@ class Container implements ResettableContainerInterface
|
|||||||
*/
|
*/
|
||||||
public function getServiceIds()
|
public function getServiceIds()
|
||||||
{
|
{
|
||||||
return array_map('strval', array_unique(array_merge(['service_container'], array_keys($this->fileMap), array_keys($this->methodMap), array_keys($this->services))));
|
return array_map('strval', array_unique(array_merge(['service_container'], array_keys($this->fileMap), array_keys($this->methodMap), array_keys($this->aliases), array_keys($this->services))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -139,7 +139,7 @@ class ContainerTest extends TestCase
|
|||||||
|
|
||||||
$sc = new ProjectServiceContainer();
|
$sc = new ProjectServiceContainer();
|
||||||
$sc->set('foo', $obj = new \stdClass());
|
$sc->set('foo', $obj = new \stdClass());
|
||||||
$this->assertEquals(['service_container', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'internal_dependency', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by factory methods in the method map, followed by service ids defined by set()');
|
$this->assertEquals(['service_container', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'internal_dependency', 'alias', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by factory methods in the method map, followed by service ids defined by set()');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSet()
|
public function testSet()
|
||||||
|
@ -1300,6 +1300,30 @@ class PhpDumperTest extends TestCase
|
|||||||
$this->assertSame('some value', $container->get('bar')->foo);
|
$this->assertSame('some value', $container->get('bar')->foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAliasCanBeFoundInTheDumpedContainerWhenBothTheAliasAndTheServiceArePublic()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
|
||||||
|
$container->register('foo', 'stdClass')->setPublic(true);
|
||||||
|
$container->setAlias('bar', 'foo')->setPublic(true);
|
||||||
|
|
||||||
|
$container->compile();
|
||||||
|
|
||||||
|
// Bar is found in the compiled container
|
||||||
|
$service_ids = $container->getServiceIds();
|
||||||
|
$this->assertContains('bar', $service_ids);
|
||||||
|
|
||||||
|
$dumper = new PhpDumper($container);
|
||||||
|
$dump = $dumper->dump(['class' => 'Symfony_DI_PhpDumper_AliasesCanBeFoundInTheDumpedContainer']);
|
||||||
|
eval('?>'.$dump);
|
||||||
|
|
||||||
|
$container = new \Symfony_DI_PhpDumper_AliasesCanBeFoundInTheDumpedContainer();
|
||||||
|
|
||||||
|
// Bar should still be found in the compiled container
|
||||||
|
$service_ids = $container->getServiceIds();
|
||||||
|
$this->assertContains('bar', $service_ids);
|
||||||
|
}
|
||||||
|
|
||||||
public function testWither()
|
public function testWither()
|
||||||
{
|
{
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
|
@ -27,6 +27,7 @@ use Symfony\Component\Messenger\Stamp\SentStamp;
|
|||||||
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
|
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
|
||||||
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
|
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
|
||||||
use Symfony\Component\Messenger\Worker;
|
use Symfony\Component\Messenger\Worker;
|
||||||
|
use Symfony\Component\Messenger\Worker\StopWhenMessageCountIsExceededWorker;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -361,6 +362,30 @@ class WorkerTest extends TestCase
|
|||||||
// make sure they were processed in the correct order
|
// make sure they were processed in the correct order
|
||||||
$this->assertSame([$envelope1, $envelope2, $envelope3, $envelope4, $envelope5, $envelope6], $processedEnvelopes);
|
$this->assertSame([$envelope1, $envelope2, $envelope3, $envelope4, $envelope5, $envelope6], $processedEnvelopes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testWorkerWithDecorator()
|
||||||
|
{
|
||||||
|
$envelope1 = new Envelope(new DummyMessage('message1'));
|
||||||
|
$envelope2 = new Envelope(new DummyMessage('message2'));
|
||||||
|
$envelope3 = new Envelope(new DummyMessage('message3'));
|
||||||
|
|
||||||
|
$receiver = new DummyReceiver([
|
||||||
|
[$envelope1, $envelope2, $envelope3],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$bus = $this->getMockBuilder(MessageBusInterface::class)->getMock();
|
||||||
|
|
||||||
|
$worker = new Worker([$receiver], $bus);
|
||||||
|
$workerWithDecorator = new StopWhenMessageCountIsExceededWorker($worker, 2);
|
||||||
|
$processedEnvelopes = [];
|
||||||
|
$workerWithDecorator->run([], function (?Envelope $envelope) use ($worker, &$processedEnvelopes) {
|
||||||
|
if (null !== $envelope) {
|
||||||
|
$processedEnvelopes[] = $envelope;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->assertSame([$envelope1, $envelope2], $processedEnvelopes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DummyReceiver implements ReceiverInterface
|
class DummyReceiver implements ReceiverInterface
|
||||||
|
@ -90,6 +90,10 @@ class Worker implements WorkerInterface
|
|||||||
|
|
||||||
$this->handleMessage($envelope, $receiver, $transportName, $this->retryStrategies[$transportName] ?? null);
|
$this->handleMessage($envelope, $receiver, $transportName, $this->retryStrategies[$transportName] ?? null);
|
||||||
$onHandled($envelope);
|
$onHandled($envelope);
|
||||||
|
|
||||||
|
if ($this->shouldStop) {
|
||||||
|
break 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// after handling a single receiver, quit and start the loop again
|
// after handling a single receiver, quit and start the loop again
|
||||||
|
Reference in New Issue
Block a user