Skip to content

Commit

Permalink
Add test for handling client disconnects
Browse files Browse the repository at this point in the history
  • Loading branch information
ostrolucky committed Jan 19, 2019
1 parent 7fb87f8 commit 26a4fcd
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Responder.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ public function __invoke(Socket $socket): \Generator
$header[] = "Content-Length: {$this->bufferer->getCurrentProgress()}";
}

yield $socket->write(implode("\r\n", $header)."\r\n\r\n");

$progressBar = new ProgressBar(
$this->consoleOutput->section(),
$this->bufferer->getCurrentProgress(),
Expand All @@ -61,6 +59,8 @@ public function __invoke(Socket $socket): \Generator
$handle = new ResourceInputStream(fopen($this->bufferer->getFilePath(), 'rb'));

try {
yield $socket->write(implode("\r\n", $header)."\r\n\r\n");

while (true) {
$buffererProgress = $this->bufferer->getCurrentProgress();

Expand Down
41 changes: 41 additions & 0 deletions tests/ResponderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Ostrolucky\Stdinho\Tests;

use Amp\Coroutine;
use Amp\Socket\ClientSocket;
use Amp\Success;
use Ostrolucky\Stdinho\Bufferer\ResolvedBufferer;
use Ostrolucky\Stdinho\Responder;
use PHPUnit\Framework\TestCase;
use Psr\Log\Test\TestLogger;
use Symfony\Component\Console\Output\ConsoleOutput;
use function Amp\Promise\wait;

class ResponderTest extends TestCase
{
public function testResponderHandlesClientAbruptDisconnect(): void
{
$responder = new Responder(
$logger = new TestLogger(),
new ResolvedBufferer(__FILE__),
$this->createMock(ConsoleOutput::class)
);

$socket = $this->getMockBuilder(ClientSocket::class)
->setConstructorArgs([$resource = fopen('php://memory', 'rw')])
->setMethods(['read', 'getRemoteAddress'])
->getMock()
;

$socket->method('read')->willReturn(new Success(''));

fclose($resource);

wait(new Coroutine($responder->__invoke($socket)));

self::assertTrue($logger->hasDebugThatContains('aborted download'));
}
}

0 comments on commit 26a4fcd

Please sign in to comment.