diff --git a/.gitignore b/.gitignore index da734f1..33793eb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ vendor/ composer.lock phpspec.yml phpunit.xml +/.php_cs.cache +/tests/server/ssl/*.pem +/tests/server/ssl/*.key +/tests/server/ssl/*.req diff --git a/.php_cs b/.php_cs index 23ba165..55d9b0b 100644 --- a/.php_cs +++ b/.php_cs @@ -1,13 +1,22 @@ setRules([ + '@PSR2' => true, + '@Symfony' => true, + 'array_syntax' => [ + 'syntax' => 'short', + ], + 'no_empty_phpdoc' => true, + 'no_superfluous_phpdoc_tags' => true, +]); -use SLLH\StyleCIBridge\ConfigBridge; +$finder = PhpCsFixer\Finder::create(); +$finder->in([ + 'src', + 'tests' +]); -return ConfigBridge::create(); +$config->setFinder($finder); + +return $config; diff --git a/.travis.yml b/.travis.yml index 0922767..ad51702 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,10 +7,9 @@ cache: - $HOME/.composer/cache php: - - 5.5 - - 5.6 - - 7.0 - 7.1 + - 7.2 + - 7.3 env: global: @@ -21,15 +20,10 @@ branches: - /^analysis-.*$/ matrix: - allow_failures: - - php: hhvm - dist: trusty fast_finish: true include: - - php: 5.5 + - php: 7.1 env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest" COVERAGE=true TEST_COMMAND="composer test-ci" - - php: hhvm - dist: trusty before_install: - travis_retry composer self-update diff --git a/composer.json b/composer.json index ab43a37..1ef4262 100644 --- a/composer.json +++ b/composer.json @@ -9,13 +9,14 @@ } ], "require": { - "php": "^5.5 || ^7.0", + "php": "^7.1", "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0", "php-http/httplug": "^1.0", "php-http/message-factory": "^1.0.2", "php-http/discovery": "^1.0" }, "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2", "guzzlehttp/psr7": "^1.2", "php-http/client-integration-tests": "^0.6", "php-http/message": "^1.0", @@ -35,6 +36,8 @@ } }, "scripts": { + "cs-check": "vendor/bin/php-cs-fixer fix --dry-run", + "cs-fix": "vendor/bin/php-cs-fixer fix", "test": "vendor/bin/phpunit", "test-ci": "vendor/bin/phpunit --coverage-clover build/coverage.xml" }, diff --git a/src/Client.php b/src/Client.php index cb84123..7333fbb 100644 --- a/src/Client.php +++ b/src/Client.php @@ -161,7 +161,6 @@ protected function configure(array $config = []) /** * Return remote socket from the request. * - * @param RequestInterface $request * * @throws InvalidRequestException When no remote can be determined from the request * diff --git a/src/RequestWriter.php b/src/RequestWriter.php index 3e8ac88..405649f 100644 --- a/src/RequestWriter.php +++ b/src/RequestWriter.php @@ -17,9 +17,8 @@ trait RequestWriter /** * Write a request to a socket. * - * @param resource $socket - * @param RequestInterface $request - * @param int $bufferSize + * @param resource $socket + * @param int $bufferSize * * @throws BrokenPipeException */ @@ -37,9 +36,8 @@ protected function writeRequest($socket, RequestInterface $request, $bufferSize /** * Write Body of the request. * - * @param resource $socket - * @param RequestInterface $request - * @param int $bufferSize + * @param resource $socket + * @param int $bufferSize * * @throws BrokenPipeException */ @@ -63,7 +61,6 @@ protected function writeBody($socket, RequestInterface $request, $bufferSize = 8 /** * Produce the header of request as a string based on a PSR Request. * - * @param RequestInterface $request * * @return string */ diff --git a/src/ResponseReader.php b/src/ResponseReader.php index f5fd083..df4ba50 100644 --- a/src/ResponseReader.php +++ b/src/ResponseReader.php @@ -25,8 +25,7 @@ trait ResponseReader /** * Read a response from a socket. * - * @param RequestInterface $request - * @param resource $socket + * @param resource $socket * * @throws TimeoutException When the socket timed out * @throws BrokenPipeException When the response cannot be read @@ -89,7 +88,6 @@ protected function readResponse(RequestInterface $request, $socket) * Create the stream. * * @param $socket - * @param ResponseInterface $response * * @return Stream */ diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php index 3bc67d2..a6ffda7 100644 --- a/tests/BaseTestCase.php +++ b/tests/BaseTestCase.php @@ -10,14 +10,14 @@ class BaseTestCase extends TestCase public function startServer($name) { - $filename = __DIR__ . '/server/' . $name . '.php'; - $pipes = []; + $filename = __DIR__.'/server/'.$name.'.php'; + $pipes = []; if (!Semaphore::acquire()) { $this->fail('Could not connect to server'); } - $this->servers[$name] = proc_open('php '. $filename, [], $pipes); + $this->servers[$name] = proc_open('php '.$filename, [], $pipes); sleep(1); } diff --git a/tests/Semaphore.php b/tests/Semaphore.php index ea83010..9ff92a7 100644 --- a/tests/Semaphore.php +++ b/tests/Semaphore.php @@ -23,7 +23,7 @@ public static function acquire() return false; } } - self::$openConnections++; + ++self::$openConnections; return true; } @@ -35,6 +35,6 @@ public static function release() { // Do no be too quick usleep(500000); - self::$openConnections--; + --self::$openConnections; } } diff --git a/tests/SocketClientFeatureTest.php b/tests/SocketClientFeatureTest.php index 487944b..d02dea8 100644 --- a/tests/SocketClientFeatureTest.php +++ b/tests/SocketClientFeatureTest.php @@ -3,7 +3,6 @@ namespace Http\Client\Socket\Tests; use Http\Client\Tests\HttpFeatureTest; -use Http\Message\MessageFactory\GuzzleMessageFactory; use Http\Client\Socket\Client as SocketHttpClient; class SocketClientFeatureTest extends HttpFeatureTest diff --git a/tests/SocketHttpAdapterTest.php b/tests/SocketHttpAdapterTest.php index 3d90e70..143d4b4 100644 --- a/tests/SocketHttpAdapterTest.php +++ b/tests/SocketHttpAdapterTest.php @@ -3,7 +3,6 @@ namespace Http\Client\Socket\Tests; use Http\Client\Tests\HttpClientTest; -use Http\Message\MessageFactory\GuzzleMessageFactory; use Http\Client\Socket\Client as SocketHttpClient; class SocketHttpAdapterTest extends HttpClientTest diff --git a/tests/SocketHttpClientTest.php b/tests/SocketHttpClientTest.php index c3660ec..e8981e6 100644 --- a/tests/SocketHttpClientTest.php +++ b/tests/SocketHttpClientTest.php @@ -8,7 +8,7 @@ class SocketHttpClientTest extends BaseTestCase { - public function createClient($options = array()) + public function createClient($options = []) { $messageFactory = new GuzzleMessageFactory(); @@ -18,7 +18,7 @@ public function createClient($options = array()) public function testTcpSocketDomain() { $this->startServer('tcp-server'); - $client = $this->createClient(['remote_socket' => '127.0.0.1:19999']); + $client = $this->createClient(['remote_socket' => '127.0.0.1:19999']); $response = $client->get('/', []); $this->assertInstanceOf('Psr\Http\Message\ResponseInterface', $response); @@ -30,14 +30,14 @@ public function testTcpSocketDomain() */ public function testNoRemote() { - $client = $this->createClient(); + $client = $this->createClient(); $client->get('/', []); } public function testRemoteInUri() { $this->startServer('tcp-server'); - $client = $this->createClient(); + $client = $this->createClient(); $response = $client->get('http://127.0.0.1:19999/', []); $this->assertInstanceOf('Psr\Http\Message\ResponseInterface', $response); @@ -47,7 +47,7 @@ public function testRemoteInUri() public function testRemoteInHostHeader() { $this->startServer('tcp-server'); - $client = $this->createClient(); + $client = $this->createClient(); $response = $client->get('/', ['Host' => '127.0.0.1:19999']); $this->assertInstanceOf('Psr\Http\Message\ResponseInterface', $response); @@ -67,13 +67,13 @@ public function testBrokenSocket() public function testSslRemoteInUri() { $this->startServer('tcp-ssl-server'); - $client = $this->createClient([ + $client = $this->createClient([ 'stream_context_options' => [ 'ssl' => [ 'peer_name' => 'socket-adapter', - 'cafile' => __DIR__ . '/server/ssl/ca.pem' - ] - ] + 'cafile' => __DIR__.'/server/ssl/ca.pem', + ], + ], ]); $response = $client->get('https://127.0.0.1:19999/', []); @@ -85,8 +85,8 @@ public function testUnixSocketDomain() { $this->startServer('unix-domain-server'); - $client = $this->createClient([ - 'remote_socket' => 'unix://'.__DIR__.'/server/server.sock' + $client = $this->createClient([ + 'remote_socket' => 'unix://'.__DIR__.'/server/server.sock', ]); $response = $client->get('/', []); @@ -99,7 +99,7 @@ public function testUnixSocketDomain() */ public function testNetworkExceptionOnConnectError() { - $client = $this->createClient(['remote_socket' => '127.0.0.1:19999']); + $client = $this->createClient(['remote_socket' => '127.0.0.1:19999']); $client->get('/', []); } @@ -107,15 +107,15 @@ public function testSslConnection() { $this->startServer('tcp-ssl-server'); - $client = $this->createClient([ + $client = $this->createClient([ 'remote_socket' => '127.0.0.1:19999', - 'ssl' => true, + 'ssl' => true, 'stream_context_options' => [ 'ssl' => [ 'peer_name' => 'socket-adapter', - 'cafile' => __DIR__ . '/server/ssl/ca.pem' - ] - ] + 'cafile' => __DIR__.'/server/ssl/ca.pem', + ], + ], ]); $response = $client->get('/', []); @@ -131,16 +131,16 @@ public function testSslConnectionWithClientCertificate() $this->startServer('tcp-ssl-server-client'); - $client = $this->createClient([ + $client = $this->createClient([ 'remote_socket' => '127.0.0.1:19999', - 'ssl' => true, + 'ssl' => true, 'stream_context_options' => [ 'ssl' => [ - 'peer_name' => 'socket-adapter', - 'cafile' => __DIR__ . '/server/ssl/ca.pem', - 'local_cert' => __DIR__ . '/server/ssl/client-and-key.pem' - ] - ] + 'peer_name' => 'socket-adapter', + 'cafile' => __DIR__.'/server/ssl/ca.pem', + 'local_cert' => __DIR__.'/server/ssl/client-and-key.pem', + ], + ], ]); $response = $client->get('/', []); @@ -156,15 +156,15 @@ public function testInvalidSslConnectionWithClientCertificate() $this->startServer('tcp-ssl-server-client'); - $client = $this->createClient([ + $client = $this->createClient([ 'remote_socket' => '127.0.0.1:19999', - 'ssl' => true, + 'ssl' => true, 'stream_context_options' => [ 'ssl' => [ - 'peer_name' => 'socket-adapter', - 'cafile' => __DIR__ . '/server/ssl/ca.pem' - ] - ] + 'peer_name' => 'socket-adapter', + 'cafile' => __DIR__.'/server/ssl/ca.pem', + ], + ], ]); $response = $client->get('/', []); @@ -179,7 +179,7 @@ public function testNetworkExceptionOnSslError() { $this->startServer('tcp-server'); - $client = $this->createClient(['remote_socket' => '127.0.0.1:19999', 'ssl' => true]); + $client = $this->createClient(['remote_socket' => '127.0.0.1:19999', 'ssl' => true]); $client->get('/', []); } @@ -188,7 +188,7 @@ public function testNetworkExceptionOnSslError() */ public function testNetworkExceptionOnTimeout() { - $client = $this->createClient(['timeout' => 10]); + $client = $this->createClient(['timeout' => 10]); $client->get('http://php.net', []); } } diff --git a/tests/StreamTest.php b/tests/StreamTest.php index 2421fb1..0bd21e6 100644 --- a/tests/StreamTest.php +++ b/tests/StreamTest.php @@ -2,7 +2,6 @@ namespace Http\Client\Socket\Tests; -use Http\Client\Socket\Exception\TimeoutException; use Http\Client\Socket\Stream; use PHPUnit\Framework\TestCase; @@ -19,24 +18,24 @@ public function createSocket($body, $useSize = true) public function testToString() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); - $this->assertEquals("Body", $stream->__toString()); + $this->assertEquals('Body', $stream->__toString()); $stream->close(); } public function testSubsequentCallIsEmpty() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); - $this->assertEquals("Body", $stream->getContents()); + $this->assertEquals('Body', $stream->getContents()); $this->assertEmpty($stream->getContents()); $stream->close(); } public function testDetach() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); $socket = $stream->detach(); $this->assertTrue(is_resource($socket)); @@ -45,21 +44,21 @@ public function testDetach() public function testTell() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); $this->assertEquals(0, $stream->tell()); - $this->assertEquals("Body", $stream->getContents()); + $this->assertEquals('Body', $stream->getContents()); $this->assertEquals(4, $stream->tell()); } public function testEof() { $socket = fopen('php://memory', 'rw+'); - fwrite($socket, "Body"); + fwrite($socket, 'Body'); fseek($socket, 0); $stream = new Stream($socket); - $this->assertEquals("Body", $stream->getContents()); + $this->assertEquals('Body', $stream->getContents()); fwrite($socket, "\0"); $this->assertTrue($stream->eof()); $stream->close(); @@ -67,7 +66,7 @@ public function testEof() public function testNotSeekable() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); $this->assertFalse($stream->isSeekable()); @@ -80,7 +79,7 @@ public function testNotSeekable() public function testNoRewing() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); try { $stream->rewind(); @@ -91,12 +90,12 @@ public function testNoRewing() public function testNotWritable() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); $this->assertFalse($stream->isWritable()); try { - $stream->write("Test"); + $stream->write('Test'); } catch (\Exception $e) { $this->assertInstanceOf('Http\Client\Socket\Exception\StreamException', $e); } @@ -104,7 +103,7 @@ public function testNotWritable() public function testIsReadable() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); $this->assertTrue($stream->isReadable()); } @@ -114,7 +113,7 @@ public function testIsReadable() */ public function testTimeout() { - $socket = fsockopen("php.net", 80); + $socket = fsockopen('php.net', 80); socket_set_timeout($socket, 0, 100); $stream = new Stream($socket, 50); @@ -123,20 +122,20 @@ public function testTimeout() public function testMetadatas() { - $stream = $this->createSocket("Body", false); - - $this->assertEquals("PHP", $stream->getMetadata("wrapper_type")); - $this->assertEquals("MEMORY", $stream->getMetadata("stream_type")); - $this->assertEquals("php://memory", $stream->getMetadata("uri")); - $this->assertFalse($stream->getMetadata("timed_out")); - $this->assertFalse($stream->getMetadata("eof")); - $this->assertTrue($stream->getMetadata("blocked")); + $stream = $this->createSocket('Body', false); + + $this->assertEquals('PHP', $stream->getMetadata('wrapper_type')); + $this->assertEquals('MEMORY', $stream->getMetadata('stream_type')); + $this->assertEquals('php://memory', $stream->getMetadata('uri')); + $this->assertFalse($stream->getMetadata('timed_out')); + $this->assertFalse($stream->getMetadata('eof')); + $this->assertTrue($stream->getMetadata('blocked')); } public function testClose() { $socket = fopen('php://memory', 'rw+'); - fwrite($socket, "Body"); + fwrite($socket, 'Body'); fseek($socket, 0); $stream = new Stream($socket); @@ -147,10 +146,10 @@ public function testClose() public function testRead() { - $stream = $this->createSocket("Body"); + $stream = $this->createSocket('Body'); - $this->assertEquals("Bod", $stream->read(3)); - $this->assertEquals("y", $stream->read(3)); + $this->assertEquals('Bod', $stream->read(3)); + $this->assertEquals('y', $stream->read(3)); $stream->close(); } diff --git a/tests/server/ssl/file.srl b/tests/server/ssl/file.srl index da51c42..f5c8955 100644 --- a/tests/server/ssl/file.srl +++ b/tests/server/ssl/file.srl @@ -1 +1 @@ -2F +32 diff --git a/tests/server/ssl/generate.sh b/tests/server/ssl/generate.sh index 696b340..eb83bc2 100755 --- a/tests/server/ssl/generate.sh +++ b/tests/server/ssl/generate.sh @@ -7,11 +7,11 @@ O="PHP-HTTP" CN="socket-adapter" openssl req -out ca.pem -new -x509 -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=socket-server" -passout pass:password -openssl genrsa -out server.key 1024 -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=socket-adapter" +openssl genrsa -out server.key openssl req -key server.key -new -out server.req -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=socket-adapter" -passout pass:password openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.pem -passin pass:password -openssl genrsa -out client.key 1024 -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=socket-adapter-client" +openssl genrsa -out client.key openssl req -key client.key -new -out client.req -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=socket-adapter-client" -passout pass:password openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.pem -passin pass:password diff --git a/tests/server/tcp-bugous-server.php b/tests/server/tcp-bugous-server.php index 7f0d91f..d1a55ae 100644 --- a/tests/server/tcp-bugous-server.php +++ b/tests/server/tcp-bugous-server.php @@ -1,9 +1,9 @@ [ - 'local_cert' => __DIR__ . '/ssl/server-and-key.pem', - 'cafile' => __DIR__ . '/ssl/ca.pem', - 'capture_peer_cert' => true - ] + 'local_cert' => __DIR__.'/ssl/server-and-key.pem', + 'cafile' => __DIR__.'/ssl/ca.pem', + 'capture_peer_cert' => true, + ], ]); -$socketServer = stream_socket_server('tcp://127.0.0.1:19999', $errNo, $errStr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); +$socketServer = stream_socket_server('tcp://127.0.0.1:19999', $errNo, $errStr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context); stream_socket_enable_crypto($socketServer, false); -$client = stream_socket_accept($socketServer); +$client = stream_socket_accept($socketServer); stream_set_blocking($client, true); stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER); @@ -22,10 +22,10 @@ if (isset(stream_context_get_options($context)['ssl']['peer_certificate'])) { $client_cert = stream_context_get_options($context)['ssl']['peer_certificate']; - $name = openssl_x509_parse($client_cert)["subject"]["CN"]; + $name = openssl_x509_parse($client_cert)['subject']['CN']; } -if ($name == "socket-adapter-client") { +if ('socket-adapter-client' == $name) { fwrite($client, str_replace("\n", "\r\n", << [ - 'local_cert' => __DIR__ . '/ssl/server-and-key.pem' - ] + 'local_cert' => __DIR__.'/ssl/server-and-key.pem', + ], ]); -$socketServer = stream_socket_server('tcp://127.0.0.1:19999', $errNo, $errStr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); +$socketServer = stream_socket_server('tcp://127.0.0.1:19999', $errNo, $errStr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context); stream_socket_enable_crypto($socketServer, false); -$client = stream_socket_accept($socketServer); +$client = stream_socket_accept($socketServer); stream_set_blocking($client, true); if (@stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER)) { fwrite($client, str_replace("\n", "\r\n", <<