public function testProvidesDirectoriesForS3() { $this->setMockResponse($this->client, array('s3/list_objects_page_1', 's3/list_objects_page_2', 's3/list_objects_page_3', 's3/list_objects_page_4', 's3/list_objects_page_5', 's3/list_objects_page_1', 's3/list_objects_page_2', 's3/list_objects_page_3', 's3/list_objects_page_4', 's3/list_objects_page_5')); $c = null; $this->client->getEventDispatcher()->addListener('client.command.create', function ($e) use(&$c) { $c = $e['command']; }); $dir = 's3://bucket/key/'; $r = opendir($dir); $this->assertInternalType('resource', $r); // Ensure that the command was created correctly $this->assertEquals('bucket', $c['Bucket']); $this->assertEquals('/', $c['Delimiter']); $this->assertEquals('key/', $c['Prefix']); $files = array(); while (($file = readdir($r)) !== false) { $files[] = $file; } // This is the order that the mock responses should provide $expected = array('a/', 'b/', 'c', 'd/', 'e', 'f', 'g/'); $this->assertEquals($expected, $files); $this->assertEquals(5, count($this->getMockedRequests())); rewinddir($r); $files = array(); while (($file = readdir($r)) !== false) { $files[] = $file; } $this->assertEquals($expected, $files); $this->assertEquals(10, count($this->getMockedRequests())); closedir($r); }
public function testCanSetDelimiterStreamContext() { $this->setMockResponse($this->client, array('s3/list_objects_page_5')); $c = null; $this->client->getEventDispatcher()->addListener('client.command.create', function ($e) use(&$c) { $c = $e['command']; }); $dir = 's3://bucket'; $r = opendir($dir, stream_context_create(array('s3' => array('delimiter' => '')))); $this->assertEquals('bucket', $c['Bucket']); $this->assertEquals('', $c['Delimiter']); $this->assertEquals('', $c['Prefix']); closedir($r); }