/** * @param CM_OutputStream_Interface $output * @param CM_File_Filesystem $backupFilesystem */ public function verifyExport(CM_OutputStream_Interface $output, CM_File_Filesystem $backupFilesystem) { $asserter = new S3Export_Asserter(); $sourceFilesystem = $this->_getFilesystemOriginal(); $filePaths = $this->_getRandomFiles($backupFilesystem, 100, 100000); foreach ($filePaths as $path) { $backupFile = new CM_File($path, $backupFilesystem); $sourceFile = new CM_File($path, $sourceFilesystem); $asserter->assertThat($sourceFile->exists(), function () use($output) { $output->write("."); }, function () use($output, $backupFile) { $output->writeln('E'); $output->writeln("Integrity mismatch: Corresponding backup file does not exist for {$backupFile->getPath()}"); }); if ($sourceFile->exists()) { $asserter->assertThat($sourceFile->getHash() === $backupFile->getHash(), function () use($output) { $output->write('.'); }, function () use($output, $backupFile) { $output->writeln('E'); $output->writeln("Integrity mismatch: Different hashes for {$backupFile->getPath()}"); }); } } $output->writeln(''); $output->writeln(join(', ', ["Assertions run: {$asserter->getAssertionCount()}", "succeeded: {$asserter->getAssertionSuccessCount()}", "failed: {$asserter->getAssertionFailCount()}"])); }