Exemplo n.º 1
0
 def test_symlink_file2(self):    
     """ Symlnik a single file into a non-existing folder """
     src = os.path.join(self.rootdir,"folder0","folder1","file2")
     target = os.path.join(
         self.targetdir,
         "these","folders","should","be","created")
     self.assertTrue(transfer.SymlinkAgent(src,target).transfer())
Exemplo n.º 2
0
    def stage_delivery(self):
        """ Stage a delivery by symlinking source paths to destination paths 
            according to the returned tuples from the gather_files function. 
            Checksums will be written to a digest file in the staging path. 
            Failure to stage individual files will be logged as warnings but will
            not terminate the staging. 
            
            :raises DelivererError: if an unexpected error occurred
        """
        digestpath = self.staging_digestfile()
        filelistpath = self.staging_filelist()
        create_folder(os.path.dirname(digestpath))
        try:
            with open(digestpath, 'w') as dh, open(filelistpath, 'w') as fh:
                agent = transfer.SymlinkAgent(None, None, relative=True)
                for src, dst, digest in self.gather_files():
                    agent.src_path = src
                    agent.dest_path = dst
                    try:
                        agent.transfer()
                    except (transfer.TransferError, transfer.SymlinkError) as e:
                        logger.warning("failed to stage file '{}' when "
                                       "delivering {} - reason: {}".format(src, str(self), e))

                    fpath = os.path.relpath(dst, self.expand_path(self.stagingpath))
                    fh.write("{}\n".format(fpath))
                    if digest is not None:
                        dh.write("{}  {}\n".format(digest, fpath))
                # finally, include the digestfile in the list of files to deliver
                fh.write("{}\n".format(os.path.basename(digestpath)))
        except (IOError, fs.FileNotFoundException, fs.PatternNotMatchedException) as e:
            raise DelivererError(
                "failed to stage delivery - reason: {}".format(e))
        return True
Exemplo n.º 3
0
 def test_symlink_folder3(self):
     """ Don't overwrite a mount point """
     src = os.path.join(self.rootdir)
     target = os.path.join(self.targetdir)
     with mock.patch.object(transfer.os.path, 'ismount', return_value=True):
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 4
0
 def test_symlink_file4(self):
     """ Don't replace an existing file without overwrite """
     src = os.path.join(self.rootdir, "file0")
     target = os.path.join(self.targetdir, os.path.basename(src))
     open(target, 'w').close()
     self.assertFalse(
         transfer.SymlinkAgent(src, target, overwrite=False).transfer())
Exemplo n.º 5
0
 def test_symlink_folder5(self):
     """ Failing to create parent folder structure should raise SymlinkError 
     """
     src = self.rootdir
     target = os.path.join(self.targetdir,"non-existing-folder","target-file")
     with mock.patch.object(transfer,'create_folder',return_value=False):
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src,target).transfer()
Exemplo n.º 6
0
 def test_symlink_folder_unexpected(self):
     """An unexpected exception should propagate upwards."""
     src = self.rootdir
     target = self.targetdir
     with mock.patch.object(transfer.os.path,
                            'exists',
                            side_effect=Exception('Mocked error')):
         with self.assertRaises(Exception):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 7
