SF.net SVN: fclient: [265] trunk/sandbox/fcp2/test_fcp/client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <ju...@us...> - 2008-02-26 10:46:00
|
Revision: 265
http://fclient.svn.sourceforge.net/fclient/?rev=265&view=rev
Author: jurner
Date: 2008-02-26 02:46:05 -0800 (Tue, 26 Feb 2008)
Log Message:
-----------
del left over file
Removed Paths:
-------------
trunk/sandbox/fcp2/test_fcp/client.py
Deleted: trunk/sandbox/fcp2/test_fcp/client.py
===================================================================
--- trunk/sandbox/fcp2/test_fcp/client.py 2008-02-26 10:42:37 UTC (rev 264)
+++ trunk/sandbox/fcp2/test_fcp/client.py 2008-02-26 10:46:05 UTC (rev 265)
@@ -1,1959 +0,0 @@
-"""Unittests for fcp2_0_client"""
-from __future__ import with_statement
-
-import os, sys
-import copy
-import socket
-import tempfile
-import time
-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 fcp import fcp2_0_client
-from fcp.fcp2_0_client import FcpClient
-from fcp import fcp2_0_consts as consts
-
-
-del hack
-#<-- rel import hack
-
-from dummy_socket import DummySocket
-#***********************************************************************************
-#
-#***********************************************************************************
-DIR = os.path.dirname(os.path.abspath(__file__))
-TestAgainstNode = 0 # don't know how to test against node. Do not touch this!
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class MyFcpClient(FcpClient):
- """Customized client recording all messages it sends
- """
- def __init__(self, *args, **kwargs):
- FcpClient.__init__(self, *args, **kwargs)
- self.test_messagesSend = []
-
- def sendMessageEx(self, msg):
- FcpClient.sendMessageEx(self, msg)
- # deepcopy here, we need exact state
- msg = copy.deepcopy(msg)
- self.test_messagesSend.append(msg)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class DummySocketModule(object):
- """Dummy socket module we inject into the client module for testing
-
- """
- AF_INET = socket.AF_INET
- SOCK_STREAM = socket.SOCK_STREAM
- error = socket.error
- socket = DummySocket()
-
- def __init__(self):
- self.lastSocket = None
-
- def __getattribute__(self, name):
- obj = object.__getattribute__(self, name)
- if name == 'socket':
- self.lastSocket = obj
- return obj
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class MySocketFactory(object):
- """Real and alive socket. Can be used to test against the running node. Not used currently
-
- Usage::
-
- DummySocketModule.socket = MySocketFactory()
-
- """
- def __init__(self, *args, **kwargs):
- self.socket = None
- self.closed = False
-
- def __call__(self, *args, **kwargs):
- self.socket = socket.socket(*args, **kwargs)
- return self
-
- def sendResponseMessage(self, *args, **kwargs):
- pass
-
- def connect(self, *args, **kwargs):
- return self.socket.connect(*args, **kwargs)
-
- def sendall(self, bytes):
- return self.socket.sendall(bytes)
-
- def settimeout(self, n):
- return self.socket.settimeout(n)
-
- def recv(self, n):
- return self.socket.recv(n)
-
- def close(self):
- self.closed = True
- result = self.socket.close()
- self.socket = None
- return result
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class BaseTestClient(unittest.TestCase):
- """Base class for all tests"""
-
- if TestAgainstNode:
- DummySocketModule.socket = MySocketFactory()
- fcpClient = MyFcpClient(
- #debugVerbosity=FcpClient.consts.DebugVerbosity.Debug
- )
-
- # inject our customized socket module
- socketModule = DummySocketModule()
- fcp2_0_client.socket = socketModule
-
-
- def __init__(self, *args, **kwargs):
- unittest.TestCase.__init__(self, *args, **kwargs)
-
- self.events = [] # events received from the client
- self.tmpfiles = [] # temp files used for testing (will be removed on tearDown)
-
-
- def _captureEventsFromClient(self, event, msg):
- # have to copy message here, to get exact state
- msg = copy.deepcopy(msg)
- self.events.append( (event, msg) )
-
- def connectClient(self):
- """Connects to the client"""
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)):
- if n == 0:
- self.assertHasNextMessage(
- consts.Message.ClientHello
- )
- self.sendResponseMessage(
- 'NodeHello',
- FCPVersion='2.0',
- Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
- Revision='999999999999',
- Build='9999999999',
- ExRevision='9999999999',
- Testnet='false',
- CompressionCodecs='1',
- ConnectionIdentifier='any',
- NodeLanguage='en',
-
- callNext=False,
- )
-
- # check events the client triggered
- self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
- consts.Message.NodeHello,
- )
-
- self.assertHasNextEvent(None)
-
- def assertHasNextEvent(self,
- expectedEvent=None,
- messageName=None,
- param1=None,
- param2=None,
- param3=None,
- param4=None,
- param5=None,
- data=None
- ):
- """Tests if we received a certain event from the client
- @param expectedEvent: the event expected or None if no event is expected
- @param messageName: expected mesageName or None if no message is expected
- @param param1: tuple(paramName, value) of a message parameter expected
- @param data: data expected along with the message or None
-
- @return: message if a message was received or None
- """
- if expectedEvent is None:
- self.failIf(self.events)
- else:
- self.failUnless(self.events)
- event, msg = self.events.pop(0)
- self.assertEqual(event, expectedEvent)
-
- if messageName is not None:
- self.assertEqual(msg.name, messageName)
- if param1 is not None:
- param1, value1 = param1
- self.failUnless(param1 in msg.params)
- self.assertEqual(value1, msg[param1])
- if param2 is not None:
- param2, value2 = param2
- self.failUnless(param2 in msg.params)
- self.assertEqual(value2, msg[param2])
- if param3 is not None:
- param3, value3 = param3
- self.failUnless(param3 in msg.params)
- self.assertEqual(value3, msg[param3])
- if param4 is not None:
- param4, value4 = param4
- self.failUnless(param4 in msg.params)
- self.assertEqual(value4, msg[param4])
- if param5 is not None:
- param5, value5 = param5
- self.failUnless(param5 in msg.params)
- self.assertEqual(value5, msg[param5])
-
- if data is not None:
- self.assertEqual(data, msg.data)
-
- return msg
-
- def assertHasNextMessage(self,
- messageName,
- param1=None,
- param2=None,
- param3=None,
- param4=None,
- param5=None,
- data=None
- ):
- """Tests if we received a certain message from the client
- @param messageName: expected mesageName or None if no message is expected
- @param param1: tuple(paramName, value) of a message parameter expected
- @param data: data expected along with the message or None
-
- @return: message if a message was received or None
- """
- if messageName is None:
- self.failIf(self.fcpClient.test_messagesSend)
- else:
- self.failUnless(self.fcpClient.test_messagesSend)
- msg = self.fcpClient.test_messagesSend.pop(0)
- self.assertEqual(msg.name, messageName)
- if param1 is not None:
- param1, value1 = param1
- self.failUnless(param1 in msg.params)
- self.assertEqual(value1, msg[param1])
- if param2 is not None:
- param2, value2 = param2
- self.failUnless(param2 in msg.params)
- self.assertEqual(value2, msg[param2])
- if param3 is not None:
- param3, value3 = param3
- self.failUnless(param3 in msg.params)
- self.assertEqual(value3, msg[param3])
- if param4 is not None:
- param4, value4 = param4
- self.failUnless(param4 in msg.params)
- self.assertEqual(value4, msg[param4])
- if param5 is not None:
- param5, value5 = param5
- self.failUnless(param5 in msg.params)
- self.assertEqual(value5, msg[param5])
-
- if data is not None:
- self.assertEqual(data, msg.data)
- return msg
-
- def sendResponseMessage(self, messageName, data=None, callNext=True, **params):
- """Posts a message to the client"""
- self.socketModule.lastSocket.sendResponseMessage(messageName, data=data, **params)
- if not TestAgainstNode:
- if callNext:
- self.fcpClient.next()
-
- def setUp(self):
- # conect all events
- self.events = [] # events received from the client
- for event in self.fcpClient.events:
- event += self._captureEventsFromClient
-
- def tearDown(self):
- # disconnect all events
- for event in self.fcpClient.events:
- event -= self._captureEventsFromClient
- # clean up tmpfiles
- for fpath in self.tmpfiles: os.remove(fpath)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-#TODO: class Test.... set/getDebugVerbosity / connectionName and friends... (BaseTestConnectedClient):
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestConnect(BaseTestClient):
-
-
- def XXXtestClose(self):
- self.failIf(self.socket.closed)
- self.connectClient()
- self.fcpClient.close()
- self.failUnless(self.socket.closed)
-
-
-
- def XXXtestConnect(self):
- nodeHello = self.fcpClient.connect(duration=10, timeout=0.1)
- self.failIf(nodeHello is None)
- return
-
-
- nodeHello = self.fcpClient.connect(duration=0, timeout=0)
- self.failIf(nodeHello is not None)
-
- self.socketModule.lastSocket.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',
- )
- nodeHello = self.fcpClient.connect(duration=10, timeout=0.1)
- self.failIf(nodeHello is None)
-
-
- def test_0_IterIterConnect_RFailure(self):
-
- # we cannot test against node here
- if not TestAgainstNode:
-
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=1, timeout=0.1)):
- if n == 0:
- self.assertHasNextMessage(
- consts.Message.ClientHello
- )
-
- # check events the client triggered
- self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.ConnectingFailed),
- )
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failUnless(self.socketModule.lastSocket.closed)
-
- #self.fcpClient.connect(duration=20, timeout=0.1)
-
-
- def test_1_IterConnect_Success(self):
- for n, nodeHello in enumerate(self.fcpClient.iterConnect(duration=20, timeout=0.1)):
- if n == 0:
- self.assertHasNextMessage(
- consts.Message.ClientHello
- )
- self.sendResponseMessage(
- 'NodeHello',
- FCPVersion='2.0',
- Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
- Revision='999999999999',
- Build='9999999999',
- ExRevision='9999999999',
- Testnet='false',
- CompressionCodecs='1',
- ConnectionIdentifier='any',
- NodeLanguage='en',
-
- callNext=False,
- )
-
- # check events the client triggered
- self.assertHasNextEvent(
- self.fcpClient.events.ClientConnected,
- consts.Message.NodeHello,
- )
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestDisconnectReason(BaseTestClient):
-
- def test_1000_DuplicateClientName(self):
-
- self.sendResponseMessage('CloseConnectionDuplicateClientName')
- msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.DuplicateClientName),
- )
- self.failUnless('Param' in msg.params)
- self.assertEqual(msg['Param'], None)
-
- self.failUnless(self.socketModule.lastSocket.closed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.connectClient()
-
-
- def test_1001_SocketDied_Receive(self):
-
- self.socketModule.lastSocket.close()
- self.fcpClient.next()
-
- # check if ClientDisconnected events has been triggered
- msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.SocketDied),
- #('Param', ClientSocketDiedMessage) # can not test here
- )
- self.failUnless('Param' in msg.params)
- self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied)
-
- self.failUnless(self.socketModule.lastSocket.closed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.connectClient()
-
-
- def test_1002_SocketDied_Send(self):
-
- self.socketModule.lastSocket.close()
-
- # send a test message
- self.assertRaises(socket.error, self.fcpClient.sendMessage, 'test' )
-
- # check if ClientDisconnected events has been triggered
- msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.SocketDied),
- #('Param', ClientSocketDiedMessage) # can not test here
- )
- self.failUnless('Param' in msg.params)
- self.assertEqual(msg['Param'].name, consts.Message.ClientSocketDied)
-
- self.failUnless(self.socketModule.lastSocket.closed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.connectClient()
-
-
- def test_1003_Shutdown(self):
-
- self.fcpClient.closeFreenet()
-
- msg = self.assertHasNextMessage(consts.Message.Shutdown)
- self.sendResponseMessage(
- 'ProtocolError',
- Code='18', # Shutting down
- )
-
- # check events the client triggered
- msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.Shutdown)
- #('Param', NodeHelloMessage) # can not test here
- )
- self.failUnless('Param' in msg.params)
- self.assertEqual(msg['Param'], None)
-
- self.failUnless(self.socketModule.lastSocket.closed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.connectClient()
-
-
-
- def test_1004_VersionMismatch(self):
-
- # cheat a bit and reconnect client
- enum = self.fcpClient.iterConnect(duration=0.2, timeout=0.1)
- msg = enum.next()
- self.failIf(msg is not None)
-
- # check messages the client send message
- self.assertHasNextMessage(consts.Message.ClientHello)
-
- #NOTE: have to send directly via socket here (our sendResponseMessage
- # calls client.next() autkmatically)
- self.socketModule.lastSocket.sendResponseMessage(
- 'NodeHello',
- FCPVersion='0.0',
- Node='Fred',
- Version=str(self.fcpClient.ExpectedFcpVersion),
- Revision='0',
- Build='0',
- ExRevision='0',
- Testnet='false',
- CompressionCodecs='1',
- ConnectionIdentifier='any',
- NodeLanguage='en',
-
- callNext=False
- )
- msg = enum.next()
-
- # check events the client triggered
- msg = self.assertHasNextEvent(
- self.fcpClient.events.ClientDisconnected,
- consts.Message.ClientDisconnected,
- ('DisconnectReason', consts.DisconnectReason.VersionMissmatch)
- #('Param', NodeHelloMessage) # can not test here
- )
- self.failUnless('Param' in msg.params)
- self.assertEqual(msg['Param'].name, consts.Message.NodeHello)
-
- self.failUnless(self.socketModule.lastSocket.closed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.connectClient()
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestClientGet(BaseTestClient):
-
- def test_2000_ClientGetRegistered(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getData(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
- self.assertHasNextEvent(None)
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertEqual(myIdentifier, myRequest['Identifier'])
- self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Null)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
-
- def test_2001_GetData_Success(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getData(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # simulate a progress
- self.sendResponseMessage(
- 'SimpleProgress',
- Identifier=myIdentifier,
- Total=10,
- Required=8,
- Failed=0,
- FatallyFailed=0,
- FinalizedTotal='true',
- Succeeded=1,
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestProgress,
- )
-
- # finalize request
- data = 'foo'
- params = {
- 'Identifier': myIdentifier,
- 'Global': 'false',
- 'DataLength': len(data),
- 'Metadata.ContentType': 'any',
- }
- self.sendResponseMessage(
- 'DataFound',
- **params
- )
- # we don't expect an event here....
- self.assertHasNextEvent(None)
-
- self.sendResponseMessage(
- 'AllData',
- data=data,
- Identifier=myIdentifier,
- Global='false',
- DataLength=len(data),
- )
-
- # client should complete and remove the request
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- data=data
- )
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
-
- # cheat a bit to test peristence == Forever (client should not remove request)
- requestsAll[myIdentifier] =myRequest
- myRequest['Persistence'] = consts.Persistence.Forever
- myRequest['FcRequestStatus'] &= ~(consts.RequestStatus.Success |
- consts.RequestStatus.Completed |
- consts.RequestStatus.RemovedFromQueue
- )
- self.sendResponseMessage(
- 'AllData',
- data=data,
- Identifier=myIdentifier,
- Global='false',
- DataLength=len(data),
- )
-
- # client should complete but not remove the request
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Success | consts.RequestStatus.Completed),
- data=data
- )
- self.failUnless(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- def test_2002_GetData_Failure(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getData(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- self.sendResponseMessage(
- 'GetFailed',
- Code='28', # All data not found
- Identifier=myIdentifier,
- Global='false',
- # blah.. more here
- )
-
- # client should complete request and remove it
- self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- #return
-
- # cheat a bit to test peristence == Forever (client should not remove request)
-
- requestsAll[myIdentifier] =myRequest
- myRequest['Persistence'] = consts.Persistence.Forever
- myRequest['FcRequestStatus'] &= ~(consts.RequestStatus.Error |
- consts.RequestStatus.Completed |
- consts.RequestStatus.RemovedFromQueue
- )
- self.sendResponseMessage(
- 'GetFailed',
- Code='28', # All data not found
- Identifier=myIdentifier,
- Global='false',
- # blah.. more here
- )
-
- # client should complete but not remove the request
- self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Error | consts.RequestStatus.Completed),
- )
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- def test_2003_GetFile_Success(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitryry.txt'
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- data = 'foo'
- params = {
- 'Identifier': myIdentifier,
- 'Global': 'false',
- 'DataLength': 123456,
- 'Metadata.ContentType': 'any',
- }
- self.sendResponseMessage(
- 'DataFound',
- **params
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_2004_GetFile_Failure(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitryry.txt'
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- self.sendResponseMessage(
- 'GetFailed',
- Code='28', # All data not found
- Identifier=myIdentifier,
- Global='false',
- # blah.. more here
- )
-
- self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(myIdentifier in requestsAll)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_2005_GetKeyInfo_Success(self):
-
- # request a arbitrary uri
- myIdentifier = self.fcpClient.getKeyInfo(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- data = 'foo'
- params = {
- 'Identifier': myIdentifier,
- 'Global': 'false',
- 'DataLength': 123456,
- 'Metadata.ContentType': 'any',
- }
- self.sendResponseMessage(
- 'DataFound',
- **params
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_2006_GetKeyInfo_TooBig(self):
-
- # test specdial case where ProtocolError.TooBig is handled as success
- # request a arbitrary uri
- myIdentifier = self.fcpClient.getKeyInfo(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- self.sendResponseMessage(
- 'GetFailed',
- Code='21', # Too big
- Identifier=myIdentifier,
- Global='false',
- # blah.. more here
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
-
- def test_2007_GetKeyInfo_Failure(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getKeyInfo(
- 'arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # finalize request
- self.sendResponseMessage(
- 'GetFailed',
- Code='28', # All data not found
- Identifier=myIdentifier,
- Global='false',
- # blah.. more here
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-#TODO:
-#
-#
-#
-class TestClientPut(BaseTestClient):
-
-
- def testPutRedirect_Success(self):
- # request a arbitrary file
- myIdentifier = self.fcpClient.putRedirect(
- 'my-redirect-name',
- 'SSK@arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientPut)
- self.failUnless(myIdentifier in requestsAll)
-
- self.sendResponseMessage(
- 'PutSuccessful',
- Identifier=myIdentifier,
- URI='KSK@my-redirect-name'
- )
-
- self.assertHasNextEvent(
- self.fcpClient.events.RequestCompleted,
- consts.Message.ClientPut,
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failIf(requestsAll)
-
-
- def testPutRedirect_Failure(self):
- # request a arbitrary file
- myIdentifier = self.fcpClient.putRedirect(
- 'my-redirect-name',
- 'SSK@arbitrary-uri',
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientPut)
- self.failUnless(myIdentifier in requestsAll)
-
- self.sendResponseMessage(
- 'PutFailed',
- Identifier=myIdentifier,
- Code='5', # rout not found
- )
-
- self.assertHasNextEvent(
- self.fcpClient.events.RequestFailed,
- consts.Message.ClientPut,
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failIf(requestsAll)
-
-
-
-
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestRequests(BaseTestClient):
-
- def test_3000_ModifyRequest_Persistent(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitryry.txt',
- persistentUserData='foo',
- priorityClass=consts.Priority.Medium,
- persistence=consts.Persistence.Reboot,
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
- #self.assertNextMessage(consts.Message.ClientGet)
-
-
- # test modify persistent user data
- self.fcpClient.modifyRequest(myIdentifier, persistentUserData='bar', priorityClass=consts.Priority.High)
- msg = self.assertHasNextMessage(consts.Message.ModifyPersistentRequest)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentRequestModified',
- **msg.params
- )
- self.assertHasNextEvent(self.fcpClient.events.RequestModified)
-
- self.failUnless(consts.RequestModified.PersistentUserData in myRequest['FcModified'])
- self.failUnless(consts.RequestModified.PriorityClass in myRequest['FcModified'])
- self.assertEqual('bar', myRequest['FcPersistentUserData'])
- self.assertEqual(consts.Priority.High, myRequest['PriorityClass'])
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- def test_3001_ModifyRequest_NonPersistent(self):
-
- # request a arbitrary file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitryry.txt',
- persistentUserData='foo',
- priorityClass=consts.Priority.Medium,
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # test modify persistent user data
- self.fcpClient.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
-
- #msg = self.assertHasNextMessage(consts.Message.ModifyPersistentRequest)
- # respond to the file request
- #self.sendResponseMessage(
- # 'PersistentRequestModified',
- # **msg.params
- # )
-
- self.assertHasNextEvent(self.fcpClient.events.RequestModified)
-
- self.failUnless(consts.RequestModified.PersistentUserData in myRequest['FcModified'])
- #self.failUnless(consts.RequestModified.PriorityClass in myRequest['FcModified'])
- self.assertEqual('bar', myRequest['FcPersistentUserData'])
- #self.assertEqual(consts.Priority.High, myRequest['PriorityClass'])
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- def test_3002_RemoveRequest_NonPersistent(self):
-
- # request a file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitrary.txt'
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # ignore events and messages so far
- self.events = []
- self.messages = []
-
- # now cancel request
- self.fcpClient.removeRequest(myIdentifier)
-
- # of our request should be removed emidiately,
- self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Removed |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- )
- self.failIf(myIdentifier in self.fcpClient.getRequests())
-
- # now the request should have been removed
- self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Removed |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(self.fcpClient.getRequests())
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_3003_RemoveRequest_persistent(self):
-
- # request a file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitrary.txt',
- persistence=consts.Persistence.Reboot,
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond to the file request
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **myRequest.params
- )
-
- # ignore events and messages so far
- self.events = []
- self.messages = []
-
- # now cancel request
- self.fcpClient.removeRequest(myIdentifier)
-
- # status of our request should be set to removed emidiately, but it should
- # not be removed from the client
- self.assertEqual(myRequest['FcRequestStatus'], consts.RequestStatus.Removed | consts.RequestStatus.Completed)
- self.failUnless(myIdentifier in self.fcpClient.getRequests())
-
- # client schould send a RemovePersistentRequest
- self.assertHasNextMessage(consts.Message.RemovePersistentRequest)
-
- # respond with a PersistentRequestRemoved
- self.sendResponseMessage(
- 'PersistentRequestRemoved',
- Identifier=myIdentifier,
- )
-
- # now the request should have been removed
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.RemovedFromQueue)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
- self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Removed |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.failIf(self.fcpClient.getRequests())
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
-
- def test_3004_ResendRequest_NonPersistent(self):
-
- myIdentifier = self.fcpClient.getData('any-key')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- newIdentifier = self.fcpClient.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,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Removed |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[newIdentifier]
- self.failIf(requestsAll)
-
-
- 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()
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- newIdentifier = self.fcpClient.resendRequest(myRequest)
- self.failIf(myIdentifier == newIdentifier)
- self.failUnless(newIdentifier in requestsAll)
-
- # client should remove request from nodes queue
- self.assertHasNextMessage(
- consts.Message.RemovePersistentRequest,
- ('Identifier', myIdentifier)
- )
- self.assertHasNextMessage(
- consts.Message.ClientGet,
- ('Identifier', newIdentifier)
- )
- self.sendResponseMessage(
- 'PersistentRequestRemoved',
- Identifier=myIdentifier,
- )
- self.assertHasNextEvent(
- self.fcpClient.events.RequestRemoved,
- consts.Message.ClientGet,
- ('FcRequestStatus', consts.RequestStatus.Removed |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.failUnless(newIdentifier in requestsAll)
- self.failIf(myIdentifier in requestsAll)
-
- del requestsAll[newIdentifier]
- self.failIf(requestsAll)
-
-
-#***********************************************************************************
-#
-#***********************************************************************************
-#TODO: testRestoreClientPut and friends
-class TestRestoreRequests(BaseTestClient):
-
- def test_4000_RestorePersistentGet_InvalidIdentifier(self):
-
- # throw an invalid PersistentRequest at the client
- myIdentifier = 'true-invalid-request-identifier'
- self.sendResponseMessage(
- 'PersistentGet',
- Identifier=myIdentifier,
- Global='false',
- ReturnType='disk',
- Verbosity='1',
- PersistenceType='forever',
- Started='false',
- Global='false',
- )
-
- # the client should now to cancel the request
- self.assertHasNextMessage(
- consts.Message.RemovePersistentRequest,
- ('Identifier', myIdentifier)
- )
-
- requests = self.fcpClient.getRequests()
- self.failIf(requests)
-
- # the client should not trigger any events
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
-
- def test_4001_RestorePersistentGet_ValidIdentifier(self):
-
- # we need a valid identifier to restore a request, so hack a bit
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- 'arbitryry.txt'
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- self.fcpClient.removeRequest(myIdentifier)
- self.sendResponseMessage(
- 'PersistentRequestRemoved',
- Identifier=myIdentifier,
- )
- self.messages = []
- self.events = []
-
- # throw a PersistentGet at the client with the identifier we hacked
- self.sendResponseMessage(
- 'PersistentGet',
- Identifier=myIdentifier,
- Global='false',
- ReturnType='disk',
- Verbosity='1',
- PersistenceType='forever',
- Started='false',
- ClientToken=myRequest['ClientToken']
- )
-
- # check if the client restored the request
- msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestRestored,
- consts.Message.ClientGet,
- ('Identifier', myIdentifier),
- ('FcRequestStatus', consts.RequestStatus.Restored), # no RequestStatus.Pending flag should be set here
- )
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-#TODO: testDDAReadDenied_ReadDissallowed
-#TODO: testDDAWriteDenied
-#TODO: testDDAWriteDenied_WriteDisallowed
-
-class TestDDA(BaseTestClient):
-
- def test_5000_DDAWriteDenied(self):
-
- # request a file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- os.path.join(DIR, 'DDATest.txt')
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- # client schould send a ClientGet
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # respond with a ProtocolError
- self.sendResponseMessage(
- 'ProtocolError',
- Code=25, # DDADenied
- Identifier=myIdentifier,
- ExtraDescription='An error occured',
- Fatal='false',
- Global='false',
- )
-
- # client should respond with a TestDDARequest
- self.assertHasNextMessage(
- consts.Message.TestDDARequest,
- ('Directory', DIR),
- ('WantWriteDirectory', True)
- )
-
- #msg = self.nextMessage()
- #self.failIf(msg is None)
- #self.assertEqual(msg.name, consts.Message.TestDDARequest)
- ##self.assertEqual(msg['Directory'], DIR)
- #self.failIf(not msg['WantWriteDirectory'])
-
-
- # respond with a TestDDAReply message
- writeContent = 'blah'
- fd, fpath = tempfile.mkstemp(dir=DIR)
- os.close(fd)
- self.sendResponseMessage(
- 'TestDDAReply',
- Directory=DIR,
- WriteFilename=fpath,
- ContentToWrite=writeContent,
- )
-
- # client should respond with a TestDDAResponse
- self.assertHasNextMessage(
- consts.Message.TestDDAResponse,
- ('Directory', DIR)
- )
-
- # check if content was written
- with open(fpath) as fp:
- self.failUnless(fp.read() == writeContent)
-
- # respond with a TestDDAComplete message
- self.sendResponseMessage(
- 'TestDDAComplete',
- Directory=DIR,
- WriteDirectoryAllowed='true',
- )
-
- # check if our tempfile was removed
- self.failIf(os.path.isfile(fpath))
-
- # client sahould send a new ClientGet
- msg = self.assertHasNextMessage(consts.Message.ClientGet)
-
- # no events should have been triggered upo to now
- self.assertHasNextEvent(None)
-
- # respond with a PersistentGet
- self.sendResponseMessage(
- 'PersistentGet',
- Started='false',
- **msg.params
- )
-
- requests = self.fcpClient.getRequests()
- self.assertEqual(len(requests), 1)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- #def testDDAReadDenied(self):
-
- # pass
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestCollisions(BaseTestClient):
-
- def test_6000_IdentifierCollision(self):
-
- # request a file
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- os.path.join(DIR, 'test.txt')
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- # client schould send a ClientGet
- self.assertHasNextMessage(consts.Message.ClientGet)
-
-
- # respond with an IdentifierCollision
- self.sendResponseMessage(
- 'IdentifierCollision',
- Identifier=myIdentifier,
- )
-
- # client schould send a new ClientGet
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # check if RequestModified event has been triggered
- msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestModified,
- consts.Message.ClientGet,
- )
-
- self.failUnless(consts.RequestModified.Identifier in msg['FcModified'])
- oldIdentifier = msg['FcModified'][consts.RequestModified.Identifier]
- newIdentifier = msg['Identifier']
- self.assertEqual(oldIdentifier, myIdentifier)
- self.assertNotEqual(newIdentifier, myIdentifier)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[newIdentifier]
- self.failIf(requestsAll)
-
-
- def test_6001_FilenameCollision_HandleRename(self):
-
- # request a file
- fpath = os.path.join(DIR, 'test.txt')
- open(fpath, 'wb').close()
- self.tmpfiles.append(fpath)
-
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- fpath,
- filenameCollision=consts.FilenameCollision.HandleRename,
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- # client schould send a ClientGet
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # now respond with a ProtocolError
- self.sendResponseMessage(
- 'ProtocolError',
- Identifier=myIdentifier,
- Code='10', # disk target exists
- ExtraDescription='An error occured',
- Fatal='false',
- Global='false',
- )
-
- # client schould send a new ClientGet with a different filename
- self.assertHasNextMessage(consts.Message.ClientGet)
- msg = self.assertHasNextEvent(
- self.fcpClient.events.RequestModified,
- consts.Message.ClientGet
- )
-
- self.failUnless(consts.RequestModified.Filename in msg['FcModified'])
- self.assertEqual(msg['FcModified'][consts.RequestModified.Filename], fpath)
- self.assertNotEqual(msg['Filename'], fpath)
-
- # check flags
- filenameCollision = msg['FcFilenameCollision']
- self.assertEqual(
- filenameCollision & consts.FilenameCollision.MaskHandle,
- consts.FilenameCollision.HandleRename
- )
- self.failUnless(filenameCollision & consts.FilenameCollision.CollisionHandled)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
- def test_6002_FilenameCollision_HandleNever(self):
-
- # request a file
- fpath = os.path.join(DIR, 'test.txt')
- open(fpath, 'wb').close()
- self.tmpfiles.append(fpath)
-
- myIdentifier = self.fcpClient.getFile(
- 'arbitrary-uri',
- fpath,
- filenameCollision=consts.FilenameCollision.HandleNever,
- )
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- # client schould send a ClientGet
- self.assertHasNextMessage(consts.Message.ClientGet)
-
- # check if our request was registered
- requests = self.fcpClient.getRequests()
- self.failUnless(len(requests) == 1)
-
- # now respond with a ProtocolError
- self.sendResponseMessage(
- 'ProtocolError',
- Identifier=myIdentifier,
- Code='10', # disk target exists
- ExtraDescription='An error occured',
- Fatal='false',
- Global='false',
- )
-
- # client schould send no messages and trigger a RequestFailed event
- self.assertHasNextEvent(self.fcpClient.events.RequestFailed)
-
- # request should have been removed
- self.failIf(self.fcpClient.getRequests())
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-#***********************************************************************************
-#
-#***********************************************************************************
-#TODO: class TestNodeAndPeers(BaseTestConnectedClient):
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestPlugins(BaseTestClient):
-
-
- def testGet_8000_PluginInfo_Success(self):
-
- myIdentifier = self.fcpClient.getPluginInfo('hi there')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextMessage(
- consts.Message.GetPluginInfo,
- ('Identifier', myIdentifier),
- ('PluginName', 'hi there'),
- )
-
- self.sendResponseMessage(
- consts.Message.PluginInfo,
- PluginName='hi there',
- Identifier=myIdentifier,
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginInfo,
- consts.Message.GetPluginInfo,
- ('Identifier', myIdentifier),
- ('PluginName', 'hi there'),
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
-
- def test_8001_GetPluginInfo_Failure(self):
- myIdentifier = self.fcpClient.getPluginInfo('hi there')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextMessage(
- consts.Message.GetPluginInfo,
- ('Identifier', myIdentifier),
- ('PluginName', 'hi there'),
- )
-
- self.sendResponseMessage(
- consts.Message.ProtocolError,
- Code=32, # No such plugin
- Identifier=myIdentifier,
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginInfoFailed,
- consts.Message.GetPluginInfo,
- #('PluginName', 'hi there'),
- ('Identifier', myIdentifier),
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_8002_SendPluginMessage_Success(self):
-
- myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"})
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextMessage(
- consts.Message.FCPPluginMessage,
- ('Identifier', myIdentifier),
- ('PluginName', 'hi there'),
- ('foo', 'bar'),
- )
-
- self.sendResponseMessage(
- consts.Message.FCPPluginReply,
- PluginName='hi there',
- Identifier=myIdentifier,
- baz='12345',
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginMessage,
- consts.Message.FCPPluginMessage,
- ('PluginName', 'hi there'),
- ('Identifier', myIdentifier),
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- reply = msg['FcPluginReply']
- self.failUnless(reply.params.get('baz', None) == '12345')
-
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- self.failIf(requestsAll)
-
-
- def test_8003_GetSendPluginMessage_Failure(self):
- myIdentifier = self.fcpClient.sendPluginMessage('hi there', {'foo': "bar"})
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.failUnless(myIdentifier in requestsAll)
- self.assertHasNextMessage(
- consts.Message.FCPPluginMessage,
- ('Identifier', myIdentifier),
- ('PluginName', 'hi there'),
- ('foo', 'bar'),
- )
-
- self.sendResponseMessage(
- consts.Message.ProtocolError,
- Code=32, # No such plugin
- Identifier=myIdentifier,
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.PluginMessageFailed,
- consts.Message.FCPPluginMessage,
- #('PluginName', 'hi there'),
- ('Identifier', myIdentifier),
- ('FcRequestStatus', consts.RequestStatus.Error |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
-
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failIf(requestsAll)
-
-
-#***********************************************************************************
-#TODO: class TestConfig(BaseTestConnectedClient):
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestGenerateKeypair(BaseTestClient):
-
- def test_10000_GeberateSSKKeypair(self):
- myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.SSK)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.GenerateSSK)
- self.sendResponseMessage(
- 'SSKKeypair',
- Identifier=myIdentifier,
- RequestURI='SSK@public',
- InsertURI='SSK@private',
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.KeypairGenerated,
- consts.Message.GenerateSSK,
- ('Identifier', myIdentifier),
- ('FcPublicKey','SSK@public'),
- ('FcPrivateKey','SSK@private'),
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failIf(requestsAll)
-
-
- def test_10001_GeberateUSKKeypair(self):
- myIdentifier = self.fcpClient.generateKeypair(consts.KeyType.USK)
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.assertHasNextMessage(consts.Message.GenerateSSK)
- self.sendResponseMessage(
- 'SSKKeypair',
- Identifier=myIdentifier,
- RequestURI='SSK@public',
- InsertURI='SSK@private',
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.KeypairGenerated,
- consts.Message.GenerateSSK,
- ('Identifier', myIdentifier),
- ('FcPublicKey','USK@public'),
- ('FcPrivateKey','USK@private'),
- ('FcRequestStatus', consts.RequestStatus.Success |
- consts.RequestStatus.RemovedFromQueue |
- consts.RequestStatus.Completed
- ),
- )
- self.failIf(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
- self.failIf(requestsAll)
-
-
-#***********************************************************************************
-#
-#***********************************************************************************
-class TestSubscribeUSK(BaseTestClient):
-
-
- def test_11000_Subscribe(self):
-
- myIdentifier = self.fcpClient.subscribeUSK('arbitrary')
- myRequest = self.fcpClient.getRequest(myIdentifier)
- requestsAll = self.fcpClient.getRequests()
-
- self.failUnless(myIdentifier in requestsAll)
- self.failUnless(myRequest['FcRequestStatus'] & consts.RequestStatus.Completed)
-
- self.assertHasNextMessage(consts.Message.SubscribeUSK)
- self.sendResponseMessage(
- 'SubscribedUSKUpdate',
- Identifier=myIdentifier,
- Edition=99,
- URI='arbitryry/99/',
- )
-
- msg = self.assertHasNextEvent(
- self.fcpClient.events.USKUpdated,
- consts.Message.SubscribedUSKUpdate,
- ('Identifier', myIdentifier),
- ('Edition', 99),
- ('URI', 'arbitryry/99/'),
- )
- self.assertHasNextEvent(None)
- self.assertHasNextMessage(None)
-
- del requestsAll[myIdentifier]
- self.failIf(requestsAll)
-
-
-
-#*********************************************************************************
-#
-#*********************************************************************************
-def suite():
-
- testCases = (
- TestConnect,
- TestDisconnectReason,
- TestClientGet,
- TestClientPut,
- TestRequests,
- TestRestoreRequests,
- TestDDA,
- TestCollisions,
-
- TestPlugins,
- TestGenerateKeypair,
- TestSubscribeUSK,
- )
-
- suite = unittest.TestSuite()
- for testCase in testCases:
- suite.addTest(unittest.makeSuite(testCase))
- 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.
|