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