/**
  * @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()}"]));
 }