SF.net SVN: fclient: [127] trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <ju...@us...> - 2008-02-03 13:16:02
|
Revision: 127
http://fclient.svn.sourceforge.net/fclient/?rev=127&view=rev
Author: jurner
Date: 2008-02-03 05:16:02 -0800 (Sun, 03 Feb 2008)
Log Message:
-----------
a few more tests
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-03 13:14:59 UTC (rev 126)
+++ trunk/sandbox/fcp/test_fcp/test_fcp2_0_client.py 2008-02-03 13:16:02 UTC (rev 127)
@@ -35,8 +35,7 @@
#***********************************************************************************
class BaseTestClient(unittest.TestCase):
"""Base class that does not connect to FcpClient prior to each test"""
-
-
+
def __init__(self, *args, **kwargs):
unittest.TestCase.__init__(self, *args, **kwargs)
@@ -65,7 +64,6 @@
def connectClient(self):
"""Connects to the client"""
-
enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
msg = enum.next()
self.failIf(msg is not None)
@@ -76,9 +74,9 @@
FCPVersion='2.0',
Node='Fred',
Version=str(self.fcpClient.ExpectedFcpVersion),
- Revision='99999999',
+ Revision='999999999999',
Build='999999',
- ExRevision='999999',
+ ExRevision='9999999999',
Testnet='false',
CompressionCodecs='1',
ConnectionIdentifier='any',
@@ -88,7 +86,6 @@
self.messages.pop(0)
self.events.pop(0)
-
def assertHasNextEvent(self,
expectedEvent=None,
messageName=None,
@@ -142,23 +139,22 @@
return msg
-
def assertHasNextMessage(self,
- messageName,
- param1=None,
- param2=None,
- param3=None,
- param4=None,
- param5=None,
- data=None
- ):
+ messageName,
+ param1=None,
+ param2=None,
+ param3=None,
+ param4=None,
+ param5=None,
+ data=None
+ ):
"""Tests if we received a certain message from the client
- @param messageName: expected mesageName or None if no message is expected
- @param param1: tuple(paramName, value) of a message parameter expected
- @param data: data expected along with the message or None
-
- @return: message if a message was received or None
- """
+ @param messageName: expected mesageName or None if no message is expected
+ @param param1: tuple(paramName, value) of a message parameter expected
+ @param data: data expected along with the message or None
+
+ @return: message if a message was received or None
+ """
if messageName is None:
self.failIf(self.messages)
else:
@@ -188,14 +184,12 @@
if data is not None:
self.assertEqual(data, msg.data)
return msg
-
-
+
def sendResponseMessage(self, messageName, data=None, **params):
"""Posts a message to the client"""
self.socket.sendResponseMessage(messageName, data=data, **params)
self.fcpClient.next()
-
def setUp(self):
self.oldSocketModule = fcp2_0_client.socket
fcp2_0_client.socket = self.socketModule
@@ -211,9 +205,7 @@
# 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
@@ -221,7 +213,6 @@
for eventName in self.fcpClient.Events._events_:
event = getattr(self.fcpClient.events, eventName)
event -= self._captureEventsFromClient
-
# clean up tmpfiles
for fpath in self.tmpfiles: os.remove(fpath)
@@ -254,7 +245,7 @@
self.failUnless(self.socket.closed)
- def testConnectFailed(self):
+ def testConnect_Failure(self):
# simulate a failed connection attempt
enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
@@ -281,10 +272,9 @@
# did the client clean up our socket?
self.failUnless(self.socket.closed)
-
-
+
- def testConnecSucceeded(self):
+ def testConnect_Success(self):
# simulate a successful connection attempt
enum = self.fcpClient.connect(duration=0.2, timeout=0.1)
@@ -303,9 +293,9 @@
FCPVersion='2.0',
Node='Fred',
Version=str(self.fcpClient.ExpectedFcpVersion),
- Revision='99999999',
- Build='999999',
- ExRevision='999999',
+ Revision='999999999999',
+ Build='9999999999',
+ ExRevision='9999999999',
Testnet='false',
CompressionCodecs='1',
ConnectionIdentifier='any',
@@ -321,32 +311,125 @@
self.assertHasNextEvent(None)
-
#***********************************************************************************
#
#***********************************************************************************
-#TODO: testCloseOnVersionMismatch
-#TODO: testCloseOnDuplicateConnectionName
-#TODO: testShutdown
-
-class TestConnection(BaseTestConnectedClient):
+class TestDisconnectReason(BaseTestConnectedClient):
- def testBrokenSocket(self):
+ def testDuplicateClientName(self):
+ self.sendResponseMessage('CloseConnectionDuplicateClientName')
+ msg = self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.DuplicateClientName),
+ )
+ self.failUnless('Param' in msg.params)
+ self.assertEqual(msg['Param'], None)
+
+ self.assertHasNextEvent(None)
+
+
+ def testSocketDied_Receive(self):
+
self.socket.close()
+ self.fcpClient.next()
+ # check if ClientDisconnected events has been triggered
+ msg = self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.SocketDied),
+ #('Param', ClientSocketDiedMessage) # can not test here
+ )
+ self.failUnless('Param' in msg.params)
+ self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied)
+
+ self.assertHasNextEvent(None)
+
+
+ def testSocketDied_Send(self):
+
+ self.socket.close()
+
# send a test message
self.assertRaises(socket.error, self.fcpClient.sendMessage, 'test' )
# check if ClientDisconnected events has been triggered
- self.assertHasNextEvent(
+ msg = self.assertHasNextEvent(
self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientSocketDied,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.SocketDied),
+ #('Param', ClientSocketDiedMessage) # can not test here
)
+ self.failUnless('Param' in msg.params)
+ self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied)
+
self.assertHasNextEvent(None)
-
+
+
+ def testShutdown(self):
+
+ self.fcpClient.closeFreenet()
+
+ msg = self.assertHasNextMessage(consts.Message.Shutdown)
+ self.sendResponseMessage(
+ 'ProtocolError',
+ Code='18', # Shutting down
+ )
+
+ # check events the client triggered
+ msg = self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.Shutdown)
+ #('Param', NodeHelloMessage) # can not test here
+ )
+ self.failUnless('Param' in msg.params)
+ self.assertEqual(msg['Param'], None)
+
+ self.assertHasNextEvent(None)
+ def testVersionMismatch(self):
+
+ # cheat a bit and reconnect client
+ enum = self.fcpClient.connect(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='0.0',
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='0',
+ Build='0',
+ ExRevision='0',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+ )
+ msg = enum.next()
+
+ # check events the client triggered
+ msg = self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
+ #('Param', NodeHelloMessage) # can not test here
+ )
+ self.failUnless('Param' in msg.params)
+ self.assertEqual(msg['Param'].name, consts.Message.NodeHello)
+
+ self.assertHasNextEvent(None)
+
#***********************************************************************************
#
#***********************************************************************************
@@ -369,7 +452,7 @@
self.assertEqual(myRequest['FcStatus'], consts.MessageStatus.Pending)
- def testGetData(self):
+ def testGetData_Success(self):
# request a arbitrary file
myIdentifier = self.fcpClient.getData(
@@ -429,14 +512,53 @@
)
self.assertHasNextEvent(
self.fcpClient.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Complete),
data=data
)
self.assertHasNextEvent(None)
- def testgetFile(self):
+ def testGetData_Failure(self):
# request a arbitrary file
+ myIdentifier = self.fcpClient.getData(
+ 'arbitrary-uri',
+ )
+ myRequest = self.fcpClient.getRequest(myIdentifier)
+
+ # respond to the file request
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Started='false',
+ **myRequest.params
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestStarted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Started)
+ )
+ self.assertHasNextEvent(None)
+
+ # finalize request
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Error)
+ )
+ self.assertHasNextEvent(None)
+
+
+ def testGetFile_Success(self):
+
+ # request a arbitrary file
myIdentifier = self.fcpClient.getFile(
'arbitrary-uri',
'arbitryry.txt'
@@ -476,6 +598,142 @@
)
self.assertHasNextEvent(None)
+
+ def testGetFile_Failure(self):
+
+ # request a arbitrary file
+ myIdentifier = self.fcpClient.getFile(
+ 'arbitrary-uri',
+ 'arbitryry.txt'
+ )
+ myRequest = self.fcpClient.getRequest(myIdentifier)
+ self.assertHasNextMessage(consts.Message.ClientGet)
+
+ # respond to the file request
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Started='false',
+ **myRequest.params
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestStarted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Started)
+ )
+ self.assertHasNextEvent(None)
+
+ # finalize request
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Error)
+ )
+ self.assertHasNextEvent(None)
+
+
+
+ def testGetKeyInfo_Success(self):
+
+ # request a arbitrary uri
+ myIdentifier = self.fcpClient.getKeyInfo(
+ 'arbitrary-uri',
+ persistence=consts.Persistence.Forever, # cheat a bit, so we can test multiple cases
+ )
+ myRequest = self.fcpClient.getRequest(myIdentifier)
+ self.assertHasNextMessage(consts.Message.ClientGet)
+
+ # respond to the file request
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Started='false',
+ **myRequest.params
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestStarted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Started)
+ )
+ self.assertHasNextEvent(None)
+
+ # finalize request
+ data = 'foo'
+ params = {
+ 'Identifier': myIdentifier,
+ 'Global': 'false',
+ 'DataLength': 123456,
+ 'Metadata.ContentType': 'any',
+ }
+ self.sendResponseMessage(
+ 'DataFound',
+ **params
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Complete)
+ )
+ self.assertHasNextEvent(None)
+
+ # test specdial case where ProtocolError.TooBig is handled as success
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='21', # Too big
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestCompleted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Complete)
+ )
+ self.assertHasNextEvent(None)
+
+
+ def testGetKeyInfo_Failure(self):
+
+ # request a arbitrary file
+ myIdentifier = self.fcpClient.getKeyInfo(
+ 'arbitrary-uri',
+ )
+ myRequest = self.fcpClient.getRequest(myIdentifier)
+ self.assertHasNextMessage(consts.Message.ClientGet)
+
+ # respond to the file request
+ self.sendResponseMessage(
+ 'PersistentGet',
+ Started='false',
+ **myRequest.params
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestStarted,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Started)
+ )
+ self.assertHasNextEvent(None)
+
+ # finalize request
+ self.sendResponseMessage(
+ 'GetFailed',
+ Code='28', # All data not found
+ Identifier=myIdentifier,
+ Global='false',
+ # blah.. more here
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.RequestFailed,
+ consts.Message.ClientGet,
+ ('FcStatus', consts.MessageStatus.Error)
+ )
+ self.assertHasNextEvent(None)
+
#***********************************************************************************
#
#***********************************************************************************
@@ -585,6 +843,7 @@
self.sendResponseMessage(
'PersistentGet',
Identifier=myIdentifier,
+ Global='false',
ReturnType='disk',
Verbosity='1',
PersistenceType='forever',
@@ -622,12 +881,12 @@
)
self.messages = []
self.events = []
-
-
+
# throw a PersistentGet at the client with the identifier we hacked
self.sendResponseMessage(
'PersistentGet',
Identifier=identifier,
+ Global='false',
ReturnType='disk',
Verbosity='1',
PersistenceType='forever',
@@ -913,7 +1172,7 @@
tests = (
TestConnect,
- TestConnection,
+ TestDisconnectReason,
TestClientGet,
TestRequests,
TestRestoreRequests,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|