public function findShards()
 {
     $result = array();
     try {
         $kinesis = $this->getKinesis();
         while (true) {
             $describe_stream_result = $kinesis->describeStream(array('StreamName' => $this->stream_name));
             $stream_description = $describe_stream_result['StreamDescription'];
             $shards = $stream_description['Shards'];
             foreach ($shards as $shard) {
                 $shard_id = $shard['ShardId'];
                 $shard_obj = new KinesisShard();
                 $shard_obj->setStreamName($this->stream_name)->setShardId($shard_id);
                 $result[$shard_id] = $shard_obj;
             }
             $has_more_shards = $stream_description['HasMoreShards'];
             if (!$has_more_shards) {
                 break;
             }
         }
     } catch (\Exception $e) {
         throw new KinesisProxyException($e->getMessage(), $e->getCode(), $e);
     }
     return $result;
 }
 private function _storeShard($stream_name, $shard_id, $sequence_number)
 {
     $shard = new KinesisShard();
     $shard->setStreamName($stream_name)->setShardId($shard_id)->setSequenceNumber($sequence_number);
     $data_store = new KinesisShardMemcacheDataStore($this->memcache);
     $data_store->modify($shard);
     return $shard;
 }
 /**
  * @Override
  */
 public function restore($target_stream_name)
 {
     $result = array();
     $keys = $this->_getKeys($target_stream_name);
     foreach ($keys as $key) {
         list($stream_name, $shard_id) = explode(':', $key);
         $sequence_number = $this->memcache->get($key);
         $shard = new KinesisShard();
         $shard->setStreamName($stream_name)->setShardId($shard_id)->setSequenceNumber($sequence_number);
         $result[] = $shard;
     }
     return $result;
 }
 /**
  * @Override
  */
 public function restore($target_stream_name)
 {
     $result = array();
     $store_dir = $this->data_store_dir . '/' . $target_stream_name;
     if (!file_exists($store_dir)) {
         return $result;
     }
     if ($dir_handle = opendir($store_dir)) {
         while (false !== ($file = readdir($dir_handle))) {
             $file_handle = fopen($store_dir . '/' . $file, "r");
             while ($shard_info = fgetcsv($file_handle)) {
                 list($stream_name, $shard_id, $sequence_number) = $shard_info;
                 $shard = new KinesisShard();
                 $shard->setStreamName($stream_name)->setShardId($shard_id)->setSequenceNumber($sequence_number);
                 $result[$shard_id] = $shard;
             }
             fclose($file_handle);
         }
         closedir($dir_handle);
     }
     return $result;
 }
 public function testFindDataRecords_001()
 {
     // $data_store = $this->getMock("KinesisShardFileDataStore", array('restore'));
     // $data_store->expects($this->any())
     //   ->method('restore')
     //   ->will($this->returnValue(array()));
     $kinesis = $this->getMock("KinesisClient", array('getShardIterator', 'getRecords'));
     $kinesis->expects($this->any())->method('getShardIterator')->will($this->returnValue(array('ShardIterator' => '123456789')));
     $kinesis->expects($this->any())->method('getRecords')->will($this->returnValue(array('NextShardIterator' => '234567891', 'Records' => array(array('SequenceNumber' => '11111', 'Data' => 'hoge', 'PartitionKey' => 'pt1'), array('SequenceNumber' => '11112', 'Data' => 'foo', 'PartitionKey' => 'pt1')))));
     $proxy = $this->getMockBuilder('Rf\\Aws\\Kinesis\\ClientLibrary\\KinesisProxy')->setMethods(array('getKinesis'))->disableOriginalConstructor()->getMock();
     $proxy->expects($this->any())->method('getKinesis')->will($this->returnValue($kinesis));
     // $proxy->expects($this->any())
     //     ->method('getDataStore')
     //     ->will($this->returnValue($data_store));
     $shard = new KinesisShard();
     $shard->setStreamName('dummy-stream-name');
     $shard->setShardId('dummy-shardId-000000000001');
     $shard->setSequenceNumber('234567891');
     $result = $proxy->findDataRecords($shard, 1000, 1);
     $this->assertCount(2, $result);
     $result_data_record1 = $result[0];
     $this->assertEquals('dummy-stream-name', $result_data_record1->getStreamName());
     $this->assertEquals('dummy-shardId-000000000001', $result_data_record1->getShardId());
     $this->assertEquals('11111', $result_data_record1->getSequenceNumber());
     $this->assertEquals('hoge', $result_data_record1->getData());
     $this->assertEquals('pt1', $result_data_record1->getPartitionKey());
     $result_data_record2 = $result[1];
     $this->assertEquals('11112', $result_data_record2->getSequenceNumber());
     $this->assertEquals('foo', $result_data_record2->getData());
     $this->assertEquals('pt1', $result_data_record2->getPartitionKey());
 }