示例#1
0
  def test_getFileMetadata(self):
    "Try to get the metadata of a File"

    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = 10

    updateStatMockReferences(statusMock, statInfoMock)

    # This test should be successful and True
    res = resource.getFileMetadata("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Failed'])

    metaDict = res['Value']['Successful']["A"]
    self.assertEqual(metaDict["Size"], 10)

    # We try on a directory now, it should fail
    statInfoMock.makeDir()

    # This test should be successful and True
    res = resource.getFileMetadata("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("A", res['Value']['Failed'].keys()[0])
示例#2
0
  def test_getDirectorySize(self):
    ''' tests the output of getDirectorySize
    '''

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeDir()

    updateStatMockReferences(statusMock, statInfoMock)

    statDir1 = xrootStatInfoMock()
    statDir1.makeDir()
    statDir1.size = 1
    dir1 = xrootListEntryMock("dir1", "host", statDir1)

    statFile1 = xrootStatInfoMock()
    statFile1.makeFile()
    statFile1.size = 4
    file1 = xrootListEntryMock("file1", "host", statFile1)

    directoryListMock = xrootDirectoryListMock("parent", [dir1, file1])

    mocked_xrootclient.dirlist.return_value = (statusMock, directoryListMock)

    # We have 1 file (size4) and 1 subdir in the directory
    res = resource.getDirectorySize('A')
    self.assertEqual(True, res['OK'])
    self.assertEqual(1, res['Value']['Successful']["A"]["Files"])
    self.assertEqual(1, res['Value']['Successful']["A"]["SubDirs"])
    self.assertEqual(4, res['Value']['Successful']["A"]["Size"])
    self.assertEqual({}, res['Value']['Failed'])
示例#3
0
  def test_isDirectory(self):
    """ Check if a path is a directory"""
    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeDir()

    updateStatMockReferences(statusMock, statInfoMock)

    # This test should be successful and True
    res = resource.isDirectory("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Failed'])
    self.assertEqual({"A": True}, res['Value']['Successful'])

    statInfoMock.makeFile()

    # This test should be successful and False
    res = resource.isDirectory("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Failed'])
    self.assertEqual({"A": False}, res['Value']['Successful'])
示例#4
0
  def test_getCurrentURL(self):
    """ Test the current URL of a file"""

    resource = XROOTStorage('storageName', self.parameterDict)

    res = resource.getCurrentURL("filename")
    self.assertEqual(True, res['OK'])
    self.assertEqual("protocol://host//path/filename", res['Value'])
示例#5
0
  def test_listDirectory( self ):
    """ Try to list the directory"""
    global mocked_xrootclient

    resource = XROOTStorage( 'storageName', self.parameterDict )

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeDir()

    updateStatMockReferences( statusMock, statInfoMock )

    statDir1 = xrootStatInfoMock()
    statDir1.makeDir()
    statDir1.size = 1
    dir1 = xrootListEntryMock( "dir1", "host", statDir1 )

    statDir2 = xrootStatInfoMock()
    statDir2.makeDir()
    statDir2.size = 2
    dir2 = xrootListEntryMock( "dir2", "host", statDir2 )

    statFile1 = xrootStatInfoMock()
    statFile1.makeFile()
    statFile1.size = 4
    file1 = xrootListEntryMock( "file1", "host", statFile1 )

    directoryListMock = xrootDirectoryListMock( "parent", [dir1, dir2, file1] )

    parentdir = xrootStatInfoMock()
    parentdir.makeDir()

    setMockDirectory(directoryListMock)

    # We created a Directory which contains 2 subdir and 1 file

    res = resource.listDirectory( "A" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {}, res['Value']['Failed'] )
    SubDirs = res['Value']['Successful']["A"]["SubDirs"]
    SubFiles = res['Value']['Successful']["A"]["Files"]
    self.assertEqual( 2 , len( SubDirs ) )
    self.assertEqual( 1 , len( SubFiles ) )
    self.assertEqual( SubFiles["root://host/A/file1"]["Size"], 4 )

    #Cleanup old side effect
    mocked_xrootclient.stat.side_effect = None

    # Let's try on a File. It should fail
    statInfoMock.makeFile()
    updateStatMockReferences( infoval = statInfoMock )

    res = resource.listDirectory( "A" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {}, res['Value']['Successful'] )
    self.assertEqual( "A" , res['Value']['Failed'].keys()[0] )
示例#6
0
  def test_getFile( self ):
    """ Test the output of getFile"""
    global mocked_xrootclient
    global mocked_xrootd

    resource = XROOTStorage( 'storageName', self.parameterDict )

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    mocked_xrootclient.copy.return_value = statusMock, None

    statusStatMock = xrootStatusMock()
    statusStatMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = -1

    updateStatMockReferences(statusStatMock, statInfoMock)

    # This test should be completely okay
    copymock = mock.Mock()
    copymock.run.return_value = (statusMock, None)
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value = copymock)
    res = resource.getFile( "a", "/tmp" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {"a" :-1}, res['Value']['Successful'] )
    self.assertEqual( {}, res['Value']['Failed'] )


    # Here the sizes should not match
    statInfoMock.size = 1000
    updateStatMockReferences(infoval = statInfoMock)
    res = resource.getFile( "a", "/tmp" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {}, res['Value']['Successful'] )
    self.assertEqual( "a", res['Value']['Failed'].keys()[0] )
    statInfoMock.size = -1


    # Here we should not be able to get the file from storage
    statusMock.makeError()
    updateStatMockReferences(statusMock)
    res = resource.getFile( "a", "/tmp" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {}, res['Value']['Successful'] )
    self.assertEqual( "a", res['Value']['Failed'].keys()[0] )

    # Fatal error in getting the file from storage
    updateStatMockReferences(statusMock)
    statusMock.makeFatal()
    res = resource.getFile( "a", "/tmp" )
    self.assertEqual( True, res['OK'] )
    self.assertEqual( {}, res['Value']['Successful'] )
    self.assertEqual( "a", res['Value']['Failed'].keys()[0] )
示例#7
0
  def test_getParameters(self):
    ''' tests the output of getParameters method
    '''

    resource = XROOTStorage('storageName', self.parameterDict)

    res = resource.getParameters()
    self.assertEqual('storageName', res['StorageName'])
    self.assertEqual('protocol', res['Protocol'])
    self.assertEqual('/path', res['Path'])
    self.assertEqual('host', res['Host'])
    self.assertEqual(0, res['Port'])
    self.assertEqual('spaceToken', res['SpaceToken'])
    self.assertEqual(0, res['WSUrl'])
示例#8
0
  def test_createDirectory(self):
    """ Test the create directory  method"""

    resource = XROOTStorage('storageName', self.parameterDict)

    res = resource.createDirectory({})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    res = resource.createDirectory({"A": 0})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": True}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    res = resource.createDirectory("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": True}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])
示例#9
0
  def test_init(self):
    ''' tests that the init method does what it should do
    '''

    resource = XROOTStorage('storageName', self.parameterDict)

    self.assertEqual('storageName', resource.name)
    self.assertEqual('XROOT', resource.pluginName)
    self.assertEqual('protocol', resource.protocol)
    self.assertEqual('/path', resource.protocolParameters['Path'])
    self.assertEqual('host', resource.protocolParameters['Host'])
    self.assertEqual(0, resource.protocolParameters['Port'])
    self.assertEqual('spaceToken', resource.protocolParameters['SpaceToken'])
    self.assertEqual(0, resource.protocolParameters['WSUrl'])
示例#10
0
  def test_exists(self):
    """ Test the existance of files and directories"""

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = 10

    updateStatMockReferences(statusMock, statInfoMock)

    # This test should be successful and True
    res = resource.exists({"A": 0})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": True}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # This test should be successful and False (does not exist)
    statusMock.makeError()
    statusMock.errno = 3011

    res = resource.exists({"A": 0})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": False}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # This test should be in Failed
    statusMock.makeError()
    statusMock.errno = 0

    res = resource.exists({"A": 0})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("A", res['Value']['Failed'].keys()[0])
示例#11
0
  def test_getFile(self):
    """ Test the output of getFile"""
    global mocked_xrootclient
    global mocked_xrootd

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    mocked_xrootclient.copy.return_value = statusMock, None

    statusStatMock = xrootStatusMock()
    statusStatMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = -1

    updateStatMockReferences(statusStatMock, statInfoMock)

    # This test should be completely okay
    copymock = mock.Mock()
    copymock.run.return_value = (statusMock, None)
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    res = resource.getFile("a", "/tmp")
    self.assertEqual(True, res['OK'])
    self.assertEqual({"a": -1}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # Here the sizes should not match
    statInfoMock.size = 1000
    updateStatMockReferences(infoval=statInfoMock)
    res = resource.getFile("a", "/tmp")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("a", res['Value']['Failed'].keys()[0])
    statInfoMock.size = -1

    # Here we should not be able to get the file from storage
    statusMock.makeError()
    updateStatMockReferences(statusMock)
    res = resource.getFile("a", "/tmp")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("a", res['Value']['Failed'].keys()[0])

    # Fatal error in getting the file from storage
    updateStatMockReferences(statusMock)
    statusMock.makeFatal()
    res = resource.getFile("a", "/tmp")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("a", res['Value']['Failed'].keys()[0])
示例#12
0
    def test_getFileSize(self):
        ''' tests the output of getFileSize
    '''

        resource = XROOTStorage('storageName', self.parameterDict)

        statusMock = xrootStatusMock()
        statusMock.makeOk()
        filesize_to_test = 136

        statInfoMock = xrootStatInfoMock()
        statInfoMock.makeFile()
        statInfoMock.size = filesize_to_test

        updateStatMockReferences(statusMock, statInfoMock)

        res = resource.getFileSize(1)
        self.assertEqual(False, res['OK'])

        res = resource.getFileSize({})
        self.assertEqual(True, res['OK'])

        res = resource.getFileSize([])
        self.assertEqual(True, res['OK'])

        res = resource.getFileSize('A')
        self.assertEqual(True, res['OK'])
        self.assertEqual({'A': filesize_to_test}, res['Value']['Successful'])

        res = resource.getFileSize(['A', 'B'])
        self.assertEqual(True, res['OK'])
        self.assertEqual({
            'A': filesize_to_test,
            'B': filesize_to_test
        }, res['Value']['Successful'])
        self.assertEqual({}, res['Value']['Failed'])

        res = resource.getFileSize({'A': 1, 'B': {}})
        self.assertEqual(True, res['OK'])
        self.assertEqual({
            'A': filesize_to_test,
            'B': filesize_to_test
        }, res['Value']['Successful'])
        self.assertEqual({}, res['Value']['Failed'])
示例#13
0
  def test_constructURLFromLFN(self):

    resource = XROOTStorage('storageName', self.parameterDict)

    resource.se = MagicMock()
    voName = "voName"
    resource.se.vo = voName
    testLFN = "/%s/path/to/filename" % voName

    # with spaceToken
    res = resource.constructURLFromLFN(testLFN)
    self.assertTrue(res['OK'])
    self.assertEqual("protocol://host//path%s?svcClass=%s" % (testLFN, self.parameterDict['SpaceToken']), res['Value'])

    # no spaceToken
    resource.protocolParameters['SpaceToken'] = ""
    res = resource.constructURLFromLFN(testLFN)
    self.assertTrue(res['OK'])
    self.assertEqual("protocol://host//path%s" % (testLFN, ), res['Value'])
示例#14
0
  def test_removeFile(self):
    ''' tests the output of removeFile
    '''
    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    mocked_xrootclient.rm.return_value = statusMock, None

    # This test should be successful and True
    res = resource.removeFile("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": True}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # This test should be successful and True (file was not there, so it is successfully deleted...)
    statusMock.makeError()
    statusMock.errno = 3011
    res = resource.removeFile("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": True}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # This test should be in Failed
    statusMock.makeError()
    statusMock.errno = 0
    res = resource.removeFile("A")
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("A", res['Value']['Failed'].keys()[0])

    # This should return S_ERROR
    statusMock.makeFatal()
    res = resource.removeFile("A")
    self.assertEqual(False, res['OK'])
示例#15
0
  def test_getTransportURL(self):
    """ Test the transportURL method"""

    resource = XROOTStorage('storageName', self.parameterDict)

    res = resource.getTransportURL({})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    res = resource.getTransportURL({"A": 0})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": "A"}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    res = resource.getTransportURL({"A": 0}, "protocol")
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": "A"}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    res = resource.getTransportURL({"A": 0}, ["protocol", "other"])
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": "A"}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])
示例#16
0
  def test_getDirectory(self):
    ''' tests the output of getDirectory
    '''
    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusStatDirMock = xrootStatusMock()
    statusStatDirMock.makeOk()

    statInfoMockDir = xrootStatInfoMock()
    statInfoMockDir.makeDir()

    statInfoMockFile = xrootStatInfoMock()
    statInfoMockFile.size = -1
    statInfoMockFile.makeFile()

    # Old comment, still true :(
    # This dirty thing forces us to know how many time api.stat is called and in what order...
    mocked_xrootclient.stat.side_effect = [
        (statusStatDirMock,
         statInfoMockDir),
        (statusStatDirMock,
         statInfoMockFile),
        (statusStatDirMock,
         statInfoMockDir),
        (statusStatDirMock,
         statInfoMockFile),
        (statusStatDirMock,
         statInfoMockDir),
        (statusStatDirMock,
         statInfoMockFile)]

    statDir1 = xrootStatInfoMock()
    statDir1.makeDir()
    statDir1.size = -1
    dir1 = xrootListEntryMock("dir1", "host", statDir1)

    statDir2 = xrootStatInfoMock()
    statDir2.makeDir()
    statDir2.size = -1
    dir2 = xrootListEntryMock("dir2", "host", statDir2)

    statFile1 = xrootStatInfoMock()
    statFile1.makeFile()
    statFile1.size = -1
    file1 = xrootListEntryMock("file1", "host", statFile1)

    statFile2 = xrootStatInfoMock()
    statFile2.makeFile()
    statFile2.size = -1
    file2 = xrootListEntryMock("file2", "host", statFile2)

    statFile3 = xrootStatInfoMock()
    statFile3.makeFile()
    statFile3.size = -1
    file3 = xrootListEntryMock("file3", "host", statFile3)

    directoryListMock1 = xrootDirectoryListMock("parent", [dir1, dir2, file1])
    directoryListMock2 = xrootDirectoryListMock("dir1", [file2])
    directoryListMock3 = xrootDirectoryListMock("dir1", [file3])

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    mocked_xrootclient.copy.return_value = statusMock, None
    mocked_xrootclient.dirlist.side_effect = [
        (statusStatDirMock,
         directoryListMock1),
        (statusStatDirMock,
         directoryListMock2),
        (statusStatDirMock,
         directoryListMock3)]

    # This test should get the 3 files
    copymock = mock.Mock()
    copymock.run.return_value = (statusMock, None)
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    # Mock the os calls that access the filesystem and really create the directories locally.
    with mock.patch('os.makedirs',
                    new=MagicMock(return_value=True)), mock.patch('os.remove', new=MagicMock(return_value=True)):
      res = resource.getDirectory("A")
      self.assertEqual(True, res['OK'])
      self.assertEqual({"A": {"Files": 3, "Size": -3}}, res['Value']['Successful'])
      self.assertEqual({}, res['Value']['Failed'])

      # The copy command is just in error
      statusMock.makeError()
      mocked_xrootclient.dirlist.side_effect = [
          (statusStatDirMock,
           directoryListMock1),
          (statusStatDirMock,
           directoryListMock2),
          (statusStatDirMock,
           directoryListMock3)]
      mocked_xrootclient.stat.side_effect = [
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile),
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile),
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile)]

      res = resource.getDirectory("A")
      self.assertEqual(True, res['OK'])
      self.assertEqual({}, res['Value']['Successful'])
      self.assertEqual({"A": {"Files": 0, "Size": 0}}, res['Value']['Failed'])

      # The copy command is fatal
      statusMock.makeFatal()
      mocked_xrootclient.dirlist.side_effect = [
          (statusStatDirMock,
           directoryListMock1),
          (statusStatDirMock,
           directoryListMock2),
          (statusStatDirMock,
           directoryListMock3)]
      mocked_xrootclient.stat.side_effect = [
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile),
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile),
          (statusStatDirMock,
           statInfoMockDir),
          (statusStatDirMock,
           statInfoMockFile)]

      res = resource.getDirectory("A")
      self.assertEqual(True, res['OK'])
      self.assertEqual({}, res['Value']['Successful'])
      self.assertEqual({"A": {"Files": 0, "Size": 0}}, res['Value']['Failed'])
