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'])