* This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ class Test_CryptStream extends UnitTestCase { private $tmpFiles=array(); function testStream() { $stream=$this->getStream('test1', 'w', strlen('foobar')); fwrite($stream, 'foobar'); fclose($stream); $stream=$this->getStream('test1', 'r', strlen('foobar')); $data=fread($stream, 6); fclose($stream); $this->assertEqual('foobar', $data); $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; $source=fopen($file, 'r'); $target=$this->getStream('test2', 'w', 0); OCP\Files::streamCopy($source, $target); fclose($target); fclose($source); $stream=$this->getStream('test2', 'r', filesize($file)); $data=stream_get_contents($stream); $original=file_get_contents($file); $this->assertEqual(strlen($original), strlen($data)); $this->assertEqual($original, $data); } /** * get a cryptstream to a temporary file * @param string $id * @param string $mode * @param int size * @return resource */ function getStream($id, $mode, $size) { if ($id==='') { $id=uniqid(); } if ( ! isset($this->tmpFiles[$id])) { $file=OCP\Files::tmpFile(); $this->tmpFiles[$id]=$file; } else { $file=$this->tmpFiles[$id]; } $stream=fopen($file, $mode); OC_CryptStream::$sourceStreams[$id]=array('path'=>'dummy'.$id, 'stream'=>$stream, 'size'=>$size); return fopen('crypt://streams/'.$id, $mode); } function testBinary() { $file=__DIR__.'/binary'; $source=file_get_contents($file); $stream=$this->getStream('test', 'w', strlen($source)); fwrite($stream, $source); fclose($stream); $stream=$this->getStream('test', 'r', strlen($source)); $data=stream_get_contents($stream); fclose($stream); $this->assertEqual(strlen($data), strlen($source)); $this->assertEqual($source, $data); $file=__DIR__.'/zeros'; $source=file_get_contents($file); $stream=$this->getStream('test2', 'w', strlen($source)); fwrite($stream, $source); fclose($stream); $stream=$this->getStream('test2', 'r', strlen($source)); $data=stream_get_contents($stream); fclose($stream); $this->assertEqual(strlen($data), strlen($source)); $this->assertEqual($source, $data); } }