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