示例#17
0
  def test_removeDirectory(self):
    ''' tests the output of removeDirectory
    '''
    global mocked_xrootclient
    resource = XROOTStorage('storageName', self.parameterDict)

    statusStatDirMock = xrootStatusMock()
    statusStatDirMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeDir()

    updateStatMockReferences(statusStatDirMock, statInfoMock)

    statDir1 = xrootStatInfoMock()
    statDir1.makeDir()
    statDir1.size = 1
    dir1 = xrootListEntryMock("dir1", "host", statDir1)

    statDir2 = xrootStatInfoMock()
    statDir2.makeDir()
    statDir2.size = 2
    dir2 = xrootListEntryMock("dir2", "host", statDir2)

    statFile1 = xrootStatInfoMock()
    statFile1.makeFile()
    statFile1.size = 4
    file1 = xrootListEntryMock("file1", "host", statFile1)

    statFile2 = xrootStatInfoMock()
    statFile2.makeFile()
    statFile2.size = 8
    file2 = xrootListEntryMock("file2", "host", statFile2)

    statFile3 = xrootStatInfoMock()
    statFile3.makeFile()
    statFile3.size = 16
    file3 = xrootListEntryMock("file3", "host", statFile3)

    directoryListMock1 = xrootDirectoryListMock("parent", [dir1, dir2, file1])
    directoryListMock2 = xrootDirectoryListMock("dir1", [file2])
    directoryListMock3 = xrootDirectoryListMock("dir2", [file3])

    statusMock = xrootStatusMock()
    statusMock.makeOk()
    mocked_xrootclient.rm.return_value = (statusMock, None)
    mocked_xrootclient.rmdir.return_value = (statusMock, None)

    # This test should remove file1 only
    setMockDirectory(directoryListMock1)

    res = resource.removeDirectory("A", recursive=False)
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": {"FilesRemoved": 1, "SizeRemoved": 4}}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    mocked_xrootclient.dirlist.side_effect = [
        (statusStatDirMock,
         directoryListMock1),
        (statusStatDirMock,
         directoryListMock2),
        (statusStatDirMock,
         directoryListMock3)]

    mocked_xrootclient.stat.side_effect = None

    mockDirA = xrootStatInfoMock()
    mockDirA.makeDir()
    mockDirA.size = 3

    tmp_collect_sideeffs = [(statusStatDirMock, mockDirA)]
    for entry in directoryListMock1:
      tmp_tuple = (statusStatDirMock, entry.statinfo)
      tmp_collect_sideeffs.append(tmp_tuple)
    for entry in directoryListMock2:
      tmp_tuple = (statusStatDirMock, entry.statinfo)
      tmp_collect_sideeffs.append(tmp_tuple)
    for entry in directoryListMock3:
      tmp_tuple = (statusStatDirMock, entry.statinfo)
      tmp_collect_sideeffs.append(tmp_tuple)
    mocked_xrootclient.stat.side_effect = tmp_collect_sideeffs

    # This test should remove the 3 files
    res = resource.removeDirectory("A", recursive=True)
    self.assertEqual(True, res['OK'])
    self.assertEqual({"A": {"FilesRemoved": 3, "SizeRemoved": 28}}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # The rmdir command fails
    statusMock.makeError()
    mocked_xrootclient.dirlist.side_effect = None
    mocked_xrootclient.dirlist.return_value = statusMock, directoryListMock1
    res = resource.removeDirectory("A", recursive=False)
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({"A": {"FilesRemoved": 0, "SizeRemoved": 0}}, res['Value']['Failed'])

    # The rmdir command is fatal
    statusMock.makeFatal()
    mocked_xrootclient.dirlist.side_effect = [(statusStatDirMock, directoryListMock1)]
    res = resource.removeDirectory("A", recursive=False)
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({"A": {"FilesRemoved": 0, "SizeRemoved": 0}}, res['Value']['Failed'])

    # To get rid of rare bug that lets the makeFatal() survive into oter
    # tests, causing them to fail (notably listDir, if it is executed after
    # this test)
    statusMock.makeOk()
    mocked_xrootclient.rm.return_value = (None, None)
    mocked_xrootclient.rmdir.return_value = (None, None)
    mocked_xrootclient.dirlist.side_effect = [(None, None)]
示例#18
0
  def test_putFile(self):
    """ Test the output of putFile"""

    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    mocked_xrootclient.copy.return_value = statusMock, None

    statusMkDirMock = xrootStatusMock()
    statusMkDirMock.makeOk()

    mocked_xrootclient.mkdir.return_value = statusMkDirMock, None

    statusRmMock = xrootStatusMock()
    statusRmMock.makeOk()

    mocked_xrootclient.rm.return_value = statusRmMock, None

    statusStatMock = xrootStatusMock()
    statusStatMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = 1

    updateStatMockReferences(statusStatMock, statInfoMock)

    # This test should be completely okay
    copymock = mock.Mock()
    copymock.run.return_value = (statusMock, None)
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    res = resource.putFile({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"remoteA": 1}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # Here the sizes should not match
    statInfoMock.size = 1000
    res = resource.putFile({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("remoteA", res['Value']['Failed'].keys()[0])
    statInfoMock.size = 1

    # Here we should not be able to get the file from storage
    statusMock.makeError()
    res = resource.putFile({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("remoteA", res['Value']['Failed'].keys()[0])

    # Fatal error in getting the file from storage
    statusMock.makeFatal()
    res = resource.putFile({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual("remoteA", res['Value']['Failed'].keys()[0])

    # Bad input
    res = resource.putFile("remoteA")
    self.assertEqual(False, res['OK'])

    # Error, but not 3011 when checking existance of file, and then successful anyway
    statusMock.makeOk()

    with mock.patch.object(XROOTStorage, '_XROOTStorage__singleExists',
                           return_value=S_OK(S_ERROR("error checking existance "))):
      res = resource.putFile({"remoteA": "localA"})
      self.assertEqual(True, res['OK'])
      self.assertEqual({'remoteA': 1}, res['Value']['Successful'])
示例#19
0
  def test_putDirectory(self):
    ''' tests the output of putDirectory
    '''
    global mocked_xrootclient

    # I again try to have 2 subdirs, and 1 file per subdir and 1 file a the root

    resource = XROOTStorage('storageName', self.parameterDict)

    statusCopyMock = xrootStatusMock()
    statusCopyMock.makeOk()

    mocked_xrootclient.copy.return_value = statusCopyMock, None

    statusMkDirMock = xrootStatusMock()
    statusMkDirMock.makeOk()

    mocked_xrootclient.mkdir.return_value = statusMkDirMock, None

    statusRmMock = xrootStatusMock()
    statusRmMock.makeOk()

    mocked_xrootclient.rm.return_value = statusRmMock, None

    statusStatMock = xrootStatusMock()
    statusStatMock.makeOk()
    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeFile()
    statInfoMock.size = 1

    updateStatMockReferences(statusStatMock, statInfoMock)

    # This test should upload the 3 files
    copymock = mock.Mock()
    copymock.run.return_value = statusCopyMock, None
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    res = resource.putDirectory({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({"remoteA": {"Files": 3, "Size": 3}}, res['Value']['Successful'])
    self.assertEqual({}, res['Value']['Failed'])

    # The copy command is just in error
    statusCopyMock.makeError()
    copymock.run.return_value = statusCopyMock, None
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    with mock.patch('os.path.isdir',
                    new=MagicMock(side_effect=[True,
                                               True,
                                               True,
                                               False,
                                               True,
                                               True,
                                               False,
                                               False])), mock.patch('os.listdir',
                                                                    new=MagicMock(side_effect=[("dir1",
                                                                                                "dir2",
                                                                                                "file1"),
                                                                                  ("file2", ), ("file3", )])):
      res = resource.putDirectory({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({"remoteA": {"Files": 0, "Size": 0}}, res['Value']['Failed'])

    # The copy command is fatal
    statusCopyMock.makeFatal()
    copymock.run.return_value = statusCopyMock, None
    mocked_xrootd.client.CopyProcess = mock.Mock(return_value=copymock)
    with mock.patch('os.path.isdir',
                    new=MagicMock(side_effect=[True,
                                               True,
                                               True,
                                               False,
                                               True,
                                               True,
                                               False,
                                               False])), mock.patch('os.listdir',
                                                                    new=MagicMock(side_effect=[("dir1",
                                                                                                "dir2",
                                                                                                "file1"),
                                                                                  ("file2", ), ("file3", )])):
      res = resource.putDirectory({"remoteA": "localA"})
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual({"remoteA": {"Files": 0, "Size": 0}}, res['Value']['Failed'])
示例#20
0
  def test_listDirectory(self):
    """ Try to list the directory"""
    global mocked_xrootclient

    resource = XROOTStorage('storageName', self.parameterDict)

    statusMock = xrootStatusMock()
    statusMock.makeOk()

    statInfoMock = xrootStatInfoMock()
    statInfoMock.makeDir()

    updateStatMockReferences(statusMock, statInfoMock)

    statDir1 = xrootStatInfoMock()
    statDir1.makeDir()
    statDir1.size = 1
    dir1 = xrootListEntryMock("dir1", "host", statDir1)

    statDir2 = xrootStatInfoMock()
    statDir2.makeDir()
    statDir2.size = 2
    dir2 = xrootListEntryMock("dir2", "host", statDir2)

    statFile1 = xrootStatInfoMock()
    statFile1.makeFile()
    statFile1.size = 4
    file1 = xrootListEntryMock("file1", "host", statFile1)

    directoryListMock = xrootDirectoryListMock("parent", [dir1, dir2, file1])

    parentdir = xrootStatInfoMock()
    parentdir.makeDir()

    setMockDirectory(directoryListMock)

    resource.se = MagicMock()
    voName = "A"
    resource.se.vo = voName
    # We created a Directory which contains 2 subdir and 1 file

    aUrl = resource.constructURLFromLFN("/A")['Value']
    res = resource.listDirectory(aUrl)
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Failed'])
    SubDirs = res['Value']['Successful'][aUrl]["SubDirs"]
    SubFiles = res['Value']['Successful'][aUrl]["Files"]
    self.assertEqual(2, len(SubDirs))
    self.assertEqual(1, len(SubFiles))
    self.assertEqual(SubFiles["/A/file1"]["Size"], 4)

    # Cleanup old side effect
    mocked_xrootclient.stat.side_effect = None

    # Let's try on a File. It should fail
    statInfoMock.makeFile()
    updateStatMockReferences(infoval=statInfoMock)

    res = resource.listDirectory(aUrl)
    self.assertEqual(True, res['OK'])
    self.assertEqual({}, res['Value']['Successful'])
    self.assertEqual(aUrl, res['Value']['Failed'].keys()[0])
示例#21
0
  def test_instantiate(self):
    ''' tests that we can instantiate one object of the tested class
    '''

    resource = XROOTStorage('storageName', self.parameterDict)
    self.assertEqual('XROOTStorage', resource.__class__.__name__)