from twisted.trial import unittest
# System imports
-import StringIO, sys, urllib
+import StringIO, sys, urllib, random, struct
import msn
import msnft
if message.message == "Test Message" and message.userHandle == "foo1@bar.com":
self.status = "GOTMESSAGE"
+ def gotFileReceive(self, fileReceive):
+ self.fileReceive = fileReceive
+
class SwitchboardP2PTests(unittest.TestCase):
def setUp(self):
self.server = DummySwitchboardP2PServer()
self.loop1.disconnect()
self.loop2.disconnect()
+ def _loop(self, steps=1):
+ for i in xrange(steps):
+ self.loop1.doSteps(1)
+ self.loop2.doSteps(1)
+
def testMessage(self):
self.client1.sendMessage(msn.MSNMessage(message='Test Message'))
- self.loop1.doSteps(10)
- self.loop2.doSteps(10)
+ self._loop()
self.failUnless((self.client2.status == "GOTMESSAGE"), "Fake switchboard server not working.")
+
+ def _generateData(self):
+ data = ''
+ for i in xrange(3000):
+ data += struct.pack("<L", random.randint(0, sys.maxint))
+ return data
def testAvatars(self):
self.gotAvatar = False
# Set up the avatar for client1
- imageData = 'avatar image data' * 1000
+ imageData = self._generateData()
self.client1.msnobj = msn.MSNObject()
self.client1.msnobj.setData('foo1@bar.com', imageData)
self.client1.msnobj.makeText()
d.addCallback(avatarCallback)
# Let them do their thing
- for i in xrange(10):
- self.loop1.doSteps(1)
- self.loop2.doSteps(1)
+ self._loop(10)
# Check that client2 got the avatar
self.failUnless((self.gotAvatar), "Failed to transfer avatar")
+ def testFiles(self):
+ fileData = self._generateData()
+ self.gotFile = False
+
+ # Send the file (client2->client1)
+ msnContact = msn.MSNContact(userHandle='foo1@bar.com', caps=msn.MSNContact.MSNC1)
+ fileSend, d = self.client2.sendFile(msnContact, "myfile.txt", len(fileData))
+ def accepted((yes,)):
+ if yes:
+ fileSend.write(fileData)
+ fileSend.close()
+ else:
+ raise "TransferDeclined"
+ def failed():
+ raise "TransferError"
+ d.addCallback(accepted)
+ d.addErrback(failed)
+
+ # Let the request get pushed to client1
+ self._loop(10)
+
+ # Receive the file
+ def finished(data):
+ self.gotFile = (data == fileData)
+ fileBuffer = msn.StringBuffer(finished)
+ fileReceive = self.client1.fileReceive
+ fileReceive.accept(fileBuffer)
+
+ # Lets transfer!!
+ self._loop(100)
+
+ self.failUnless((self.gotFile), "Failed to transfer file")
+
################
# MSNFTP tests #