blob: 65d1bf9c780c2d26d2d5a465ab773d7cedf43c7e [file] [log] [blame]
# -*- coding: utf-8 -*-
#
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.
"""
Flex Messaging compatibility tests.
@since: 0.3.2
"""
import unittest
import datetime
import uuid
import pyamf
from pyamf.flex import messaging
class AbstractMessageTestCase(unittest.TestCase):
def test_repr(self):
a = messaging.AbstractMessage()
a.body = u'é,è'
try:
repr(a)
except:
raise
class EncodingTestCase(unittest.TestCase):
"""
Encoding tests for L{messaging}
"""
def test_AcknowledgeMessage(self):
m = messaging.AcknowledgeMessage()
m.correlationId = '1234'
self.assertEqual(pyamf.encode(m).getvalue(),
'\n\x81\x0bUflex.messaging.messages.AcknowledgeMessage\tbody'
'\x11clientId\x17destination\x0fheaders\x13messageId\x13timestamp'
'\x15timeToLive\x1bcorrelationId\x01\x01\x01\n\x0b\x01\x01\x01\x01'
'\x01\x06\t1234\x01')
def test_CommandMessage(self):
m = messaging.CommandMessage(operation='foo.bar')
self.assertEqual(pyamf.encode(m).getvalue(),
'\n\x81\x1bMflex.messaging.messages.CommandMessage\x1bcorrelationId'
'\tbody\x11clientId\x17destination\x0fheaders\x13messageId\x13'
'timestamp\x15timeToLive\x13operation\x01\x01\x01\x01\n\x0b\x01\x01'
'\x01\x01\x01\x06\x0ffoo.bar\x01')
def test_ErrorMessage(self):
m = messaging.ErrorMessage(faultString='ValueError')
self.assertEqual(pyamf.encode(m).getvalue(),
'\n\x81[Iflex.messaging.messages.ErrorMessage\x1bcorrelationId\x15'
'timeToLive\x13timestamp\x13messageId\x0fheaders\x17destination'
'\x11clientId\tbody\x19extendedData\x13faultCode\x17faultDetail'
'\x17faultString\x13rootCause\x01\x01\x01\x01\n\x0b\x01\x01\x01'
'\x01\x01\n\x05\x01\x01\x01\x06\x15ValueError\n\x05\x01\x01')
def test_RemotingMessage(self):
m = messaging.RemotingMessage(source='foo.bar')
self.assertEqual(pyamf.encode(m).getvalue(),
'\n\x81\x1bOflex.messaging.messages.RemotingMessage\x15timeToLive'
'\x13timestamp\x13messageId\x0fheaders\x17destination\x11clientId'
'\tbody\x13operation\rsource\x01\x01\x01\n\x0b\x01\x01\x01\x01\x01'
'\x01\x06\x0ffoo.bar\x01')
class SmallMessageTestCase(unittest.TestCase):
"""
Tests for L{messaging.SmallMessageMixIn}
"""
def setUp(self):
self.decoder = pyamf.get_decoder(pyamf.AMF3)
self.buffer = self.decoder.stream
def test_acknowledge(self):
bytes = ('\n\x07\x07DSK\xa8\x03\n\x0b\x01%DSMessagingVersion\x05?\xf0'
'\x00\x00\x00\x00\x00\x00\tDSId\x06IEE0D161D-C11D-25CB-8DBE-3B77B'
'54B55D9\x01\x05Br3&m\x85\x10\x00\x0c!\xee\r\x16\x1d\xc1(&[\xc9'
'\x80RK\x9bE\xc6\xc4\x0c!\xee\r\x16\x1d\xc1=\x8e\xa3\xe0\x10\xef'
'\xad;\xe5\xc5j\x02\x0c!S\x84\x83\xdb\xa9\xc8\xcaM`\x952f\xdbQ'
'\xc9<\x00')
self.buffer.write(bytes)
self.buffer.seek(0)
msg = self.decoder.readElement()
self.assertTrue(isinstance(msg, messaging.AcknowledgeMessageExt))
self.assertEqual(msg.body, None)
self.assertEqual(msg.destination, None)
self.assertEqual(msg.timeToLive, None)
self.assertEqual(msg.timestamp, datetime.datetime(2009, 8, 19, 11, 24, 43, 985000))
self.assertEqual(msg.headers, {
'DSMessagingVersion': 1.0,
'DSId': u'EE0D161D-C11D-25CB-8DBE-3B77B54B55D9'
})
self.assertEqual(msg.clientId, uuid.UUID('ee0d161d-c128-265b-c980-524b9b45c6c4'))
self.assertEqual(msg.messageId, uuid.UUID('ee0d161d-c13d-8ea3-e010-efad3be5c56a'))
self.assertEqual(msg.correlationId, uuid.UUID('538483db-a9c8-ca4d-6095-3266db51c93c'))
self.assertEqual(self.buffer.remaining(), 0)
# now encode the msg to check that encoding is byte for byte the same
buffer = pyamf.encode(msg, encoding=pyamf.AMF3).getvalue()
self.assertEqual(buffer, bytes)
def test_command(self):
bytes = ('\n\x07\x07DSC\x88\x02\n\x0b\x01\tDSId\x06IEE0D161D-C11D-'
'25CB-8DBE-3B77B54B55D9\x01\x0c!\xc0\xdf\xb7|\xd6\xee$1s\x152f'
'\xe11\xa8f\x01\x06\x01\x01\x04\x02')
self.buffer.write(bytes)
self.buffer.seek(0)
msg = self.decoder.readElement()
self.assertTrue(isinstance(msg, messaging.CommandMessageExt))
self.assertEqual(msg.body, None)
self.assertEqual(msg.destination, None)
self.assertEqual(msg.timeToLive, None)
self.assertEqual(msg.timestamp, None)
self.assertEqual(msg.headers, {
'DSId': u'EE0D161D-C11D-25CB-8DBE-3B77B54B55D9'
})
self.assertEqual(msg.clientId, None)
self.assertEqual(msg.messageId, uuid.UUID('c0dfb77c-d6ee-2431-7315-3266e131a866'))
self.assertEqual(msg.correlationId, u'')
self.assertEqual(self.buffer.remaining(), 0)
# now encode the msg to check that encoding is byte for byte the same
buffer = pyamf.encode(msg, encoding=pyamf.AMF3).getvalue()
self.assertEqual(buffer, bytes)
def test_async(self):
pass
def test_getmessage(self):
"""
Tests for `getSmallMessage`
"""
for cls in ['AbstractMessage', 'ErrorMessage', 'RemotingMessage']:
cls = getattr(messaging, cls)
self.assertRaises(NotImplementedError, cls().getSmallMessage)
kwargs = {
'body': {'foo': 'bar'},
'clientId': 'spam',
'destination': 'eggs',
'headers': {'blarg': 'whoop'},
'messageId': 'baz',
'timestamp': 1234,
'timeToLive': 99
}
# test async
a = messaging.AsyncMessage(correlationId='yay', **kwargs)
m = a.getSmallMessage()
k = kwargs.copy()
k.update({'correlationId': 'yay'})
self.assertTrue(isinstance(m, messaging.AsyncMessageExt))
self.assertEqual(m.__dict__, k)
# test command
a = messaging.CommandMessage(operation='yay', **kwargs)
m = a.getSmallMessage()
k = kwargs.copy()
k.update({'operation': 'yay', 'correlationId': None})
self.assertTrue(isinstance(m, messaging.CommandMessageExt))
self.assertEqual(m.__dict__, k)
# test ack
a = messaging.AcknowledgeMessage(**kwargs)
m = a.getSmallMessage()
k = kwargs.copy()
k.update({'correlationId': None})
self.assertTrue(isinstance(m, messaging.AcknowledgeMessageExt))
self.assertEqual(m.__dict__, k)