|
7 | 7 | use Monolog\Handler\TestHandler; |
8 | 8 | use Monolog\Logger; |
9 | 9 | use PHPUnit\Framework\TestCase; |
| 10 | +use WonderNetwork\SlimKernel\System\FakeSystem; |
10 | 11 |
|
11 | 12 | final class WorkerMemoryUsageSubscriberTest extends TestCase { |
12 | 13 | public function testReportsAboveCutoff(): void { |
13 | 14 | $buffer = new TestHandler(); |
14 | 15 | $logger = new Logger('some'); |
15 | 16 | $logger->pushHandler($buffer); |
16 | | - $memoryLeak = []; |
17 | 17 |
|
18 | | - $sut = new WorkerMemoryUsageSubscriber($logger, cutoff: 10 * 1024); |
| 18 | + $system = new FakeSystem(); |
| 19 | + |
| 20 | + $sut = new WorkerMemoryUsageSubscriber( |
| 21 | + logger: $logger, |
| 22 | + cutoff: 10 * 1024, |
| 23 | + system: $system, |
| 24 | + ); |
19 | 25 | $sut->onWorkerRunning(); |
20 | 26 | self::assertEmpty($buffer->getRecords()); |
21 | 27 |
|
22 | | - $memoryLeak[] = str_repeat(' ', 10 * 1024); |
23 | | - // triggers the first log |
24 | | - $sut->onWorkerRunning(); |
25 | | - self::assertCount(1, $buffer->getRecords()); |
26 | | - // the logs themselves take memory, so: |
| 28 | + $system->setMemoryUsage(10 * 1024 - 1); |
27 | 29 | $sut->onWorkerRunning(); |
28 | | - self::assertCount(2, $buffer->getRecords()); |
29 | | - // no more logs: |
| 30 | + self::assertCount(0, $buffer->getRecords()); |
| 31 | + |
| 32 | + $system->setMemoryUsage(10 * 1024); |
30 | 33 | $sut->onWorkerRunning(); |
| 34 | + self::assertCount(1, $buffer->getRecords()); |
| 35 | + self::assertSame([ |
| 36 | + 'current' => '10 KB', |
| 37 | + 'sign' => '+', |
| 38 | + 'difference' => '10 KB', |
| 39 | + ], $buffer->getRecords()[0]->context); |
| 40 | + |
31 | 41 | $sut->onWorkerRunning(); |
| 42 | + $system->setMemoryUsage(12 * 1024); |
32 | 43 | $sut->onWorkerRunning(); |
33 | | - self::assertCount(2, $buffer->getRecords()); |
34 | | - |
35 | | - unset($memoryLeak); |
| 44 | + self::assertCount(1, $buffer->getRecords()); |
36 | 45 | } |
37 | 46 | } |
0 commit comments