assertInstanceOf('Iterator', $iter);
$files = iterator_to_array($iter);
$this->assertContains(__FILE__, $files);
}
/**
* @covers Aws\dir_iterator()
*/
public function testCreatesNonRecursiveDirIterator()
{
$iter = Aws\dir_iterator(__DIR__);
$this->assertInstanceOf('Iterator', $iter);
$files = iterator_to_array($iter);
$this->assertContains('FunctionsTest.php', $files);
}
/**
* @covers Aws\or_chain()
*/
public function testComposesOrFunctions()
{
$a = function ($a, $b) { return null; };
$b = function ($a, $b) { return $a . $b; };
$c = function ($a, $b) { return 'C'; };
$comp = Aws\or_chain($a, $b, $c);
$this->assertSame('+-', $comp('+', '-'));
}
/**
* @covers Aws\or_chain()
*/
public function testReturnsNullWhenNonResolve()
{
$called = [];
$a = function () use (&$called) { $called[] = 'a'; };
$b = function () use (&$called) { $called[] = 'b'; };
$c = function () use (&$called) { $called[] = 'c'; };
$comp = Aws\or_chain($a, $b, $c);
$this->assertNull($comp());
$this->assertEquals(['a', 'b', 'c'], $called);
}
/**
* @covers Aws\constantly()
*/
public function testCreatesConstantlyFunctions()
{
$fn = Aws\constantly('foo');
$this->assertSame('foo', $fn());
}
/**
* @covers Aws\load_compiled_json()
*/
public function testUsesJsonCompiler()
{
$this->expectException(\InvalidArgumentException::class);
Aws\load_compiled_json('/path/to/not/here.json');
}
/**
* @covers Aws\load_compiled_json()
*/
public function testUsesPhpCompilationOfJsonIfPossible()
{
$soughtData = ['foo' => 'bar'];
$jsonPath = sys_get_temp_dir() . '/some-file-name-' . time() . '.json';
file_put_contents($jsonPath, json_encode($soughtData), LOCK_EX);
$this->assertSame($soughtData, Aws\load_compiled_json($jsonPath));
file_put_contents($jsonPath, 'INVALID JSON', LOCK_EX);
file_put_contents(
"$jsonPath.php",
'assertSame($soughtData, Aws\load_compiled_json($jsonPath));
}
/**
* @covers Aws\load_compiled_json()
*/
public function testOnlyLoadsCompiledJsonOnce()
{
$soughtData = ['foo' => 'bar'];
$jsonPath = sys_get_temp_dir() . '/some-file-name-' . time() . '.json';
file_put_contents($jsonPath, json_encode($soughtData), LOCK_EX);
$this->assertSame($soughtData, Aws\load_compiled_json($jsonPath));
$jsonAtime = fileatime($jsonPath);
file_put_contents($jsonPath, 'INVALID JSON', LOCK_EX);
$compiledPath = "{$jsonPath}.php";
file_put_contents(
$compiledPath,
'assertSame($soughtData, Aws\load_compiled_json($jsonPath));
$compiledAtime = fileatime($compiledPath);
sleep(1);
clearstatcache();
$this->assertSame($soughtData, Aws\load_compiled_json($jsonPath));
$this->assertEquals($jsonAtime, fileatime($jsonPath));
$this->assertEquals($compiledAtime, fileatime($compiledPath));
}
/**
* @covers Aws\filter()
*/
public function testFilter()
{
$data = [0, 1, 2, 3, 4];
$func = function ($v) { return $v % 2; };
$result = \Aws\filter($data, $func);
$this->assertEquals([1, 3], iterator_to_array($result));
}
/**
* @covers Aws\map()
*/
public function testMap()
{
$data = [0, 1, 2, 3, 4];
$result = \Aws\map($data, function ($v) { return $v + 1; });
$this->assertEquals([1, 2, 3, 4, 5], iterator_to_array($result));
}
/**
* @covers Aws\flatmap()
*/
public function testFlatMap()
{
$data = ['Hello', 'World'];
$xf = function ($value) { return str_split($value); };
$result = \Aws\flatmap($data, $xf);
$this->assertEquals(
['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'],
iterator_to_array($result)
);
}
/**
* @covers Aws\partition()
*/
public function testPartition()
{
$data = [1, 2, 3, 4, 5];
$result = \Aws\partition($data, 2);
$this->assertEquals([[1, 2], [3, 4], [5]], iterator_to_array($result));
}
/**
* @covers Aws\describe_type()
*/
public function testDescribeObject()
{
$obj = new \stdClass();
$this->assertSame('object(stdClass)', Aws\describe_type($obj));
}
/**
* @covers Aws\describe_type()
*/
public function testDescribeArray()
{
$arr = [0, 1, 2];
$this->assertSame('array(3)', Aws\describe_type($arr));
}
/**
* @covers Aws\describe_type()
*/
public function testDescribeDoubleToFloat()
{
$double = (double)1.3;
$this->assertSame('float(1.3)', Aws\describe_type($double));
}
/**
* @covers Aws\describe_type()
*/
public function testDescribeType()
{
$this->assertSame('int(1)', Aws\describe_type(1));
$this->assertSame('string(4) "test"', Aws\describe_type("test"));
}
/**
* @covers Aws\default_http_handler()
*/
public function testGuzzleV5HttpHandler()
{
if (!class_exists('GuzzleHttp\Ring\Core')) {
$this->markTestSkipped();
}
$this->assertInstanceOf(
Aws\Handler\GuzzleV5\GuzzleHandler::class,
Aws\default_http_handler()
);
}
/**
* @covers Aws\default_http_handler()
*/
public function testGuzzleV6HttpHandler()
{
if (!class_exists('GuzzleHttp\Handler\StreamHandler')) {
$this->markTestSkipped();
}
$this->assertInstanceOf(
Aws\Handler\GuzzleV6\GuzzleHandler::class,
Aws\default_http_handler()
);
}
/**
* @covers Aws\serialize()
*/
public function testSerializesHttpRequests()
{
$mock = new MockHandler([new Result([])]);
$conf = [
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => 'foo',
'secret' => 'bar'
],
'handler' => $mock,
'signature_version' => 'v4',
];
$client = new S3Client($conf);
$command = $client->getCommand('PutObject', [
'Bucket' => 'foo',
'Key' => 'bar',
'Body' => '123'
]);
$request = \Aws\serialize($command);
$this->assertSame('/bar', $request->getRequestTarget());
$this->assertSame('PUT', $request->getMethod());
$this->assertSame('foo.s3.amazonaws.com', $request->getHeaderLine('Host'));
$this->assertTrue($request->hasHeader('Authorization'));
$this->assertTrue($request->hasHeader('X-Amz-Content-Sha256'));
$this->assertTrue($request->hasHeader('X-Amz-Date'));
$this->assertSame('123', (string) $request->getBody());
}
/**
* @covers Aws\manifest()
*/
public function testLoadsManifest()
{
$this->assertNotNull(Aws\manifest());
}
/**
* @covers Aws\manifest()
*/
public function testServiceManifest()
{
$manifest = Aws\manifest('s3');
$data = [
'namespace' => 'S3',
'versions' => [
'latest' => '2006-03-01',
'2006-03-01' => '2006-03-01'
],
'endpoint' => 's3',
'serviceIdentifier' => 's3'
];
$this->assertEquals($data, $manifest);
}
/**
* @covers Aws\manifest()
*/
public function testAliasManifest()
{
$manifest = Aws\manifest('iotdataplane');
$data = [
'namespace' => 'IotDataPlane',
'versions' => [
'latest' => '2015-05-28',
'2015-05-28' => '2015-05-28'
],
'endpoint' => 'data.iot',
'serviceIdentifier' => 'iot_data_plane'
];
$this->assertEquals($data, $manifest);
}
/**
* @covers Aws\manifest()
*/
public function testInvalidManifest()
{
$this->expectException(\InvalidArgumentException::class);
Aws\manifest('notarealservicename');
}
/**
* @covers Aws\is_valid_hostname()
* @dataProvider getHostnameTestCases
*/
public function testValidatesHostnames($hostname, $expected)
{
$this->assertEquals($expected, Aws\is_valid_hostname($hostname));
}
public function getHostnameTestCases()
{
return [
['a', true],
['a.', true],
['0', true],
['1.2.3.4', true],
['a.b', true],
['a.b.c.d.e', true],
['a.b.c.d.e.', true],
['a-b.c-d', true],
['a--b.c--d', true],
['a b', false],
['a..b', false],
['a.b ', false],
['a-.b', false],
['-a.b', false],
['.a.b', false],
['', false],
['a)', false],
['.', false],
[' ', false],
['-', false],
['', false],
[str_repeat('a', 63), true],
[str_repeat('a', 64), false],
[
str_repeat('a', 63) . '.' . str_repeat('a', 63) . '.'
. str_repeat('a', 63) . '.' . str_repeat('a', 61),
true
],
[
str_repeat('a', 63) . '.' . str_repeat('a', 63) . '.'
. str_repeat('a', 63) . '.' . str_repeat('a', 62),
false
],
];
}
/**
* @covers Aws\is_valid_hostlabel()
* @dataProvider getHostlabelTestCases
* @param string $label
* @param bool $expected
*/
public function testValidatesHostlabels($label, $expected)
{
$this->assertEquals($expected, Aws\is_valid_hostlabel($label));
}
public function getHostlabelTestCases()
{
return [
['us-west-2', true],
['a', true],
['a.b', false],
['2-us-west', true],
['1-us-west-2', true],
['42', true],
['us_west_2', false],
['-west-2', false],
['@uncoolwebsite.com', false],
['a-b.c-d', false],
['a--b', true],
['a b', false],
['', false],
[' ', false],
['-', false],
['', false],
[str_repeat('a', 63), true],
[str_repeat('a', 64), false],
['us-west-2-certainly-this-label-must-be-longer-than-63-characters-by-now', false],
];
}
/**
* @covers Aws\parse_ini_file()
* @dataProvider getIniFileTestCases
*/
public function testParsesIniFile($ini, $expected)
{
$tmpFile = sys_get_temp_dir() . '/test.ini';
file_put_contents($tmpFile, $ini);
$this->assertEquals(
$expected,
Aws\parse_ini_file($tmpFile, true, INI_SCANNER_RAW)
);
unlink($tmpFile);
}
public function getIniFileTestCases()
{
return [
[
<< [
'foo_key' => 'bar',
'baz_key' => 'qux',
],
'custom' => [
'foo_key' => 'bar-custom',
'baz_key' => 'qux-custom',
]
]
],
[
<< [
'foo_key' => 'bar',
'baz_key' => 'qux',
'*star_key' => 'not_ignored'
],
],
],
];
}
}