0
 def test_symlink_folder_symlink_error(self):
     """Failing to create symlink should raise SymlinkError."""
     src = self.rootdir
     target = os.path.join(self.targetdir, os.path.basename(src))
     with mock.patch.object(transfer.os,
                            'symlink',
                            side_effect=OSError('Mocked error')):
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 8
0
 def test_symlink_folder_rmtree_fail(self):
     """Failing to remove existing folder should raise SymlinkError."""
     src = self.rootdir
     target = self.targetdir
     with mock.patch.object(transfer.shutil,
                            'rmtree',
                            side_effect=OSError('Mocked error')):
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 9
0
 def test_symlink_file_unlink_fail(self):
     """Failing to remove existing file should raise SymlinkError."""
     src = self.rootdir
     target = os.path.join(self.targetdir, 'target-file')
     open(target, 'w').close()
     with mock.patch.object(transfer.os,
                            'unlink',
                            side_effect=OSError('Mocked error')):
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 10
0
 def test_symlink_folder_not_overwrite(self):
     """Don't overwrite other existing paths."""
     src = os.path.join(self.rootdir)
     target = os.path.join(self.targetdir)
     with mock.patch('taca.utils.transfer.os.path') as mockobj:
         mockobj.ismount.return_value = False
         mockobj.isfile.return_value = False
         mockobj.islink.return_value = False
         mockobj.isdir.return_value = False
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 11
0
 def test_symlink_folder4(self):
     """ Don't overwrite an existing path that is neither a mount point,
         file, link or directory
     """
     src = os.path.join(self.rootdir)
     target = os.path.join(self.targetdir)
     with mock.patch('taca.utils.transfer.os.path') as mockobj:
         mockobj.ismount.return_value = False
         mockobj.isfile.return_value = False
         mockobj.islink.return_value = False
         mockobj.isdir.return_value = False
         with self.assertRaises(transfer.SymlinkError):
             transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 12
0
 def test_symlink_file_make_dir(self):
     """Symlink a single file into a non-existing folder."""
     src = os.path.join(self.rootdir, 'folder0', 'folder1', 'file2')
     target = os.path.join(self.targetdir, 'these', 'folders', 'should',
                           'be', 'created')
     self.assertTrue(transfer.SymlinkAgent(src, target).transfer())
Exemplo n.º 13
0
 def test_symlink_folder2(self):
     """ Replace an existing folder with overwrite """
     src = os.path.join(self.rootdir, "folder0")
     target = os.path.join(self.targetdir, os.path.basename(src))
     shutil.copytree(src, target)
     self.assertTrue(transfer.SymlinkAgent(src, target).transfer())
Exemplo n.º 14
0
 def test_symlink_validate_transfer(self):
     """Verify that the dest_path was created."""
     src = os.path.join(self.rootdir, 'file0')
     dst = os.path.join(self.targetdir, 'file0')
     os.symlink(src, dst)
     self.assertTrue(transfer.SymlinkAgent(src, dst).validate_transfer())
Exemplo n.º 15
0
 def test_symlink_folder1(self):
     """ Symlinking a top-level folder """
     src = os.path.join(self.rootdir, "folder0")
     target = os.path.join(self.targetdir, os.path.basename(src))
     self.assertTrue(transfer.SymlinkAgent(src, target).transfer())
Exemplo n.º 16
0
 def test_symlink_file5(self):
     """ Don't create a broken symlink """
     src = os.path.join(self.rootdir, "non-existing-file")
     target = os.path.join(self.targetdir, os.path.basename(src))
     with self.assertRaises(transfer.TransferError):
         transfer.SymlinkAgent(src, target).transfer()
Exemplo n.º 17
0
 def test_symlink_file_overwrite(self):
     """Replace an existing file with overwrite."""
     src = os.path.join(self.rootdir, 'file0')
     target = os.path.join(self.targetdir, os.path.basename(src))
     open(target, 'w').close()
     self.assertTrue(transfer.SymlinkAgent(src, target).transfer())
Exemplo n.º 18
0
 def test_symlink_file1(self):
     """ Symlink a single file in the top folder """
     src = os.path.join(self.rootdir, "file0")
     target = os.path.join(self.targetdir, os.path.basename(src))
     self.assertTrue(transfer.SymlinkAgent(src, target).transfer())
Exemplo n.º 19
0
 def test_symlink_validate_transfer(self):
     src = os.path.join(self.rootdir, "file0")
     dst = os.path.join(self.targetdir, "file0")
     os.symlink(src, dst)
     self.assertTrue(transfer.SymlinkAgent(src, dst).validate_transfer())