diff --git a/src/DIRAC/RequestManagementSystem/Client/test/Test_File.py b/src/DIRAC/RequestManagementSystem/Client/test/Test_File.py index 8a5c0070d79..882f4cbb06a 100644 --- a/src/DIRAC/RequestManagementSystem/Client/test/Test_File.py +++ b/src/DIRAC/RequestManagementSystem/Client/test/Test_File.py @@ -1,9 +1,3 @@ -######################################################################## -# File: FileTest.py -# Author: Krzysztof.Ciba@NOSPAMgmail.com -# Date: 2012/08/06 13:48:54 -######################################################################## - """ :mod: FileTest ======================= @@ -19,187 +13,55 @@ from __future__ import division __RCSID__ = "$Id$" -# # -# @file FileTest.py -# @author Krzysztof.Ciba@NOSPAMgmail.com -# @date 2012/08/06 13:49:05 -# @brief Definition of FileTest class. +import pytest -# # imports -import unittest -# # from DIRAC from DIRAC.RequestManagementSystem.Client.Operation import Operation -# # SUT from DIRAC.RequestManagementSystem.Client.File import File -######################################################################## - - -class FileTests(unittest.TestCase): - """ - .. class:: FileTest - - """ - - def setUp(self): - """ test setup """ - self.fromDict = { - "Size": 1, - "LFN": "/test/lfn", - "ChecksumType": "ADLER32", - "Checksum": "123456", - "Status": "Waiting"} - - def tearDown(self): - """ test tear down """ - del self.fromDict - - def test01ctors(self): - """ File construction and (de)serialisation """ - # # empty default ctor - theFile = File() - self.assertEqual(isinstance(theFile, File), True) - - # # fromDict - try: - theFile = File(self.fromDict) - except AttributeError as error: - print("AttributeError: %s" % str(error)) - - self.assertEqual(isinstance(theFile, File), True) - for key, value in self.fromDict.items(): - self.assertEqual(getattr(theFile, key), value) - - toJSON = theFile.toJSON() - self.assertEqual(toJSON["OK"], True, "JSON serialization error") - - def test02props(self): - """ test props and attributes """ - theFile = File() - - # valid props - theFile.FileID = 1 - self.assertEqual(theFile.FileID, 1) - theFile.Status = "Done" - self.assertEqual(theFile.Status, "Done") - theFile.LFN = "/some/path/somewhere" - self.assertEqual(theFile.LFN, "/some/path/somewhere") - theFile.PFN = "/some/path/somewhere" - self.assertEqual(theFile.PFN, "/some/path/somewhere") - theFile.Attempt = 1 - self.assertEqual(theFile.Attempt, 1) - theFile.Size = 1 - self.assertEqual(theFile.Size, 1) - theFile.GUID = "2bbabe80-e2f1-11e1-9b23-0800200c9a66" - self.assertEqual(theFile.GUID, "2bbabe80-e2f1-11e1-9b23-0800200c9a66") - theFile.ChecksumType = "adler32" - self.assertEqual(theFile.ChecksumType, "ADLER32") - theFile.Checksum = "123456" - self.assertEqual(theFile.Checksum, "123456") - - # # - theFile.Checksum = None - theFile.ChecksumType = None -# self.assertEqual( theFile.Checksum, "" ) -# self.assertEqual( theFile.ChecksumType, "" ) - - # # invalid props - - # FileID - try: - theFile.FileID = "foo" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - - # parent - parent = Operation({"OperationID": 99999}) - parent += theFile - - theFile.FileID = 0 - -# self.assertEqual( parent.OperationID, theFile.OperationID ) - try: - theFile.OperationID = 111111 - except Exception as error: - self.assertEqual(isinstance(error, AttributeError), True) - self.assertEqual(str(error), "can't set attribute") - - # LFN - try: - theFile.LFN = 1 - except Exception as error: - self.assertEqual(isinstance(error, TypeError), True) - self.assertEqual(str(error), "LFN has to be a string!") - try: - theFile.LFN = "../some/path" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "LFN should be an absolute path!") - - # PFN - try: - theFile.PFN = 1 - except Exception as error: - self.assertEqual(isinstance(error, TypeError), True) - self.assertEqual(str(error), "PFN has to be a string!") - try: - theFile.PFN = "snafu" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "Wrongly formatted PFN!") - - # Size - try: - theFile.Size = "snafu" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - try: - theFile.Size = -1 - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "Size should be a positive integer!") - - # GUID - try: - theFile.GUID = "snafuu-uuu-uuu-uuu-uuu-u" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "'snafuu-uuu-uuu-uuu-uuu-u' is not a valid GUID!") - try: - theFile.GUID = 2233345 - except Exception as error: - self.assertEqual(isinstance(error, TypeError), True) - self.assertEqual(str(error), "GUID should be a string!") - - # Attempt - try: - theFile.Attempt = "snafu" - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - try: - theFile.Attempt = -1 - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "Attempt should be a positive integer!") - - # Status - try: - theFile.Status = None - except Exception as error: - self.assertEqual(isinstance(error, ValueError), True) - self.assertEqual(str(error), "Unknown Status: None!") - - # Error - try: - theFile.Error = Exception("test") - except Exception as error: - self.assertEqual(isinstance(error, TypeError), True) - self.assertEqual(str(error), "Error has to be a string!") - -# # test execution -if __name__ == "__main__": - testLoader = unittest.TestLoader() - fileTests = testLoader.loadTestsFromTestCase(FileTests) - suite = unittest.TestSuite([fileTests]) - unittest.TextTestRunner(verbosity=3).run(suite) +def test_ctors(): + """ File construction and (de)serialisation """ + theFile = File() + assert isinstance(theFile, File) + + fromDict = { + "Size": 1, + "LFN": "/test/lfn", + "ChecksumType": "ADLER32", + "Checksum": "123456", + "Status": "Waiting", + } + try: + theFile = File(fromDict) + except AttributeError as error: + print("AttributeError: %s" % str(error)) + + assert isinstance(theFile, File) + for key, value in fromDict.items(): + assert getattr(theFile, key) == value + + toJSON = theFile.toJSON() + assert toJSON["OK"], "JSON serialization error" + + +def test_valid_properties(): + theFile = File() + + theFile.FileID = 1 + assert theFile.FileID == 1 + theFile.Status = "Done" + assert theFile.Status == "Done" + theFile.LFN = "/some/path/somewhere" + assert theFile.LFN == "/some/path/somewhere" + theFile.PFN = "/some/path/somewhere" + assert theFile.PFN == "/some/path/somewhere" + theFile.Attempt = 1 + assert theFile.Attempt == 1 + theFile.Size = 1 + assert theFile.Size == 1 + theFile.GUID = "2bbabe80-e2f1-11e1-9b23-0800200c9a66" + assert theFile.GUID == "2bbabe80-e2f1-11e1-9b23-0800200c9a66" + theFile.ChecksumType = "adler32" + assert theFile.ChecksumType == "ADLER32" + theFile.Checksum = "123456" + assert theFile.Checksum == "123456" diff --git a/src/DIRAC/RequestManagementSystem/Client/test/Test_Operation.py b/src/DIRAC/RequestManagementSystem/Client/test/Test_Operation.py index e51f5a7299c..7a1ac4ce34e 100644 --- a/src/DIRAC/RequestManagementSystem/Client/test/Test_Operation.py +++ b/src/DIRAC/RequestManagementSystem/Client/test/Test_Operation.py @@ -1,9 +1,3 @@ -######################################################################## -# File: OperationTests.py -# Author: Krzysztof.Ciba@NOSPAMgmail.com -# Date: 2012/08/14 14:30:20 -######################################################################## - """ :mod: OperationTests ==================== @@ -19,190 +13,124 @@ __RCSID__ = "$Id $" -# # -# @file OperationTests.py -# @author Krzysztof.Ciba@NOSPAMgmail.com -# @date 2012/08/14 14:30:34 -# @brief Definition of OperationTests class. +import pytest -# # imports -import unittest -# # from DIRAC from DIRAC.RequestManagementSystem.Client.File import File -# # SUT from DIRAC.RequestManagementSystem.Client.Operation import Operation -######################################################################## - - -class OperationTests(unittest.TestCase): - """ - .. class:: OperationTests - - """ - - def setUp(self): - """ test set up """ - self.fromDict = {"Type": "replicateAndRegister", - "TargetSE": "CERN-USER,PIC-USER", - "SourceSE": None} - self.subFile = File({"LFN": "/lhcb/user/c/cibak/testFile", - "Checksum": "1234567", - "ChecksumType": "ADLER32", - "Size": 1024, - "Status": "Waiting"}) - self.operation = None - - def tearDown(self): - """ test case tear down """ - del self.fromDict - del self.subFile - - def test01ctor(self): - """ test constructors and (de)serialisation """ - # # empty ctor - self.assertEqual(isinstance(Operation(), Operation), True, "empty ctor failed") - - # # using fromDict - operation = Operation(self.fromDict) - self.assertEqual(isinstance(operation, Operation), True, "fromDict ctor failed") - for key, value in self.fromDict.items(): - self.assertEqual(getattr(operation, key), value, "wrong attr value %s (%s) %s" % (key, - getattr(operation, key), - value)) - - # # same with file - operation = Operation(self.fromDict) - operation.addFile(self.subFile) - - for key, value in self.fromDict.items(): - self.assertEqual(getattr(operation, key), value, "wrong attr value %s (%s) %s" % (key, - getattr(operation, key), - value)) - - toJSON = operation.toJSON() - self.assertEqual(toJSON["OK"], True, "JSON serialization failed") - - def test02props(self): - """ test properties """ - - # # valid values - operation = Operation() - - operation.Arguments = "foobar" - self.assertEqual(operation.Arguments, b"foobar", "wrong Arguments") - - operation.SourceSE = "CERN-RAW" - self.assertEqual(operation.SourceSE, "CERN-RAW", "wrong SourceSE") - - operation.TargetSE = "CERN-RAW" - self.assertEqual(operation.TargetSE, "CERN-RAW", "wrong TargetSE") - - operation.Catalog = "" - self.assertEqual(operation.Catalog, "", "wrong Catalog") - operation.Catalog = "BookkeepingDB" - self.assertEqual(operation.Catalog, "BookkeepingDB", "wrong Catalog") - - operation.Error = "error" - self.assertEqual(operation.Error, "error", "wrong Error") - - # # wrong props - try: - operation.RequestID = "foo" - except Exception as error: - self.assertEqual(type(error), AttributeError, "wrong exc raised") - self.assertEqual(str(error), "can't set attribute", "wrong exc reason") - - try: - operation.OperationID = "foo" - except Exception as error: - self.assertEqual(type(error), ValueError, "wrong exc raised") - - # # timestamps - try: - operation.SubmitTime = "foo" - except Exception as error: - self.assertEqual(type(error), ValueError, "wrong exp raised") - self.assertEqual(str(error), "time data 'foo' does not match format '%Y-%m-%d %H:%M:%S'", "wrong exc reason") - - try: - operation.LastUpdate = "foo" - except Exception as error: - self.assertEqual(type(error), ValueError, "wrong exc raised") - self.assertEqual(str(error), "time data 'foo' does not match format '%Y-%m-%d %H:%M:%S'", "wrong exc reason") - - # # Status - operation = Operation() - try: - operation.Status = "foo" - except Exception as error: - self.assertEqual(type(error), ValueError, "wrong exc raised") - self.assertEqual(str(error), "unknown Status 'foo'", "wrong exc reason") - operation.addFile(File({"Status": "Waiting", "LFN": "/a"})) - - def test04StateMachine(self): - """ state machine """ - op = Operation() - self.assertEqual(op.Status, "Queued", "1. wrong status %s" % op.Status) - - op.addFile(File({"Status": "Waiting"})) - self.assertEqual(op.Status, "Queued", "2. wrong status %s" % op.Status) - - op.addFile(File({"Status": "Scheduled"})) - self.assertEqual(op.Status, "Scheduled", "3. wrong status %s" % op.Status) - - op.addFile(File({"Status": "Done"})) - self.assertEqual(op.Status, "Scheduled", "4. wrong status %s" % op.Status) - - op.addFile(File({"Status": "Failed"})) - self.assertEqual(op.Status, "Scheduled", "5. wrong status %s" % op.Status) - - op[3].Status = "Scheduled" - self.assertEqual(op.Status, "Scheduled", "6. wrong status %s" % op.Status) - - op[0].Status = "Scheduled" - self.assertEqual(op.Status, "Scheduled", "7. wrong status %s" % op.Status) - - op[0].Status = "Waiting" - self.assertEqual(op.Status, "Scheduled", "8. wrong status %s" % op.Status) - - for f in op: - f.Status = "Done" - self.assertEqual(op.Status, "Done", "9. wrong status %s" % op.Status) +def test_ctor(): + """ test constructors and (de)serialisation """ + assert isinstance(Operation(), Operation), "empty ctor failed" + + # # using fromDict + fromDict = { + "Type": "replicateAndRegister", + "TargetSE": "CERN-USER,PIC-USER", + "SourceSE": None, + } + operation = Operation(fromDict) + assert isinstance(operation, Operation), "fromDict ctor failed" + for key, value in fromDict.items(): + assert getattr(operation, key) == value, "wrong attr value %s (%s) %s" % (key, getattr(operation, key), value) + + # # same with file + operation = Operation(fromDict) + operation.addFile(File({ + "LFN": "/lhcb/user/c/cibak/testFile", + "Checksum": "1234567", + "ChecksumType": "ADLER32", + "Size": 1024, + "Status": "Waiting", + })) + + for key, value in fromDict.items(): + assert getattr(operation, key) == value, "wrong attr value %s (%s) %s" % (key, getattr(operation, key), value) + + toJSON = operation.toJSON() + assert toJSON["OK"], "JSON serialization failed" + + +def test_valid_properties(): + operation = Operation() + + operation.Arguments = "foobar" + assert operation.Arguments == b"foobar", "wrong Arguments" + + operation.SourceSE = "CERN-RAW" + assert operation.SourceSE == "CERN-RAW", "wrong SourceSE" + + operation.TargetSE = "CERN-RAW" + assert operation.TargetSE == "CERN-RAW", "wrong TargetSE" + + operation.Catalog = "" + assert operation.Catalog == "", "wrong Catalog" + + operation.Catalog = "BookkeepingDB" + assert operation.Catalog == "BookkeepingDB", "wrong Catalog" + + operation.Error = "error" + assert operation.Error == "error", "wrong Error" + + toJSON = operation.toJSON() + assert toJSON["OK"] + + +def test_StateMachine(): + """ state machine """ + op = Operation() + assert op.Status == "Queued", "1. wrong status %s" % op.Status + + op.addFile(File({"Status": "Waiting"})) + assert op.Status == "Queued", "2. wrong status %s" % op.Status + + op.addFile(File({"Status": "Scheduled"})) + assert op.Status == "Scheduled", "3. wrong status %s" % op.Status + + op.addFile(File({"Status": "Done"})) + assert op.Status == "Scheduled", "4. wrong status %s" % op.Status + + op.addFile(File({"Status": "Failed"})) + assert op.Status == "Scheduled", "5. wrong status %s" % op.Status + + op[3].Status = "Scheduled" + assert op.Status == "Scheduled", "6. wrong status %s" % op.Status + + op[0].Status = "Scheduled" + assert op.Status == "Scheduled", "7. wrong status %s" % op.Status + + op[0].Status = "Waiting" + assert op.Status == "Scheduled", "8. wrong status %s" % op.Status + + for f in op: + f.Status = "Done" + assert op.Status == "Done", "9. wrong status %s" % op.Status + + for f in op: + f.Status = "Failed" + assert op.Status == "Failed", "9. wrong status %s" % op.Status + - for f in op: - f.Status = "Failed" - self.assertEqual(op.Status, "Failed", "9. wrong status %s" % op.Status) +def test_List(): + """ getitem, setitem, delitem and dirty """ + op = Operation() - def test05List(self): - """ getitem, setitem, delitem and dirty """ - op = Operation() + files = [] + for _ in range(5): + f = File() + files.append(f) + op += f - files = [] - for i in range(5): - f = File() - files.append(f) - op += f + for i in range(len(op)): + assert op[i] == files[i], "__getitem__ failed" - for i in range(len(op)): - self.assertEqual(op[i], files[i], "__getitem__ failed") + for i in range(len(op)): + op[i] = File({"LFN": "/%s" % i}) + assert op[i].LFN == "/%s" % i, "__setitem__ failed" - for i in range(len(op)): - op[i] = File({"LFN": "/%s" % i}) - self.assertEqual(op[i].LFN, "/%s" % i, "__setitem__ failed") + del op[0] + assert len(op) == 4, "__delitem__ failed" - del op[0] - self.assertEqual(len(op), 4, "__delitem__ failed") - - # # opID set - op.OperationID = 1 - del op[0] - - -# # test execution -if __name__ == "__main__": - testLoader = unittest.TestLoader() - operationTests = testLoader.loadTestsFromTestCase(OperationTests) - suite = unittest.TestSuite([operationTests]) - unittest.TextTestRunner(verbosity=3).run(suite) + # opID set + op.OperationID = 1 + del op[0] diff --git a/src/DIRAC/RequestManagementSystem/Client/test/Test_Request.py b/src/DIRAC/RequestManagementSystem/Client/test/Test_Request.py index 86168e85f04..ef9fd13e923 100644 --- a/src/DIRAC/RequestManagementSystem/Client/test/Test_Request.py +++ b/src/DIRAC/RequestManagementSystem/Client/test/Test_Request.py @@ -1,9 +1,3 @@ -######################################################################## -# File: RequestTests.py -# Author: Krzysztof.Ciba@NOSPAMgmail.com -# Date: 2012/07/24 10:23:40 -######################################################################## - """ :mod: RequestTests ======================= @@ -19,20 +13,12 @@ from __future__ import division __RCSID__ = "$Id$" -# # -# @file RequestTests.py -# @author Krzysztof.Ciba@NOSPAMgmail.com -# @date 2012/07/24 10:23:52 -# @brief Definition of RequestTests class. +import datetime -# # imports import six -import unittest -import datetime -# # from DIRAC + from DIRAC.RequestManagementSystem.Client.Operation import Operation from DIRAC.RequestManagementSystem.Client.File import File -# # SUT from DIRAC.RequestManagementSystem.Client.Request import Request from DIRAC.RequestManagementSystem.Client.ReqClient import printRequest @@ -130,360 +116,347 @@ def createRequest(reqType): ######################################################################## -class RequestTests(unittest.TestCase): - """ - .. class:: RequestTests +def test_CtorSerilization(): + """ c'tor and serialization """ + req = Request() + assert isinstance(req, Request) + assert req.JobID == 0 + assert req.Status == "Waiting" - """ + req = Request({"RequestName": "test", "JobID": 12345}) + assert isinstance(req, Request) + assert req.RequestName == "test" + assert req.JobID == 12345 + assert req.Status == "Waiting" - def setUp(self): - """ set up """ - self.fromDict = {"RequestName": "test", "JobID": 12345} + req.SourceComponent = "test component" + assert req.SourceComponent == b"test component" - def tearDown(self): - """ tear down """ - del self.fromDict + toJSON = req.toJSON() + assert toJSON["OK"], "JSON serialization failed" - def test_01CtorSerilization(self): - """ c'tor and serialization """ - # # empty c'tor - req = Request() - self.assertEqual(isinstance(req, Request), True) - self.assertEqual(req.JobID, 0) - self.assertEqual(req.Status, "Waiting") + fromJSON = toJSON["Value"] + req = Request(fromJSON) - req = Request(self.fromDict) - self.assertEqual(isinstance(req, Request), True) - self.assertEqual(req.RequestName, "test") - self.assertEqual(req.JobID, 12345) - self.assertEqual(req.Status, "Waiting") - toJSON = req.toJSON() - self.assertEqual(toJSON["OK"], True, "JSON serialization failed") +def test_Props(): + """ props """ + # # valid values + req = Request() - fromJSON = toJSON["Value"] - req = Request(fromJSON) + req.RequestID = 1 + assert req.RequestID == 1 - def test_02Props(self): - """ props """ - # # valid values - req = Request() + req.RequestName = "test" + assert req.RequestName == "test" - req.RequestID = 1 - self.assertEqual(req.RequestID, 1) + req.JobID = 1 + assert req.JobID == 1 - req.RequestName = "test" - self.assertEqual(req.RequestName, "test") + req.CreationTime = "1970-01-01 00:00:00" + assert req.CreationTime == datetime.datetime(1970, 1, 1, 0, 0, 0) + req.CreationTime = datetime.datetime(1970, 1, 1, 0, 0, 0) + assert req.CreationTime == datetime.datetime(1970, 1, 1, 0, 0, 0) - req.JobID = 1 - self.assertEqual(req.JobID, 1) + req.SubmitTime = "1970-01-01 00:00:00" + assert req.SubmitTime == datetime.datetime(1970, 1, 1, 0, 0, 0) + req.SubmitTime = datetime.datetime(1970, 1, 1, 0, 0, 0) + assert req.SubmitTime == datetime.datetime(1970, 1, 1, 0, 0, 0) - req.CreationTime = "1970-01-01 00:00:00" - self.assertEqual(req.CreationTime, datetime.datetime(1970, 1, 1, 0, 0, 0)) - req.CreationTime = datetime.datetime(1970, 1, 1, 0, 0, 0) - self.assertEqual(req.CreationTime, datetime.datetime(1970, 1, 1, 0, 0, 0)) + req.LastUpdate = "1970-01-01 00:00:00" + assert req.LastUpdate == datetime.datetime(1970, 1, 1, 0, 0, 0) + req.LastUpdate = datetime.datetime(1970, 1, 1, 0, 0, 0) + assert req.LastUpdate == datetime.datetime(1970, 1, 1, 0, 0, 0) - req.SubmitTime = "1970-01-01 00:00:00" - self.assertEqual(req.SubmitTime, datetime.datetime(1970, 1, 1, 0, 0, 0)) - req.SubmitTime = datetime.datetime(1970, 1, 1, 0, 0, 0) - self.assertEqual(req.SubmitTime, datetime.datetime(1970, 1, 1, 0, 0, 0)) + req.Error = "" - req.LastUpdate = "1970-01-01 00:00:00" - self.assertEqual(req.LastUpdate, datetime.datetime(1970, 1, 1, 0, 0, 0)) - req.LastUpdate = datetime.datetime(1970, 1, 1, 0, 0, 0) - self.assertEqual(req.LastUpdate, datetime.datetime(1970, 1, 1, 0, 0, 0)) - req.Error = "" +def test_Operations(): + """ operations arithmetic and state machine """ + req = Request() + assert len(req) == 0 - def test_04Operations(self): - """ operations arithmetic and state machine """ - req = Request() - self.assertEqual(len(req), 0) + transfer = Operation() + transfer.Type = "ReplicateAndRegister" + transfer.addFile(File({"LFN": "/a/b/c", "Status": "Waiting"})) - transfer = Operation() - transfer.Type = "ReplicateAndRegister" - transfer.addFile(File({"LFN": "/a/b/c", "Status": "Waiting"})) + getWaiting = req.getWaiting() + assert getWaiting["OK"] + assert getWaiting["Value"] is None - getWaiting = req.getWaiting() - self.assertEqual(getWaiting["OK"], True) - self.assertEqual(getWaiting["Value"], None) + req.addOperation(transfer) + assert len(req) == 1 + assert transfer.Order == req.Order + assert transfer.Status == "Waiting" - req.addOperation(transfer) - self.assertEqual(len(req), 1) - self.assertEqual(transfer.Order, req.Order) - self.assertEqual(transfer.Status, "Waiting") + getWaiting = req.getWaiting() + assert getWaiting["OK"] + assert getWaiting["Value"] == transfer - getWaiting = req.getWaiting() - self.assertEqual(getWaiting["OK"], True) - self.assertEqual(getWaiting["Value"], transfer) + removal = Operation({"Type": "RemoveFile"}) + removal.addFile(File({"LFN": "/a/b/c", "Status": "Waiting"})) - removal = Operation({"Type": "RemoveFile"}) - removal.addFile(File({"LFN": "/a/b/c", "Status": "Waiting"})) + req.insertBefore(removal, transfer) - req.insertBefore(removal, transfer) + getWaiting = req.getWaiting() + assert getWaiting["OK"] + assert getWaiting["Value"] == removal - getWaiting = req.getWaiting() - self.assertEqual(getWaiting["OK"], True) - self.assertEqual(getWaiting["Value"], removal) + assert len(req) == 2 + assert [op.Status for op in req] == ["Waiting", "Queued"] + assert req.subStatusList() == ["Waiting", "Queued"] - self.assertEqual(len(req), 2) - self.assertEqual([op.Status for op in req], ["Waiting", "Queued"]) - self.assertEqual(req.subStatusList(), ["Waiting", "Queued"]) + assert removal.Order == 0 + assert removal.Order == req.Order - self.assertEqual(removal.Order, 0) - self.assertEqual(removal.Order, req.Order) + assert transfer.Order == 1 - self.assertEqual(transfer.Order, 1) + assert removal.Status == "Waiting" + assert transfer.Status == "Queued" - self.assertEqual(removal.Status, "Waiting") - self.assertEqual(transfer.Status, "Queued") + for subFile in removal: + subFile.Status = "Done" + removal.Status = "Done" - for subFile in removal: - subFile.Status = "Done" - removal.Status = "Done" + assert removal.Status == "Done" - self.assertEqual(removal.Status, "Done") + assert transfer.Status == "Waiting" + assert transfer.Order == req.Order - self.assertEqual(transfer.Status, "Waiting") - self.assertEqual(transfer.Order, req.Order) + # len, looping + assert len(req) == 2 + assert [op.Status for op in req] == ["Done", "Waiting"] + assert req.subStatusList() == ["Done", "Waiting"] - # # len, looping - self.assertEqual(len(req), 2) - self.assertEqual([op.Status for op in req], ["Done", "Waiting"]) - self.assertEqual(req.subStatusList(), ["Done", "Waiting"]) + digest = req.toJSON() + assert digest["OK"] - digest = req.toJSON() - self.assertEqual(digest["OK"], True) + getWaiting = req.getWaiting() + assert getWaiting["OK"] + assert getWaiting["Value"] == transfer - getWaiting = req.getWaiting() - self.assertEqual(getWaiting["OK"], True) - self.assertEqual(getWaiting["Value"], transfer) - def test_05FTS(self): - """ FTS state machine """ +def test_FTS(): + """ FTS state machine """ - req = Request() - req.RequestName = "FTSTest" + req = Request() + req.RequestName = "FTSTest" - ftsTransfer = Operation() - ftsTransfer.Type = "ReplicateAndRegister" - ftsTransfer.TargetSE = "CERN-USER" + ftsTransfer = Operation() + ftsTransfer.Type = "ReplicateAndRegister" + ftsTransfer.TargetSE = "CERN-USER" - ftsFile = File() - ftsFile.LFN = "/a/b/c" - ftsFile.Checksum = "123456" - ftsFile.ChecksumType = "Adler32" + ftsFile = File() + ftsFile.LFN = "/a/b/c" + ftsFile.Checksum = "123456" + ftsFile.ChecksumType = "Adler32" - ftsTransfer.addFile(ftsFile) - req.addOperation(ftsTransfer) + ftsTransfer.addFile(ftsFile) + req.addOperation(ftsTransfer) - self.assertEqual(req.Status, "Waiting", "1. wrong request status: %s" % req.Status) - self.assertEqual(ftsTransfer.Status, "Waiting", "1. wrong ftsStatus status: %s" % ftsTransfer.Status) + assert req.Status == "Waiting", "1. wrong request status: %s" % req.Status + assert ftsTransfer.Status == "Waiting", "1. wrong ftsStatus status: %s" % ftsTransfer.Status - # # scheduled - ftsFile.Status = "Scheduled" + # # scheduled + ftsFile.Status = "Scheduled" - self.assertEqual(ftsTransfer.Status, "Scheduled", "2. wrong status for ftsTransfer: %s" % ftsTransfer.Status) - self.assertEqual(req.Status, "Scheduled", "2. wrong status for request: %s" % req.Status) + assert ftsTransfer.Status == "Scheduled", "2. wrong status for ftsTransfer: %s" % ftsTransfer.Status + assert req.Status == "Scheduled", "2. wrong status for request: %s" % req.Status - # # add new operation before FTS - insertBefore = Operation() - insertBefore.Type = "RegisterReplica" - insertBefore.TargetSE = "CERN-USER" - insertFile = File() - insertFile.LFN = "/a/b/c" - insertFile.PFN = "http://foo/bar" - insertBefore.addFile(insertFile) - req.insertBefore(insertBefore, ftsTransfer) + # # add new operation before FTS + insertBefore = Operation() + insertBefore.Type = "RegisterReplica" + insertBefore.TargetSE = "CERN-USER" + insertFile = File() + insertFile.LFN = "/a/b/c" + insertFile.PFN = "http://foo/bar" + insertBefore.addFile(insertFile) + req.insertBefore(insertBefore, ftsTransfer) - self.assertEqual(insertBefore.Status, "Waiting", "3. wrong status for insertBefore: %s" % insertBefore.Status) - self.assertEqual(ftsTransfer.Status, "Scheduled", "3. wrong status for ftsStatus: %s" % ftsTransfer.Status) - self.assertEqual(req.Status, "Waiting", "3. wrong status for request: %s" % req.Status) + assert insertBefore.Status == "Waiting", "3. wrong status for insertBefore: %s" % insertBefore.Status + assert ftsTransfer.Status == "Scheduled", "3. wrong status for ftsStatus: %s" % ftsTransfer.Status + assert req.Status == "Waiting", "3. wrong status for request: %s" % req.Status - # # prev done - insertFile.Status = "Done" + # # prev done + insertFile.Status = "Done" - self.assertEqual(insertBefore.Status, "Done", "4. wrong status for insertBefore: %s" % insertBefore.Status) - self.assertEqual(ftsTransfer.Status, "Scheduled", "4. wrong status for ftsStatus: %s" % ftsTransfer.Status) - self.assertEqual(req.Status, "Scheduled", "4. wrong status for request: %s" % req.Status) + assert insertBefore.Status == "Done", "4. wrong status for insertBefore: %s" % insertBefore.Status + assert ftsTransfer.Status == "Scheduled", "4. wrong status for ftsStatus: %s" % ftsTransfer.Status + assert req.Status == "Scheduled", "4. wrong status for request: %s" % req.Status - # # reschedule - ftsFile.Status = "Waiting" + # # reschedule + ftsFile.Status = "Waiting" - self.assertEqual(insertBefore.Status, "Done", "5. wrong status for insertBefore: %s" % insertBefore.Status) - self.assertEqual(ftsTransfer.Status, "Waiting", "5. wrong status for ftsStatus: %s" % ftsTransfer.Status) - self.assertEqual(req.Status, "Waiting", "5. wrong status for request: %s" % req.Status) + assert insertBefore.Status == "Done", "5. wrong status for insertBefore: %s" % insertBefore.Status + assert ftsTransfer.Status == "Waiting", "5. wrong status for ftsStatus: %s" % ftsTransfer.Status + assert req.Status == "Waiting", "5. wrong status for request: %s" % req.Status - # # fts done - ftsFile.Status = "Done" + # # fts done + ftsFile.Status = "Done" - self.assertEqual(insertBefore.Status, "Done", "5. wrong status for insertBefore: %s" % insertBefore.Status) - self.assertEqual(ftsTransfer.Status, "Done", "5. wrong status for ftsStatus: %s" % ftsTransfer.Status) - self.assertEqual(req.Status, "Done", "5. wrong status for request: %s" % req.Status) + assert insertBefore.Status == "Done", "5. wrong status for insertBefore: %s" % insertBefore.Status + assert ftsTransfer.Status == "Done", "5. wrong status for ftsStatus: %s" % ftsTransfer.Status + assert req.Status == "Done", "5. wrong status for request: %s" % req.Status - def test_06StateMachine(self): - """ state machine tests """ - r = Request({"RequestName": "SMT"}) - self.assertEqual(r.Status, "Waiting", "1. wrong status %s" % r.Status) - r.addOperation(Operation({"Status": "Queued"})) - self.assertEqual(r.Status, "Waiting", "2. wrong status %s" % r.Status) +def test_StateMachine(): + """ state machine tests """ + r = Request({"RequestName": "SMT"}) + assert r.Status == "Waiting", "1. wrong status %s" % r.Status + + r.addOperation(Operation({"Status": "Queued"})) + assert r.Status == "Waiting", "2. wrong status %s" % r.Status + + r.addOperation(Operation({"Status": "Queued"})) + assert r.Status == "Waiting", "3. wrong status %s" % r.Status + + r[0].Status = "Done" + assert r.Status == "Waiting", "4. wrong status %s" % r.Status + + r[1].Status = "Done" + assert r.Status == "Done", "5. wrong status %s" % r.Status + + r[0].Status = "Failed" + assert r.Status == "Failed", "6. wrong status %s" % r.Status + + r[0].Status = "Queued" + assert r.Status == "Waiting", "7. wrong status %s" % r.Status + + r.insertBefore(Operation({"Status": "Queued"}), r[0]) + assert r.Status == "Waiting", "8. wrong status %s" % r.Status + + r.insertBefore(Operation({"Status": "Queued"}), r[0]) + assert r.Status == "Waiting", "9. wrong status %s" % r.Status + + r.insertBefore(Operation({"Status": "Scheduled"}), r[0]) + assert r.Status == "Scheduled", "10. wrong status %s" % r.Status + + r.insertBefore(Operation({"Status": "Queued"}), r[0]) + assert r.Status == "Waiting", "11. wrong status %s" % r.Status + r[0].Status = "Failed" + assert r.Status == "Failed", "12. wrong status %s" % r.Status + + r[0].Status = "Done" + assert r.Status == "Scheduled", "13. wrong status %s" % r.Status + + r[1].Status = "Failed" + assert r.Status == "Failed", "14. wrong status %s" % r.Status + + r[1].Status = "Done" + assert r.Status == "Waiting", "15. wrong status %s" % r.Status + + r[2].Status = "Scheduled" + assert r.Status == "Scheduled", "16. wrong status %s" % r.Status + + r[2].Status = "Queued" + assert r.Status == "Waiting", "17. wrong status %s" % r.Status + + r[2].Status = "Scheduled" + assert r.Status == "Scheduled", "18. wrong status %s" % r.Status + + r = Request() + for _ in range(5): r.addOperation(Operation({"Status": "Queued"})) - self.assertEqual(r.Status, "Waiting", "3. wrong status %s" % r.Status) - r[0].Status = "Done" - self.assertEqual(r.Status, "Waiting", "4. wrong status %s" % r.Status) + r[0].Status = "Done" + assert r.Status == "Waiting", "19. wrong status %s" % r.Status - r[1].Status = "Done" - self.assertEqual(r.Status, "Done", "5. wrong status %s" % r.Status) + r[1].Status = "Done" + assert r.Status == "Waiting", "20. wrong status %s" % r.Status - r[0].Status = "Failed" - self.assertEqual(r.Status, "Failed", "6. wrong status %s" % r.Status) + r[2].Status = "Scheduled" + assert r.Status == "Scheduled", "21. wrong status %s" % r.Status - r[0].Status = "Queued" - self.assertEqual(r.Status, "Waiting", "7. wrong status %s" % r.Status) + r[2].Status = "Done" + assert r.Status == "Waiting", "22. wrong status %s" % r.Status - r.insertBefore(Operation({"Status": "Queued"}), r[0]) - self.assertEqual(r.Status, "Waiting", "8. wrong status %s" % r.Status) - r.insertBefore(Operation({"Status": "Queued"}), r[0]) - self.assertEqual(r.Status, "Waiting", "9. wrong status %s" % r.Status) - - r.insertBefore(Operation({"Status": "Scheduled"}), r[0]) - self.assertEqual(r.Status, "Scheduled", "10. wrong status %s" % r.Status) - - r.insertBefore(Operation({"Status": "Queued"}), r[0]) - self.assertEqual(r.Status, "Waiting", "11. wrong status %s" % r.Status) - - r[0].Status = "Failed" - self.assertEqual(r.Status, "Failed", "12. wrong status %s" % r.Status) - - r[0].Status = "Done" - self.assertEqual(r.Status, "Scheduled", "13. wrong status %s" % r.Status) - - r[1].Status = "Failed" - self.assertEqual(r.Status, "Failed", "14. wrong status %s" % r.Status) - - r[1].Status = "Done" - self.assertEqual(r.Status, "Waiting", "15. wrong status %s" % r.Status) - - r[2].Status = "Scheduled" - self.assertEqual(r.Status, "Scheduled", "16. wrong status %s" % r.Status) - - r[2].Status = "Queued" - self.assertEqual(r.Status, "Waiting", "17. wrong status %s" % r.Status) - - r[2].Status = "Scheduled" - self.assertEqual(r.Status, "Scheduled", "18. wrong status %s" % r.Status) - - r = Request() - for i in range(5): - r.addOperation(Operation({"Status": "Queued"})) - - r[0].Status = "Done" - self.assertEqual(r.Status, "Waiting", "19. wrong status %s" % r.Status) - - r[1].Status = "Done" - self.assertEqual(r.Status, "Waiting", "20. wrong status %s" % r.Status) - - r[2].Status = "Scheduled" - self.assertEqual(r.Status, "Scheduled", "21. wrong status %s" % r.Status) - - r[2].Status = "Done" - self.assertEqual(r.Status, "Waiting", "22. wrong status %s" % r.Status) - - def test_07List(self): - """ setitem, delitem, getitem and dirty """ - - r = Request() - - ops = [Operation() for i in range(5)] - - for op in ops: - r.addOperation(op) - - for i, op in enumerate(ops): - self.assertEqual(op, r[i], "__getitem__ failed") - - op = Operation() - r[0] = op - self.assertEqual(op, r[0], "__setitem__ failed") - - del r[0] - self.assertEqual(len(r), 4, "__delitem__ failed") - - def test_08Optimize(self): - title = { - 0: 'Simple Failover', - 1: 'Double Failover', - 2: 'Double Failover + ForwardDiset', - 3: 'ForwardDiset + Double Failover', - 4: 'ForwardDiset + Double Failover + ForwardDiset', - 5: 'ForwardDiset + Double Failover (# Failover SE) + ForwardDiset', - 6: 'ForwardDiset + Double Failover (# Destination SE) + ForwardDiset' - } - debug = False - if debug: - print('') - for reqType in title: - - r = createRequest(reqType) - res = optimizeRequest(r, printOutput=title[reqType] if (debug == reqType and debug is not False) else False) - self.assertEqual(res['OK'], True) - self.assertEqual(res['Value'], True) - if reqType in (0, 1): - self.assertEqual(len(r), 2, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[0].Type, 'ReplicateAndRegister') - self.assertEqual(r[1].Type, 'RemoveReplica') - if reqType == 1: - self.assertEqual(len(r[0]), 2, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[1]), 2, 'Wrong number of files: %d' % len(r[1])) - elif reqType == 2: - self.assertEqual(len(r), 3, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[0].Type, 'ReplicateAndRegister') - self.assertEqual(r[1].Type, 'RemoveReplica') - self.assertEqual(r[2].Type, 'ForwardDiset') - self.assertEqual(len(r[0]), 2, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[1]), 2, 'Wrong number of files: %d' % len(r[1])) - elif reqType == 3: - self.assertEqual(len(r), 3, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[1].Type, 'ReplicateAndRegister') - self.assertEqual(r[2].Type, 'RemoveReplica') - self.assertEqual(r[0].Type, 'ForwardDiset') - self.assertEqual(len(r[1]), 2, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[2]), 2, 'Wrong number of files: %d' % len(r[1])) - elif reqType == 4: - self.assertEqual(len(r), 4, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[1].Type, 'ReplicateAndRegister') - self.assertEqual(r[2].Type, 'RemoveReplica') - self.assertEqual(r[0].Type, 'ForwardDiset') - self.assertEqual(r[3].Type, 'ForwardDiset') - self.assertEqual(len(r[1]), 2, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[2]), 2, 'Wrong number of files: %d' % len(r[1])) - elif reqType == 5: - self.assertEqual(len(r), 5, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[1].Type, 'ReplicateAndRegister') - self.assertEqual(r[2].Type, 'RemoveReplica') - self.assertEqual(r[3].Type, 'RemoveReplica') - self.assertEqual(r[0].Type, 'ForwardDiset') - self.assertEqual(r[4].Type, 'ForwardDiset') - self.assertEqual(len(r[1]), 2, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[2]), 1, 'Wrong number of files: %d' % len(r[1])) - self.assertEqual(len(r[3]), 1, 'Wrong number of files: %d' % len(r[1])) - elif reqType == 6: - self.assertEqual(len(r), 5, 'Wrong number of operations: %d' % len(r)) - self.assertEqual(r[1].Type, 'ReplicateAndRegister') - self.assertEqual(r[2].Type, 'ReplicateAndRegister') - self.assertEqual(r[3].Type, 'RemoveReplica') - self.assertEqual(r[0].Type, 'ForwardDiset') - self.assertEqual(r[4].Type, 'ForwardDiset') - self.assertEqual(len(r[1]), 1, 'Wrong number of files: %d' % len(r[0])) - self.assertEqual(len(r[2]), 1, 'Wrong number of files: %d' % len(r[1])) - self.assertEqual(len(r[3]), 2, 'Wrong number of files: %d' % len(r[1])) - -# # test execution -if __name__ == "__main__": - - suite = unittest.defaultTestLoader.loadTestsFromTestCase(RequestTests) - testResult = unittest.TextTestRunner(verbosity=2).run(suite) +def test_List(): + """ setitem, delitem, getitem and dirty """ + + r = Request() + + ops = [Operation() for i in range(5)] + + for op in ops: + r.addOperation(op) + + for i, op in enumerate(ops): + assert op == r[i], "__getitem__ failed" + + op = Operation() + r[0] = op + assert op == r[0], "__setitem__ failed" + + del r[0] + assert len(r) == 4, "__delitem__ failed" + + +def test_Optimize(): + title = { + 0: 'Simple Failover', + 1: 'Double Failover', + 2: 'Double Failover + ForwardDiset', + 3: 'ForwardDiset + Double Failover', + 4: 'ForwardDiset + Double Failover + ForwardDiset', + 5: 'ForwardDiset + Double Failover (# Failover SE) + ForwardDiset', + 6: 'ForwardDiset + Double Failover (# Destination SE) + ForwardDiset' + } + debug = False + if debug: + print('') + for reqType in title: + r = createRequest(reqType) + res = optimizeRequest(r, printOutput=title[reqType] if (debug and debug == reqType) else False) + assert res['OK'] + assert res['Value'] + if reqType in (0, 1): + assert len(r) == 2, 'Wrong number of operations: %d' % len(r) + assert r[0].Type == 'ReplicateAndRegister' + assert r[1].Type == 'RemoveReplica' + if reqType == 1: + assert len(r[0]) == 2, 'Wrong number of files: %d' % len(r[0]) + assert len(r[1]) == 2, 'Wrong number of files: %d' % len(r[1]) + elif reqType == 2: + assert len(r) == 3, 'Wrong number of operations: %d' % len(r) + assert r[0].Type == 'ReplicateAndRegister' + assert r[1].Type == 'RemoveReplica' + assert r[2].Type == 'ForwardDiset' + assert len(r[0]) == 2, 'Wrong number of files: %d' % len(r[0]) + assert len(r[1]) == 2, 'Wrong number of files: %d' % len(r[1]) + elif reqType == 3: + assert len(r) == 3, 'Wrong number of operations: %d' % len(r) + assert r[1].Type == 'ReplicateAndRegister' + assert r[2].Type == 'RemoveReplica' + assert r[0].Type == 'ForwardDiset' + assert len(r[1]) == 2, 'Wrong number of files: %d' % len(r[0]) + assert len(r[2]) == 2, 'Wrong number of files: %d' % len(r[1]) + elif reqType == 4: + assert len(r) == 4, 'Wrong number of operations: %d' % len(r) + assert r[1].Type == 'ReplicateAndRegister' + assert r[2].Type == 'RemoveReplica' + assert r[0].Type == 'ForwardDiset' + assert r[3].Type == 'ForwardDiset' + assert len(r[1]) == 2, 'Wrong number of files: %d' % len(r[0]) + assert len(r[2]) == 2, 'Wrong number of files: %d' % len(r[1]) + elif reqType == 5: + assert len(r) == 5, 'Wrong number of operations: %d' % len(r) + assert r[1].Type == 'ReplicateAndRegister' + assert r[2].Type == 'RemoveReplica' + assert r[3].Type == 'RemoveReplica' + assert r[0].Type == 'ForwardDiset' + assert r[4].Type == 'ForwardDiset' + assert len(r[1]) == 2, 'Wrong number of files: %d' % len(r[0]) + assert len(r[2]) == 1, 'Wrong number of files: %d' % len(r[1]) + assert len(r[3]) == 1, 'Wrong number of files: %d' % len(r[1]) + elif reqType == 6: + assert len(r) == 5, 'Wrong number of operations: %d' % len(r) + assert r[1].Type == 'ReplicateAndRegister' + assert r[2].Type == 'ReplicateAndRegister' + assert r[3].Type == 'RemoveReplica' + assert r[0].Type == 'ForwardDiset' + assert r[4].Type == 'ForwardDiset' + assert len(r[1]) == 1, 'Wrong number of files: %d' % len(r[0]) + assert len(r[2]) == 1, 'Wrong number of files: %d' % len(r[1]) + assert len(r[3]) == 2, 'Wrong number of files: %d' % len(r[1]) diff --git a/src/DIRAC/RequestManagementSystem/private/JSONUtils.py b/src/DIRAC/RequestManagementSystem/private/JSONUtils.py index ba2b92b227f..cc5603ced12 100644 --- a/src/DIRAC/RequestManagementSystem/private/JSONUtils.py +++ b/src/DIRAC/RequestManagementSystem/private/JSONUtils.py @@ -1,8 +1,11 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function + import json +import six + class RMSEncoder(json.JSONEncoder): """ This class is an encoder for the Requests, Operation and Files. @@ -12,5 +15,7 @@ def default(self, obj): # pylint: disable=method-hidden if hasattr(obj, '_getJSONData'): return obj._getJSONData() + elif six.PY3 and isinstance(obj, bytes): + return obj.decode() else: return json.JSONEncoder.default(self, obj)