fclient-commit Mailing List for fclient (Page 25)
Status: Pre-Alpha
Brought to you by:
jurner
You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(23) |
Nov
(54) |
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(17) |
Feb
(209) |
Mar
(63) |
Apr
(31) |
May
(7) |
Jun
(39) |
Jul
(390) |
Aug
(122) |
Sep
(6) |
Oct
|
Nov
|
Dec
|
|
From: <jU...@us...> - 2008-03-11 01:04:01
|
Revision: 362
http://fclient.svn.sourceforge.net/fclient/?rev=362&view=rev
Author: jUrner
Date: 2008-03-10 18:04:02 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
continued rewriting 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 01:03:34 UTC (rev 361)
+++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-11 01:04:02 UTC (rev 362)
@@ -41,12 +41,12 @@
class BaseTestClient(unittest.TestCase):
"""Base class for all tests"""
- fcpClient = Client(
+ client = Client(
#debugVerbosity=Client.consts.DebugVerbosity.Debug
debugVerbosity=Client.consts.DebugVerbosity.Quiet
)
- fcpClient.ioHandler.setIOPrototype(DummyIO)
+ client.ioHandler.setIOPrototype(DummyIO)
def __init__(self, *args, **kwargs):
@@ -65,7 +65,7 @@
def connectClient(self):
"""Connects to the client"""
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
msg = self.getNextMessage()
if msg is not None:
self.failUnless(msg.name == 'ClientHello')
@@ -75,7 +75,7 @@
Build='9999999999',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
@@ -87,7 +87,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
+ self.client.events.ClientConnected,
consts.Message.NodeHello,
)
self.assertHasNextEvent(None)
@@ -97,9 +97,9 @@
def closeClient(self):
"""Closes the client"""
- self.fcpClient.close()
+ self.client.close()
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.Close),
)
@@ -262,9 +262,9 @@
else:
msgClass = message.newMessageType(messageName)
msg = msgClass(data=data, **params)
- self.fcpClient.ioHandler.io.readBuffer += msg.toString()
+ self.client.ioHandler.io.readBuffer += msg.toString()
if callNext:
- self.fcpClient.next()
+ self.client.next()
#NOTE: iohandler is buffered
@@ -278,40 +278,40 @@
# cheat a bit to get iohandler to read a message from writeBuffer
if self.ioOpen():
- self.fcpClient.ioHandler.io.setReverseDirection(True)
+ self.client.ioHandler.io.setReverseDirection(True)
try:
- msg = self.fcpClient.ioHandler.readMessage()
- except iohandler.IOTimeout:
+ msg = self.client.ioHandler.readMessage()
+ except self.client.ioHandler.IOTimeout:
return None
finally:
- self.fcpClient.ioHandler.io.setReverseDirection(False)
+ self.client.ioHandler.io.setReverseDirection(False)
return msg
def ioOpen(self):
"""Checks if the clients io is open"""
- return self.fcpClient.ioHandler.isOpen()
+ return self.client.ioHandler.isOpen()
def getIO(self):
"""Returns the clients io"""
- return self.fcpClient.ioHandler.io
+ return self.client.ioHandler.io
def setUp(self):
# conect all events
self.events = [] # events received from the client
- for event in self.fcpClient.events:
+ for event in self.client.events:
event += self._captureEventsFromClient
def tearDown(self):
# disconnect all events
- for event in self.fcpClient.events:
+ for event in self.client.events:
event -= self._captureEventsFromClient
# clean up tmpfiles
for fpath in self.tmpfiles: os.remove(fpath)
- if self.fcpClient.isOpen():
- self.fcpClient.close()
+ if self.client.isOpen():
+ self.client.close()
#***********************************************************************************
@@ -325,9 +325,9 @@
class Test_close(BaseTestClient):
def test_close(self):
- self.fcpClient.close()
+ self.client.close()
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.Close),
)
@@ -339,11 +339,11 @@
class Test_isOpen(BaseTestClient):
def test_isOpen(self):
- self.failIf(self.fcpClient.isOpen())
+ self.failIf(self.client.isOpen())
self.connectClient()
- self.failUnless(self.fcpClient.isOpen())
+ self.failUnless(self.client.isOpen())
self.closeClient()
- self.failIf(self.fcpClient.isOpen())
+ self.failIf(self.client.isOpen())
#***********************************************************************************
#TODO: not idea how to test this
@@ -358,7 +358,7 @@
class Test_iterConnect(BaseTestClient):
def test_iterConnect_success(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
msg = self.getNextMessage()
if msg is not None:
self.failUnless(msg.name == 'ClientHello')
@@ -366,7 +366,7 @@
'NodeHello',
FCPVersion='2.0',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
Build='9999999999',
ExRevision='9999999999',
@@ -379,22 +379,22 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
+ self.client.events.ClientConnected,
consts.Message.NodeHello,
)
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
self.failUnless(self.ioOpen())
- self.fcpClient.close()
+ self.client.close()
def test_iterConnect_ioRefusesConnection(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.getIO().setAllowConnect(False)
self.failUnless(nodeHello is None)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.IOConnectFailed),
)
@@ -404,12 +404,12 @@
def test_iterConnect_nodeHelloNeverArrives(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
pass
self.failUnless(nodeHello is None)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.NoNodeHello),
)
@@ -419,17 +419,17 @@
def test_iterConnect_socketDies(self):
- enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
+ enum = self.client.iterConnect(duration=0.2, timeout=0.1)
errorRaised = False
while True:
try:
enum.next()
except StopIteration:
break
- except iohandler.IOBroken, d:
+ except self.client.ioHandler.IOBroken, d:
errorRaised = True
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.ConnectionDied),
#('Param', None),
@@ -445,7 +445,7 @@
def test_iterIterConnect_unknownNodehello(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.sendResponseMessage(
'i-am-invalid',
callNext=False,
@@ -453,7 +453,7 @@
self.failUnless(nodeHello is None)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.UnknownNodeHello),
)
@@ -463,14 +463,14 @@
def test_iterIterConnect_connect(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.sendResponseMessage(
'NodeHello',
FCPVersion='2.0',
Build='9999999999',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
@@ -482,7 +482,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
+ self.client.events.ClientConnected,
consts.Message.NodeHello,
)
self.assertHasNextEvent(None)
@@ -494,14 +494,14 @@
def test_iterIterConnect_reconnect(self):
self.connectClient()
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.sendResponseMessage(
'NodeHello',
FCPVersion='2.0',
Build='9999999999',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
@@ -513,12 +513,12 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.Reconnect)
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
+ self.client.events.ClientConnected,
consts.Message.NodeHello,
)
self.assertHasNextEvent(None)
@@ -528,14 +528,14 @@
def test_iterIterConnect_VersionMissmatch_FCPVersion(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.sendResponseMessage(
'NodeHello',
FCPVersion='0.0',
Build='9999999999',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
@@ -547,7 +547,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
)
@@ -558,14 +558,14 @@
def test_iterIterConnect_VersionMissmatch_Build(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=0.2, timeout=0.1)):
self.sendResponseMessage(
'NodeHello',
FCPVersion='2.0',
Build='0',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
@@ -577,7 +577,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
)
@@ -599,7 +599,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.DuplicateClientName)
)
@@ -615,7 +615,7 @@
def test_closeNode(self):
self.connectClient()
- self.fcpClient.closeNode()
+ self.client.closeNode()
self.assertHasNextMessage('Shutdown')
self.sendResponseMessage(
'ProtocolError',
@@ -623,7 +623,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.NodeClosing)
)
@@ -632,7 +632,237 @@
self.failIf(self.ioOpen())
self.closeClient()
+#***********************************************************************************
+# TODO: no idea how t test this
+#***********************************************************************************
+class Test_startNode(BaseTestClient):
+ pass
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_get_setConnectionName(BaseTestClient):
+
+ def test_get_setConnectionName(self):
+
+ self.failIf(self.client.setConnectionName() == 'foo')
+ self.client.setConnectionName('foo')
+ self.failIf(self.client.getConnectionName() != 'foo')
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_get_setDebugVerbosity(BaseTestClient):
+
+
+ def test_get_setDebugVerbosity(self):
+ oldVerbosity = self.client.getDebugVerbosity()
+ self.client.setDebugVerbosity(self.client.consts.DebugVerbosity.Quiet)
+ self.client.setDebugVerbosity(oldVerbosity)
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_versionCheckNodeHello(BaseTestClient):
+
+
+ def test_get_versionCheckNodeHello(self):
+
+ msg = {
+ 'FCPVersion': self.client.ExpectedFcpVersion,
+ 'Build':self.client.ExpectedNodeBuild,
+ }
+ result = self.client.versionCheckNodeHello(msg)
+ self.failUnless(result == True)
+
+ msg = {
+ 'FCPVersion': self.client.ExpectedFcpVersion -1,
+ 'Build':self.client.ExpectedNodeBuild,
+ }
+ result = self.client.versionCheckNodeHello(msg)
+ self.failUnless(result == False)
+
+ msg = {
+ 'FCPVersion': self.client.ExpectedFcpVersion,
+ 'Build':self.client.ExpectedNodeBuild -1,
+ }
+ result = self.client.versionCheckNodeHello(msg)
+ self.failUnless(result == False)
+
+ msg = {
+ 'FCPVersion': self.client.ExpectedFcpVersion +1,
+ 'Build':self.client.ExpectedNodeBuild,
+ }
+ result = self.client.versionCheckNodeHello(msg)
+ self.failUnless(result == False)
+
+ msg = {
+ 'FCPVersion': self.client.ExpectedFcpVersion,
+ 'Build':self.client.ExpectedNodeBuild +1,
+ }
+ result = self.client.versionCheckNodeHello(msg)
+ self.failUnless(result == True)
+
+#***********************************************************************************
+# TODO: not tested
+#***********************************************************************************
+class Test_handleMessage(BaseTestClient):
+ pass
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_next(BaseTestClient):
+
+ def test_idle(self):
+ self.connectClient()
+ msg = self.client.next()
+ msg2 = self.assertHasNextEvent(
+ self.client.events.Idle,
+ self.client.message.ClientSocketTimeout.name,
+ )
+ self.failUnless(msg == msg2)
+
+
+ def test_io_broken(self):
+ self.connectClient()
+ self.getIO().setBroken(True)
+
+ self.assertRaises(self.client.ioHandler.IOBroken, self.client.next, )
+ self.assertHasNextEvent(
+ self.client.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.ConnectionDied)
+ )
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
+
+
+ def test_hasMessage(self):
+ self.connectClient()
+ self.sendResponseMessage(
+ 'HiThere',
+ callNext=False
+ )
+ msg = self.client.next()
+ self.assertEqual(msg.name, 'HiThere')
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+#***********************************************************************************
+#TODO: not tested yet
+#***********************************************************************************
+class Test_run(BaseTestClient):
+
+ pass
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_sendMessage(BaseTestClient):
+
+ def test_io_broken(self):
+ self.connectClient()
+ self.getIO().setBroken(True)
+
+ self.assertRaises(self.client.ioHandler.IOBroken, self.client.sendMessage, self.client.message.ClientHello())
+ self.assertHasNextEvent(
+ self.client.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.ConnectionDied)
+ )
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
+
+
+ def test_messageSend(self):
+ self.connectClient()
+ self.client.sendMessage(self.client.message.ClientHello())
+ msg = self.client.next()
+ self.assertHasNextMessage('ClientHello')
+ self.assertHasNextEvent(self.client.events.Idle)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_getConfig(BaseTestClient):
+
+ def test_getConfig(self):
+ self.connectClient()
+ self.client.getConfig(
+ withCurrent=True,
+ withDefaults=True,
+ withExpertFlag=True,
+ withForceWriteFlag=True,
+ withSortOrder=True,
+ withShortDescription=True,
+ withLongDescription=True,
+ withDataTypes=True,
+ )
+ msg = self.client.next()
+ self.assertHasNextMessage('GetConfig',
+ ('WithCurrent', True),
+ ('WithDefaults', True),
+ ('WithExpertFlag', True),
+ ('WithForceWriteFlag', True),
+ ('WithSortOrder', True),
+ ('WithShortDescription', True),
+ ('WithLongDescription', True),
+ ('WithDataTypes', True),
+ )
+ self.assertHasNextEvent(self.client.events.Idle)
+
+
+ self.sendResponseMessage('ConfigData',
+ foo='1234',
+ )
+ self.assertHasNextEvent(
+ self.client.events.ConfigData,
+ consts.Message.ConfigData,
+ ('foo', '1234')
+ )
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_modifyConfig(BaseTestClient):
+
+ def test_getConfig(self):
+ self.connectClient()
+ self.client.modifyConfig(
+ {'foo': '1234'}
+ )
+ msg = self.client.next()
+ self.assertHasNextMessage('ModifyConfig',
+ ('foo', '1234'),
+ )
+ self.assertHasNextEvent(self.client.events.Idle)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+
+
+
###################################################
###################################################
###################################################
@@ -647,7 +877,7 @@
self.sendResponseMessage('CloseConnectionDuplicateClientName')
msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.DuplicateClientName),
)
@@ -656,7 +886,7 @@
self.failIf(self.ioOpen())
self.assertHasNextEvent(None)
- #print self.fcpClient.test_messagesSend[0].name
+ #print self.client.test_messagesSend[0].name
self.assertHasNextMessage(None)
self.connectClient()
@@ -665,11 +895,11 @@
def test_1001_SocketDied_Receive(self):
self.getIO().setBroken(True)
- self.assertRaises(iohandler.IOBroken, self.fcpClient.next)
+ self.assertRaises(iohandler.IOBroken, self.client.next)
# check if ClientDisconnected events has been triggered
msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.SocketDied),
#('Param', ClientSocketDiedMessage) # can not test here
@@ -689,11 +919,11 @@
self.getIO().setBroken(True)
# send a test message
- self.assertRaises(iohandler.IOBroken, self.fcpClient.sendMessage, message.newMessageType('test')())
+ self.assertRaises(iohandler.IOBroken, self.client.sendMessage, message.newMessageType('test')())
# check if ClientDisconnected events has been triggered
msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.SocketDied),
#('Param', ClientSocketDiedMessage) # can not test here
@@ -710,7 +940,7 @@
def test_1003_Shutdown(self):
- self.fcpClient.closeFreenet()
+ self.client.closeFreenet()
msg = self.assertHasNextMessage(consts.Message.Shutdown)
self.sendResponseMessage(
@@ -720,7 +950,7 @@
# check events the client triggered
msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.Shutdown)
#('Param', NodeHelloMessage) # can not test here
@@ -738,7 +968,7 @@
def test_1004_VersionMismatch(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)):
+ for n, nodeHello in enumerate(self.client.iterConnect(duration=1, timeout=0.1)):
if n == 1:
self.assertHasNextMessage(
consts.Message.ClientHello
@@ -747,7 +977,7 @@
'NodeHello',
FCPVersion='0.0',
Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
+ Version=str(self.client.ExpectedFcpVersion),
Revision='0',
Build='0',
ExRevision='0',
@@ -761,7 +991,7 @@
# check events the client triggered
msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
+ self.client.events.ClientDisconnected,
consts.Message.ClientDisconnected,
('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
#('Param', NodeHelloMessage) # can not test here
@@ -782,11 +1012,11 @@
def test_2000_ClientGetRegistered(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getData(
+ myIdentifier = self.client.getData(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
self.assertHasNextEvent(None)
@@ -806,11 +1036,11 @@
def test_2001_GetData_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getData(
+ myIdentifier = self.client.getData(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -833,7 +1063,7 @@
Succeeded=1,
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestProgress,
+ self.client.events.RequestProgress,
)
# finalize request
@@ -861,7 +1091,7 @@
# client should complete and remove the request
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -890,7 +1120,7 @@
# client should complete but not remove the request
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Success | consts.RequestStatus.Completed),
data=data
@@ -908,11 +1138,11 @@
def test_2002_GetData_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getData(
+ myIdentifier = self.client.getData(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -934,7 +1164,7 @@
# client should complete request and remove it
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -964,7 +1194,7 @@
# client should complete but not remove the request
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Error | consts.RequestStatus.Completed),
)
@@ -979,12 +1209,12 @@
def test_2003_GetFile_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitryry.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1008,7 +1238,7 @@
**params
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1026,12 +1256,12 @@
def test_2004_GetFile_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitryry.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1052,7 +1282,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1069,11 +1299,11 @@
def test_2005_GetKeyInfo_Success(self):
# request a arbitrary uri
- myIdentifier = self.fcpClient.getKeyInfo(
+ myIdentifier = self.client.getKeyInfo(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1097,7 +1327,7 @@
**params
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1116,11 +1346,11 @@
# test specdial case where ProtocolError.TooBig is handled as success
# request a arbitrary uri
- myIdentifier = self.fcpClient.getKeyInfo(
+ myIdentifier = self.client.getKeyInfo(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1140,7 +1370,7 @@
# blah.. more here
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1158,11 +1388,11 @@
def test_2007_GetKeyInfo_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getKeyInfo(
+ myIdentifier = self.client.getKeyInfo(
'arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1182,7 +1412,7 @@
# blah.. more here
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1207,12 +1437,12 @@
def testPutRedirect_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.putRedirect(
+ myIdentifier = self.client.putRedirect(
'my-redirect-name',
'SSK@arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1224,7 +1454,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1239,12 +1469,12 @@
def testPutRedirect_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.putRedirect(
+ myIdentifier = self.client.putRedirect(
'my-redirect-name',
'SSK@arbitrary-uri',
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1256,7 +1486,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1271,11 +1501,11 @@
def testCHKPutData_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutData(
+ myIdentifier = self.client.chkPutData(
'arbitrary data'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1287,7 +1517,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1302,11 +1532,11 @@
def testCHKPutData_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutData(
+ myIdentifier = self.client.chkPutData(
'arbitrary data'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1318,7 +1548,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1333,11 +1563,11 @@
def testCHKPutDir_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutDir(
+ myIdentifier = self.client.chkPutDir(
'myDirectory'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPutDiskDir)
self.failUnless(myIdentifier in requestsAll)
@@ -1349,7 +1579,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientPutDiskDir,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1364,11 +1594,11 @@
def testCHKPutDir_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutDir(
+ myIdentifier = self.client.chkPutDir(
'myDirectory'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPutDiskDir)
self.failUnless(myIdentifier in requestsAll)
@@ -1380,7 +1610,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientPutDiskDir,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1395,11 +1625,11 @@
def testCHKPutFile_Success(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutFile(
+ myIdentifier = self.client.chkPutFile(
'myFile.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1411,7 +1641,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1426,11 +1656,11 @@
def testCHKPutFile_Failure(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutFile(
+ myIdentifier = self.client.chkPutFile(
'myFile.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientPut)
self.failUnless(myIdentifier in requestsAll)
@@ -1442,7 +1672,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
+ self.client.events.RequestFailed,
consts.Message.ClientPut,
('RequestStatus', consts.RequestStatus.Error |
consts.RequestStatus.RemovedFromQueue |
@@ -1482,11 +1712,11 @@
]
# request a arbitrary file
- myIdentifier = self.fcpClient.chkPutMultiple(
+ myIdentifier = self.client.chkPutMultiple(
items
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
msg = self.assertHasNextMessage(
consts.Message.ClientPutComplexDir,
@@ -1521,7 +1751,7 @@
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
+ self.client.events.RequestCompleted,
consts.Message.ClientPutComplexDir,
('RequestStatus', consts.RequestStatus.Success |
consts.RequestStatus.RemovedFromQueue |
@@ -1545,7 +1775,7 @@
'Name': 'myItem0',
},
]
- self.assertRaises(ValueError, self.fcpClient.chkPutMultiple, items)
+ self.assertRaises(ValueError, self.client.chkPutMultiple, items)
#TODO: how to test required params?
# ...just some samples below
@@ -1558,7 +1788,7 @@
'Name': 'myItem0',
},
]
- self.assertRaises(ValueError, self.fcpClient.chkPutMultiple, items)
+ self.assertRaises(ValueError, self.client.chkPutMultiple, items)
# param missing (we enforce all required parameters)
items = [
@@ -1568,12 +1798,12 @@
#'Name': 'myItem0',
},
]
- self.assertRaises(ValueError, self.fcpClient.chkPutMultiple, items)
+ self.assertRaises(ValueError, self.client.chkPutMultiple, items)
# some sloppy tests for other key types
def testSSKPutData(self):
- myIdentifier = self.fcpClient.chkPutData(
+ myIdentifier = self.client.chkPutData(
'arbitrary data'
)
@@ -1590,15 +1820,15 @@
def test_3000_ModifyRequest_Persistent(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitryry.txt',
persistentUserData='foo',
priorityClass=consts.Priority.Medium,
persistence=consts.Persistence.Reboot,
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1612,7 +1842,7 @@
# test modify persistent user data
- self.fcpClient.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High)
+ self.client.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High)
msg = self.assertHasNextMessage(consts.Message.ModifyPersistentRequest)
# respond to the file request
@@ -1620,7 +1850,7 @@
'PersistentRequestModified',
**msg.params
)
- self.assertHasNextEvent(self.fcpClient.events.RequestModified)
+ self.assertHasNextEvent(self.client.events.RequestModified)
self.failUnless(consts.RequestModified.PersistentUserData in myRequest['Modified'])
self.failUnless(consts.RequestModified.PriorityClass in myRequest['Modified'])
@@ -1637,14 +1867,14 @@
def test_3001_ModifyRequest_NonPersistent(self):
# request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitryry.txt',
persistentUserData='foo',
priorityClass=consts.Priority.Medium,
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1656,7 +1886,7 @@
)
# test modify persistent user data
- self.fcpClient.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High)
+ self.client.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High)
# no way to modify priority in Fcp. The client ignores all attempts to do so currently
# no message is send,instead the event is triggered emidiately
@@ -1668,7 +1898,7 @@
# **msg.params
# )
- self.assertHasNextEvent(self.fcpClient.events.RequestModified)
+ self.assertHasNextEvent(self.client.events.RequestModified)
self.failUnless(consts.RequestModified.PersistentUserData in myRequest['Modified'])
#self.failUnless(consts.RequestModified.PriorityClass in myRequest['Modified'])
@@ -1685,12 +1915,12 @@
def test_3002_RemoveRequest_NonPersistent(self):
# request a file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitrary.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
# respond to the file request
@@ -1705,25 +1935,25 @@
self.messages = []
# now cancel request
- self.fcpClient.removeRequest(myIdentifier)
+ self.client.removeRequest(myIdentifier)
# of our request should be removed emidiately,
self.assertEqual(myRequest['RequestStatus'], consts.RequestStatus.Removed |
consts.RequestStatus.RemovedFromQueue |
consts.RequestStatus.Completed
)
- self.failIf(myIdentifier in self.fcpClient.getRequests())
+ self.failIf(myIdentifier in self.client.getRequests())
# now the request should have been removed
self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
+ self.client.events.RequestRemoved,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Removed |
consts.RequestStatus.RemovedFromQueue |
consts.RequestStatus.Completed
),
)
- self.failIf(self.fcpClient.getRequests())
+ self.failIf(self.client.getRequests())
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
@@ -1733,13 +1963,13 @@
def test_3003_RemoveRequest_persistent(self):
# request a file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitrary.txt',
persistence=consts.Persistence.Reboot,
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -1755,12 +1985,12 @@
self.messages = []
# now cancel request
- self.fcpClient.removeRequest(myIdentifier)
+ self.client.removeRequest(myIdentifier)
# status of our request should be set to removed emidiately, but it should
# not be removed from the client
self.assertEqual(myRequest['RequestStatus'], consts.RequestStatus.Removed | consts.RequestStatus.Completed)
- self.failUnless(myIdentifier in self.fcpClient.getRequests())
+ self.failUnless(myIdentifier in self.client.getRequests())
# client schould send a RemovePersistentRequest
self.assertHasNextMessage(consts.Message.RemovePersistentRequest)
@@ -1775,7 +2005,7 @@
self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.RemovedFromQueue)
self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
+ self.client.events.RequestRemoved,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Removed |
consts.RequestStatus.RemovedFromQueue |
@@ -1783,7 +2013,7 @@
),
)
- self.failIf(self.fcpClient.getRequests())
+ self.failIf(self.client.getRequests())
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
@@ -1793,19 +2023,19 @@
def test_3004_ResendRequest_NonPersistent(self):
- myIdentifier = self.fcpClient.getData('any-key')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.getData('any-key')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
- newIdentifier = self.fcpClient.resendRequest(myRequest)
+ newIdentifier = self.client.resendRequest(myRequest)
# client should remove old request emidiately
self.failIf(myIdentifier == newIdentifier)
self.failIf(myIdentifier in requestsAll)
self.failUnless(newIdentifier in requestsAll)
self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
+ self.client.events.RequestRemoved,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Removed |
consts.RequestStatus.RemovedFromQueue |
@@ -1824,12 +2054,12 @@
def test_3005_ResendRequest_Persistent(self):
- myIdentifier = self.fcpClient.getData('any-key', persistence=consts.Persistence.Reboot)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.getData('any-key', persistence=consts.Persistence.Reboot)
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
- newIdentifier = self.fcpClient.resendRequest(myRequest)
+ newIdentifier = self.client.resendRequest(myRequest)
self.failIf(myIdentifier == newIdentifier)
self.failUnless(newIdentifier in requestsAll)
@@ -1847,7 +2077,7 @@
Identifier=myIdentifier,
)
self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
+ self.client.events.RequestRemoved,
consts.Message.ClientGet,
('RequestStatus', consts.RequestStatus.Removed |
consts.RequestStatus.RemovedFromQueue |
@@ -1890,7 +2120,7 @@
('Identifier', myIdentifier)
)
- requests = self.fcpClient.getRequests()
+ requests = self.client.getRequests()
self.failIf(requests)
# the client should not trigger any events
@@ -1901,16 +2131,16 @@
def test_4001_RestorePersistentGet_ValidIdentifier(self):
# we need a valid identifier to restore a request, so hack a bit
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
'arbitryry.txt'
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.ClientGet)
- self.fcpClient.removeRequest(myIdentifier)
+ self.client.removeRequest(myIdentifier)
self.sendResponseMessage(
'PersistentRequestRemoved',
Identifier=myIdentifier,
@@ -1932,7 +2162,7 @@
# check if the client restored the request
msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestRestored,
+ self.client.events.RequestRestored,
consts.Message.ClientGet,
('Identifier', myIdentifier),
('RequestStatus', consts.RequestStatus.Restored), # no RequestStatus.Pending flag should be set here
@@ -1957,12 +2187,12 @@
def test_5000_DDAWriteDenied(self):
# request a file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
os.path.join(DIR, 'DDATest.txt')
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
# client schould send a ClientGet
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -2035,7 +2265,7 @@
**msg.params
)
- requests = self.fcpClient.getRequests()
+ requests = self.client.getRequests()
self.assertEqual(len(requests), 1)
self.assertHasNextEvent(None)
@@ -2057,12 +2287,12 @@
def test_6000_IdentifierCollision(self):
# request a file
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
os.path.join(DIR, 'test.txt')
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
# client schould send a ClientGet
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -2079,7 +2309,7 @@
# check if RequestModified event has been triggered
msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestModified,
+ self.client.events.RequestModified,
consts.Message.ClientGet,
)
@@ -2103,13 +2333,13 @@
open(fpath, 'wb').close()
self.tmpfiles.append(fpath)
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
fpath,
filenameCollision=consts.FilenameCollision.HandleRename,
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
# client schould send a ClientGet
self.assertHasNextMessage(consts.Message.ClientGet)
@@ -2127,7 +2357,7 @@
# client schould send a new ClientGet with a different filename
self.assertHasNextMessage(consts.Message.ClientGet)
msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestModified,
+ self.client.events.RequestModified,
consts.Message.ClientGet
)
@@ -2157,19 +2387,19 @@
open(fpath, 'wb').close()
self.tmpfiles.append(fpath)
- myIdentifier = self.fcpClient.getFile(
+ myIdentifier = self.client.getFile(
'arbitrary-uri',
fpath,
filenameCollision=consts.FilenameCollision.HandleNever,
)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
# client schould send a ClientGet
self.assertHasNextMessage(consts.Message.ClientGet)
# check if our request was registered
- requests = self.fcpClient.getRequests()
+ requests = self.client.getRequests()
self.failUnless(len(requests) == 1)
# now respond with a ProtocolError
@@ -2183,10 +2413,10 @@
)
# client schould send no messages and trigger a RequestFailed event
- self.assertHasNextEvent(self.fcpClient.events.RequestFailed)
+ self.assertHasNextEvent(self.client.events.RequestFailed)
# request should have been removed
- self.failIf(self.fcpClient.getRequests())
+ self.failIf(self.client.getRequests())
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
@@ -2209,11 +2439,11 @@
URI=myKey,
Persistence=consts.Persistence.Connection,
)
- self.fcpClient._registerRequest(msg, consts.RequestType.PutData)
+ self.client._registerRequest(msg, consts.RequestType.PutData)
myIdentifier = msg['Identifier']
- requestsAll = self.fcpClient.getRequests()
+ requestsAll = self.client.getRequests()
- newIdentifier = self.fcpClient.resendRequest(msg)
+ newIdentifier = self.client.resendRequest(msg)
self.failIf(myIdentifier in requestsAll)
self.failUnless(newIdentifier in requestsAll)
@@ -2229,12 +2459,12 @@
URI=myKey + '/foo',
Persistence=consts.Persistence.Connection,
)
- self.fcpClient._registerRequest(msg, consts.RequestType.PutData)
+ self.client._registerRequest(msg, consts.RequestType.PutData)
msg['PrivateKey'] = myKey
myIdentifier = msg['Identifier']
- requestsAll = self.fcpClient.getRequests()
+ requestsAll = self.client.getRequests()
- newIdentifier = self.fcpClient.resendRequest(msg)
+ newIdentifier = self.client.resendRequest(msg)
self.failIf(myIdentifier in requestsAll)
self.failUnless(newIdentifier in requestsAll)
@@ -2251,12 +2481,12 @@
URI=myKey + '/foo/0',
Persistence=consts.Persistence.Connection,
)
- self.fcpClient._registerRequest(msg, consts.RequestType.PutData)
+ self.client._registerRequest(msg, consts.RequestType.PutData)
msg['PrivateKey'] = myKey
myIdentifier = msg['Identifier']
- requestsAll = self.fcpClient.getRequests()
+ requestsAll = self.client.getRequests()
- newIdentifier = self.fcpClient.resendRequest(msg)
+ newIdentifier = self.client.resendRequest(msg)
self.failIf(myIdentifier in requestsAll)
self.failUnless(newIdentifier in requestsAll)
@@ -2272,12 +2502,12 @@
URI=myKey,
Persistence=consts.Persistence.Connection,
)
- self.fcpClient._registerRequest(msg, consts.RequestType.PutData)
+ self.client._registerRequest(msg, consts.RequestType.PutData)
msg['PrivateKey'] = myKey
myIdentifier = msg['Identifier']
- requestsAll = self.fcpClient.getRequests()
+ requestsAll = self.client.getRequests()
- newIdentifier = self.fcpClient.resendRequest(msg)
+ newIdentifier = self.client.resendRequest(msg)
self.failIf(myIdentifier in requestsAll)
self.failUnless(newIdentifier in requestsAll)
@@ -2312,9 +2542,9 @@
def testGet_8000_PluginInfo_Success(self):
- myIdentifier = self.fcpClient.getPluginInfo('hi there')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.getPluginInfo('hi there')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.failUnless(myIdentifier in requestsAll)
self.assertHasNextMessage(
@@ -2330,7 +2560,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginInfo,
+ self.client.events.PluginInfo,
consts.Message.GetPluginInfo,
('Identifier', myIdentifier),
('PluginName', 'hi there'),
@@ -2351,9 +2581,9 @@
def test_8001_GetPluginInfo_Failure(self):
- myIdentifier = self.fcpClient.getPluginInfo('hi there')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.getPluginInfo('hi there')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.failUnless(myIdentifier in requestsAll)
self.assertHasNextMessage(
@@ -2369,7 +2599,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginInfoFailed,
+ self.client.events.PluginInfoFailed,
consts.Message.GetPluginInfo,
#('PluginName', 'hi there'),
('Identifier', myIdentifier),
@@ -2391,8 +2621,8 @@
def test_8002_SendPluginMessage_Success(self):
myIdentifier = '123456789'
- myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
+ requestsAll = self.client.getRequests()
self.failIf(myIdentifier in requestsAll)
self.assertHasNextMessage(
@@ -2410,7 +2640,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginMessage,
+ self.client.events.PluginMessage,
consts.Message.FCPPluginReply,
('PluginName', 'hi there'),
('Identifier', myIdentifier),
@@ -2425,8 +2655,8 @@
def test_8003_GetSendPluginMessage_Failure(self):
myIdentifier = '1234567889'
- myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
+ requestsAll = self.client.getRequests()
self.failIf(myIdentifier in requestsAll)
self.assertHasNextMessage(
@@ -2443,7 +2673,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.ProtocolError,
+ self.client.events.ProtocolError,
consts.Message.ProtocolError,
('Identifier', myIdentifier),
)
@@ -2457,8 +2687,8 @@
def test_8003_GetSendPluginMessage_Identifiercollision(self):
myIdentifier = '1234567889'
- myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
- requestsAll = self.fcpClient.getRequests()
+ myRequest = self.client.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
+ requestsAll = self.client.getRequests()
self.failIf(myIdentifier in requestsAll)
self.assertHasNextMessage(
@@ -2474,7 +2704,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.IdentifierCollision,
+ self.client.events.IdentifierCollision,
consts.Message.IdentifierCollision,
('Identifier', myIdentifier),
)
@@ -2495,9 +2725,9 @@
class TestGenerateKeypair(BaseTestClient):
def test_10000_GeberateSSKKeypair(self):
- myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.SSK)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.generateKeypair(consts.KeyType.SSK)
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.GenerateSSK)
self.sendResponseMessage(
@@ -2508,7 +2738,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.KeypairGenerated,
+ self.client.events.KeypairGenerated,
consts.Message.GenerateSSK,
('Identifier', myIdentifier),
('PublicKey','SSK@public'),
@@ -2527,9 +2757,9 @@
def test_10001_GeberateUSKKeypair(self):
- myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.USK)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.generateKeypair(consts.KeyType.USK)
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.assertHasNextMessage(consts.Message.GenerateSSK)
self.sendResponseMessage(
@@ -2540,7 +2770,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.KeypairGenerated,
+ self.client.events.KeypairGenerated,
consts.Message.GenerateSSK,
('Identifier', myIdentifier),
('PublicKey','USK@public'),
@@ -2566,9 +2796,9 @@
def test_11000_Subscribe(self):
- myIdentifier = self.fcpClient.subscribeUSK('arbitrary')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
+ myIdentifier = self.client.subscribeUSK('arbitrary')
+ myRequest = self.client.getRequest(myIdentifier)
+ requestsAll = self.client.getRequests()
self.failUnless(myIdentifier in requestsAll)
self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed)
@@ -2582,7 +2812,7 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.USKUpdated,
+ self.client.events.USKUpdated,
consts.Message.SubscribedUSKUpdate,
('Identifier', myIdentifier),
('Edition', 99),
@@ -2608,6 +2838,17 @@
Test_iterConnect,
Test_CloseConnectionDuplicateClientName,
Test_closeNode,
+ Test_get_setConnectionName,
+ Test_get_setDebugVerbosity,
+ Test_startNode,
+ Test_versionCheckNodeHello,
+ Test_handleMessage,
+ Test_next,
+ Test_run,
+ Test_sendMessage,
+ Test_getConfig,
+ Test_modifyConfig,
+
#TestDisconnectReason,
#TestClientGet,
#TestClientPut,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:03:28
|
Revision: 361
http://fclient.svn.sourceforge.net/fclient/?rev=361&view=rev
Author: jUrner
Date: 2008-03-10 18:03:34 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
adapts
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/dummy_io.py
Modified: trunk/sandbox/fcp2/test_fcp/dummy_io.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-11 01:03:20 UTC (rev 360)
+++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-11 01:03:34 UTC (rev 361)
@@ -33,30 +33,30 @@
def connect(self, **kwargs):
if not self._allowConnect:
- raise iohandler.IOConnectFailed('Refused')
+ raise iohandler.IOHandler.IOConnectFailed('Refused')
self._isOpen = True
def read(self, n):
if self._isBroken:
- raise iohandler.IOBroken('Broken')
+ raise iohandler.IOHandler.IOBroken('Broken')
if not self.isOpen():
- raise iohandler.IOClosed('Closed')
+ raise iohandler.IOHandler.IOClosed('Closed')
if self._reverseDirection:
if not self.writeBuffer:
- raise iohandler.IOTimeout('Timeout')
+ raise iohandler.IOHandler.IOTimeout('Timeout')
bytes, self.writeBuffer = self.writeBuffer[ :n], self.writeBuffer[n: ]
else:
if not self.readBuffer:
- raise iohandler.IOTimeout('Timeout')
+ raise iohandler.IOHandler.IOTimeout('Timeout')
bytes, self.readBuffer = self.readBuffer[ :n], self.readBuffer[n: ]
return bytes
def write(self, bytes):
if self._isBroken:
- raise iohandler.IOBroken('Broken')
+ raise iohandler.IOHandler.IOBroken('Broken')
if not self.isOpen():
- raise iohandler.IOClosed('Closed')
+ raise iohandler.IOHandler.IOClosed('Closed')
self.writeBuffer += bytes
def close(self):
@@ -68,7 +68,7 @@
self.readBuffer = ''
self.writeBuffer = ''
else:
- raise iohandler.IOClosed('Closed')
+ raise iohandler.IOHandler.IOClosed('Closed')
def isOpen(self):
return self._isOpen
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:03:15
|
Revision: 360
http://fclient.svn.sourceforge.net/fclient/?rev=360&view=rev
Author: jUrner
Date: 2008-03-10 18:03:20 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
no longer needed
Removed Paths:
-------------
trunk/sandbox/fcp2/fcparams.py
Deleted: trunk/sandbox/fcp2/fcparams.py
===================================================================
--- trunk/sandbox/fcp2/fcparams.py 2008-03-11 01:02:55 UTC (rev 359)
+++ trunk/sandbox/fcp2/fcparams.py 2008-03-11 01:03:20 UTC (rev 360)
@@ -1,144 +0,0 @@
-"""Handling of additional persistent parameters for requests"""
-
-import sys, os
-import base64
-import time
-
-#--> rel import hack
-class _RelImportHack(object):
- def __init__(self, n):
- fpath = os.path.abspath(__file__)
- for i in xrange(n): fpath = os.path.dirname(fpath)
- sys.path.insert(0, fpath)
- def __del__(self): sys.path.pop(0)
-hack = _RelImportHack(2)
-
-from fcp2.fcp_lib import uuid
-
-
-del hack
-#<-- rel import hack
-#*********************************************************************************************
-#
-#*********************************************************************************************
-def validateFcpBool(value):
- if value in ('true', 'false'):
- return str(value)
- return None
-
-def validateFloat(value):
- try:
- return float(value)
- except ValueError:
- return None
-
-def validateInt(value):
- try:
- return int(value)
- except ValueError:
- return None
-
-def validateString(value):
- try:
- return str(value)
- except UnicodeEncodeError:
- return None
-
-def validateUuid(value):
- result = uuid.UUID_EXACT_MATCH_PAT.match(value)
- if result:
- return str(result.group(0))
- return None
-
-#*********************************************************************************************
-#
-#*********************************************************************************************
-FcParamsSep = '\x01'
-MAGIC = '{8a7808d0-3934-465a-b1b4-b7150ed109a5}' # magic string to identify our requests
-
-FcParams = (
- ('RequestType', validateInt),
- ('InitTime', validateFloat), # can not take it from uuid cos requests may be resend multiple times
- ('FilenameCollision', validateInt),
- ('PersistentUserData', validateString),
- )
-
-IRequestType = 0
-IInitTime = 1
-IFilenameCollision = 2
-IPersistentUserData = 3
-
-def paramsFromRequest(msg):
- """Extracts fclient parameters from the identifier of a request
- @param msg: message to extract the parameters from
- @return: (list) parameters or None if something went wrong
-
- """
- userData = msg.get('ClientToken', None)
- if userData is None:
- return None
-
- params = userData.split(FcParamsSep)
- if len(params) != len(FcParams) +1:
- return None
-
- # validate and drop our magic string
- uuid_ = params.pop(0)
- result = validateUuid(uuid_)
- if result is None:
- return None
- if result != MAGIC:
- return None
-
- for i, (paramName, paramValidator) in enumerate(FcParams):
- result = paramValidator(params[i])
- if result is None:
- return None
- params[i] = result
-
- # decode user data
- try:
- params[IPersistentUserData] = base64.b64decode(params[IPersistentUserData])
- except TypeError:
- return None
-
- return params
-
-
-def messageToParams(msg):
- """Generates fc params from a message
- @param msg: message to create the identifier from
- @return: (str) params
-
- """
- params = []
- for paramName, paramValidator in FcParams:
- params.append( str(msg[paramName]) )
-
- # encode user data
- params[IPersistentUserData] = base64.b64encode(params[IPersistentUserData])
- params.insert(0, MAGIC)
-
- return FcParamsSep.join(params)
-
-
-def newUuid(uuids=None):
- """Creates a new unique identifier
- @param uuids: if desired any iterable containing uuids to enshure the identifier is unique in the iterable
- @return: (str) uuid
-
- """
- uuid_ = uuid.uuid_time()
- if uuids is not None:
- while uuid_ in uuids:
- uuid_ = uuid_time()
- return uuid_
-
-#*********************************************************************************
-#
-#*********************************************************************************
-if __name__ == '__main__2':
- import doctest
- doctest.testmod()
-
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:02:50
|
Revision: 359
http://fclient.svn.sourceforge.net/fclient/?rev=359&view=rev
Author: jUrner
Date: 2008-03-10 18:02:55 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
a few fixes
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-11 01:02:27 UTC (rev 358)
+++ trunk/sandbox/fcp2/message.py 2008-03-11 01:02:55 UTC (rev 359)
@@ -145,6 +145,12 @@
return '\n'.join(out)
+
+
+ def updatePersistentParams(self):
+ pass
+
+
#TODO:
# 1. if one setter / getter fails no setter / getter result should assumed to be valid
# 2. log errors
@@ -679,7 +685,7 @@
return True
def updatePersistentParams(self):
- self['ClientToken'] = MessageBase.getPersistentParams(self)
+ self['ClientToken'] = MessageBase._getPersistentParams(self)
class ClientPutComplexDir(ClientPut):
@@ -799,6 +805,7 @@
'WithLongDescription': types.FcpTypeBool,
'WithShortDescription': types.FcpTypeBool,
'WithSortOrder': types.FcpTypeBool,
+ 'WithDataTypes': types.FcpTypeBool,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:02:24
|
Revision: 358
http://fclient.svn.sourceforge.net/fclient/?rev=358&view=rev
Author: jUrner
Date: 2008-03-10 18:02:27 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
moved exceptions ti IOHandler for easier access
Modified Paths:
--------------
trunk/sandbox/fcp2/iohandler.py
Modified: trunk/sandbox/fcp2/iohandler.py
===================================================================
--- trunk/sandbox/fcp2/iohandler.py 2008-03-11 01:01:33 UTC (rev 357)
+++ trunk/sandbox/fcp2/iohandler.py 2008-03-11 01:02:27 UTC (rev 358)
@@ -32,22 +32,6 @@
#*****************************************************************************
#
#*****************************************************************************
-class MessageParseError(Exception):
- """Exception raised when a message could not be parsed succesfuly"""
-
-class IOConnectFailed(Exception):
- """Exception raised if the object can not be connected"""
-
-class IOClosed(Exception):
- """Exception raised if the object is closed"""
-
-class IOBroken(Exception):
- """Exception raised if the IO connection is broken"""
-
-class IOTimeout(Exception):
- """Exception raised when the io connection is closed"""
-
-
class IOObjectBase(object):
"""Base class for io objects
@@ -70,7 +54,7 @@
@return: always None
@raise L{IOConnectFailed}: in case something goes wrong
"""
- raise IOConnectFailed('Failed')
+ raise IOHandler.IOConnectFailed('Failed')
def read(self, n):
"""Should read n bytes from the device
@@ -79,7 +63,7 @@
@raise L{IOBroken}: in case something goes wrong
@raise L{IOTimeout}: if the read operation times out
"""
- raise IOBroken('Broken')
+ raise OHandler.IOBroken('Broken')
def write(self, bytes):
"""Should write bytes to the device
@@ -87,7 +71,7 @@
@return: always None
@raise L{IOBroken}: in case something goes wrong
"""
- raise IOBroken('Broken')
+ raise OHandler.IOBroken('Broken')
def close(self):
"""Should close the io device
@@ -95,7 +79,7 @@
@return: always None
@raise L{IOClosed}: if the device is already closed
"""
- raise IOClosed('Closed')
+ raise OHandler.IOClosed('Closed')
def isOpen(self):
"""Should check if the device is open
@@ -137,7 +121,7 @@
try:
self.socket.connect((host, port))
except socket.error, details:
- raise IOConnectFailed(details)
+ raise IOHandler.IOConnectFailed(details)
def read(self, n):
try:
@@ -145,10 +129,10 @@
if p == '':
raise socket.error('Socket closed by host')
except socket.timeout, details:
- raise IOTimeout(details)
+ raise IOHandler.IOTimeout(details)
except socket.error, details:
self.close()
- raise IOBroken(details)
+ raise IOHandler.IOBroken(details)
else:
return p
@@ -157,11 +141,11 @@
self.socket.sendall(bytes)
except socket.error, details:
self.close()
- raise IOBroken(details)
+ raise IOHandler.IOBroken(details)
def close(self):
if self.socket is None:
- raise IOClosed('Closed')
+ raise IOHandler.IOClosed('Closed')
self.socket.close()
self.socket = None
@@ -178,6 +162,23 @@
"""Handles message io
"""
+ class MessageParseError(Exception):
+ """Exception raised when a message could not be parsed succesfuly"""
+
+ class IOConnectFailed(Exception):
+ """Exception raised if the object can not be connected"""
+
+ class IOClosed(Exception):
+ """Exception raised if the object is closed"""
+
+ class IOBroken(Exception):
+ """Exception raised if the IO connection is broken"""
+
+ class IOTimeout(Exception):
+ """Exception raised when the io connection is closed"""
+
+
+
TerminatorEndMessage = '\nEndMessage\n'
TerminatorData = '\nData\n'
@@ -227,8 +228,8 @@
yield False # have to yield at least once to make unittests work (io has to be created!!)
try:
self.io.connect(**kwargs)
- except IOConnectFailed, details:
- self._log.info(consts.LogMessages.ConnectingFailed + ' %s %s' % (IOConnectFailed, details))
+ except self.IOConnectFailed, details:
+ self._log.info(consts.LogMessages.ConnectingFailed + ' %s %s' % (self.IOConnectFailed, details))
yield False
else:
self.io.setTimeout(self.io.Timeout)
@@ -273,14 +274,14 @@
if not p:
raise ValueError('No bytes received and IO did not raise as expected?!?')
self._receiveBuffer += p
- except IOBroken, details:
+ except self.IOBroken, details:
self._log.critical(consts.LogMessages.SocketDied)
self.close()
- raise IOBroken(details)
- except IOTimeout, details: # nothing in the queue
- raise IOTimeout(details)
+ raise self.IOBroken(details)
+ except self.IOTimeout, details: # nothing in the queue
+ raise self.IOTimeout(details)
except Exception, details:
- self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.traceback.format_exc())
+ self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.format_exc())
self.close()
raise Exception(details)
@@ -317,7 +318,7 @@
p = [i for i in chunk.split('\n') if i] # Fcp ignores empty lines, so do we
p.pop()
if not p:
- raise MessageParseError('No message name present')
+ raise self.MessageParseError('No message name present')
msgName = p.pop(0)
msgClass = message.MessagesAll.get(msgName, None)
if msgClass is None:
@@ -328,7 +329,7 @@
# process param --> value fields
params = dict([line.split('=', 1) for line in p])
if not msg._restoreParams(params):
- raise MessageParseError('Invalid message parameters')
+ raise self.MessageParseError('Invalid message parameters')
# get associated data if necessary
if mayHaveData:
@@ -351,19 +352,8 @@
return msg
- def sendMessage(self, name, data=None, **params):
+ def sendMessage(self, msg):
"""Sends a message to freenet
- @param name: name of the message to send
- @param data: data to atatch to the message
- @param params: {para-name: param-calue, ...} of parameters to pass along
- with the message (see freenet protocol)
- @raise L{IOBroken}: if the connection to the io dies unexpectedly
- """
- return self.sendMessageEx(message.Message(name, data=data, **params))
-
-
- def sendMessageEx(self, msg):
- """Sends a message to freenet
@param msg: (Message) message to send
@return: Message
@raise L{IOBroken}: if the connection to the io dies unexpectedly
@@ -371,12 +361,12 @@
self._log.debug(consts.LogMessages.Sending + msg.pprint())
try:
self.io.write(msg.toString())
- except IOBroken, details:
+ except self.IOBroken, details:
self._log.critical(consts.LogMessages.SocketDied)
self.close()
- raise IOBroken(details)
+ raise self.IOBroken(details)
except Exception, details:
- self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.traceback.format_exc())
+ self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.format_exc())
self.close()
raise Exception(details)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-11 01:01:28
|
Revision: 357
http://fclient.svn.sourceforge.net/fclient/?rev=357&view=rev
Author: jUrner
Date: 2008-03-10 18:01:33 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
a few fixes
Modified Paths:
--------------
trunk/sandbox/fcp2/client.py
Modified: trunk/sandbox/fcp2/client.py
===================================================================
--- trunk/sandbox/fcp2/client.py 2008-03-10 13:03:53 UTC (rev 356)
+++ trunk/sandbox/fcp2/client.py 2008-03-11 01:01:33 UTC (rev 357)
@@ -206,7 +206,6 @@
from fcp2 import consts
from fcp2 import config
from fcp2 import events
-from fcp2 import fcparams
from fcp2 import message
from fcp2 import iohandler
from fcp2 import types
@@ -254,7 +253,6 @@
consts = consts
config = config
message = message
- fcparams = fcparams
types = types
key = key
@@ -529,14 +527,14 @@
self._close(disconnectMsg)
raise StopIteration
-
+ #TESTED
def getConnectionName(self):
"""Returns the connection name used by the client
@return: (str) connection name
"""
return self._connectionName
-
-
+
+ #TESTED
def setConnectionName(self, connectionName=None):
"""Sets the connection name to be used by the client
@param connectionName: (str) connection name or None to use an arbitrary connection name
@@ -544,17 +542,26 @@
"""
self._connectionName = self._newUuid() if connectionName is None else connectionName
return self._connectionName
+
+ #TESTED
+ def getDebugVerbosity(self):
+ """Returns the current verbosity level of the client
+ @return: L{consts.DebugVerbosity}
+ """
+ for logger in self._loggers.values():
+ return logger.getEffectiveLevel()
-
+ #TESTED
def setDebugVerbosity(self, debugVerbosity):
"""Sets the verbosity level of the client
- @note: see L{consts.DebugVerbosity}
+ @param debugVerbosity: L{consts.DebugVerbosity}
"""
for logger in self._loggers.values():
logger.setLevel(debugVerbosity)
self.ioHandler.setDebugVerbosity(debugVerbosity)
+ #TESTED
def startNode(self, cmdline):
"""Starts the freenet node
@param cmdline: commandline to start freenet (like '/freenet/run.sh start' or 'c:\freenet\start.bat')
@@ -571,7 +578,7 @@
stdout, stderr = p.communicate()
return stdout
-
+ #TESTED
def versionCheckNodeHello(self, nodeHelloMessage):
"""Performa a version check of the client against the specified NodeHello message
@return: (bool) True if version is ok, False otherwise
@@ -588,13 +595,14 @@
## runtime related methods
##
#########################################################
+ #TESTED
def handleMessage(self, msg):
"""Handles a message from the freenet node
@param msg: (Message) to handle
@return: True if the message was handled, False otherwise
"""
- CancelPersistentRequests = 0 # for testing... if True, cancels all PersistentRequests
+ CancelPersistentRequests = 1 # for testing... if True, cancels all PersistentRequests
# check if we have an initial request corrosponding to msg
requestIdentifier = msg.get('Identifier', None)
@@ -865,6 +873,15 @@
# unknown request... try to restore it
if initialRequest is None:
+ if CancelPersistentRequests:
+ self.sendMessage(
+ message.RemovePersistentRequest(
+ Identifier=msg['Identifier'],
+ Global=msg['Global'],
+ )
+ )
+ return True
+
#NOTE: there is no distinction between ClientPutDiskDir and ClientPutComplexDir
# so a bit of additional work here
requestType = msg['RequestType']
@@ -1095,7 +1112,7 @@
# default
return False
-
+ #TESTED
def next(self, dispatch=True):
"""Pumps the next message waiting
@param dispatch: if True the message is dispatched to L{handleMessage}
@@ -1104,22 +1121,22 @@
"""
try:
msg = self.ioHandler.readMessage()
- except iohandler.IOTimeout, details:
+ except self.ioHandler.IOTimeout, details:
msg = message.ClientSocketTimeout()
if dispatch:
self.events.Idle(msg)
- except iohandler.IOBroken, details:
+ except self.ioHandler.IOBroken, details:
msg = message.ClientDisconnected(
DisconnectReason=consts.DisconnectReason.ConnectionDied,
)
self._close(msg)
- raise iohandler.IOBroken(details)
+ raise self.ioHandler.IOBroken(details)
else:
if dispatch:
self.handleMessage(msg)
return msg
-
+ #TESTED
def run(self):
"""Runs the client unconditionally untill all requests have completed
@note: a KeyboardInterrupt will stop the client
@@ -1162,7 +1179,7 @@
if msg == message.ClientSocketDied:
break
-
+ #TESTED
def sendMessage(self, msg):
"""Sends a message to freenet
@param msg: (L{message.Message}) message to send
@@ -1178,19 +1195,20 @@
# if socket dies on sendall ther is no way to determine if and how much data was send
# ...so assume data was send, cos there is no way to proove it was not send
try:
- self.ioHandler.sendMessageEx(msg)
- except iohandler.IOBroken, details:
+ self.ioHandler.sendMessage(msg)
+ except self.ioHandler.IOBroken, details:
errorMsg = message.ClientDisconnected(
DisconnectReason=consts.DisconnectReason.ConnectionDied,
)
self._close(errorMsg)
- raise iohandler.IOBroken(details)
+ raise self.ioHandler.IOBroken(details)
#########################################################
##
## config related methods
##
#########################################################
+ #TESTED
def getConfig(self,
withCurrent=True,
withDefaults=True,
@@ -1218,6 +1236,7 @@
)
+ #TESTED
def modifyConfig(self, params):
"""Modifies node configuration values
@param params: (dict) containing parameters to modify
@@ -1225,8 +1244,7 @@
msg = message.ModifyConfig()
msg.params = params
self.sendMessage(msg)
-
-
+
########################################################
##
## ClientGet related methods
@@ -1573,7 +1591,6 @@
data = ''
for n, item in enumerate(items):
- n += 10
requestType = item.get('RequestType', None)
if requestType is None:
raise ValueError('No request type specified for item: %s' % n)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-10 13:03:49
|
Revision: 356
http://fclient.svn.sourceforge.net/fclient/?rev=356&view=rev
Author: jUrner
Date: 2008-03-10 06:03:53 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
io was broken. fixed now
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/dummy_io.py
Modified: trunk/sandbox/fcp2/test_fcp/dummy_io.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-10 13:03:44 UTC (rev 355)
+++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-10 13:03:53 UTC (rev 356)
@@ -22,7 +22,7 @@
#********************************************************************
class DummyIO(iohandler.IOObjectBase):
- def __init__(self, **kwargs):
+ def __init__(self):
self.readBuffer = '' # buffer client reads from
self.writeBuffer = '' # buffer client writes to
@@ -60,7 +60,9 @@
self.writeBuffer += bytes
def close(self):
- self.reset()
+ self._isBroken = False
+ self._allowConnect = True
+ self._reverseDirection = False
if self.isOpen():
self._isOpen = False
self.readBuffer = ''
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-10 13:03:41
|
Revision: 355
http://fclient.svn.sourceforge.net/fclient/?rev=355&view=rev
Author: jUrner
Date: 2008-03-10 06:03:44 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
some fixes for mesages
Modified Paths:
--------------
trunk/sandbox/fcp2/client.py
Modified: trunk/sandbox/fcp2/client.py
===================================================================
--- trunk/sandbox/fcp2/client.py 2008-03-10 13:03:35 UTC (rev 354)
+++ trunk/sandbox/fcp2/client.py 2008-03-10 13:03:44 UTC (rev 355)
@@ -379,7 +379,7 @@
@return: (str) identifer of therequest
@note: the identifier returned is unique to the client but may not be unique to the node
"""
- identifier = self.newUuid(uuids=self._requests) if identifier is None else identifier
+ identifier = self._newUuid(uuids=self._requests) if identifier is None else identifier
# equip requests with some additional params
@@ -865,27 +865,19 @@
# unknown request... try to restore it
if initialRequest is None:
- #FIXME: PutComplexDir???
- if msg == message.PersistentGet:
+ #NOTE: there is no distinction between ClientPutDiskDir and ClientPutComplexDir
+ # so a bit of additional work here
+ requestType = msg['RequestType']
+ if requestType & consts.RequestType.MaskGet:
initialRequest = message.ClientGet()
- elif msg == message.PersistentPut:
+ elif requestType == consts.RequestType.PutMultiple:
+ initialRequest = message.ClientPutComplexDir()
+ elif requestType == consts.RequestType.PutDir:
+ initialRequest = message.ClientPutdiskDir()
+ else:
initialRequest = message.ClientPut()
- elif msg == message.PersistentPutDir:
- initialRequest = message.ClientPutDiskDir()
-
- initialRequest.params.update(msg.params)
- result = initialRequest.restorePersistentParams()
- if not result or CancelPersistentRequests:
- if not result:
- self._loggers['Runtime'].critical(consts.LogMessages.InvalidPersistentParams)
- self.sendMessage(
- message.RemovePersistentRequest(
- Identifier=requestIdentifier,
- Global=msg['Global'],
- )
- )
- return True
+ initialRequest.params.update(msg.params)
self._requests[initialRequest['Identifier']] = initialRequest
#FIX: remove Started param from PersistentGet / Put
@@ -1581,6 +1573,7 @@
data = ''
for n, item in enumerate(items):
+ n += 10
requestType = item.get('RequestType', None)
if requestType is None:
raise ValueError('No request type specified for item: %s' % n)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-10 13:03:35
|
Revision: 354
http://fclient.svn.sourceforge.net/fclient/?rev=354&view=rev
Author: jUrner
Date: 2008-03-10 06:03:35 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
some fixes for mesages
Modified Paths:
--------------
trunk/sandbox/fcp2/iohandler.py
Modified: trunk/sandbox/fcp2/iohandler.py
===================================================================
--- trunk/sandbox/fcp2/iohandler.py 2008-03-10 13:03:23 UTC (rev 353)
+++ trunk/sandbox/fcp2/iohandler.py 2008-03-10 13:03:35 UTC (rev 354)
@@ -60,13 +60,13 @@
BufferSize = 4096
def __init__(self, **kwargs):
+ """
"""
- @param kwargs: any additional keyword arguments passed to L{IOHandler.connect}
- """
def connect(self, **kwargs):
"""Should connect to the io device
+ @param kwargs: any additional keyword arguments passed to L{IOHandler.connect}
@return: always None
@raise L{IOConnectFailed}: in case something goes wrong
"""
@@ -223,7 +223,7 @@
self.close()
self._log.info(consts.LogMessages.Connecting + ' %r' % kwargs)
- self.io = self._ioPrototype(**kwargs)
+ self.io = self._ioPrototype()
yield False # have to yield at least once to make unittests work (io has to be created!!)
try:
self.io.connect(**kwargs)
@@ -283,9 +283,8 @@
self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.traceback.format_exc())
self.close()
raise Exception(details)
+
-
-
def readMessage(self):
"""Reads the next message from io device
@return: (Message) next message from the socket
@@ -299,7 +298,7 @@
# node end with "Data" if data is passed. Alternative would be to check for both
# and rely on the 'DataLength' member to indicate if data is included. This
# should work for all messages except 'DataFound'
- hasData = False
+ mayHaveData = False
eof = -1
while eof < 0:
eof = self._receiveBuffer.find(self.TerminatorEndMessage)
@@ -309,7 +308,7 @@
eof = self._receiveBuffer.find(self.TerminatorData)
if eof > -1:
eof += len(self.TerminatorData)
- hasData = True
+ mayHaveData = True
if eof < 0:
self.readBytes(self.io.BufferSize)
@@ -318,52 +317,25 @@
p = [i for i in chunk.split('\n') if i] # Fcp ignores empty lines, so do we
p.pop()
if not p:
- raise MessageParseError('Missing message name')
+ raise MessageParseError('No message name present')
msgName = p.pop(0)
msgClass = message.MessagesAll.get(msgName, None)
- # TODO: log?
if msgClass is None:
self._log.debug(consts.LogMessages.CreatingNewMessageType + ' "%s"' % msgClassname)
msgClass = message.newMessageType(msgName)
msg = msgClass()
# process param --> value fields
- #
- #NOTE:usually if data is passed DataLength determines how much have to handle
- # special case ClientPutComplexDir where it is passed in Files.(N).DataLength.
- # Additionally Files.(N).DataLength is converted to int here.
- clientPutComplexDirDataLength = 0
- isClientPutComplexDir = msgName == consts.Message.ClientPutComplexDir
- for line in p:
- paramName, sep, paramValue = line.partition('=')
-
- # covert fcp to python value if necessary
- paramType = msg._param_types_.get(paramName, None)
- if paramType is not None:
- paramValue = paramType.fcpToPython(paramValue)
- msg[paramName] = paramValue
-
- #TODO: move to message.ClientPutComplexDir
-
- # handle special case PutComplexDir
- if isClientPutComplexDir:
- tmp_paramName = paramName.split('.')
- if len(tmp_paramName) == 3:
- if tmp_paramName[-1] == 'DataLength':
- n = types.FcpTypeInt.fcpToPython(paramValue)
- clientPutComplexDirDataLength += n
- msg[paramName] = n
-
+ params = dict([line.split('=', 1) for line in p])
+ if not msg._restoreParams(params):
+ raise MessageParseError('Invalid message parameters')
+
# get associated data if necessary
- if hasData:
- if isClientPutComplexDir:
- n = clientPutComplexDirDataLength
- else:
- # make shure DataLength is int, otherwise we might loop here forever
- try:
- n = int(msg['DataLength'])
- except ValueError:
- raise MessageParseError('DataLength param must be type(int)')
+ if mayHaveData:
+ n = msg._getDataLength()
+ if not isinstance(n, (int, long)):
+ raise ValueError('DataLength must be type(int)')
+
if n > 0:
while self._receiveBuffer:
if len(self._receiveBuffer) >= n:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-10 13:03:22
|
Revision: 353
http://fclient.svn.sourceforge.net/fclient/?rev=353&view=rev
Author: jUrner
Date: 2008-03-10 06:03:23 -0700 (Mon, 10 Mar 2008)
Log Message:
-----------
some fixes for mesages
++ getting tired working around the messed up protocol
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-09 12:56:43 UTC (rev 352)
+++ trunk/sandbox/fcp2/message.py 2008-03-10 13:03:23 UTC (rev 353)
@@ -150,7 +150,7 @@
# 2. log errors
#
#
- def setPersistentParams(self, persistentData):
+ def _setPersistentParams(self, persistentData):
params = persistentData.split(PersistentParamsSep)
if len(params) > len(self._persistent_params_):
raise ValueError('Too many parameters in data')
@@ -160,7 +160,7 @@
setter(self, params[n])
- def getPersistentParams(self):
+ def _getPersistentParams(self):
out = []
for n, (getter, setter) in enumerate(self._persistent_params_):
#TODO: check if PersistentParamsSep is in data returned
@@ -168,6 +168,19 @@
return PersistentParamsSep.join(out)
+ def _restoreParams(self, params):
+ for paramName, paramValue in params.items():
+ paramType = self._param_types_.get(paramName, None)
+ if paramType is not None:
+ paramValue = paramType.fcpToPython(paramValue)
+ self[paramName] = paramValue
+ return True
+
+
+ def _getDataLength(self):
+ return 0
+
+
#***************************************************************************************
#
# param types for config message
@@ -617,16 +630,17 @@
'Verbosity': types.FcpTypeInt,
}
- def restorePersistentParams(self):
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
try:
- MessageBase.setPersistentParams(self, self['ClientToken'])
+ MessageBase._setPersistentParams(self, self['ClientToken'])
except Exception, d:
#print Exception, d
return False
return True
def updatePersistentParams(self):
- self['ClientToken'] = MessageBase.getPersistentParams(self)
+ self['ClientToken'] = MessageBase._getPersistentParams(self)
class ClientHello(MessageBase):
@@ -652,13 +666,18 @@
'Verbosity': types.FcpTypeInt,
}
- def restorePersistentParams(self):
+ def _getDataLength(self):
+ return self['DataLength']
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
try:
- MessageBase.setPersistentParams(self, self['ClientToken'])
+ MessageBase._setPersistentParams(self, self['ClientToken'])
except Exception, d:
+ #print Exception, d
return False
return True
-
+
def updatePersistentParams(self):
self['ClientToken'] = MessageBase.getPersistentParams(self)
@@ -666,6 +685,29 @@
class ClientPutComplexDir(ClientPut):
name = consts.Message.ClientPutComplexDir
+
+ def __init__(self, *args, **kwargs):
+ ClientPut.__init__(self, *args, **kwargs)
+ self._dataLength = 0
+
+
+ def _restoreParams(self, params):
+ result = ClientPut._restoreParams(self, params)
+
+ for paramName, paramValue in self.params.items():
+ tmp_paramName = paramName.split('.')
+ if len(tmp_paramName) == 3:
+ if tmp_paramName[-1] == 'DataLength':
+ n = types.FcpTypeInt.fcpToPython(paramValue)
+ self._dataLength += n
+ self[paramName] = n
+ return result
+
+
+ def _getDataLength(self):
+ return self._dataLength
+
+
class ClientPutDiskDir(ClientPut):
name = consts.Message.ClientPutDiskDir
@@ -1022,26 +1064,64 @@
class PersistentGet(MessageBase):
name = consts.Message.PersistentGet
_additional_params_ = {}
- _param_types_ = {
- }
+ _persistent_params_ = PersistentParamsGet
+ _param_types_ = ClientGet._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
-
#######################################
#######################################
class PersistentPut(MessageBase):
name = consts.Message.PersistentPut
- _additional_params_ = {}
- _param_types_ = {
- }
+ _additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
+ _param_types_ = ClientPut._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
class PersistentPutDir(MessageBase):
name = consts.Message.PersistentPutDir
- _additional_params_ = {}
- _param_types_ = {
- }
+ _additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
+ _param_types_ = ClientPutDiskDir._param_types_.copy()
+ _param_types_['Started'] = types.FcpTypeBool
+
+
+ def _restoreParams(self, params):
+ MessageBase._restoreParams(self, params)
+ for paramName, paramValue in self.params.items():
+ tmp_paramName = paramName.split('.')
+ if len(tmp_paramName) == 3:
+ if tmp_paramName[-1] == 'DataLength':
+ n = types.FcpTypeInt.fcpToPython(paramValue)
+ self[paramName] = n
+ try:
+ MessageBase._setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
+
class PersistentRequestModified(MessageBase):
name = consts.Message.PersistentRequestModified
_additional_params_ = {}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:56:42
|
Revision: 352
http://fclient.svn.sourceforge.net/fclient/?rev=352&view=rev
Author: jUrner
Date: 2008-03-09 05:56:43 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
rewrite in progress
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-09 12:56:27 UTC (rev 351)
+++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-09 12:56:43 UTC (rev 352)
@@ -47,9 +47,8 @@
)
fcpClient.ioHandler.setIOPrototype(DummyIO)
- #fcpClient.connect()
+
-
def __init__(self, *args, **kwargs):
unittest.TestCase.__init__(self, *args, **kwargs)
@@ -58,53 +57,54 @@
def _captureEventsFromClient(self, event, msg):
+ """Captures events the client send"""
# have to copy message here, to get exact state
msg = copy.deepcopy(msg)
self.events.append( (event, msg) )
-
- def clearClient(self):
- """Clears all messages send, requests registered and events triggered so far"""
- # clean up the mess we eventaully left behinf
- self.events = []
- if self.ioOpen():
- self.fcpClient.ioHandler.io.readBuffer = ''
- self.fcpClient.ioHandler.io.writeBuffer = ''
- self.fcpClient._requests = {}
-
-
def connectClient(self):
"""Connects to the client"""
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)):
- if n == 1:
- self.assertHasNextMessage(
- consts.Message.ClientHello
- )
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ msg = self.getNextMessage()
+ if msg is not None:
+ self.failUnless(msg.name == '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
+ 'NodeHello',
+ FCPVersion='2.0',
+ Build='9999999999',
+
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='999999999999',
+ ExRevision='9999999999',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+
+ callNext=False,
+ )
+
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
- consts.Message.NodeHello,
- )
-
+ self.fcpClient.events.ClientConnected,
+ consts.Message.NodeHello,
+ )
self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
+
+ def closeClient(self):
+ """Closes the client"""
+ self.fcpClient.close()
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.Close),
+ )
+
+
def assertHasNextEvent(self,
expectedEvent=None,
messageName=None,
@@ -256,7 +256,7 @@
return msg
def sendResponseMessage(self, messageName, data=None, callNext=True, **params):
- """Posts a message to the client"""
+ """Sends a message to the client"""
if messageName in message.MessagesAll:
msgClass = message.MessagesAll[messageName]
else:
@@ -267,7 +267,15 @@
self.fcpClient.next()
+ #NOTE: iohandler is buffered
+ # ..so be careful not to get messages you send
+ #
+ # 1. sendResponseMessage('blah')
+ # 2. getNextMessage()
+ # 3. >>> 'blah'
def getNextMessage(self):
+ """Returns the next message the client send"""
+
# cheat a bit to get iohandler to read a message from writeBuffer
if self.ioOpen():
self.fcpClient.ioHandler.io.setReverseDirection(True)
@@ -281,10 +289,12 @@
def ioOpen(self):
+ """Checks if the clients io is open"""
return self.fcpClient.ioHandler.isOpen()
def getIO(self):
+ """Returns the clients io"""
return self.fcpClient.ioHandler.io
@@ -300,7 +310,9 @@
event -= self._captureEventsFromClient
# clean up tmpfiles
for fpath in self.tmpfiles: os.remove(fpath)
- self.clearClient()
+ if self.fcpClient.isOpen():
+ self.fcpClient.close()
+
#***********************************************************************************
#
@@ -310,72 +322,221 @@
#***********************************************************************************
#
#***********************************************************************************
-class TestConnect(BaseTestClient):
+class Test_close(BaseTestClient):
+ def test_close(self):
+ self.fcpClient.close()
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.Close),
+ )
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_isOpen(BaseTestClient):
- def XXXtestClose(self):
- self.failIf(self.socket.closed)
+ def test_isOpen(self):
+ self.failIf(self.fcpClient.isOpen())
self.connectClient()
+ self.failUnless(self.fcpClient.isOpen())
+ self.closeClient()
+ self.failIf(self.fcpClient.isOpen())
+
+#***********************************************************************************
+#TODO: not idea how to test this
+#***********************************************************************************
+class Test_connect(BaseTestClient):
+ pass
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_iterConnect(BaseTestClient):
+
+ def test_iterConnect_success(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ msg = self.getNextMessage()
+ if msg is not None:
+ self.failUnless(msg.name == '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,
+ )
+
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientConnected,
+ consts.Message.NodeHello,
+ )
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failUnless(self.ioOpen())
self.fcpClient.close()
- self.failUnless(self.socket.closed)
- def XXXtestConnect(self):
- nodeHello = self.fcpClient.connect(duration=10, timeout=0.1)
+ def test_iterConnect_ioRefusesConnection(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.getIO().setAllowConnect(False)
+
self.failUnless(nodeHello is None)
- #return
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.IOConnectFailed),
+ )
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
- 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',
+
+ def test_iterConnect_nodeHelloNeverArrives(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ pass
+
+ self.failUnless(nodeHello is None)
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.NoNodeHello),
)
- nodeHello = self.fcpClient.connect(duration=10, timeout=0.1)
- print nodeHello
- #self.failIf(nodeHello is None)
-
-
- def test_0_IterIterConnect_RFailure(self):
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)):
- if n == 1:
- self.assertHasNextMessage(
- consts.Message.ClientHello
+
+ def test_iterConnect_socketDies(self):
+ enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
+ errorRaised = False
+ while True:
+ try:
+ enum.next()
+ except StopIteration:
+ break
+ except iohandler.IOBroken, d:
+ errorRaised = True
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.ConnectionDied),
+ #('Param', None),
)
+ break
+ self.getIO().setBroken(True)
+
+ self.failUnless(errorRaised)
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
- # check events the client triggered
+
+ def test_iterIterConnect_unknownNodehello(self):
+
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.sendResponseMessage(
+ 'i-am-invalid',
+ callNext=False,
+ )
+
+ self.failUnless(nodeHello is None)
self.assertHasNextEvent(
self.fcpClient.events.ClientDisconnected,
consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.ConnectingFailed),
+ ('DisconnectReason', consts.DisconnectReason.UnknownNodeHello),
)
-
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
self.failIf(self.ioOpen())
+
+ def test_iterIterConnect_connect(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.sendResponseMessage(
+ 'NodeHello',
+ FCPVersion='2.0',
+ Build='9999999999',
+
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='999999999999',
+ ExRevision='9999999999',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+
+ callNext=False,
+ )
- def test_1_IterConnect_Success(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)):
- if n == 1:
- self.assertHasNextMessage(
- consts.Message.ClientHello
- )
- self.sendResponseMessage(
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientConnected,
+ consts.Message.NodeHello,
+ )
+ self.assertHasNextEvent(None)
+ #self.assertHasNextMessage(None) # due to our message hacking, NodeHello is still in io
+ self.failUnless(self.ioOpen())
+ self.closeClient()
+
+
+ def test_iterIterConnect_reconnect(self):
+ self.connectClient()
+
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.sendResponseMessage(
'NodeHello',
FCPVersion='2.0',
+ Build='9999999999',
+
Node='Fred',
Version=str(self.fcpClient.ExpectedFcpVersion),
Revision='999999999999',
+ ExRevision='9999999999',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+
+ callNext=False,
+ )
+
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.Reconnect)
+ )
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientConnected,
+ consts.Message.NodeHello,
+ )
+ self.assertHasNextEvent(None)
+ #self.assertHasNextMessage(None) # due to our message hacking, NodeHello is still in io
+ self.failUnless(self.ioOpen())
+ self.closeClient()
+
+
+ def test_iterIterConnect_VersionMissmatch_FCPVersion(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.sendResponseMessage(
+ 'NodeHello',
+ FCPVersion='0.0',
Build='9999999999',
+
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='999999999999',
ExRevision='9999999999',
Testnet='false',
CompressionCodecs='1',
@@ -384,16 +545,99 @@
callNext=False,
)
+
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
+ )
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
+ self.closeClient()
+
+
+ def test_iterIterConnect_VersionMissmatch_Build(self):
+ for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=0.2, timeout=0.1)):
+ self.sendResponseMessage(
+ 'NodeHello',
+ FCPVersion='2.0',
+ Build='0',
+
+ Node='Fred',
+ Version=str(self.fcpClient.ExpectedFcpVersion),
+ Revision='999999999999',
+ ExRevision='9999999999',
+ Testnet='false',
+ CompressionCodecs='1',
+ ConnectionIdentifier='any',
+ NodeLanguage='en',
+
+ callNext=False,
+ )
+
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
+ )
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
+ self.closeClient()
+
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_CloseConnectionDuplicateClientName(BaseTestClient):
+
+ def test_CloseConnectionDuplicateClientName(self):
+ self.connectClient()
+ self.sendResponseMessage(
+ 'CloseConnectionDuplicateClientName',
+ )
- # check events the client triggered
self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
- consts.Message.NodeHello,
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.DuplicateClientName)
+ )
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(self.ioOpen())
+ self.closeClient()
+
+#***********************************************************************************
+#
+#***********************************************************************************
+class Test_closeNode(BaseTestClient):
+
+ def test_closeNode(self):
+ self.connectClient()
+ self.fcpClient.closeNode()
+ self.assertHasNextMessage('Shutdown')
+ self.sendResponseMessage(
+ 'ProtocolError',
+ Code='18'
)
+ self.assertHasNextEvent(
+ self.fcpClient.events.ClientDisconnected,
+ consts.Message.ClientDisconnected,
+ ('DisconnectReason', consts.DisconnectReason.NodeClosing)
+ )
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
-
+ self.failIf(self.ioOpen())
+ self.closeClient()
+
+
+###################################################
+###################################################
+###################################################
+
+
#***********************************************************************************
#
#***********************************************************************************
@@ -1624,14 +1868,15 @@
#TODO: testRestoreClientPut and friends
class TestRestoreRequests(BaseTestClient):
- def test_4000_RestorePersistentGet_InvalidIdentifier(self):
+ def test_4000_RestorePersistentGet_InvalidClientToken(self):
# throw an invalid PersistentRequest at the client
- myIdentifier = 'true-invalid-request-identifier'
+ myIdentifier = '123456789'
self.sendResponseMessage(
'PersistentGet',
Identifier=myIdentifier,
Global='false',
+ ClientToken='i-am-invalid',
ReturnType='disk',
Verbosity='1',
PersistenceType='forever',
@@ -2357,18 +2602,23 @@
def suite():
testCases = (
- TestConnect,
- TestDisconnectReason,
- TestClientGet,
- TestClientPut,
- TestRequests,
- TestRestoreRequests,
- TestResendRequests,
- TestDDA,
- TestCollisions,
- TestPlugins,
- TestGenerateKeypair,
- TestSubscribeUSK,
+ Test_close,
+ Test_isOpen,
+ Test_connect,
+ Test_iterConnect,
+ Test_CloseConnectionDuplicateClientName,
+ Test_closeNode,
+ #TestDisconnectReason,
+ #TestClientGet,
+ #TestClientPut,
+ #TestRequests,
+ #TestRestoreRequests,
+ #TestResendRequests,
+ #TestDDA,
+ #TestCollisions,
+ #TestPlugins,
+ #TestGenerateKeypair,
+ #TestSubscribeUSK,
)
suite = unittest.TestSuite()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:56:26
|
Revision: 351
http://fclient.svn.sourceforge.net/fclient/?rev=351&view=rev
Author: jUrner
Date: 2008-03-09 05:56:27 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
fixes and beautification
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/dummy_io.py
Modified: trunk/sandbox/fcp2/test_fcp/dummy_io.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-09 12:55:05 UTC (rev 350)
+++ trunk/sandbox/fcp2/test_fcp/dummy_io.py 2008-03-09 12:56:27 UTC (rev 351)
@@ -22,16 +22,18 @@
#********************************************************************
class DummyIO(iohandler.IOObjectBase):
- def __init__(self, ):
+ def __init__(self, **kwargs):
self.readBuffer = '' # buffer client reads from
self.writeBuffer = '' # buffer client writes to
self._isOpen = False
self._isBroken = False
- self._disallowConnect = False
+ self._allowConnect = True
self._reverseDirection = False
def connect(self, **kwargs):
+ if not self._allowConnect:
+ raise iohandler.IOConnectFailed('Refused')
self._isOpen = True
def read(self, n):
@@ -58,9 +60,7 @@
self.writeBuffer += bytes
def close(self):
- self._isBroken = False
- self._disallowConnect = False
- self._reverseDirection = False
+ self.reset()
if self.isOpen():
self._isOpen = False
self.readBuffer = ''
@@ -84,13 +84,12 @@
def setBroken(self, flag):
self._isBroken = flag
- def setDissallowConnect(self, flag):
- self.disallowConnect = flag
+ def setAllowConnect(self, flag):
+ self._allowConnect = flag
def setReverseDirection(self, flag):
self._reverseDirection = flag
-
def sendResponseMessage(self, name, data=None, **params):
buf = [name, ]
for name, value in params.items():
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:55:12
|
Revision: 350
http://fclient.svn.sourceforge.net/fclient/?rev=350&view=rev
Author: jUrner
Date: 2008-03-09 05:55:05 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
many comb overs
Modified Paths:
--------------
trunk/sandbox/fcp2/consts.py
Modified: trunk/sandbox/fcp2/consts.py
===================================================================
--- trunk/sandbox/fcp2/consts.py 2008-03-09 12:54:35 UTC (rev 349)
+++ trunk/sandbox/fcp2/consts.py 2008-03-09 12:55:05 UTC (rev 350)
@@ -192,24 +192,27 @@
class DisconnectReason(BaseBitFlags):
"""Reasons for client disconnect
- @cvar Close: the clent has been closed
- @cvar ConnectingFailed: connection could not be established
+ @cvar Close: the clent is about to close down
+ @cvar ConnectionDied: the connection died unexpectedly
@cvar DuplicateClientName: another client opend a connection with the same connection name
- @cvar Shutdown: regular shutdown of the connection
- @cvar SocketDied: connection to the node died unexpectingly
- @cvar SocketShutdown: the node shut down the connection unexpectingly
- @cvar VersionMissmatch: node or Fcp version did not match
+ @cvar IOConnectFailed: io connection could not be established
+ @cvar NodeClosing: freenet node is closing down
+ @cvar NoNodeHello: NodeHello message did not arrive in time
+ @cvar Reconnect: the clent is about to be reconnected
+ @cvar UnknonNodeHello: some unknow message insteadof NodeHello was encountered durin g connect
+ @cvar VersionMissmatch: nodebuild or Fcp version did not match
"""
- Close = 0x0
- ConnectingFailed = 0x1
- DuplicateClientName = 0x2
- Shutdown = 0x4
- SocketDied = 0x8
- SocketShutdown = 0x10
- VersionMissmatch = 0x20
- UnknownNodeHello = 0x40
+ Close = 0
+ ConnectionDied = 1
+ DuplicateClientName = 2
+ IOConnectFailed = 3
+ NodeClosing = 4
+ NoNodeHello = 5
+ Reconnect = 6
+ UnknownNodeHello = 7
+ VersionMissmatch = 8
+
-
class FilenameCollision(BaseBitFlags):
"""Filename collision flags
@cvar HandleNever: don't handle filename collisions
@@ -272,6 +275,7 @@
SocketDied = 'Socket died'
SocketShutdown = 'Socket shutdown by node'
+ CaughtException = 'Caught exception'
KeyboardInterrupt = 'keyboard interrupt' # kick out
SocketDied = 'socket died'
@@ -279,7 +283,7 @@
EventTriggered = 'triggered: '
- RequestInvalidClientToken = 'Request invalid client token'
+ InvalidPersistentParams = 'Invalid peristent params'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:54:37
|
Revision: 349
http://fclient.svn.sourceforge.net/fclient/?rev=349&view=rev
Author: jUrner
Date: 2008-03-09 05:54:35 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
many comb overs
Modified Paths:
--------------
trunk/sandbox/fcp2/client.py
Modified: trunk/sandbox/fcp2/client.py
===================================================================
--- trunk/sandbox/fcp2/client.py 2008-03-09 12:53:45 UTC (rev 348)
+++ trunk/sandbox/fcp2/client.py 2008-03-09 12:54:35 UTC (rev 349)
@@ -177,6 +177,14 @@
# TODO: check if this is a bug in Fcp
# NOTE: seems to be fixed in [build 1112], fixes removed
#-------------------------------------------------------------------------------------------------------------------------------------------------
+# PutComplexDir
+#
+# x. currently not handled on PersistentPut. have to test this
+#
+#
+#------------------------------------------------------------------------------------------------------------------------------------------------
+
+
import os, sys
import atexit
@@ -205,7 +213,8 @@
from fcp2 import key
from fcp2.fcp_lib import namespace
-from fcp2.fcp_lib import tools
+from fcp2.fcp_lib import tools
+from fcp2.fcp_lib import uuid
del hack
@@ -301,7 +310,8 @@
self._ddaTests = []
self._requests = {}
- self.ioHandler.close()
+ if self.ioHandler.isOpen():
+ self.ioHandler.close()
if msg is not None:
self.events.ClientDisconnected(msg)
@@ -334,6 +344,19 @@
del self._requests[request['Identifier']]
+
+ def _newUuid(self, uuids=None):
+ """Creates a new unique identifier
+ @param uuids: if desired any iterable containing uuids to enshure the identifier is unique in the iterable
+ @return: (str) uuid
+
+ """
+ uuid_ = uuid.uuid_time()
+ if uuids is not None:
+ while uuid_ in uuids:
+ uuid_ = uuid_time()
+ return uuid_
+
def _registerRequest(self,
msg,
requestType,
@@ -356,7 +379,7 @@
@return: (str) identifer of therequest
@note: the identifier returned is unique to the client but may not be unique to the node
"""
- identifier = fcparams.newUuid(uuids=self._requests) if identifier is None else identifier
+ identifier = self.newUuid(uuids=self._requests) if identifier is None else identifier
# equip requests with some additional params
@@ -373,18 +396,22 @@
@requestparam: B{RequestType:} one or more of the L{consts.RequestType} flags
@requestparam: B{Identifier:} identifier of the request
"""
- msg['Identifier'] = fcparams.newUuid(uuids=self._requests) if identifier is None else identifier
+ msg['Identifier'] = self._newUuid(uuids=self._requests) if identifier is None else identifier
msg['RequestType'] = requestType
msg['InitTime'] = time.time() if initTime is None else initTime
if requestType & consts.RequestType.MaskGet:
msg['FilenameCollision'] = filenameCollision
msg['UserData'] = userData
msg['PersistentUserData'] = persistentUserData
- msg['ClientToken'] = fcparams.messageToParams(msg)
+ msg['ClientToken'] = ''
+ msg.updatePersistentParams()
+
elif requestType & consts.RequestType.MaskPut:
msg['UserData'] = userData
msg['PersistentUserData'] = persistentUserData
- msg['ClientToken'] = fcparams.messageToParams(msg)
+ msg['ClientToken'] = ''
+ msg.updatePersistentParams()
+
elif requestType & consts.RequestType.MaskGenerateKeypair:
pass
elif requestType & consts.RequestType.SubscribeUSK:
@@ -401,18 +428,18 @@
## connection related methods
##
###############################################################
+ #TESTED
def close(self):
"""Closes the client
@note: make shure to call close() when done with the client
"""
msg = message.ClientDisconnected(
DisconnectReason=consts.DisconnectReason.Close,
- Param=None,
)
self._close(msg)
-
-
- def closeFreenet(self):
+
+ #TESTED
+ def closeNode(self):
"""Shuts down the freenet node"""
self.sendMessage(message.Shutdown())
@@ -431,7 +458,15 @@
pass
return nodeHello
+ #TESTED
+ def isOpen(self):
+ """Checks if the clients connection is open
+ @return: (bool) True if so, False otherwise
+ """
+ return self.ioHandler.isOpen()
+
+ #TESTED
def iterConnect(self, host=DefaultFcpHost, port=DefaultFcpPort, duration=20, timeout=0.5):
"""Iterator to stablish a connection to a freenet node
@param host: (str) host of th node
@@ -446,53 +481,50 @@
#TODO: we have to yield a few round here to make NodeHello injection work in unittests
# no idea exactly how many...
- disconnectReason = None
- disconnectParam = None
+ if self.ioHandler.isOpen():
+ disconnectMsg = message.ClientDisconnected(
+ DisconnectReason=consts.DisconnectReason.Reconnect,
+ )
+ self._close(disconnectMsg)
+
+ disconnectReason = consts.DisconnectReason.IOConnectFailed
t0 = time.time()
for result in self.ioHandler.iterConnect(duration=duration, timeout=timeout, host=host, port=port):
yield None
- timeElapsed = time.time() - t0
-
+
# try to get handshake
+ timeElapsed = time.time() - t0
if result:
- errorMsg = self.sendMessage(
+ self.sendMessage(
message.ClientHello(
Name=self._connectionName,
ExpectedVersion=self.ExpectedFcpVersion,
)
)
- yield None
- if errorMsg is None:
- timeElapsed = 0
- while timeElapsed <= duration:
+
+ while timeElapsed <= duration:
+ yield None
+ msg = self.next(dispatch=False)
+ if msg == message.ClientSocketTimeout:
+ disconnectReason = consts.DisconnectReason.NoNodeHello
+ timeElapsed += max(self.ioHandler.io.Timeout, 0.1)
yield None
- msg = self.next(dispatch=False)
- if msg == message.ClientSocketTimeout:
- timeElapsed += max(self.ioHandler.io.Timeout, 0.1)
- yield None
-
- elif msg == message.NodeHello:
- self._nodeHelloMessage = msg
- # check if version is ok
- if self.versionCheckNodeHello(msg):
- self.events.ClientConnected(msg)
- yield self._nodeHelloMessage
- raise StopIteration
- else:
- disconnectReason = consts.DisconnectReason.VersionMissmatch
- disconnectParam = msg
- break
-
+ elif msg == message.NodeHello:
+ self._nodeHelloMessage = msg
+ # check if version is ok
+ if self.versionCheckNodeHello(msg):
+ self.events.ClientConnected(msg)
+ yield self._nodeHelloMessage
+ raise StopIteration
else:
- disconnectReason = consts.DisconnectReason.UnknownNodeHello
- disconnectParam = msg
- break
+ disconnectReason = consts.DisconnectReason.VersionMissmatch
+ break
+ else:
+ disconnectReason = consts.DisconnectReason.UnknownNodeHello
+ break
- if disconnectReason is None:
- disconnectReason=consts.DisconnectReason.ConnectingFailed
disconnectMsg = message.ClientDisconnected(
DisconnectReason=disconnectReason,
- Param=disconnectParam,
)
self._close(disconnectMsg)
raise StopIteration
@@ -510,7 +542,7 @@
@param connectionName: (str) connection name or None to use an arbitrary connection name
@return: (str) connection name
"""
- self._connectionName = fcparams.newUuid() if connectionName is None else connectionName
+ self._connectionName = self._newUuid() if connectionName is None else connectionName
return self._connectionName
@@ -523,8 +555,8 @@
self.ioHandler.setDebugVerbosity(debugVerbosity)
- def startFreenet(self, cmdline):
- """Starts freenet
+ def startNode(self, cmdline):
+ """Starts the freenet node
@param cmdline: commandline to start freenet (like '/freenet/run.sh start' or 'c:\freenet\start.bat')
@return: (str) whatever freenet returns
@@ -543,10 +575,10 @@
def versionCheckNodeHello(self, nodeHelloMessage):
"""Performa a version check of the client against the specified NodeHello message
@return: (bool) True if version is ok, False otherwise
- @note: if this check returns False the client will emidiately disconnect in L{connect()}
- and triggers a ClientDisconnected event. Overwrite to adjust
+ @note: this implementation checks for FCPVersion == L{ExpectedFcpVersion}
+ and a Build >= L{ExpectedNodeBuild}
"""
- if nodeHelloMessage['FCPVersion'] >= self.ExpectedFcpVersion:
+ if nodeHelloMessage['FCPVersion'] == self.ExpectedFcpVersion:
if nodeHelloMessage['Build'] >= self.ExpectedNodeBuild:
return True
return False
@@ -578,7 +610,7 @@
return False
# resend request with new identifier
- newIdentifier = fcparams.newUuid(uuids=self._requests)
+ newIdentifier = self._newUuid(uuids=self._requests)
self._requests[newIdentifier] = initialRequest
del self._requests[requestIdentifier]
initialRequest['Identifier'] = newIdentifier
@@ -592,8 +624,7 @@
code = msg['Code']
if code == consts.ProtocolError.ShuttingDown:
disconnectMsg = message.ClientDisconnected(
- DisconnectReason=consts.DisconnectReason.Shutdown,
- Param=None,
+ DisconnectReason=consts.DisconnectReason.NodeClosing,
)
self._close(disconnectMsg)
return True
@@ -829,16 +860,24 @@
return True
- elif msg == message.PersistentGet:
+ elif msg == message.PersistentGet or msg == message.PersistentPut or msg == message.PersistentPutDir:
# unknown request... try to restore it
if initialRequest is None:
- fcParams = fcparams.paramsFromRequest(msg)
-
- # not one of our requests... so cancel it
- if fcParams is None or CancelPersistentRequests:
- if fcParams is None:
- self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken)
+
+ #FIXME: PutComplexDir???
+ if msg == message.PersistentGet:
+ initialRequest = message.ClientGet()
+ elif msg == message.PersistentPut:
+ initialRequest = message.ClientPut()
+ elif msg == message.PersistentPutDir:
+ initialRequest = message.ClientPutDiskDir()
+
+ initialRequest.params.update(msg.params)
+ result = initialRequest.restorePersistentParams()
+ if not result or CancelPersistentRequests:
+ if not result:
+ self._loggers['Runtime'].critical(consts.LogMessages.InvalidPersistentParams)
self.sendMessage(
message.RemovePersistentRequest(
Identifier=requestIdentifier,
@@ -847,18 +886,8 @@
)
return True
- initialRequest = message.ClientGet()
- self._registerRequest(
- initialRequest,
- fcParams[fcparams.IRequestType],
- identifier=requestIdentifier,
- initTime=fcParams[fcparams.IInitTime],
- userData=None,
- persistentUserData=fcParams[fcparams.IPersistentUserData],
- filenameCollision=fcParams[fcparams.IFilenameCollision],
- )
-
- initialRequest.params.update(msg.params)
+ self._requests[initialRequest['Identifier']] = initialRequest
+
#FIX: remove Started param from PersistentGet / Put
del initialRequest.params['Started']
#FIX: [0001965: Persistence vs PersistenceType]
@@ -868,7 +897,7 @@
self.events.RequestRestored(initialRequest)
return True
- # known request ..we don't handle that
+ # known request ..don't handle it
return False
@@ -879,23 +908,22 @@
modified = {}
# check if PersistentUserData has changed
- params = fcparams.paramsFromRequest(initialRequest)
- if params is not None:
- clientToken = msg.get('ClientToken', None)
- if clientToken is not None:
+ clientToken = msg.get('ClientToken', None)
+ if clientToken is not None:
+ modified[consts.RequestModified.PersistentUserData] = None
+
+ #TODO: its more or less a guess that PersistentUserData has changed
+ # ...as long as no other param is changed at runtime we are ok
+ # otherwise we would have to set flags to indicate wich member
+ # of ClientToken changed. See --> modifyRequest()
+ #
+ # hmm ..thinking again, this would only work if we could make shure
+ # PersistentUserData can only be modified through modifyRequest().
+ # So no way.
+
+ #TODO: ??? try ...except
+ initialRequest.restorePersistentParams()
- #TODO: its more or less a guess that PersistentUserData has changed
- # ...as long as no other param is changed at runtime we are ok
- # otherwise we would have to set flags to indicate wich member
- # of ClientToken changed. See --> modifyRequest()
- #
- # hmm ..thinking again, this would only work if we could make shure
- # PersistentUserData can only be modified through modifyRequest().
- # So no way.
- modified[consts.RequestModified.PersistentUserData] = None
- for i, fcParam in enumerate(fcparams.FcParams):
- initialRequest[fcParam] = params[i]
-
# check if PriorityClass has changed
priorityClass = msg.get('PriorityClass', None)
if priorityClass is not None:
@@ -930,52 +958,6 @@
## put related
- elif msg == message.PersistentPut or msg == message.PersistentPutDir:
-
- # unknown request... try to restore it
- if initialRequest is None:
- fcParams = fcparams.paramsFromRequest(msg)
-
- # not one of our requests... so cancel it
- if fcParams is None or CancelPersistentRequests:
- if fcParams is None:
- self._loggers['Runtime'].critical(consts.LogMessages.RequestInvalidClientToken)
- self.sendMessage(
- message.RemovePersistentRequest(
- Identifier=requestIdentifier,
- Global=msg['Global'],
- )
- )
- return True
-
- requestType = fcParams[fcparams.IRequestType]
- if requestType in (consts.RequestType.PutData, consts.RequestType.PutFile):
- initialRequest = message.ClientPut()
- elif requestType == consts.RequestType.PutDir:
- initialRequest = message.ClientPutDiskDir()
- elif request == consts.RequestType.PutMultiple:
- initialRequest = message.ClientPutComplexDir()
-
- self._registerRequest(
- initialRequest,
- requestType,
- identifier=requestIdentifier,
- initTime=fcParams[fcparams.IInitTime],
- userData=None,
- persistentUserData=fcParams[fcparams.IPersistentUserData],
- filenameCollision=fcParams[fcparams.IFilenameCollision],
- )
-
- #FIX: remove Started param from PersistentGet / Put
- del initialRequest.params['Started']
- initialRequest['RequestStatus'] |= consts.RequestStatus.Restored
- self.events.RequestRestored(initialRequest)
- return True
-
- # known request ..we don't handle that
- return False
-
-
elif msg == message.PutFailed:
if initialRequest is None:
return False
@@ -1088,7 +1070,6 @@
elif msg == message.CloseConnectionDuplicateClientName:
disconnectMsg = message.ClientDisconnected(
DisconnectReason=consts.DisconnectReason.DuplicateClientName,
- Param=None,
)
self._close(disconnectMsg)
return True
@@ -1137,8 +1118,7 @@
self.events.Idle(msg)
except iohandler.IOBroken, details:
msg = message.ClientDisconnected(
- DisconnectReason=consts.DisconnectReason.SocketDied,
- Param=details,
+ DisconnectReason=consts.DisconnectReason.ConnectionDied,
)
self._close(msg)
raise iohandler.IOBroken(details)
@@ -1200,19 +1180,20 @@
@note: you can use this method to send a message to the node, bypassing all
track keeping methods of the client
"""
- errorMsg = None
+
+ # Reminder to self:
+ #
+ # if socket dies on sendall ther is no way to determine if and how much data was send
+ # ...so assume data was send, cos there is no way to proove it was not send
try:
self.ioHandler.sendMessageEx(msg)
except iohandler.IOBroken, details:
errorMsg = message.ClientDisconnected(
- DisconnectReason=consts.DisconnectReason.SocketDied,
- Param=details
+ DisconnectReason=consts.DisconnectReason.ConnectionDied,
)
self._close(errorMsg)
raise iohandler.IOBroken(details)
- return errorMsg
-
-
+
#########################################################
##
## config related methods
@@ -2121,7 +2102,7 @@
if persistentUserData is not None:
initialRequest['PersistentUserData'] = persistentUserData
- initialRequest['ClientToken'] = fcparams.messageToParams(initialRequest)
+ initialRequest['ClientToken'] = initialRequest.updatePersistentParams()
modified[consts.RequestModified.PersistentUserData] = None
initialRequest['Modified'] = modified
@@ -2134,7 +2115,7 @@
)
if persistentUserData is not None:
initialRequest['PersistentUserData'] = persistentUserData
- msg['ClientToken'] = fcparams.messageToParams(initialRequest)
+ msg['ClientToken'] = initialRequest.updatePersistentParams()
if priorityClass is not None:
msg['PriorityClass'] = priorityClass
@@ -2207,10 +2188,12 @@
if requestKey.filename:
newRequest['URI'] += '/' + requestKey.filename
+
+ filenameCollision = newRequest.get('FilenameCollision', None)
self._registerRequest(
newRequest,
requestType,
- filenameCollision=newRequest['FilenameCollision'] & consts.FilenameCollision.MaskHandle,
+ filenameCollision= None if filenameCollision is None else filenameCollision & consts.FilenameCollision.MaskHandle,
#initTime=time.time(),
persistentUserData=newRequest['PersistentUserData'],
userData=oldUserData,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:53:43
|
Revision: 348
http://fclient.svn.sourceforge.net/fclient/?rev=348&view=rev
Author: jUrner
Date: 2008-03-09 05:53:45 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
logging and python like style handling
Modified Paths:
--------------
trunk/sandbox/fcp2/iohandler.py
Modified: trunk/sandbox/fcp2/iohandler.py
===================================================================
--- trunk/sandbox/fcp2/iohandler.py 2008-03-09 12:28:33 UTC (rev 347)
+++ trunk/sandbox/fcp2/iohandler.py 2008-03-09 12:53:45 UTC (rev 348)
@@ -1,9 +1,14 @@
+"""Message io handling
+The module can be used to handle reading and writing of messages io from sockeet, file or whatever
+
+"""
import os, sys
import logging
import socket
import time
+import traceback
#--> rel import hack
@@ -211,15 +216,15 @@
raise ValueError('duration must be >= 0')
if not timeout >= 0:
raise ValueError('timeout must be >= 0')
-
- if self.isOpen():
- self.close()
timeElapsed = 0
while timeElapsed <= duration:
+ if self.isOpen():
+ self.close()
self._log.info(consts.LogMessages.Connecting + ' %r' % kwargs)
- self.io = self._ioPrototype()
+ self.io = self._ioPrototype(**kwargs)
+ yield False # have to yield at least once to make unittests work (io has to be created!!)
try:
self.io.connect(**kwargs)
except IOConnectFailed, details:
@@ -243,7 +248,7 @@
"""Closes the handler"""
self._log.debug(consts.LogMessages.Closing)
self._receiveBuffer = ''
- if self.io is not None and self.io.isOpen():
+ if self.io is not None:
self.io.close()
self.io = None
@@ -269,12 +274,16 @@
raise ValueError('No bytes received and IO did not raise as expected?!?')
self._receiveBuffer += p
except IOBroken, details:
+ self._log.critical(consts.LogMessages.SocketDied)
self.close()
- self._log.critical(consts.LogMessages.SocketDied)
- return IOBroken, details
+ raise IOBroken(details)
except IOTimeout, details: # nothing in the queue
- return IOTimeout, details
- return None, None
+ raise IOTimeout(details)
+ except Exception, details:
+ self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.traceback.format_exc())
+ self.close()
+ raise Exception(details)
+
def readMessage(self):
@@ -302,10 +311,8 @@
eof += len(self.TerminatorData)
hasData = True
if eof < 0:
- exception, details = self.readBytes(self.io.BufferSize)
- if exception is not None:
- raise exception(details)
-
+ self.readBytes(self.io.BufferSize)
+
# prep message
chunk, self._receiveBuffer = self._receiveBuffer[ :eof], self._receiveBuffer[eof: ]
p = [i for i in chunk.split('\n') if i] # Fcp ignores empty lines, so do we
@@ -362,13 +369,12 @@
if len(self._receiveBuffer) >= n:
msg.data, self._receiveBuffer = self._receiveBuffer[ :n], self._receiveBuffer[n: ]
break
-
- exception, details = self.readBytes(self.io.BufferSize)
- if exception == IOTimeout: # try again later
+ try:
+ self.readBytes(self.io.BufferSize)
+ except IOTimeout, details: # try again later
self._receiveBuffer = chunk + self._receiveBuffer
- elif exception is not None:
- raise exception(details)
-
+ raise IOTimeout(details)
+
self._log.debug(consts.LogMessages.Received + msg.pprint())
return msg
@@ -394,9 +400,13 @@
try:
self.io.write(msg.toString())
except IOBroken, details:
+ self._log.critical(consts.LogMessages.SocketDied)
self.close()
- self._log.critical(consts.LogMessages.SocketDied)
raise IOBroken(details)
+ except Exception, details:
+ self._log.critical(consts.LogMessages.CaughtException + '\n' + traceback.traceback.format_exc())
+ self.close()
+ raise Exception(details)
def setDebugVerbosity(self, debugVerbosity):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-09 12:28:36
|
Revision: 347
http://fclient.svn.sourceforge.net/fclient/?rev=347&view=rev
Author: jUrner
Date: 2008-03-09 05:28:33 -0700 (Sun, 09 Mar 2008)
Log Message:
-----------
moved persistent params handling to message
Modified Paths:
--------------
trunk/sandbox/fcp2/message.py
Modified: trunk/sandbox/fcp2/message.py
===================================================================
--- trunk/sandbox/fcp2/message.py 2008-03-08 11:15:48 UTC (rev 346)
+++ trunk/sandbox/fcp2/message.py 2008-03-09 12:28:33 UTC (rev 347)
@@ -1,7 +1,8 @@
-"""Freennet Client Protocol message
+"""Freennet Client Protocol messages
"""
import os, sys
+import base64
import socket
#--> rel import hack
@@ -30,6 +31,7 @@
#
#********************************************************************************
MessagesAll = {}
+PersistentParamsSep = '0x01'
class MessageMeta(type):
@@ -45,105 +47,127 @@
#
#********************************************************************************
class MessageBase(object):
- """Class wrapping a Fcp message
-
- Sample use::
+ """Class wrapping a Fcp message
+
+ Sample use::
- msg = Messsage(
- consts.Message.ClientHello,
- ExpectedVersion='2.0',
- Name='MyConnectionName'
- )
- msg['Name'] = 'another'
- msg['Name']
- >> 'another'
-
- msg.send(mySocket)
-
- @ivar data: (bytes) data carried along with the message or None
- @ivar name: (str) message name
- @ivar params: (dict) message params
+ msg = Message.ClientHello(
+ ExpectedVersion='2.0',
+ Name='MyConnectionName'
+ )
+ msg['Name'] = 'another'
+ msg['Name']
+ >> 'another'
+
+
+ @ivar data: (bytes) data carried along with the message or None
+ @ivar name: (str) message name
+ @ivar params: (dict) message params
+ """
+ __metaclass__ = MessageMeta
+
+ name = ''
+ _additional_params_ = {}
+ _param_types_ = {}
+ _persistent_params_ = ()
+
+
+ @classmethod
+ def __eq__(klass, other):
+ return klass.name == other.name
+
+ @classmethod
+ def __ne__(klass, other):
+ return klass.name != other.name
+
+
+ def __init__(self, data=None, **params):
"""
- __metaclass__ = MessageMeta
+ @param data: data associated to the message
+ @param params: {field-name: value, ...} of parameters of the message
+ """
+ params.update(self._additional_params_.copy())
- name = ''
- _additional_params_ = {}
- _param_types_ = {}
-
+ self.data = data
+ self.params = params
- @classmethod
- def __eq__(klass, other):
- return klass.name == other.name
-
- @classmethod
- def __ne__(klass, other):
- return klass.name != other.name
-
-
- def __init__(self, data=None, **params):
- """
- @param data: data associated to the message
- @param params: {field-name: value, ...} of parameters of the message
- """
- params.update(self._additional_params_.copy())
- self.data = data
- self.params = params
-
-
- def get(self, name, default=None):
- """Returns the message parameter 'name' or 'default' """
- return self.params.get(name, default)
+ def get(self, name, default=None):
+ """Returns the message parameter 'name' or 'default' """
+ return self.params.get(name, default)
+
+
+ def __getitem__(self, name):
+ """Returns the message parameter 'name' """
+ return self.params[name]
+
+
+ def __setitem__(self, name, value):
+ """Sets the message parameter 'name' to 'value' """
+ self.params[name] = value
+
+ def pprint(self):
+ """Returns the message as nicely formated human readable string"""
+ out = ['', '>>' + self.name, ]
+ for param, value in self.params.items():
+ if isinstance(param, PrivateParam):
+ continue
+ out.append('>> %s=%s' % (param, value))
- def __getitem__(self, name):
- """Returns the message parameter 'name' """
- return self.params[name]
-
-
- def __setitem__(self, name, value):
- """Sets the message parameter 'name' to 'value' """
- self.params[name] = value
+ if self.data is None:
+ out.append('>>EndMessage')
+ else:
+ out.append('>>Data')
+ out.append(self.data)
+ return '\n'.join(out)
+
+
+ def toString(self):
+ """Returns the message as formated string ready to be send"""
+ out = [self.name, ]
+ for param, value in self.params.items():
+ if isinstance(param, PrivateParam):
+ continue
+ # convert python to fcp value if necessary
+ paramType = self._param_types_.get(param, None)
+ if paramType is not None:
+ value = paramType.pythonToFcp(value)
+
+ out.append('%s=%s' % (param, value))
- def pprint(self):
- """Returns the message as nicely formated human readable string"""
- out = ['', '>>' + self.name, ]
- for param, value in self.params.items():
- if isinstance(param, PrivateParam):
- continue
- out.append('>> %s=%s' % (param, value))
-
- if self.data is None:
- out.append('>>EndMessage')
- else:
- out.append('>>Data')
- out.append(self.data)
- return '\n'.join(out)
+ if self.data is None:
+ out.append('EndMessage\n')
+ else:
+ out.append('Data')
+ out.append(self.data)
+ return '\n'.join(out)
+
+
+ #TODO:
+ # 1. if one setter / getter fails no setter / getter result should assumed to be valid
+ # 2. log errors
+ #
+ #
+ def setPersistentParams(self, persistentData):
+ params = persistentData.split(PersistentParamsSep)
+ if len(params) > len(self._persistent_params_):
+ raise ValueError('Too many parameters in data')
+ elif len(params) < len(self._persistent_params_):
+ raise ValueError('Too few parameters in data')
+ for n, (getter, setter) in enumerate(self._persistent_params_):
+ setter(self, params[n])
+
+ def getPersistentParams(self):
+ out = []
+ for n, (getter, setter) in enumerate(self._persistent_params_):
+ #TODO: check if PersistentParamsSep is in data returned
+ out.append(getter(self))
+ return PersistentParamsSep.join(out)
- def toString(self):
- """Returns the message as formated string ready to be send"""
- out = [self.name, ]
- for param, value in self.params.items():
- if isinstance(param, PrivateParam):
- continue
-
- # convert python to fcp value if necessary
- paramType = self._param_types_.get(param, None)
- if paramType is not None:
- value = paramType.pythonToFcp(value)
-
- out.append('%s=%s' % (param, value))
-
- if self.data is None:
- out.append('EndMessage\n')
- else:
- out.append('Data')
- out.append(self.data)
- return '\n'.join(out)
-
#***************************************************************************************
#
# param types for config message
@@ -437,7 +461,6 @@
PrivateParam('InitTime'): 0, # when was the request started?
#TODO: not really necessary, but we need it for persistent params
- PrivateParam('FilenameCollision'): consts.FilenameCollision.HandleNever,
PrivateParam('PersistentUserData'): '', # any user defined persistent data
# non persistent params
@@ -488,18 +511,56 @@
PrivateParam('InitTime'): 0, # when was the request started?
}
+
+PersistentParamsGet = (
+ (
+ lambda msg: str(msg.__getitem__('RequestType')),
+ lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('InitTime')),
+ lambda msg, value: msg.__setitem__('InitTime', float(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('FilenameCollision')),
+ lambda msg, value: msg.__setitem__('FilenameCollision', int(value)),
+ ),
+ (
+ lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
+ lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
+ ),
+ )
+
+PersistentParamsPut = (
+ (
+ lambda msg: str(msg.__getitem__('RequestType')),
+ lambda msg, value: msg.__setitem__('Requesttype', int(value)),
+ ),
+ (
+ lambda msg: str(msg.__getitem__('InitTime')),
+ lambda msg, value: msg.__setitem__('InitTime', float(value)),
+ ),
+ (
+ lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
+ lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
+ ),
+ )
#********************************************************************************
#
#********************************************************************************
#TODO: register new message type?
-def newMessageType(name, paramTypes=None, additionalParams=None):
+def newMessageType(name, paramTypes=None, additionalParams=None, persistentParams=None):
kws = {
'name': name,
- '_additional_params_': additionalParams if additionalParams is not None else {},
- '_param_types_': paramTypes if paramTypes is not None else {},
+ '_additional_params_': {} if additionalParams is None else additionalParams,
+ '_persistent_params_': () if persistentParams is None else persistentParams,
+ '_param_types_': {} if paramTypes is None else paramTypes,
}
return type(name, (MessageBase, ), kws)
+
+#TODO: _persistent_params_ ...define in all message classes or not? Bogus for most,
+# but makes customization of individual classes harder for useres
#********************************************************************************
# some additional messages we define for uniformity
#********************************************************************************
@@ -544,6 +605,7 @@
class ClientGet(MessageBase):
name = consts.Message.ClientGet
_additional_params_ = AdditionalGetParams
+ _persistent_params_ = PersistentParamsGet
_param_types_ = {
'BinaryBlob': types.FcpTypeBool,
'DSOnly': types.FcpTypeBool,
@@ -554,6 +616,17 @@
'MaxTempSize': types.FcpTypeInt,
'Verbosity': types.FcpTypeInt,
}
+
+ def restorePersistentParams(self):
+ try:
+ MessageBase.setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ #print Exception, d
+ return False
+ return True
+
+ def updatePersistentParams(self):
+ self['ClientToken'] = MessageBase.getPersistentParams(self)
class ClientHello(MessageBase):
@@ -567,6 +640,7 @@
class ClientPut(MessageBase):
name = consts.Message.ClientPut
_additional_params_ = AdditionalPutParams
+ _persistent_params_ = PersistentParamsPut
_param_types_ = {
'BinaryBlob': types.FcpTypeBool,
'DataLength': types.FcpTypeInt,
@@ -577,34 +651,24 @@
'MaxRetries': types.FcpTypeInt,
'Verbosity': types.FcpTypeInt,
}
+
+ def restorePersistentParams(self):
+ try:
+ MessageBase.setPersistentParams(self, self['ClientToken'])
+ except Exception, d:
+ return False
+ return True
+
+ def updatePersistentParams(self):
+ self['ClientToken'] = MessageBase.getPersistentParams(self)
-class ClientPutComplexDir(MessageBase):
+class ClientPutComplexDir(ClientPut):
name = consts.Message.ClientPutComplexDir
- _additional_params_ = AdditionalGetParams
- _param_types_ = {
- 'BinaryBlob': types.FcpTypeBool,
- 'DontCompress': types.FcpTypeBool,
- 'EarlyEncode': types.FcpTypeBool,
- 'GetCHKOnly': types.FcpTypeBool,
- 'Global': types.FcpTypeBool,
- 'MaxRetries': types.FcpTypeInt,
- 'Verbosity': types.FcpTypeInt,
- }
+
-
-class ClientPutDiskDir(MessageBase):
+class ClientPutDiskDir(ClientPut):
name = consts.Message.ClientPutDiskDir
- _additional_params_ = AdditionalGetParams
- _param_types_ = {
- 'BinaryBlob': types.FcpTypeBool,
- 'DontCompress': types.FcpTypeBool,
- 'EarlyEncode': types.FcpTypeBool,
- 'GetCHKOnly': types.FcpTypeBool,
- 'Global': types.FcpTypeBool,
- 'MaxRetries': types.FcpTypeInt,
- 'Verbosity': types.FcpTypeInt,
- }
class CloseConnectionDuplicateClientName(MessageBase):
@@ -927,7 +991,7 @@
'Build': types.FcpTypeInt,
'CompressionCodecs': types.FcpTypeInt,
'ExtBuild': types.FcpTypeInt,
- 'FcpVersion': types.FcpTypeFloat,
+ 'FCPVersion': types.FcpTypeFloat,
'Testnet': types.FcpTypeBool,
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:15:43
|
Revision: 346
http://fclient.svn.sourceforge.net/fclient/?rev=346&view=rev
Author: jUrner
Date: 2008-03-08 03:15:48 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
tests for keys
Added Paths:
-----------
trunk/sandbox/fcp2/test_fcp/test_key.py
Added: trunk/sandbox/fcp2/test_fcp/test_key.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/test_key.py (rev 0)
+++ trunk/sandbox/fcp2/test_fcp/test_key.py 2008-03-08 11:15:48 UTC (rev 346)
@@ -0,0 +1,52 @@
+"""Unittests for fcp2.key.py"""
+
+import os, sys
+import socket
+import unittest
+
+#--> rel import hack
+class _RelImportHack(object):
+ def __init__(self, n):
+ fpath = os.path.abspath(__file__)
+ for i in xrange(n): fpath = os.path.dirname(fpath)
+ sys.path.insert(0, fpath)
+ def __del__(self): sys.path.pop(0)
+hack = _RelImportHack(3)
+
+from fcp2.client import Client
+from fcp2 import consts
+from fcp2 import types
+
+
+
+del hack
+#<-- rel import hack
+#****************************************************************************************
+#
+#****************************************************************************************
+class TestKeys(unittest.TestCase):
+
+ pass
+
+
+#*********************************************************************************
+#
+#*********************************************************************************
+def suite():
+ tests = (
+ TestKeys,
+ )
+
+ suite = unittest.TestSuite()
+ for test in tests:
+ suite.addTest(unittest.makeSuite(test))
+ return suite
+
+
+def test():
+ unittest.TextTestRunner(verbosity=1).run(suite())
+
+if __name__ == '__main__':
+ test()
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:15:19
|
Revision: 345
http://fclient.svn.sourceforge.net/fclient/?rev=345&view=rev
Author: jUrner
Date: 2008-03-08 03:15:21 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
tests for iohandler
Added Paths:
-----------
trunk/sandbox/fcp2/test_fcp/test_iohandler.py
Added: trunk/sandbox/fcp2/test_fcp/test_iohandler.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/test_iohandler.py (rev 0)
+++ trunk/sandbox/fcp2/test_fcp/test_iohandler.py 2008-03-08 11:15:21 UTC (rev 345)
@@ -0,0 +1,53 @@
+"""Unittests for fcp2.iohandler.py"""
+
+import os, sys
+import socket
+import unittest
+
+#--> rel import hack
+class _RelImportHack(object):
+ def __init__(self, n):
+ fpath = os.path.abspath(__file__)
+ for i in xrange(n): fpath = os.path.dirname(fpath)
+ sys.path.insert(0, fpath)
+ def __del__(self): sys.path.pop(0)
+hack = _RelImportHack(3)
+
+from fcp2.client import Client
+from fcp2.client import iohandler
+from fcp2 import consts
+from fcp2 import types
+
+
+
+del hack
+#<-- rel import hacks
+#****************************************************************************************
+#
+#****************************************************************************************
+class TestIOHandler(unittest.TestCase):
+
+ def test(self):
+ pass
+
+
+
+#*********************************************************************************
+#
+#*********************************************************************************
+def suite():
+ tests = (
+ TestIOHandler,
+ )
+
+ suite = unittest.TestSuite()
+ for test in tests:
+ suite.addTest(unittest.makeSuite(test))
+ return suite
+
+
+def test():
+ unittest.TextTestRunner(verbosity=1).run(suite())
+
+if __name__ == '__main__':
+ test()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:15:05
|
Revision: 344
http://fclient.svn.sourceforge.net/fclient/?rev=344&view=rev
Author: jUrner
Date: 2008-03-08 03:15:03 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
added IdentifierCollision event. We may need it for plugin messages
Modified Paths:
--------------
trunk/sandbox/fcp2/events.py
Modified: trunk/sandbox/fcp2/events.py
===================================================================
--- trunk/sandbox/fcp2/events.py 2008-03-08 11:14:24 UTC (rev 343)
+++ trunk/sandbox/fcp2/events.py 2008-03-08 11:15:03 UTC (rev 344)
@@ -45,6 +45,9 @@
class Idle(events.Event):
"""Client is idele currently"""
+ class IdentifierCollision(events.Event):
+ """An identifier collision occured"""
+
class KeypairGenerated(events.Event):
"""A public / private keypair has been generated"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:14:24
|
Revision: 343
http://fclient.svn.sourceforge.net/fclient/?rev=343&view=rev
Author: jUrner
Date: 2008-03-08 03:14:24 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
beautifications
Modified Paths:
--------------
trunk/sandbox/fcp2/consts.py
Modified: trunk/sandbox/fcp2/consts.py
===================================================================
--- trunk/sandbox/fcp2/consts.py 2008-03-08 11:13:42 UTC (rev 342)
+++ trunk/sandbox/fcp2/consts.py 2008-03-08 11:14:24 UTC (rev 343)
@@ -268,6 +268,7 @@
Sending = 'Sending'
Received = 'Received'
+ CreatingNewMessageType = 'Creating new message type'
SocketDied = 'Socket died'
SocketShutdown = 'Socket shutdown by node'
@@ -405,35 +406,6 @@
NoSuchPlugin = 32
-class RequestStatus(BaseBitFlags):
- """Request status flags
- @cvar Null: no status
- @cvar Restored: the request was restored when the client was started
- @cvar Compressing: the request is about to be compressed
- @cvar Compressed: compressing is completed
- @cvar Success: the request has completed successfuly
- @cvar Error: the request has completed with an error
- @cvar Removed: the request is completed because it will be or has been removed
-
- @cvar Completed: processing of the request is completed
- @cvar RemovedFromQueue: the request is no longer present in the nodes queue. The client will remove the request
- from its own queue as soon as all event listeners have been notified.
-
- @note: the FcStatus member of the params dict of a request should contain one or more
- of the bitflags it picked up while running through the client.
- """
- Null = 0x0
- Restored = 0x1
- Compressing = 0x2
- Compressed = 0x4
- Success = 0x8
- Error = 0x10
- Removed = 0x20
-
- Completed =0x10000000
- RemovedFromQueue = 0x2000000
-
-
class PeerNodeStatus:
Connected = 'CONNECTED'
BackedOff = 'BACKED OFF'
@@ -471,6 +443,52 @@
Low = '4'
+class RequestModified(BaseBitFlags):
+ """Flags indicating what aspect of a request has been modified
+ @cvar Filename: the filename has been modified
+ @cvar Identifier: the identifier has been moodified
+ @cvar PersistentUserData: persistent user data has been modified
+ @cvar PriorityClass: the priority class has been modified
+
+ @note: the FcModified member of the params dict of a request may contain
+ one or more of the bitflags
+ """
+ Null = 0x0
+ Filename = 0x8
+ Identifier = 0x4
+ PersistentUserData = 0x1
+ PriorityClass = 0x2
+
+
+class RequestStatus(BaseBitFlags):
+ """Request status flags
+ @cvar Null: no status
+ @cvar Restored: the request was restored when the client was started
+ @cvar Compressing: the request is about to be compressed
+ @cvar Compressed: compressing is completed
+ @cvar Success: the request has completed successfuly
+ @cvar Error: the request has completed with an error
+ @cvar Removed: the request is completed because it will be or has been removed
+
+ @cvar Completed: processing of the request is completed
+ @cvar RemovedFromQueue: the request is no longer present in the nodes queue. The client will remove the request
+ from its own queue as soon as all event listeners have been notified.
+
+ @note: the FcStatus member of the params dict of a request should contain one or more
+ of the bitflags it picked up while running through the client.
+ """
+ Null = 0x0
+ Restored = 0x1
+ Compressing = 0x2
+ Compressed = 0x4
+ Success = 0x8
+ Error = 0x10
+ Removed = 0x20
+
+ Completed =0x10000000
+ RemovedFromQueue = 0x2000000
+
+
class RequestType(BaseBitFlags):
"""Consts indicating the type of a request"""
@@ -496,24 +514,9 @@
MaskGenerateKeypair = GenerateSSKKeypair | GenerateUSKKeypair
MaskPlugin = PluginInfo | PluginMessage
MaskPut = PutData | PutFile | PutDir | PutMultiple | PutRedirect
+
-class RequestModified(BaseBitFlags):
- """Flags indicating what aspect of a request has been modified
- @cvar Filename: the filename has been modified
- @cvar Identifier: the identifier has been moodified
- @cvar PersistentUserData: persistent user data has been modified
- @cvar PriorityClass: the priority class has been modified
-
- @note: the FcModified member of the params dict of a request may contain
- one or more of the bitflags
- """
- Null = 0x0
- Filename = 0x8
- Identifier = 0x4
- PersistentUserData = 0x1
- PriorityClass = 0x2
-
class ReturnType:
Direct = 'direct'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:13:37
|
Revision: 342
http://fclient.svn.sourceforge.net/fclient/?rev=342&view=rev
Author: jUrner
Date: 2008-03-08 03:13:42 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
adapt to new message handling
Modified Paths:
--------------
trunk/sandbox/fcp2/config.py
Modified: trunk/sandbox/fcp2/config.py
===================================================================
--- trunk/sandbox/fcp2/config.py 2008-03-08 11:13:11 UTC (rev 341)
+++ trunk/sandbox/fcp2/config.py 2008-03-08 11:13:42 UTC (rev 342)
@@ -59,6 +59,7 @@
from fcp2 import consts
from fcp2 import types
+from fcp2 import message
from fcp2.fcp_lib import uuid
@@ -129,7 +130,6 @@
self.parent = None
self.name = None
self.children = {}
- self._configMessageParams = types.ConfigMessageParams()
self._log = logging.getLogger(consts.LoggerNames.Config)
if configDataMsg is not None:
@@ -162,14 +162,14 @@
@note: if the item does not already exist it is created
@note: if the key is unknown its type will always be set to L{types.FcpType}
"""
- paramClass, components = self._configMessageParams.splitParamClass(key)
- paramType = self._configMessageParams.get(key, None)
+ paramClass, components = message.ConfigMessageParamTypes.splitParamClass(key)
+ paramType = message.ConfigMessageParamTypes.get(key, None)
if paramType is None:
paramType = types.FcpType
self._log.warning('Unknown key: %r' % components)
# find or create new config item if necessary
- components = self._configMessageParams.splitAll(components)
+ components = message.ConfigMessageParamTypes.splitAll(components)
parent = self
for component in components:
item = parent.children.get(component, None)
@@ -187,8 +187,8 @@
@return: (str) key
@note: if the key does not contain the paramClass it is returned unchanged
"""
- head, tail = self._configMessageParams.splitParamClass(key)
- if head in self._configMessageParams.ParamClasses:
+ head, tail = message.ConfigMessageParamTypes.splitParamClass(key)
+ if head in message.ConfigMessageParamTypes.ParamClasses:
return tail
return tail
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:13:09
|
Revision: 341
http://fclient.svn.sourceforge.net/fclient/?rev=341&view=rev
Author: jUrner
Date: 2008-03-08 03:13:11 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
minor changes
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/test_config.py
Modified: trunk/sandbox/fcp2/test_fcp/test_config.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/test_config.py 2008-03-08 11:12:52 UTC (rev 340)
+++ trunk/sandbox/fcp2/test_fcp/test_config.py 2008-03-08 11:13:11 UTC (rev 341)
@@ -1,4 +1,4 @@
-"""Unittests for fcp2_0_config"""
+"""Unittests for fcp2.config.py"""
import os, sys
import socket
@@ -15,7 +15,6 @@
from fcp2.client import Client
from fcp2 import consts
-Message = Client.message.Message
from fcp2 import types
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:12:47
|
Revision: 340
http://fclient.svn.sourceforge.net/fclient/?rev=340&view=rev
Author: jUrner
Date: 2008-03-08 03:12:52 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
minor changes
Modified Paths:
--------------
trunk/sandbox/fcp2/test_fcp/test_message.py
Modified: trunk/sandbox/fcp2/test_fcp/test_message.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-08 11:12:22 UTC (rev 339)
+++ trunk/sandbox/fcp2/test_fcp/test_message.py 2008-03-08 11:12:52 UTC (rev 340)
@@ -1,4 +1,4 @@
-"""Unittests for fcp2_0_message"""
+"""Unittests for fcp2.message.py"""
import os, sys
import socket
@@ -14,7 +14,6 @@
hack = _RelImportHack(3)
from fcp2.client import Client
-Message =Client.message.Message
from fcp2 import consts
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:12:22
|
Revision: 339
http://fclient.svn.sourceforge.net/fclient/?rev=339&view=rev
Author: jUrner
Date: 2008-03-08 03:12:22 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
adapt to new message handling
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-08 11:11:57 UTC (rev 338)
+++ trunk/sandbox/fcp2/test_fcp/test_client.py 2008-03-08 11:12:22 UTC (rev 339)
@@ -1,4 +1,4 @@
-"""Unittests for fcp2_0_client"""
+"""Unittests for fcp2.client.py"""
from __future__ import with_statement
import os, sys
@@ -22,6 +22,7 @@
from fcp2 import consts
from fcp2 import iohandler
+from fcp2 import message
del hack
#<-- rel import hack
@@ -256,7 +257,11 @@
def sendResponseMessage(self, messageName, data=None, callNext=True, **params):
"""Posts a message to the client"""
- msg = Client.message.Message(messageName, data=data, **params)
+ if messageName in message.MessagesAll:
+ msgClass = message.MessagesAll[messageName]
+ else:
+ msgClass = message.newMessageType(messageName)
+ msg = msgClass(data=data, **params)
self.fcpClient.ioHandler.io.readBuffer += msg.toString()
if callNext:
self.fcpClient.next()
@@ -440,7 +445,7 @@
self.getIO().setBroken(True)
# send a test message
- self.assertRaises(iohandler.IOBroken, self.fcpClient.sendMessage, 'test' )
+ self.assertRaises(iohandler.IOBroken, self.fcpClient.sendMessage, message.newMessageType('test')())
# check if ClientDisconnected events has been triggered
msg = self.assertHasNextEvent(
@@ -476,6 +481,7 @@
('DisconnectReason', consts.DisconnectReason.Shutdown)
#('Param', NodeHelloMessage) # can not test here
)
+
self.failUnless('Param' in msg.params)
self.assertEqual(msg['Param'], None)
@@ -1954,8 +1960,7 @@
def test_resend_CHK(self):
myKey = 'CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo'
- msg = client.message.Message(
- consts.Message.ClientPut,
+ msg = message.ClientPut(
URI=myKey,
Persistence=consts.Persistence.Connection,
)
@@ -1975,8 +1980,7 @@
def test_resend_SSK(self):
myKey = 'SSK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA'
- msg = client.message.Message(
- consts.Message.ClientPut,
+ msg = message.ClientPut(
URI=myKey + '/foo',
Persistence=consts.Persistence.Connection,
)
@@ -1998,8 +2002,7 @@
def test_resend_USK(self):
myKey = 'USK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA'
- msg = client.message.Message(
- consts.Message.ClientPut,
+ msg = message.ClientPut(
URI=myKey + '/foo/0',
Persistence=consts.Persistence.Connection,
)
@@ -2020,8 +2023,7 @@
def test_resend_KSK(self):
myKey = 'KSK@abs'
- msg = client.message.Message(
- consts.Message.ClientPut,
+ msg = message.ClientPut(
URI=myKey,
Persistence=consts.Persistence.Connection,
)
@@ -2143,11 +2145,11 @@
def test_8002_SendPluginMessage_Success(self):
- myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"})
- myRequest = self.fcpClient.getRequest(myIdentifier)
+ myIdentifier = '123456789'
+ myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
requestsAll = self.fcpClient.getRequests()
- self.failUnless(myIdentifier in requestsAll)
+ self.failIf(myIdentifier in requestsAll)
self.assertHasNextMessage(
consts.Message.FCPPluginMessage,
('Identifier', myIdentifier),
@@ -2164,19 +2166,11 @@
msg = self.assertHasNextEvent(
self.fcpClient.events.PluginMessage,
- consts.Message.FCPPluginMessage,
+ consts.Message.FCPPluginReply,
('PluginName', 'hi there'),
('Identifier', myIdentifier),
- ('RequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
+ ('baz', '12345'),
)
- reply = msg['PluginReply']
- self.failUnless(reply.params.get('baz', None) == '12345')
-
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed)
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
@@ -2185,11 +2179,11 @@
def test_8003_GetSendPluginMessage_Failure(self):
- myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"})
- myRequest = self.fcpClient.getRequest(myIdentifier)
+ myIdentifier = '1234567889'
+ myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
requestsAll = self.fcpClient.getRequests()
- self.failUnless(myIdentifier in requestsAll)
+ self.failIf(myIdentifier in requestsAll)
self.assertHasNextMessage(
consts.Message.FCPPluginMessage,
('Identifier', myIdentifier),
@@ -2204,24 +2198,49 @@
)
msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginMessageFailed,
- consts.Message.FCPPluginMessage,
- #('PluginName', 'hi there'),
+ self.fcpClient.events.ProtocolError,
+ consts.Message.ProtocolError,
('Identifier', myIdentifier),
- ('RequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
)
self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['RequestStatus'] & consts.RequestStatus.Completed)
-
+
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
self.failIf(requestsAll)
+ def test_8003_GetSendPluginMessage_Identifiercollision(self):
+ myIdentifier = '1234567889'
+ myRequest = self.fcpClient.sendPluginMessage('hi there', myIdentifier, {'foo': "bar"})
+ requestsAll = self.fcpClient.getRequests()
+
+ self.failIf(myIdentifier in requestsAll)
+ self.assertHasNextMessage(
+ consts.Message.FCPPluginMessage,
+ ('Identifier', myIdentifier),
+ ('PluginName', 'hi there'),
+ ('foo', 'bar'),
+ )
+
+ self.sendResponseMessage(
+ consts.Message.IdentifierCollision,
+ Identifier=myIdentifier,
+ )
+
+ msg = self.assertHasNextEvent(
+ self.fcpClient.events.IdentifierCollision,
+ consts.Message.IdentifierCollision,
+ ('Identifier', myIdentifier),
+ )
+
+ self.failIf(myIdentifier in requestsAll)
+
+ self.assertHasNextEvent(None)
+ self.assertHasNextMessage(None)
+ self.failIf(requestsAll)
+
+
#***********************************************************************************
#TODO: class TestConfig(BaseTestConnectedClient):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-03-08 11:11:53
|
Revision: 338
http://fclient.svn.sourceforge.net/fclient/?rev=338&view=rev
Author: jUrner
Date: 2008-03-08 03:11:57 -0800 (Sat, 08 Mar 2008)
Log Message:
-----------
adapt to new message handling
Modified Paths:
--------------
trunk/sandbox/fcp2/iohandler.py
Modified: trunk/sandbox/fcp2/iohandler.py
===================================================================
--- trunk/sandbox/fcp2/iohandler.py 2008-03-08 11:10:20 UTC (rev 337)
+++ trunk/sandbox/fcp2/iohandler.py 2008-03-08 11:11:57 UTC (rev 338)
@@ -181,13 +181,13 @@
"""
@paran ioPrototype: (L{IOObjectBase}) derrived class to handle message io
"""
-
self._ioPrototype = ioPrototype
self._log = logging.getLogger(consts.LoggerNames.IOHandler)
self._receiveBuffer = ''
- self.io = None
-
+ self.io = None
+
+
def connect(self, duration=20, timeout=0.5, **kwargs):
"""Connect to the io device
@@ -313,9 +313,13 @@
if not p:
raise MessageParseError('Missing message name')
msgName = p.pop(0)
- msg = message.Message(msgName)
- paramTypes = types.MessageParamTypes.get(msgName, None)
-
+ msgClass = message.MessagesAll.get(msgName, None)
+ # TODO: log?
+ if msgClass is None:
+ self._log.debug(consts.LogMessages.CreatingNewMessageType + ' "%s"' % msgClassname)
+ msgClass = message.newMessageType(msgName)
+ msg = msgClass()
+
# process param --> value fields
#
#NOTE:usually if data is passed DataLength determines how much have to handle
@@ -327,12 +331,13 @@
paramName, sep, paramValue = line.partition('=')
# covert fcp to python value if necessary
- if paramTypes is not None:
- paramType = paramTypes.get(paramName, None)
- if paramType is not None:
- paramValue = paramType.fcpToPython(paramValue)
+ paramType = msg._param_types_.get(paramName, None)
+ if paramType is not None:
+ paramValue = paramType.fcpToPython(paramValue)
msg[paramName] = paramValue
+ #TODO: move to message.ClientPutComplexDir
+
# handle special case PutComplexDir
if isClientPutComplexDir:
tmp_paramName = paramName.split('.')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|