""" Contributors can be viewed at: http://svn.secondlife.com/svn/linden/projects/2008/pyogp/lib/base/trunk/CONTRIBUTORS.txt $LicenseInfo:firstyear=2008&license=apachev2$ Copyright 2009, Linden Research, Inc. Licensed under the Apache License, Version 2.0. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0 or in http://svn.secondlife.com/svn/linden/projects/2008/pyogp/lib/base/LICENSE.txt $/LicenseInfo$ """ # standard python libs import unittest import os # pyogp from pyogp.lib.base.message_manager import MessageManager from pyogp.lib.base.caps import Capability from pyogp.lib.base.message.message import Message, Block from pyogp.lib.base.tests.mockup_net import MockupUDPServer, MockupUDPClient from pyogp.lib.base.message.circuit import Host from pyogp.lib.base.message.udpdispatcher import UDPDispatcher # pyogp tests import pyogp.lib.base.tests.config from eventlet import api class TestMessageManager(unittest.TestCase): def setUp(self): self.host = Host((MockupUDPServer(), 80)) self.message_manager = MessageManager(self.host, capabilities={'EventQueueGet' : Capability('EventQueueGet', 'http://127.0.0.1')}) def tearDown(self): pass def test_start_stop_monitors(self): self.message_manager.start_monitors() api.sleep(0) self.assertTrue(self.message_manager._is_running) self.assertTrue(self.message_manager.event_queue._running) self.message_manager.stop_monitors() api.sleep(2) self.assertFalse(self.message_manager._is_running) self.assertTrue(self.message_manager.event_queue.stopped) self.assertFalse(self.message_manager.event_queue._running) def test_enqueue_message(self): message = Message('TestMessage1', Block('TestBlock1', Test1 = 0), Block('NeighborBlock', Test0 = 0, Test1 = 1, Test2 = 2)) self.message_manager.enqueue_message(message, reliable = True) self.assertEqual(self.message_manager.outgoing_queue[0][0].name, 'TestMessage1') self.assertTrue(self.message_manager.outgoing_queue[0][1]) message2 = Message('TestMessage2', Block('TestBlock1', Test1 = 0), Block('NeighborBlock', Test0 = 0, Test1 = 1, Test2 = 2)) self.message_manager.enqueue_message(message2, reliable = False, now = True) self.assertEqual(self.message_manager.outgoing_queue[0][0].name, 'TestMessage2') self.assertFalse(self.message_manager.outgoing_queue[0][1]) def test_send_udp_message(self): self.message_manager.udp_dispatcher = UDPDispatcher(MockupUDPClient(), self.message_manager.settings, self.message_manager.message_handler) message = Message('PacketAck', Block('Packets', ID=0x00000003)) buf = self.message_manager.send_udp_message(message) assert buf == \ '\x00' + '\x00\x00\x00\x01' + '\x00' + '\xff\xff\xff\xfb' + \ '\x01' + '\x03\x00\x00\x00', \ 'Received: ' + repr(buf) + ' ' + \ 'Expected: ' + repr('\x00' + '\x00\x00\x00\x01' + '\x00' + \ '\xff\xff\xff\xfb' + '\x01' + '\x03\x00\x00\x00') def test_custom_message_template_count(self): message_manager = MessageManager(self.host, message_template = open(os.path.join(os.path.dirname(__file__), 'mock_message_template.msg'))) # the custom message_template.msg should pass all the way through, and should have 210 messages self.assertEquals(len(message_manager.udp_dispatcher.udp_deserializer.template_dict.template_list), 210) def test_embedded_message_template_count(self): message_manager = MessageManager(self.host, message_template = open(os.path.join(os.path.dirname(__file__), 'mock_message_template.msg'))) # the message_template.msg should default to the embedded instance # and should have > 470 messages assert len(self.message_manager.udp_dispatcher.udp_deserializer.template_dict.template_list) >= 475 def test_custom_message_xml(self): message_manager = MessageManager(self.host, message_xml = open(os.path.join(os.path.dirname(__file__), 'mock_message.xml'))) # the custom message.xml should be used self.assertEquals(message_manager.message_xml.__dict__, {'messageBans': {'untrusted': {}, 'trusted': {}}, 'messages': {'PacketAck': {'flavor': 'template', 'trusted-sender': False}}, 'serverDefaults': {'simulator': 'template'}, 'parsed_llsd': {'serverDefaults': {'simulator': 'template'}, 'messages': {'PacketAck': {'flavor': 'template', 'trusted-sender': False}}, 'capBans': {'MapLayer': False, 'UploadBakedTexture': True}, 'maxQueuedEvents': 100, 'messageBans': {'untrusted': {}, 'trusted': {}}}, 'maxQueuedEvents': 100, 'raw_llsd': '\n\n \n\t\t serverDefaults\n \n\t\t \n\t\t\t\tsimulator\n\t\t\t\ttemplate\n\n\n\t\t \n\t\t messages\n \n\t\t \n\t\t\t\t\n\t\t\t\tPacketAck\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t \n \t \tcapBans\n \t\n\t\t\tMapLayer\n\t\t\tfalse\n\n\t\t\tUploadBakedTexture\n\t\t\ttrue\n\t\t\n\n\t\tmessageBans\n\t\t\n\t\t\ttrusted\n\t\t\t\n\t\t\t\n\t\t\n\t\t\tuntrusted\n\t\t\t\n\t\t\t\n\t\t\n\n\t\tmaxQueuedEvents\n\t\t100\n \n\n', 'capBans': {'MapLayer': False, 'UploadBakedTexture': True}}) def test_embedded_message_xml(self): self.assertEquals(self.message_manager.message_xml.__dict__, {'messageBans': {'untrusted': {}, 'trusted': {}}, 'messages': {'ParcelProperties': {'flavor': 'llsd', 'trusted-sender': True}, 'ImprovedTerseObjectUpdate': {'flavor': 'template', 'trusted-sender': False}, 'EstablishAgentCommunication': {'flavor': 'llsd', 'trusted-sender': True}, 'FetchInventoryDescendents': {'flavor': 'template', 'trusted-sender': False}, 'CrossedRegion': {'flavor': 'llsd', 'trusted-sender': True}, 'ForceCloseChatterBoxSession': {'flavor': 'llsd', 'trusted-sender': True}, 'EconomyDataRequest': {'flavor': 'template', 'trusted-sender': False}, 'CoarseLocationUpdate': {'flavor': 'template', 'trusted-sender': True, 'only-send-latest': True}, 'CompletePingCheck': {'flavor': 'template', 'trusted-sender': False}, 'avatarpicksrequest': {'service_name': 'avatar-pick', 'builder': 'template', 'trusted-sender': False}, 'ParcelVoiceInfo': {'flavor': 'llsd', 'trusted-sender': True}, 'ObjectUpdateCached': {'flavor': 'template', 'trusted-sender': False}, 'ObjectUpdateCompressed': {'flavor': 'template', 'trusted-sender': False}, 'RoutedMoneyBalanceReply': {'flavor': 'llsd', 'trusted-sender': False}, 'EdgeDataPacket': {'flavor': 'template', 'trusted-sender': True}, 'LandStatReply': {'flavor': 'llsd', 'trusted-sender': False}, 'AvatarAppearance': {'flavor': 'template', 'trusted-sender': False}, 'EnableSimulator': {'flavor': 'llsd', 'trusted-sender': True}, 'DirLandReply': {'flavor': 'llsd', 'trusted-sender': True}, 'UseCircuitCode': {'flavor': 'template', 'trusted-sender': False}, 'AvatarAnimation': {'flavor': 'template', 'trusted-sender': False}, 'RequiredVoiceVersion': {'flavor': 'llsd', 'trusted-sender': True}, 'ImagePacket': {'flavor': 'template', 'trusted-sender': False}, 'StartGroupProposal': {'flavor': 'llsd', 'trusted-sender': False}, 'StartPingCheck': {'flavor': 'template', 'trusted-sender': False}, 'AgentUpdate': {'flavor': 'template', 'trusted-sender': False}, 'RequestTrustedCircuit': {'flavor': 'template', 'trusted-sender': True}, 'ChatterBoxSessionEventReply': {'flavor': 'llsd', 'trusted-sender': True}, 'GroupProposalBallot': {'flavor': 'llsd', 'trusted-sender': False}, 'RpcScriptRequestInboundForward': {'flavor': 'llsd', 'trusted-sender': False}, 'ParcelObjectOwnersReply': {'flavor': 'llsd', 'trusted-sender': True}, 'OpenCircuit': {'flavor': 'template', 'trusted-sender': False}, 'ParcelVoiceInfoRequest': {'flavor': 'llsd', 'trusted-sender': False}, 'CloseCircuit': {'flavor': 'template', 'trusted-sender': False}, 'PacketAck': {'flavor': 'template', 'trusted-sender': False}, 'ChatterBoxInvitation': {'flavor': 'llsd', 'trusted-sender': True}, 'CompleteAgentMovement': {'flavor': 'template', 'trusted-sender': False}, 'ScriptRunningReply': {'flavor': 'llsd', 'trusted-sender': False}, 'avatarclassifiedsrequest': {'service_name': 'avatar-classifieds', 'builder': 'template', 'trusted-sender': False}, 'LayerData': {'flavor': 'template', 'trusted-sender': False}, 'CreateTrustedCircuit': {'flavor': 'template', 'trusted-sender': False}, 'PlacesReply': {'flavor': 'llsd', 'trusted-sender': True}, 'SetCPURatio': {'flavor': 'template', 'trusted-sender': False}, 'RegionHandshakeReply': {'flavor': 'template', 'trusted-sender': False}, 'pickinforequest': {'service_name': 'pick-info', 'builder': 'template', 'trusted-sender': False}, 'ObjectUpdate': {'flavor': 'template', 'trusted-sender': False}, 'ViewerEffect': {'flavor': 'template', 'trusted-sender': False}, 'ChatterBoxSessionUpdate': {'flavor': 'llsd', 'trusted-sender': True}, 'SimulatorLoad': {'flavor': 'template', 'trusted-sender': True}, 'TeleportFailed': {'flavor': 'llsd', 'trusted-sender': True}, 'avatarnotesrequest': {'service_name': 'avatar-notes', 'builder': 'template', 'trusted-sender': False}, 'AgentGroupDataUpdate': {'flavor': 'llsd', 'trusted-sender': True}, 'GodKickUser': {'flavor': 'llsd', 'trusted-sender': False}, 'AddCircuitCode': {'flavor': 'template', 'trusted-sender': True}, 'ProvisionVoiceAccountRequest': {'flavor': 'llsd', 'trusted-sender': False}, 'AgentDropGroup': {'flavor': 'llsd', 'trusted-sender': True}, 'ChatterBoxSessionStartReply': {'flavor': 'llsd', 'trusted-sender': True}, 'ReportAutosaveCrash': {'flavor': 'template', 'trusted-sender': False}, 'TeleportFinish': {'flavor': 'llsd', 'trusted-sender': True}, 'ChatterBoxSessionAgentListUpdates': {'flavor': 'llsd', 'trusted-sender': True}}, 'serverDefaults': {'simulator': 'template', 'viewer': 'template', 'rpcserver': 'template', 'dataserver': 'template', 'spaceserver': 'template', 'mapserver': 'template', 'inventoryDataserver': 'template', 'logDataserver': 'template'}, 'parsed_llsd': {'serverDefaults': {'simulator': 'template', 'viewer': 'template', 'rpcserver': 'template', 'dataserver': 'template', 'spaceserver': 'template', 'mapserver': 'template', 'inventoryDataserver': 'template', 'logDataserver': 'template'}, 'messages': {'ParcelProperties': {'flavor': 'llsd', 'trusted-sender': True}, 'ImprovedTerseObjectUpdate': {'flavor': 'template', 'trusted-sender': False}, 'EstablishAgentCommunication': {'flavor': 'llsd', 'trusted-sender': True}, 'FetchInventoryDescendents': {'flavor': 'template', 'trusted-sender': False}, 'CrossedRegion': {'flavor': 'llsd', 'trusted-sender': True}, 'ForceCloseChatterBoxSession': {'flavor': 'llsd', 'trusted-sender': True}, 'EconomyDataRequest': {'flavor': 'template', 'trusted-sender': False}, 'CoarseLocationUpdate': {'flavor': 'template', 'trusted-sender': True, 'only-send-latest': True}, 'CompletePingCheck': {'flavor': 'template', 'trusted-sender': False}, 'avatarpicksrequest': {'service_name': 'avatar-pick', 'builder': 'template', 'trusted-sender': False}, 'ParcelVoiceInfo': {'flavor': 'llsd', 'trusted-sender': True}, 'ObjectUpdateCached': {'flavor': 'template', 'trusted-sender': False}, 'ObjectUpdateCompressed': {'flavor': 'template', 'trusted-sender': False}, 'RoutedMoneyBalanceReply': {'flavor': 'llsd', 'trusted-sender': False}, 'EdgeDataPacket': {'flavor': 'template', 'trusted-sender': True}, 'LandStatReply': {'flavor': 'llsd', 'trusted-sender': False}, 'AvatarAppearance': {'flavor': 'template', 'trusted-sender': False}, 'EnableSimulator': {'flavor': 'llsd', 'trusted-sender': True}, 'DirLandReply': {'flavor': 'llsd', 'trusted-sender': True}, 'UseCircuitCode': {'flavor': 'template', 'trusted-sender': False}, 'AvatarAnimation': {'flavor': 'template', 'trusted-sender': False}, 'RequiredVoiceVersion': {'flavor': 'llsd', 'trusted-sender': True}, 'ImagePacket': {'flavor': 'template', 'trusted-sender': False}, 'StartGroupProposal': {'flavor': 'llsd', 'trusted-sender': False}, 'StartPingCheck': {'flavor': 'template', 'trusted-sender': False}, 'AgentUpdate': {'flavor': 'template', 'trusted-sender': False}, 'RequestTrustedCircuit': {'flavor': 'template', 'trusted-sender': True}, 'ChatterBoxSessionEventReply': {'flavor': 'llsd', 'trusted-sender': True}, 'GroupProposalBallot': {'flavor': 'llsd', 'trusted-sender': False}, 'RpcScriptRequestInboundForward': {'flavor': 'llsd', 'trusted-sender': False}, 'ParcelObjectOwnersReply': {'flavor': 'llsd', 'trusted-sender': True}, 'OpenCircuit': {'flavor': 'template', 'trusted-sender': False}, 'ParcelVoiceInfoRequest': {'flavor': 'llsd', 'trusted-sender': False}, 'CloseCircuit': {'flavor': 'template', 'trusted-sender': False}, 'PacketAck': {'flavor': 'template', 'trusted-sender': False}, 'ChatterBoxInvitation': {'flavor': 'llsd', 'trusted-sender': True}, 'CompleteAgentMovement': {'flavor': 'template', 'trusted-sender': False}, 'ScriptRunningReply': {'flavor': 'llsd', 'trusted-sender': False}, 'avatarclassifiedsrequest': {'service_name': 'avatar-classifieds', 'builder': 'template', 'trusted-sender': False}, 'LayerData': {'flavor': 'template', 'trusted-sender': False}, 'CreateTrustedCircuit': {'flavor': 'template', 'trusted-sender': False}, 'PlacesReply': {'flavor': 'llsd', 'trusted-sender': True}, 'SetCPURatio': {'flavor': 'template', 'trusted-sender': False}, 'RegionHandshakeReply': {'flavor': 'template', 'trusted-sender': False}, 'pickinforequest': {'service_name': 'pick-info', 'builder': 'template', 'trusted-sender': False}, 'ObjectUpdate': {'flavor': 'template', 'trusted-sender': False}, 'ViewerEffect': {'flavor': 'template', 'trusted-sender': False}, 'ChatterBoxSessionUpdate': {'flavor': 'llsd', 'trusted-sender': True}, 'SimulatorLoad': {'flavor': 'template', 'trusted-sender': True}, 'TeleportFailed': {'flavor': 'llsd', 'trusted-sender': True}, 'avatarnotesrequest': {'service_name': 'avatar-notes', 'builder': 'template', 'trusted-sender': False}, 'AgentGroupDataUpdate': {'flavor': 'llsd', 'trusted-sender': True}, 'GodKickUser': {'flavor': 'llsd', 'trusted-sender': False}, 'AddCircuitCode': {'flavor': 'template', 'trusted-sender': True}, 'ProvisionVoiceAccountRequest': {'flavor': 'llsd', 'trusted-sender': False}, 'AgentDropGroup': {'flavor': 'llsd', 'trusted-sender': True}, 'ChatterBoxSessionStartReply': {'flavor': 'llsd', 'trusted-sender': True}, 'ReportAutosaveCrash': {'flavor': 'template', 'trusted-sender': False}, 'TeleportFinish': {'flavor': 'llsd', 'trusted-sender': True}, 'ChatterBoxSessionAgentListUpdates': {'flavor': 'llsd', 'trusted-sender': True}}, 'capBans': {'RemoteParcelRequest': False, 'FetchInventoryDescendents': False, 'UploadBakedTexture': True, 'FetchLibDescendents': True, 'ParcelPropertiesUpdate': False, 'SendPostcard': False, 'EstateChangeInfo': True, 'ParcelGodReserveForNewbie': True, 'SearchStatTracking': False, 'EventQueueGet': False, 'UpdateNotecardAgentInventory': False, 'SendUserReport': False, 'NewFileAgentInventory': False, 'WebFetchInventoryDescendents': True, 'ChatSessionRequest': False, 'UpdateNotecardTaskInventory': False, 'UntrustedSimulatorMessage': False, 'ParcelVoiceInfoRequest': False, 'UpdateGestureAgentInventory': False, 'UpdateScriptAgentInventory': False, 'MapLayerGod': False, 'UpdateGestureTaskInventory': False, 'FetchLib': True, 'MapLayer': False, 'SendUserReportWithScreenshot': False, 'RequestTextureDownload': True, 'ViewerStartAuction': True, 'SendPostcard3': True, 'SendPostcard2': True, 'ProvisionVoiceAccountRequest': False, 'UpdateScriptTaskInventory': False, 'FetchInventory': True}, 'maxQueuedEvents': 100, 'messageBans': {'untrusted': {}, 'trusted': {}}}, 'maxQueuedEvents': 100, 'raw_llsd': '\n\n \n\t\t serverDefaults\n \n\t\t \n\t\t\t\tsimulator\n\t\t\t\ttemplate\n\t\t\t\t\t\t\t\t\n\t\t\t\tspaceserver\n\t\t\t\ttemplate\n\n\t\t\t\tdataserver\n\t\t\t\ttemplate\n\n\t\t\t\tlogDataserver\n\t\t\t\ttemplate\n\n\t\t\t\tinventoryDataserver\n\t\t\t\ttemplate\n\n\t\t\t\trpcserver\n\t\t\t\ttemplate\n\n\t\t\t\tmapserver\n\t\t\t\ttemplate\n\n\t\t\t\tviewer\n\t\t\t\ttemplate\n\n\t\t \n\t\t messages\n \n\t\t \n\t\t\t\t\n\t\t\t\tPacketAck\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tOpenCircuit\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tCloseCircuit\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tStartPingCheck\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tCompletePingCheck\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tAddCircuitCode\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tUseCircuitCode\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tCreateTrustedCircuit\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tRequestTrustedCircuit\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tReportAutosaveCrash\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tSetCPURatio\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tCompleteAgentMovement\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tEconomyDataRequest\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tViewerEffect\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tRegionHandshakeReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tAgentUpdate\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tImagePacket\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tLayerData\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tObjectUpdateCached\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tObjectUpdateCompressed\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tObjectUpdate\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tImprovedTerseObjectUpdate\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tAvatarAnimation\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tAvatarAppearance\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tGodKickUser\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tRoutedMoneyBalanceReply\n\t\t\t\t\n\t\t\t\tflavor\n\t\t\t\tllsd\n\t\t\t\ttrusted-sender\n\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tEdgeDataPacket\n\t\t\t\t\n\t\t\t\t flavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tCoarseLocationUpdate\n\t\t\t\t\n\t\t\t\t flavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\tonly-send-latest\n\t\t\t\t\ttrue\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\tSimulatorLoad\n\t\t\t\t\n\t\t\t\t flavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tEstablishAgentCommunication\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tAgentGroupDataUpdate\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tAgentDropGroup\n\t\t\t\t\n\t\t\t\t flavor\n\t\t\t\t llsd\n\t\t\t\t trusted-sender\n\t\t\t\t true\n\t\t\t\t\n\n\t\t\t\tChatterBoxSessionStartReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tChatterBoxSessionEventReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tForceCloseChatterBoxSession\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tChatterBoxSessionAgentListUpdates\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tChatterBoxSessionUpdate\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tChatterBoxInvitation\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tParcelVoiceInfoRequest\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tParcelVoiceInfo\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tParcelObjectOwnersReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tParcelProperties\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n\t\t\t\tLandStatReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n PlacesReply\n \n flavor\n llsd\n trusted-sender\n true\n \n\n DirLandReply\n \n flavor\n llsd\n trusted-sender\n true\n \n\n avatarnotesrequest\n\t\t\t\t\n\t\t\t\t\tservice_name\n\t\t\t\t\tavatar-notes\n\t\t\t\t\tbuilder\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tavatarclassifiedsrequest\n\t\t\t\t\n\t\t\t\t\tservice_name\n\t\t\t\t\tavatar-classifieds\n\t\t\t\t\tbuilder\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tavatarpicksrequest\n\t\t\t\t\n\t\t\t\t\tservice_name\n\t\t\t\t\tavatar-pick\n\t\t\t\t\tbuilder\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tpickinforequest\n\t\t\t\t\n\t\t\t\t\tservice_name\n\t\t\t\t\tpick-info\n\t\t\t\t\tbuilder\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tProvisionVoiceAccountRequest\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\tRequiredVoiceVersion\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tEnableSimulator\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tTeleportFinish\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\n TeleportFailed\n \n flavor\n llsd\n trusted-sender\n true\n \n\n CrossedRegion\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\ttrue\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tScriptRunningReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tLandStatReply\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tStartGroupProposal\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tFetchInventoryDescendents\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\ttemplate\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tGroupProposalBallot\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\t\t\t\tRpcScriptRequestInboundForward\n\t\t\t\t\n\t\t\t\t\tflavor\n\t\t\t\t\tllsd\n\t\t\t\t\ttrusted-sender\n\t\t\t\t\tfalse\n\t\t\t\t\n\n\n\t\t \n \t \tcapBans\n \t\n\t\t\tMapLayer\n\t\t\tfalse\n\n\t\t\tMapLayerGod\n\t\t\tfalse\n\n\t\t\tNewFileAgentInventory\n\t\t\tfalse\n\n\t\t\tUpdateGestureAgentInventory\n\t\t\tfalse\n\n\t\t\tUpdateNotecardAgentInventory\n\t\t\tfalse\n\n\t\t\tUpdateScriptAgentInventory\n\t\t\tfalse\n\n\t\t\tUpdateGestureTaskInventory\n\t\t\tfalse\n\n\t\t\tUpdateNotecardTaskInventory\n\t\t\tfalse\n\n\t\t\tUpdateScriptTaskInventory\n\t\t\tfalse\n\n\t\t\tViewerStartAuction\n\t\t\ttrue\n\n\t\t\tParcelGodReserveForNewbie\n\t\t\ttrue\n\n\t\t\tSendUserReport\n\t\t\tfalse\n\n\t\t\tSendUserReportWithScreenshot\n\t\t\tfalse\n\n\t\t\tRequestTextureDownload\n\t\t\ttrue\n\n\t\t\tEventQueueGet\n\t\t\tfalse\n\n\t\t\tUntrustedSimulatorMessage\n\t\t\tfalse\n\n\t\t\tSendPostcard\n\t\t\tfalse\n\n\t\t\tSendPostcard2\n\t\t\ttrue\n\n\t\t\tSendPostcard3\n\t\t\ttrue\n\n\t\t\tParcelVoiceInfoRequest\n\t\t\tfalse\n\n\t\t\tChatSessionRequest\n\t\t\tfalse\n\n\t\t\tProvisionVoiceAccountRequest\n\t\t\tfalse\n\t\t\t\n\t\t\tRemoteParcelRequest\n\t\t\tfalse\n\n\t\t\tSearchStatTracking\n\t\t\tfalse\n\t\t\t\n\t\t\tParcelPropertiesUpdate\n\t\t\tfalse\n\t\t\t\n\t\t\tEstateChangeInfo\n\t\t\ttrue\n\t\t\n\t\t\tFetchInventoryDescendents\n\t\t\tfalse\n\t\t\n\t\t\tWebFetchInventoryDescendents\n\t\t\ttrue\n\t\t\n\t\t\tFetchInventory\n\t\t\ttrue\n\t\t\n\t\t\tFetchLibDescendents\n\t\t\ttrue\n\t\t\n\t\t\tFetchLib\n\t\t\ttrue\n\n\t\t\tUploadBakedTexture\n\t\t\ttrue\n\t\t\n\n\t\tmessageBans\n\t\t\n\t\t\ttrusted\n\t\t\t\n\t\t\t\n\t\t\n\t\t\tuntrusted\n\t\t\t\n\t\t\t\n\t\t\n\n\t\tmaxQueuedEvents\n\t\t100\n \n\n', 'capBans': {'RemoteParcelRequest': False, 'FetchInventoryDescendents': False, 'UploadBakedTexture': True, 'FetchLibDescendents': True, 'ParcelPropertiesUpdate': False, 'SendPostcard': False, 'EstateChangeInfo': True, 'ParcelGodReserveForNewbie': True, 'SearchStatTracking': False, 'EventQueueGet': False, 'UpdateNotecardAgentInventory': False, 'SendUserReport': False, 'NewFileAgentInventory': False, 'WebFetchInventoryDescendents': True, 'ChatSessionRequest': False, 'UpdateNotecardTaskInventory': False, 'UntrustedSimulatorMessage': False, 'ParcelVoiceInfoRequest': False, 'UpdateGestureAgentInventory': False, 'UpdateScriptAgentInventory': False, 'MapLayerGod': False, 'UpdateGestureTaskInventory': False, 'FetchLib': True, 'MapLayer': False, 'SendUserReportWithScreenshot': False, 'RequestTextureDownload': True, 'ViewerStartAuction': True, 'SendPostcard3': True, 'SendPostcard2': True, 'ProvisionVoiceAccountRequest': False, 'UpdateScriptTaskInventory': False, 'FetchInventory': True}}) def test_suite(): from unittest import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(TestMessageManager)) return suite