SF.net SVN: fclient: [367] trunk/sandbox/fcp2/test_fcp/test_client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-03-11 11:21:07
|
Revision: 367
http://fclient.svn.sourceforge.net/fclient/?rev=367&view=rev
Author: jUrner
Date: 2008-03-11 04:21:11 -0700 (Tue, 11 Mar 2008)
Log Message:
-----------
continued rewrite of tests
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/test_client.py
Modified: trunk/sandbox/fcp2/test_fcp/test_client.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-11 11:20:32 UTC (rev 366)
+++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-11 11:21:11 UTC (rev 367)
@@ -861,8 +861,528 @@
self.failUnless(self.ioOpen())
+#***********************************************************************************
+# NOTE: all the in depth tests for getFile() getKeyInfo() are performed here
+#***********************************************************************************
+class Test_getData(BaseTestClient):
+
+ def test_100_request_registered(self):
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key')
+ requestsAll = self.client.getRequests()
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ self.assertEqual(myRequest['RequestType'], self.client.consts.RequestType.GetData)
+
+ def test_200_key_object_is_accepted(self):
+ self.connectClient()
+ key = self.client.key.CHK()
+ myIdentifier = self.client.getData(key)
+ requestsAll = self.client.getRequests()
+
+
+ def test_300_message_send(self):
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key')
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage(
+ 'ClientGet',
+ ('URI', 'arbitrary-key'),
+ )
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+ def test_400_progress(self):
+
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key')
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ self.sendResponseMessage(
+ 'SimpleProgress',
+ Identifier=myIdentifier,
+ Total=0,
+ Required=0,
+ Failed=0,
+ FatallyFailed=0,
+ Succeeded=0,
+ )
+
+ self.assertHasNextEvent(
+ self.client.events.RequestProgress,
+ 'ClientGet',
+ )
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_500_completed_successfuly(self):
+
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key')
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ data = 'foo'
+ params = {
+ 'Identifier': myIdentifier,
+ 'Global': 'false',
+ 'DataLength': len(data),
+ 'Metadata.ContentType': 'any',
+ }
+ self.sendResponseMessage(
+ 'DataFound',
+ **params
+ )
+ # we don't expect an event here....
+ self.assertHasNextEvent(None)
+ self.sendResponseMessage(
+ 'AllData',
+ data=data,
+ Identifier=myIdentifier,
+ Global='false',
+ DataLength=len(data),
+ )
+
+ # client should complete and remove the request
+ self.assertHasNextEvent(
+ self.client.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('RequestStatus', consts.RequestStatus.Success |
+ consts.RequestStatus.RemovedFromQueue |
+ consts.RequestStatus.Completed
+ ),
+ data=data
+ )
+
+ # non persistent requests are removed emidiately
+ self.failIf(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_600_completed_with_error(self):
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key')
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.client.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('RequestStatus', consts.RequestStatus.Error |
+ consts.RequestStatus.RemovedFromQueue |
+ consts.RequestStatus.Completed
+ ),
+ )
+
+ # non persistent requests are removed emidiately
+ self.failIf(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_700_peristent_request_auto_retrieve_data(self):
+
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key', persistence=self.client.consts.Persistence.Forever)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+
+ data = 'foo'
+ params = {
+ 'Identifier': myIdentifier,
+ 'Global': 'false',
+ 'DataLength': len(data),
+ 'Metadata.ContentType': 'any',
+ }
+ self.sendResponseMessage(
+ 'DataFound',
+ **params
+ )
+
+ self.assertHasNextMessage('GetRequestStatus')
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+
+ def test_800_peristent_request_not_removed_on_success(self):
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key', persistence=self.client.consts.Persistence.Forever)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ data = 'foo'
+ self.sendResponseMessage(
+ 'AllData',
+ data=data,
+ Identifier=myIdentifier,
+ Global='false',
+ DataLength=len(data),
+ )
+
+ self.assertHasNextEvent(self.client.events.RequestCompleted)
+
+ # persistent requests are not removed emidiately
+ self.failUnless(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_900_peristent_request_not_removed_on_error(self):
+ self.connectClient()
+ myIdentifier = self.client.getData('arbitrary-key', persistence=self.client.consts.Persistence.Forever)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+
+ self.assertHasNextEvent(self.client.events.RequestFailed)
+
+ # persistent requests are not removed emidiately
+ self.failUnless(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_910_restore_peristent_request_failure(self):
+ self.connectClient()
+ requestsAll = self.client.getRequests()
+ myIdentifier = '123456789'
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Identifier=myIdentifier,
+ ClientToken='i-am-invalid',
+
+ callNext=False
+ )
+ self.assertRaises(self.client.ioHandler.MessageParseError, self.client.next)
+ self.failIf(myIdentifier in requestsAll)
+
+
+ def test_920_restore_peristent_request_success(self):
+ self.connectClient()
+ requestsAll = self.client.getRequests()
+ myIdentifier = self.client.getData('arbitrary-key', persistence=self.client.consts.Persistence.Forever)
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ del requestsAll[myIdentifier]
+
+ self.sendResponseMessage(
+ 'PersistentGet',
+ **myRequest.params
+ )
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ msg = self.assertHasNextEvent(
+ self.client.events.RequestRestored,
+ 'ClientGet',
+ ('Identifier', myIdentifier),
+ ('RequestStatus', consts.RequestStatus.Restored), # no RequestStatus.Pending flag should be set here
+ )
+
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_getFile(BaseTestClient):
+
+ def test_100_request_registered(self):
+ self.connectClient()
+ myIdentifier = self.client.getFile('arbitrary-key', 'foo.txt')
+ requestsAll = self.client.getRequests()
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ self.assertEqual(myRequest['RequestType'], self.client.consts.RequestType.GetFile)
+
+
+ def test_200_key_object_is_accepted(self):
+ self.connectClient()
+ key = self.client.key.CHK()
+
+ myIdentifier = self.client.getFile(key, 'foo.txt')
+ requestsAll = self.client.getRequests()
+
+
+ def test_300_dda_denied(self):
+ self.connectClient()
+
+ myIdentifier = self.client.getFile(
+ 'arbitrary-uri',
+ os.path.join(DIR, 'DDATest.txt')
+ )
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+ self.sendResponseMessage(
+ 'ProtocolError',
+ Code=25, # DDADenied
+ Identifier=myIdentifier,
+ ExtraDescription='An error occured',
+ Fatal='false',
+ Global='false',
+ )
+
+ # client should respond with a TestDDARequest
+ self.assertHasNextMessage(
+ consts.Message.TestDDARequest,
+ ('Directory', DIR),
+ ('WantWriteDirectory', True)
+ )
+
+ # respond with a TestDDAReply message
+ writeContent = 'blah'
+ fd, fpath = tempfile.mkstemp(dir=DIR)
+ os.close(fd)
+ self.sendResponseMessage(
+ 'TestDDAReply',
+ Directory=DIR,
+ WriteFilename=fpath,
+ ContentToWrite=writeContent,
+ )
+
+ # client should respond with a TestDDAResponse
+ self.assertHasNextMessage(
+ consts.Message.TestDDAResponse,
+ ('Directory', DIR)
+ )
+
+ # check if content was written
+ with open(fpath) as fp:
+ self.failUnless(fp.read() == writeContent)
+
+ # respond with a TestDDAComplete message
+ self.sendResponseMessage(
+ 'TestDDAComplete',
+ Directory=DIR,
+ WriteDirectoryAllowed='true',
+ )
+
+ # check if our tempfile was removed
+ self.failIf(os.path.isfile(fpath))
+
+ # client sahould send a new ClientGet
+ msg = self.assertHasNextMessage(consts.Message.ClientGet)
+
+ # no events should have been triggered upo to now
+ self.assertHasNextEvent(None)
+
+ # respond with a PersistentGet
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Started='false',
+ **msg.params
+ )
+
+ self.failUnless(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_getKeyinfo(BaseTestClient):
+
+
+ def test_100_request_registered(self):
+ self.connectClient()
+ myIdentifier = self.client.getKeyInfo('arbitrary-key')
+ requestsAll = self.client.getRequests()
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ self.assertEqual(myRequest['RequestType'], self.client.consts.RequestType.GetKeyInfo)
+
+ def test_200_key_object_is_accepted(self):
+ self.connectClient()
+ key = self.client.key.CHK()
+
+ myIdentifier = self.client.getKeyInfo(key)
+ requestsAll = self.client.getRequests()
+
+
+ def test_300_getKeyInfo_Success(self):
+ self.connectClient()
+ myIdentifier = self.client.getKeyInfo('arbitrary-uri')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage('ClientGet')
+
+ data = 'foo'
+ params = {
+ 'Identifier': myIdentifier,
+ 'Global': 'false',
+ 'DataLength': 123456,
+ 'Metadata.ContentType': 'any',
+ }
+ self.sendResponseMessage(
+ 'DataFound',
+ **params
+ )
+ self.assertHasNextEvent(
+ self.client.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('RequestStatus', consts.RequestStatus.Success |
+ consts.RequestStatus.RemovedFromQueue |
+ consts.RequestStatus.Completed
+ ),
+ )
+ self.failIf(myIdentifier in requestsAll)
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_400_GetKeyInfo_TooBig(self):
+ self.connectClient()
+
+ # test specdial case where ProtocolError.TooBig is handled as success
+ # request a arbitrary uri
+ myIdentifier = self.client.getKeyInfo('arbitrary-uri')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage(consts.Message.ClientGet)
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='21', # Too big
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.client.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('RequestStatus', consts.RequestStatus.Success |
+ consts.RequestStatus.RemovedFromQueue |
+ consts.RequestStatus.Completed
+ ),
+ )
+ self.failIf(myIdentifier in requestsAll)
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+ def test_500_GetKeyInfo_Failure(self):
+ self.connectClient()
+
+ # request a arbitrary file
+ myIdentifier = self.client.getKeyInfo('arbitrary-uri')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
+
+ self.assertHasNextMessage(consts.Message.ClientGet)
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.client.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('RequestStatus', consts.RequestStatus.Error |
+ consts.RequestStatus.RemovedFromQueue |
+ consts.RequestStatus.Completed
+ ),
+ )
+ self.failIf(myIdentifier in requestsAll)
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_subscribeUSK(BaseTestClient):
+
+ def test_100_subscribeUSK_accepts_key_object(self):
+ self.connectClient()
+ key = self.client.key.USK('123456789', 'foo', 0)
+ myIdentifier = self.client.subscribeUSK(key)
+ self.assertHasNextMessage(
+ 'SubscribeUSK',
+ ('URI', key.toString()),
+ )
+
+
+ def test_200_subscribeUSK(self):
+ self.connectClient()
+ myIdentifier = self.client.subscribeUSK('arbitrary-key')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
+ self.failUnless(myIdentifier in requestsAll)
+ myRequest = self.client.getRequest(myIdentifier)
+ self.assertEqual(myRequest['RequestType'], self.client.consts.RequestType.SubscribeUSK)
+
+ self.assertHasNextMessage(
+ 'SubscribeUSK',
+ ('URI', 'arbitrary-key'),
+ )
+ self.failUnless(myIdentifier in requestsAll)
+
+ # usk update requests are permanent, so the completed flag shuld always be set
+ myRequest['RequestStatus'] == self.client.consts.RequestStatus.Completed
+
+ self.sendResponseMessage(
+ 'SubscribedUSKUpdate',
+ Edition=99,
+ Identifier=myIdentifier,
+ URI='arbitrary-uri'
+ )
+
+ self.assertHasNextEvent(
+ self.client.events.USKUpdated,
+ 'SubscribeUSK',
+ ('Edition', 99),
+ ('Identifier', myIdentifier),
+ ('URI', 'arbitrary-key'),
+ )
+
+
+
+
###################################################
###################################################
###################################################
@@ -2848,6 +3368,10 @@
Test_sendMessage,
Test_getConfig,
Test_modifyConfig,
+ Test_getData,
+ Test_getFile,
+ Test_getKeyinfo,
+ Test_subscribeUSK,
#TestDisconnectReason,
#TestClientGet,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|