2
0

PQueueWorkerRunCommandTest.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace Test\Michel\PQueue\Command;
  3. use Michel\PQueue\Command\PQueueWorkerRunCommand;
  4. use Michel\PQueue\PQueueConsumer;
  5. use Michel\PQueue\Transport\FilesystemTransport;
  6. use Michel\UniTester\TestCase;
  7. use Michel\Console\CommandParser;
  8. use Michel\Console\CommandRunner;
  9. use Michel\Console\InputInterface;
  10. use Michel\Console\Output;
  11. use Michel\Console\OutputInterface;
  12. class PQueueWorkerRunCommandTest extends TestCase
  13. {
  14. private string $transportDir;
  15. protected function setUp(): void
  16. {
  17. $this->transportDir = sys_get_temp_dir() . '/pqueue_test_' . uniqid();
  18. if (!is_dir($this->transportDir)) {
  19. mkdir($this->transportDir);
  20. }
  21. }
  22. protected function tearDown(): void
  23. {
  24. if (is_dir($this->transportDir)) {
  25. $this->recursiveRemove($this->transportDir);
  26. }
  27. }
  28. private function recursiveRemove(string $dir): void
  29. {
  30. $files = array_diff(scandir($dir), ['.', '..']);
  31. foreach ($files as $file) {
  32. (is_dir("$dir/$file")) ? $this->recursiveRemove("$dir/$file") : unlink("$dir/$file");
  33. }
  34. rmdir($dir);
  35. }
  36. protected function execute(): void
  37. {
  38. $this->testExecute();
  39. $this->testExecuteWithAllOptions();
  40. }
  41. public function testExecute()
  42. {
  43. $transport = new FilesystemTransport($this->transportDir);
  44. $consumer = new PQueueConsumer([]);
  45. $runner = new CommandRunner([
  46. new PQueueWorkerRunCommand($consumer, $transport),
  47. ]);
  48. $out = [];
  49. $code = $runner->run(new CommandParser(['', 'pqueue:worker:run', '--stop-when-empty']), new Output(function ($message) use (&$out) {
  50. $out[] = $message;
  51. }));
  52. $this->assertEquals(0, $code);
  53. $this->assertCount(31, $out);
  54. }
  55. public function testExecuteWithAllOptions()
  56. {
  57. $transport = new FilesystemTransport($this->transportDir);
  58. $consumer = new PQueueConsumer([]);
  59. $runner = new CommandRunner([
  60. new PQueueWorkerRunCommand($consumer, $transport),
  61. ]);
  62. $out = [];
  63. $code = $runner->run(new CommandParser([
  64. '',
  65. 'pqueue:worker:run',
  66. '--stop-when-empty',
  67. '--sleep=1',
  68. '--memory-limit=128',
  69. '--time-limit=60',
  70. '--max-retries=1',
  71. '--retry-delay=1',
  72. '--retry-multiplier=1',
  73. '--message-delay=10'
  74. ]), new Output(function ($message) use (&$out) {
  75. $out[] = $message;
  76. }));
  77. $this->assertEquals(0, $code);
  78. $this->assertCount(31, $out);
  79. }
  80. }