diff --git a/src/Grphp/Client/Strategy/H2Proxy/Config.php b/src/Grphp/Client/Strategy/H2Proxy/Config.php index 29d2f9f..ab95452 100644 --- a/src/Grphp/Client/Strategy/H2Proxy/Config.php +++ b/src/Grphp/Client/Strategy/H2Proxy/Config.php @@ -19,12 +19,14 @@ namespace Grphp\Client\Strategy\H2Proxy; +use InvalidArgumentException; + /** * Configuration for the h2proxy strategy */ class Config { - const DEFAULT_ADDRESS = '0.0.0.0:3000'; + const DEFAULT_ADDRESS = 'http://0.0.0.0:3000'; /** @var int The default timeout for connecting to the nghttpx proxy and resolving its result */ const DEFAULT_TIMEOUT = 15; @@ -43,15 +45,28 @@ class Config * @param string $proxyUri */ public function __construct( - string $baseUri = Config::DEFAULT_ADDRESS, - int $timeout = Config::DEFAULT_TIMEOUT, + string $baseUri = self::DEFAULT_ADDRESS, + int $timeout = self::DEFAULT_TIMEOUT, string $proxyUri = '' ) { - $this->baseUri = $baseUri; + $this->baseUri = $this->validateBaseUri($baseUri); $this->timeout = $timeout; $this->proxyUri = $proxyUri; } + /** + * @param string $baseUri + * @return string + */ + private function validateBaseUri(string $baseUri): string + { + if (!parse_url($baseUri, PHP_URL_SCHEME)) { + throw new InvalidArgumentException("Wrong base URI provided, scheme is missing: {$baseUri}"); + } + + return $baseUri; + } + /** * @return string */ diff --git a/tests/Unit/Grphp/Client/Strategy/H2Proxy/ConfigTest.php b/tests/Unit/Grphp/Client/Strategy/H2Proxy/ConfigTest.php index f876e3c..2749c1c 100644 --- a/tests/Unit/Grphp/Client/Strategy/H2Proxy/ConfigTest.php +++ b/tests/Unit/Grphp/Client/Strategy/H2Proxy/ConfigTest.php @@ -17,34 +17,45 @@ */ namespace Grphp\Client\Strategy\H2Proxy; +use InvalidArgumentException; use PHPUnit\Framework\TestCase; final class ConfigTest extends TestCase { - /** - * @param string $baseUri - * @param int $timeout - * @dataProvider providerCustom - */ - public function testCustom(string $baseUri, int $timeout) + public function testConfigWithTimeout() { + $baseUri = 'http://localhost:1234'; + $timeout = 5; + $config = new Config($baseUri, $timeout); - static::assertEquals($baseUri, $config->getBaseUri()); - static::assertEquals($timeout, $config->getTimeout()); + + $this->assertSame($baseUri, $config->getBaseUri()); + $this->assertSame($timeout, $config->getTimeout()); } - public function providerCustom() + + public function testConfigWithoutTimeout() { - return [ - ['localhost:1234', 5], - ['my.service:5000', 0] - ]; + $baseUri = 'https://my.service:5000'; + $timeout = 0; + + $config = new Config($baseUri, $timeout); + + $this->assertSame($baseUri, $config->getBaseUri()); + $this->assertSame($timeout, $config->getTimeout()); } - public function testDefaults() + public function testConfigWithDefaults() { $config = new Config(); - static::assertEquals(Config::DEFAULT_ADDRESS, $config->getBaseUri()); - static::assertEquals(Config::DEFAULT_TIMEOUT, $config->getTimeout()); - static::assertEquals('', $config->getProxyUri()); + $this->assertSame(Config::DEFAULT_ADDRESS, $config->getBaseUri()); + $this->assertSame(Config::DEFAULT_TIMEOUT, $config->getTimeout()); + $this->assertSame('', $config->getProxyUri()); + } + + public function testConfigRejectsBaseUriWithoutAScheme() + { + $this->expectException(InvalidArgumentException::class); + + new Config('service.internal:8080'); } }