SF.net SVN: fclient: [204] trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
From: <ju...@us...> - 2008-02-11 10:55:22
|
Revision: 204 http://fclient.svn.sourceforge.net/fclient/?rev=204&view=rev Author: jurner Date: 2008-02-11 02:55:27 -0800 (Mon, 11 Feb 2008) Log Message: ----------- reworked tests. In theory it is now possible to test against the running node Modified Paths: -------------- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py Modified: trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py =================================================================== --- trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-11 10:54:36 UTC (rev 203) +++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-11 10:55:27 UTC (rev 204) @@ -26,40 +26,114 @@ del parentdir #<-- rel import hack - from dummy_socket import DummySocket +#*********************************************************************************** +# +#*********************************************************************************** +DIR = os.path.dirname(os.path.abspath(__file__)) +TestAgainstNode = 0 # don't know how to test against node. Do not touch this! +#*********************************************************************************** +# +#*********************************************************************************** +class MyFcpClient(FcpClient): + """Customized client recording all messages it sends + """ + def __init__(self, *args, **kwargs): + FcpClient.__init__(self, *args, **kwargs) + self.test_messagesSend = [] + + def sendMessageEx(self, msg): + FcpClient.sendMessageEx(self, msg) + # deepcopy here, we need exact state + msg = copy.deepcopy(msg) + self.test_messagesSend.append(msg) + +#*********************************************************************************** +# +#*********************************************************************************** +class DummySocketModule(object): + """Dummy socket module we inject into the client module for testing + + """ + AF_INET = socket.AF_INET + SOCK_STREAM = socket.SOCK_STREAM + error = socket.error + socket = DummySocket() + + def __init__(self): + self.lastSocket = None + + def __getattribute__(self, name): + obj = object.__getattribute__(self, name) + if name == 'socket': + self.lastSocket = obj + return obj + +#*********************************************************************************** +# +#*********************************************************************************** +class MySocketFactory(object): + """Real and alive socket. Can be used to test against the running node. Not used currently + + Usage: -DIR = os.path.dirname(os.path.abspath(__file__)) + DummySocketModule.socket = MySocketFactory() + + """ + def __init__(self, *args, **kwargs): + self.socket = None + self.closed = False + + def __call__(self, *args, **kwargs): + self.socket = socket.socket(*args, **kwargs) + return self + + def sendResponseMessage(self, *args, **kwargs): + pass + + def connect(self, *args, **kwargs): + return self.socket.connect(*args, **kwargs) + + def sendall(self, bytes): + return self.socket.sendall(bytes) + + def settimeout(self, n): + return self.socket.settimeout(n) + + def recv(self, n): + return self.socket.recv(n) + + def close(self): + self.closed = True + result = self.socket.close() + self.socket = None + return result + #*********************************************************************************** # #*********************************************************************************** class BaseTestClient(unittest.TestCase): - """Base class that does not connect to FcpClient prior to each test""" + """Base class for all tests""" + if TestAgainstNode: + DummySocketModule.socket = MySocketFactory() + fcpClient = MyFcpClient( + #debugVerbosity=FcpClient.consts.DebugVerbosity.Debug + ) + + # inject our customized socket module + socketModule = DummySocketModule() + fcp2_0_client.socket = socketModule + + def __init__(self, *args, **kwargs): unittest.TestCase.__init__(self, *args, **kwargs) - # replace socket module with our dummy socket module - self.oldSocketModule = None - self.socket = DummySocket() - class DummySocketModule(object): - AF_INET = socket.AF_INET - SOCK_STREAM = socket.SOCK_STREAM - error = socket.error - socket = self.socket - self.socketModule = DummySocketModule - - self.fcpClient = None # client to test self.events = [] # events received from the client - self.messages = [] # messages the client sent self.tmpfiles = [] # temp files used for testing (will be removed on tearDown) - def _captureMessagesFromClient(self, bytes): - s = DummySocket() - s.setResponse(bytes) - self.messages.append(self.fcpClient.Message.fromSocket(s)) - + def _captureEventsFromClient(self, event, msg): # have to copy message here, to get exact state msg = copy.deepcopy(msg) @@ -67,27 +141,34 @@ def connectClient(self): """Connects to the client""" - enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1) - msg = enum.next() - self.failIf(msg is not None) - #NOTE: have to send directly via socket here (our sendResponseMessage - # calls client.next() autkmatically) - self.socket.sendResponseMessage( - 'NodeHello', - FCPVersion='2.0', - Node='Fred', - Version=str(self.fcpClient.ExpectedFcpVersion), - Revision='999999999999', - Build='999999', - ExRevision='9999999999', - Testnet='false', - CompressionCodecs='1', - ConnectionIdentifier='any', - NodeLanguage='en', + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)): + if n == 0: + self.assertHasNextMessage( + consts.Message.ClientHello + ) + self.sendResponseMessage( + 'NodeHello', + FCPVersion='2.0', + Node='Fred', + Version=str(self.fcpClient.ExpectedFcpVersion), + Revision='999999999999', + Build='9999999999', + ExRevision='9999999999', + Testnet='false', + CompressionCodecs='1', + ConnectionIdentifier='any', + NodeLanguage='en', + + callNext=False, + ) + + # check events the client triggered + self.assertHasNextEvent( + self.fcpClient.events.ClientConnected, + consts.Message.NodeHello, ) - msg = enum.next() - self.messages.pop(0) - self.events.pop(0) + + self.assertHasNextEvent(None) def assertHasNextEvent(self, expectedEvent=None, @@ -159,10 +240,10 @@ @return: message if a message was received or None """ if messageName is None: - self.failIf(self.messages) + self.failIf(self.fcpClient.test_messagesSend) else: - self.failUnless(self.messages) - msg = self.messages.pop(0) + self.failUnless(self.fcpClient.test_messagesSend) + msg = self.fcpClient.test_messagesSend.pop(0) self.assertEqual(msg.name, messageName) if param1 is not None: param1, value1 = param1 @@ -189,29 +270,20 @@ self.assertEqual(data, msg.data) return msg - def sendResponseMessage(self, messageName, data=None, **params): + def sendResponseMessage(self, messageName, data=None, callNext=True, **params): """Posts a message to the client""" - self.socket.sendResponseMessage(messageName, data=data, **params) - self.fcpClient.next() + self.socketModule.lastSocket.sendResponseMessage(messageName, data=data, **params) + if not TestAgainstNode: + if callNext: + self.fcpClient.next() def setUp(self): - self.oldSocketModule = fcp2_0_client.socket - fcp2_0_client.socket = self.socketModule - - self.fcpClient = FcpClient() - # conect all events self.events = [] # events received from the client for event in self.fcpClient.events: event += self._captureEventsFromClient - - # capture all messages the client sent - self.messages = [] # messages the client send - self.socket.setBytesReceiver(self._captureMessagesFromClient) def tearDown(self): - fcp2_0_client.socket = self.oldSocketModule - # disconnect all events for event in self.fcpClient.events: event -= self._captureEventsFromClient @@ -221,17 +293,6 @@ #*********************************************************************************** # #*********************************************************************************** -class BaseTestConnectedClient(BaseTestClient): - """Base class that automatically connects to FcpClient prior to each test""" - - def setUp(self): - BaseTestClient.setUp(self) - self.connectClient() - - -#*********************************************************************************** -# -#*********************************************************************************** #TODO: class Test.... set/getDebugVerbosity / connectionName and friends... (BaseTestConnectedClient): #*********************************************************************************** @@ -240,7 +301,7 @@ class TestConnect(BaseTestClient): - def testClose(self): + def XXXtestClose(self): self.failIf(self.socket.closed) self.connectClient() self.fcpClient.close() @@ -248,11 +309,16 @@ - def testConnect(self): - nodeHello = self.fcpClient.connect(duration=0.2, timeout=0.1) + def XXXtestConnect(self): + nodeHello = self.fcpClient.connect(duration=10, timeout=0.1) + self.failIf(nodeHello is None) + return + + + nodeHello = self.fcpClient.connect(duration=0, timeout=0) self.failIf(nodeHello is not None) - self.socket.sendResponseMessage( + self.socketModule.lastSocket.sendResponseMessage( 'NodeHello', FCPVersion='2.0', Node='Fred', @@ -265,68 +331,57 @@ ConnectionIdentifier='any', NodeLanguage='en', ) - nodeHello = self.fcpClient.connect(duration=0.2, timeout=0.1) + nodeHello = self.fcpClient.connect(duration=10, timeout=0.1) self.failIf(nodeHello is None) - def testIterConnect_Failure(self): + def test_0_IterIterConnect_RFailure(self): - # simulate a failed connection attempt - enum = self.fcpClient.connect(duration=0.2, timeout=0.1) - t0 = time.time() - while time.time() - t0 < 1: - try: - nodeHello = enum.next() - except: break - else: - raise RuntimeError('Fell trough') + # we cannot test against node here + if not TestAgainstNode: - - # check messages the client send - self.assertHasNextMessage(consts.Message.ClientHello) - - # check events the client triggered - self.assertHasNextEvent( - self.fcpClient.events.ClientDisconnected, - consts.Message.ClientDisconnected, - ('DisconnectReason', consts.DisconnectReason.ConnectingFailed), - ) - - self.assertHasNextEvent(None) - - # did the client clean up our socket? - self.failUnless(self.socket.closed) + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)): + if n == 0: + self.assertHasNextMessage( + consts.Message.ClientHello + ) - - def testIterConnect_Success(self): + # check events the client triggered + self.assertHasNextEvent( + self.fcpClient.events.ClientDisconnected, + consts.Message.ClientDisconnected, + ('DisconnectReason', consts.DisconnectReason.ConnectingFailed), + ) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failUnless(self.socketModule.lastSocket.closed) + + #self.fcpClient.connect(duration=20, timeout=0.1) + - # simulate a successful connection attempt - enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1) - msg = enum.next() - self.failIf(msg is not None) - - # check messages the client send message - self.assertHasNextMessage( - consts.Message.ClientHello - ) - - #NOTE: have to send directly via socket here (our sendResponseMessage - # calls client.next() autkmatically) - self.socket.sendResponseMessage( - 'NodeHello', - FCPVersion='2.0', - Node='Fred', - Version=str(self.fcpClient.ExpectedFcpVersion), - Revision='999999999999', - Build='9999999999', - ExRevision='9999999999', - Testnet='false', - CompressionCodecs='1', - ConnectionIdentifier='any', - NodeLanguage='en', - ) - msg = enum.next() + def test_1_IterConnect_Success(self): + for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)): + if n == 0: + self.assertHasNextMessage( + consts.Message.ClientHello + ) + self.sendResponseMessage( + 'NodeHello', + FCPVersion='2.0', + Node='Fred', + Version=str(self.fcpClient.ExpectedFcpVersion), + Revision='999999999999', + Build='9999999999', + ExRevision='9999999999', + Testnet='false', + CompressionCodecs='1', + ConnectionIdentifier='any', + NodeLanguage='en', + callNext=False, + ) + # check events the client triggered self.assertHasNextEvent( self.fcpClient.events.ClientConnected, @@ -334,13 +389,14 @@ ) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) #*********************************************************************************** # #*********************************************************************************** -class TestDisconnectReason(BaseTestConnectedClient): +class TestDisconnectReason(BaseTestClient): - def testDuplicateClientName(self): + def test_1000_DuplicateClientName(self): self.sendResponseMessage('CloseConnectionDuplicateClientName') msg = self.assertHasNextEvent( @@ -351,12 +407,16 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'], None) + self.failUnless(self.socketModule.lastSocket.closed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.connectClient() - def testSocketDied_Receive(self): + def test_1001_SocketDied_Receive(self): - self.socket.close() + self.socketModule.lastSocket.close() self.fcpClient.next() # check if ClientDisconnected events has been triggered @@ -369,12 +429,16 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) + self.failUnless(self.socketModule.lastSocket.closed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.connectClient() - def testSocketDied_Send(self): + def test_1002_SocketDied_Send(self): - self.socket.close() + self.socketModule.lastSocket.close() # send a test message self.assertRaises(socket.error, self.fcpClient.sendMessage, 'test' ) @@ -389,10 +453,13 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied) + self.failUnless(self.socketModule.lastSocket.closed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.connectClient() - def testShutdown(self): + def test_1003_Shutdown(self): self.fcpClient.closeFreenet() @@ -412,10 +479,14 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'], None) + self.failUnless(self.socketModule.lastSocket.closed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.connectClient() + - def testVersionMismatch(self): + def test_1004_VersionMismatch(self): # cheat a bit and reconnect client enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1) @@ -427,7 +498,7 @@ #NOTE: have to send directly via socket here (our sendResponseMessage # calls client.next() autkmatically) - self.socket.sendResponseMessage( + self.socketModule.lastSocket.sendResponseMessage( 'NodeHello', FCPVersion='0.0', Node='Fred', @@ -439,6 +510,8 @@ CompressionCodecs='1', ConnectionIdentifier='any', NodeLanguage='en', + + callNext=False ) msg = enum.next() @@ -452,31 +525,42 @@ self.failUnless('Param' in msg.params) self.assertEqual(msg['Param'].name, consts.Message.NodeHello) + self.failUnless(self.socketModule.lastSocket.closed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.connectClient() #*********************************************************************************** # #*********************************************************************************** -class TestClientGet(BaseTestConnectedClient): +class TestClientGet(BaseTestClient): - def testClientGetRegistered(self): + def test_2000_ClientGetRegistered(self): # request a arbitrary file myIdentifier = self.fcpClient.getData( 'arbitrary-uri', ) - self.assertHasNextMessage( - consts.Message.ClientGet, - ) + myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + + self.assertHasNextMessage(consts.Message.ClientGet) self.assertHasNextEvent(None) - self.failUnless(self.fcpClient.getRequests() ) + self.failUnless(myIdentifier in requestsAll) myRequest = self.fcpClient.getRequest(myIdentifier) self.assertEqual(myIdentifier, myRequest['Identifier']) self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Null) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) + + - def testGetData_Success(self): + def test_2001_GetData_Success(self): # request a arbitrary file myIdentifier = self.fcpClient.getData( @@ -485,6 +569,8 @@ myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) + # respond to the file request self.sendResponseMessage( 'PersistentGet', @@ -567,18 +653,25 @@ ) self.failUnless(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + del requestsAll[myIdentifier] + self.failIf(requestsAll) - def testGetData_Failure(self): + + def test_2002_GetData_Failure(self): # request a arbitrary file myIdentifier = self.fcpClient.getData( 'arbitrary-uri', ) myRequest = self.fcpClient.getRequest(myIdentifier) - requestsAll = self.fcpClient.getRequests() + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) + # respond to the file request self.sendResponseMessage( 'PersistentGet', @@ -605,6 +698,7 @@ ) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) #return @@ -633,9 +727,13 @@ self.failUnless(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) - def testGetFile_Success(self): + def test_2003_GetFile_Success(self): # request a arbitrary file myIdentifier = self.fcpClient.getFile( @@ -676,9 +774,12 @@ self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) - def testGetFile_Failure(self): + def test_2004_GetFile_Failure(self): # request a arbitrary file myIdentifier = self.fcpClient.getFile( @@ -715,9 +816,12 @@ self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) + - def testGetKeyInfo_Success(self): + def test_2005_GetKeyInfo_Success(self): # request a arbitrary uri myIdentifier = self.fcpClient.getKeyInfo( @@ -757,9 +861,12 @@ self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) - def testGetKeyInfo_TooBig(self): + + def test_2006_GetKeyInfo_TooBig(self): # test specdial case where ProtocolError.TooBig is handled as success # request a arbitrary uri @@ -795,16 +902,21 @@ ) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) + - def testGetKeyInfo_Failure(self): + def test_2007_GetKeyInfo_Failure(self): # request a arbitrary file myIdentifier = self.fcpClient.getKeyInfo( 'arbitrary-uri', ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) # respond to the file request @@ -831,6 +943,9 @@ ) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) #*********************************************************************************** # @@ -840,9 +955,9 @@ #*********************************************************************************** # #*********************************************************************************** -class TestRequests(BaseTestConnectedClient): +class TestRequests(BaseTestClient): - def testModifyRequest_Persistent(self): + def test_3000_ModifyRequest_Persistent(self): # request a arbitrary file myIdentifier = self.fcpClient.getFile( @@ -853,6 +968,8 @@ persistence=consts.Persistence.Reboot, ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) # respond to the file request @@ -861,7 +978,9 @@ Started='false', **myRequest.params ) - + #self.assertNextMessage(consts.Message.ClientGet) + + # test modify persistent user data self.fcpClient.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High) msg = self.assertHasNextMessage(consts.Message.ModifyPersistentRequest) @@ -879,9 +998,13 @@ self.assertEqual(consts.Priority.High, myRequest['PriorityClass']) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) - def testModifyRequest_NonPersistent(self): + def test_3001_ModifyRequest_NonPersistent(self): # request a arbitrary file myIdentifier = self.fcpClient.getFile( @@ -891,6 +1014,8 @@ priorityClass=consts.Priority.Medium, ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) # respond to the file request @@ -912,6 +1037,7 @@ # 'PersistentRequestModified', # **msg.params # ) + self.assertHasNextEvent(self.fcpClient.events.RequestModified) self.failUnless(consts.RequestModified.PersistentUserData in myRequest['FcModified']) @@ -920,9 +1046,13 @@ #self.assertEqual(consts.Priority.High, myRequest['PriorityClass']) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) - def testRemoveRequest_NonPersistent(self): + def test_3002_RemoveRequest_NonPersistent(self): # request a file myIdentifier = self.fcpClient.getFile( @@ -930,7 +1060,9 @@ 'arbitrary.txt' ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) # respond to the file request self.sendResponseMessage( 'PersistentGet', @@ -962,9 +1094,12 @@ ) self.failIf(self.fcpClient.getRequests()) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) - def testRemoveRequest_persistent(self): + def test_3003_RemoveRequest_persistent(self): # request a file myIdentifier = self.fcpClient.getFile( @@ -973,7 +1108,10 @@ persistence=consts.Persistence.Reboot, ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) + # respond to the file request self.sendResponseMessage( 'PersistentGet', @@ -1015,10 +1153,13 @@ self.failIf(self.fcpClient.getRequests()) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) - def testResendRequest_NonPersistent(self): + def test_3004_ResendRequest_NonPersistent(self): myIdentifier = self.fcpClient.getData('any-key') myRequest = self.fcpClient.getRequest(myIdentifier) @@ -1041,8 +1182,14 @@ self.assertHasNextMessage(consts.Message.ClientGet) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[newIdentifier] + self.failIf(requestsAll) + - def testResendRequest_Persistent(self): + def test_3005_ResendRequest_Persistent(self): myIdentifier = self.fcpClient.getData('any-key', persistence=consts.Persistence.Reboot) myRequest = self.fcpClient.getRequest(myIdentifier) @@ -1077,14 +1224,17 @@ self.failUnless(newIdentifier in requestsAll) self.failIf(myIdentifier in requestsAll) + del requestsAll[newIdentifier] + self.failIf(requestsAll) + #*********************************************************************************** # #*********************************************************************************** #TODO: testRestoreClientPut and friends -class TestRestoreRequests(BaseTestConnectedClient): +class TestRestoreRequests(BaseTestClient): - def testRestorePersistentGet_InvalidIdentifier(self): + def test_4000_RestorePersistentGet_InvalidIdentifier(self): # throw an invalid PersistentRequest at the client myIdentifier = 'true-invalid-request-identifier' @@ -1110,9 +1260,10 @@ # the client should not trigger any events self.assertHasNextEvent(None) + self.assertHasNextMessage(None) - def testRestorePersistentGet_ValidIdentifier(self): + def test_4001_RestorePersistentGet_ValidIdentifier(self): # we need a valid identifier to restore a request, so hack a bit myIdentifier = self.fcpClient.getFile( @@ -1122,6 +1273,8 @@ myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.ClientGet) + self.fcpClient.removeRequest(myIdentifier) self.sendResponseMessage( 'PersistentRequestRemoved', @@ -1152,6 +1305,10 @@ self.failUnless(myIdentifier in requestsAll) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) #*********************************************************************************** # @@ -1160,15 +1317,17 @@ #TODO: testDDAWriteDenied #TODO: testDDAWriteDenied_WriteDisallowed -class TestDDA(BaseTestConnectedClient): +class TestDDA(BaseTestClient): - def testDDAWriteDenied(self): + def test_5000_DDAWriteDenied(self): # request a file myIdentifier = self.fcpClient.getFile( 'arbitrary-uri', os.path.join(DIR, 'DDATest.txt') ) + myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() # client schould send a ClientGet self.assertHasNextMessage(consts.Message.ClientGet) @@ -1243,6 +1402,12 @@ requests = self.fcpClient.getRequests() self.assertEqual(len(requests), 1) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[myIdentifier] + self.failIf(requestsAll) #def testDDAReadDenied(self): @@ -1252,15 +1417,17 @@ #*********************************************************************************** # #*********************************************************************************** -class TestCollisions(BaseTestConnectedClient): +class TestCollisions(BaseTestClient): - def testIdentifierCollision(self): + def test_6000_IdentifierCollision(self): # request a file myIdentifier = self.fcpClient.getFile( 'arbitrary-uri', os.path.join(DIR, 'test.txt') ) + myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() # client schould send a ClientGet self.assertHasNextMessage(consts.Message.ClientGet) @@ -1275,10 +1442,6 @@ # client schould send a new ClientGet self.assertHasNextMessage(consts.Message.ClientGet) - # check client state - requests = self.fcpClient.getRequests() - self.assertEqual(len(requests), 1) - # check if RequestModified event has been triggered msg = self.assertHasNextEvent( self.fcpClient.events.RequestModified, @@ -1286,13 +1449,19 @@ ) self.failUnless(consts.RequestModified.Identifier in msg['FcModified']) - self.assertEqual(msg['FcModified'][consts.RequestModified.Identifier], myIdentifier) - self.assertNotEqual(msg['Identifier'], myIdentifier) + oldIdentifier = msg['FcModified'][consts.RequestModified.Identifier] + newIdentifier = msg['Identifier'] + self.assertEqual(oldIdentifier, myIdentifier) + self.assertNotEqual(newIdentifier, myIdentifier) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + del requestsAll[newIdentifier] + self.failIf(requestsAll) - def testFilenameCollision_HandleRename(self): + def test_6001_FilenameCollision_HandleRename(self): # request a file fpath = os.path.join(DIR, 'test.txt') @@ -1304,14 +1473,12 @@ fpath, filenameCollision=consts.FilenameCollision.HandleRename, ) + myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() # client schould send a ClientGet self.assertHasNextMessage(consts.Message.ClientGet) - # check if our request was registered - requests = self.fcpClient.getRequests() - self.failUnless(len(requests) == 1) - # now respond with a ProtocolError self.sendResponseMessage( 'ProtocolError', @@ -1322,7 +1489,8 @@ Global='false', ) - # client schould send a new ClientGet with a differing filename + # client schould send a new ClientGet with a different filename + self.assertHasNextMessage(consts.Message.ClientGet) msg = self.assertHasNextEvent( self.fcpClient.events.RequestModified, consts.Message.ClientGet @@ -1341,9 +1509,13 @@ self.failUnless(filenameCollision & consts.FilenameCollision.CollisionHandled) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + del requestsAll[myIdentifier] + self.failIf(requestsAll) + - def testFilenameCollision_HandleNever(self): + def test_6002_FilenameCollision_HandleNever(self): # request a file fpath = os.path.join(DIR, 'test.txt') @@ -1356,6 +1528,7 @@ filenameCollision=consts.FilenameCollision.HandleNever, ) myRequest = self.fcpClient.getRequest(myIdentifier) + requestsAll = self.fcpClient.getRequests() # client schould send a ClientGet self.assertHasNextMessage(consts.Message.ClientGet) @@ -1381,7 +1554,10 @@ self.failIf(self.fcpClient.getRequests()) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) + #*********************************************************************************** # #*********************************************************************************** @@ -1390,10 +1566,10 @@ #*********************************************************************************** # #*********************************************************************************** -class TestPlugins(BaseTestConnectedClient): +class TestPlugins(BaseTestClient): - def testGetPluginInfo_Success(self): + def testGet_8000_PluginInfo_Success(self): myIdentifier = self.fcpClient.getPluginInfo('hi there') myRequest = self.fcpClient.getRequest(myIdentifier) @@ -1422,12 +1598,17 @@ ), ) + self.failIf(myIdentifier in requestsAll) + self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextEvent(None) - self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) + - def testGetPluginInfo_Failure(self): + def test_8001_GetPluginInfo_Failure(self): myIdentifier = self.fcpClient.getPluginInfo('hi there') myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() @@ -1455,12 +1636,16 @@ ), ) + self.failIf(myIdentifier in requestsAll) + self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextEvent(None) - self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) - def testSendPluginMessage_Success(self): + def test_8002_SendPluginMessage_Success(self): myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"}) myRequest = self.fcpClient.getRequest(myIdentifier) @@ -1493,12 +1678,16 @@ reply = msg['FcPluginReply'] self.failUnless(reply.params.get('baz', None) == '12345') - self.assertHasNextEvent(None) self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + self.failIf(requestsAll) - def testGetSendPluginMessage_Failure(self): + def test_8003_GetSendPluginMessage_Failure(self): myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"}) myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() @@ -1527,9 +1716,12 @@ ), ) - self.assertHasNextEvent(None) self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) #*********************************************************************************** @@ -1538,13 +1730,14 @@ #*********************************************************************************** # #*********************************************************************************** -class TestGenerateKeypair(BaseTestConnectedClient): +class TestGenerateKeypair(BaseTestClient): - def testGeberateSSKKeypair(self): + def test_10000_GeberateSSKKeypair(self): myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.SSK) myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.GenerateSSK) self.sendResponseMessage( 'SSKKeypair', Identifier=myIdentifier, @@ -1562,16 +1755,20 @@ consts.RequestStatus.RemovedFromQueue ), ) - self.assertHasNextEvent(None) self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) - def testGeberateUSKKeypair(self): + + def test_10001_GeberateUSKKeypair(self): myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.USK) myRequest = self.fcpClient.getRequest(myIdentifier) requestsAll = self.fcpClient.getRequests() + self.assertHasNextMessage(consts.Message.GenerateSSK) self.sendResponseMessage( 'SSKKeypair', Identifier=myIdentifier, @@ -1589,18 +1786,21 @@ consts.RequestStatus.RemovedFromQueue ), ) - self.assertHasNextEvent(None) self.failIf(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + self.failIf(requestsAll) #*********************************************************************************** # #*********************************************************************************** -class TestSubscribeUSK(BaseTestConnectedClient): +class TestSubscribeUSK(BaseTestClient): - def testSubscribe(self): + def test_11000_Subscribe(self): myIdentifier = self.fcpClient.subscribeUSK('arbitrary') myRequest = self.fcpClient.getRequest(myIdentifier) @@ -1609,6 +1809,7 @@ self.failUnless(myIdentifier in requestsAll) self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed) + self.assertHasNextMessage(consts.Message.SubscribeUSK) self.sendResponseMessage( 'SubscribedUSKUpdate', Identifier=myIdentifier, @@ -1624,15 +1825,19 @@ ('URI', 'arbitryry/99/'), ) self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + del requestsAll[myIdentifier] + self.failIf(requestsAll) + #********************************************************************************* # #********************************************************************************* def suite(): - - tests = ( + + testCases = ( TestConnect, TestDisconnectReason, TestClientGet, @@ -1647,8 +1852,8 @@ ) suite = unittest.TestSuite() - for test in tests: - suite.addTest(unittest.makeSuite(test)) + for testCase in testCases: + suite.addTest(unittest.makeSuite(testCase)) return suite def test(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |