Skip to content

Commit

Permalink
Merge pull request #32 from filakhtov/h2-require-schema
Browse files Browse the repository at this point in the history
Ensure that base URI contains scheme
  • Loading branch information
software-artificer authored Jul 15, 2019
2 parents 3685875 + 2115bc9 commit 4fc52d9
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 21 deletions.
23 changes: 19 additions & 4 deletions src/Grphp/Client/Strategy/H2Proxy/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
*/
Expand Down
45 changes: 28 additions & 17 deletions tests/Unit/Grphp/Client/Strategy/H2Proxy/ConfigTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
}
}

0 comments on commit 4fc52d9

Please sign in to comment.