/* * Copyright (c) 2006-2016, openmetaverse.co * Copyright (c) 2021-2025, Sjofn LLC * All rights reserved. * * - Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * - Neither the name of the openmetaverse.co nor the names * of its contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ using System; using System.IO; using System.Net; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Xml.Serialization; using OpenMetaverse; using OpenMetaverse.StructuredData; using OpenMetaverse.Messages.Linden; using NUnit.Framework; using NUnit.Framework.Legacy; namespace LibreMetaverse.Tests { /// /// These unit tests specifically test the Message class can serialize and deserialize its own data properly /// a passed test does not necessarily indicate the formatting is correct in the resulting OSD to be handled /// by the simulator. /// [TestFixture] public class MessageTests : Assert { private Uri testURI = new Uri("https://sim3187.agni.lindenlab.com:12043/cap/6028fc44-c1e5-80a1-f902-19bde114458b"); private IPAddress testIP = IPAddress.Parse("127.0.0.1"); private ulong testHandle = 1106108697797888; [Test] public void AgentGroupDataUpdateMessage() { AgentGroupDataUpdateMessage s = new AgentGroupDataUpdateMessage { AgentID = UUID.Random() }; AgentGroupDataUpdateMessage.GroupData[] blocks = new AgentGroupDataUpdateMessage.GroupData[2]; AgentGroupDataUpdateMessage.GroupData g1 = new AgentGroupDataUpdateMessage.GroupData { AcceptNotices = false, Contribution = 1024, GroupID = UUID.Random(), GroupInsigniaID = UUID.Random(), GroupName = "Group Name Test 1", GroupPowers = GroupPowers.Accountable | GroupPowers.AllowLandmark | GroupPowers.AllowSetHome }; blocks[0] = g1; AgentGroupDataUpdateMessage.GroupData g2 = new AgentGroupDataUpdateMessage.GroupData { AcceptNotices = false, Contribution = 16, GroupID = UUID.Random(), GroupInsigniaID = UUID.Random(), GroupName = "Group Name Test 2", GroupPowers = GroupPowers.ChangeActions | GroupPowers.DeedObject }; blocks[1] = g2; s.GroupDataBlock = blocks; AgentGroupDataUpdateMessage.NewGroupData[] nblocks = new AgentGroupDataUpdateMessage.NewGroupData[2]; AgentGroupDataUpdateMessage.NewGroupData ng1 = new AgentGroupDataUpdateMessage.NewGroupData { ListInProfile = false }; nblocks[0] = ng1; AgentGroupDataUpdateMessage.NewGroupData ng2 = new AgentGroupDataUpdateMessage.NewGroupData { ListInProfile = true }; nblocks[1] = ng2; s.NewGroupDataBlock = nblocks; OSDMap map = s.Serialize(); AgentGroupDataUpdateMessage t = new AgentGroupDataUpdateMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); for (int i = 0; i < t.GroupDataBlock.Length; i++) { Assert.That(t.GroupDataBlock[i].AcceptNotices, Is.EqualTo(s.GroupDataBlock[i].AcceptNotices)); Assert.That(t.GroupDataBlock[i].Contribution, Is.EqualTo(s.GroupDataBlock[i].Contribution)); Assert.That(t.GroupDataBlock[i].GroupID, Is.EqualTo(s.GroupDataBlock[i].GroupID)); Assert.That(t.GroupDataBlock[i].GroupInsigniaID, Is.EqualTo(s.GroupDataBlock[i].GroupInsigniaID)); Assert.That(t.GroupDataBlock[i].GroupName, Is.EqualTo(s.GroupDataBlock[i].GroupName)); Assert.That(t.GroupDataBlock[i].GroupPowers, Is.EqualTo(s.GroupDataBlock[i].GroupPowers)); } for (int i = 0; i < t.NewGroupDataBlock.Length; i++) { Assert.That(t.NewGroupDataBlock[i].ListInProfile, Is.EqualTo(s.NewGroupDataBlock[i].ListInProfile)); } } [Test] public void TeleportFinishMessage() { TeleportFinishMessage s = new TeleportFinishMessage { AgentID = UUID.Random(), Flags = TeleportFlags.ViaLocation | TeleportFlags.IsFlying, IP = testIP, LocationID = 32767, Port = 3000, RegionHandle = testHandle, SeedCapability = testURI, SimAccess = SimAccess.Mature }; OSDMap map = s.Serialize(); TeleportFinishMessage t = new TeleportFinishMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.Flags, Is.EqualTo(s.Flags)); Assert.That(t.IP, Is.EqualTo(s.IP)); Assert.That(t.LocationID, Is.EqualTo(s.LocationID)); Assert.That(t.Port, Is.EqualTo(s.Port)); Assert.That(t.RegionHandle, Is.EqualTo(s.RegionHandle)); Assert.That(t.SeedCapability, Is.EqualTo(s.SeedCapability)); Assert.That(t.SimAccess, Is.EqualTo(s.SimAccess)); } [Test] public void EstablishAgentCommunicationMessage() { EstablishAgentCommunicationMessage s = new EstablishAgentCommunicationMessage { Address = testIP, AgentID = UUID.Random(), Port = 3000, SeedCapability = testURI }; OSDMap map = s.Serialize(); EstablishAgentCommunicationMessage t = new EstablishAgentCommunicationMessage(); t.Deserialize(map); Assert.That(t.Address, Is.EqualTo(s.Address)); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.Port, Is.EqualTo(s.Port)); Assert.That(t.SeedCapability, Is.EqualTo(s.SeedCapability)); } [Test] public void ParcelObjectOwnersMessage() { ParcelObjectOwnersReplyMessage s = new ParcelObjectOwnersReplyMessage { PrimOwnersBlock = new ParcelObjectOwnersReplyMessage.PrimOwner[2] }; ParcelObjectOwnersReplyMessage.PrimOwner obj = new ParcelObjectOwnersReplyMessage.PrimOwner { OwnerID = UUID.Random(), Count = 10, IsGroupOwned = true, OnlineStatus = false, TimeStamp = new DateTime(2010, 4, 13, 7, 19, 43) }; s.PrimOwnersBlock[0] = obj; ParcelObjectOwnersReplyMessage.PrimOwner obj1 = new ParcelObjectOwnersReplyMessage.PrimOwner { OwnerID = UUID.Random(), Count = 0, IsGroupOwned = false, OnlineStatus = false, TimeStamp = new DateTime(1991, 1, 31, 3, 13, 31) }; s.PrimOwnersBlock[1] = obj1; OSDMap map = s.Serialize(); ParcelObjectOwnersReplyMessage t = new ParcelObjectOwnersReplyMessage(); t.Deserialize(map); for (int i = 0; i < t.PrimOwnersBlock.Length; i++) { Assert.That(t.PrimOwnersBlock[i].Count, Is.EqualTo(s.PrimOwnersBlock[i].Count)); Assert.That(t.PrimOwnersBlock[i].IsGroupOwned, Is.EqualTo(s.PrimOwnersBlock[i].IsGroupOwned)); Assert.That(t.PrimOwnersBlock[i].OnlineStatus, Is.EqualTo(s.PrimOwnersBlock[i].OnlineStatus)); Assert.That(t.PrimOwnersBlock[i].OwnerID, Is.EqualTo(s.PrimOwnersBlock[i].OwnerID)); Assert.That(t.PrimOwnersBlock[i].TimeStamp, Is.EqualTo(s.PrimOwnersBlock[i].TimeStamp)); } } [Test] public void ChatterBoxInvitationMessage() { ChatterBoxInvitationMessage s = new ChatterBoxInvitationMessage { BinaryBucket = Utils.EmptyBytes, Dialog = InstantMessageDialog.InventoryOffered, FromAgentID = UUID.Random(), FromAgentName = "Prokofy Neva", GroupIM = false }; s.IMSessionID = s.FromAgentID ^ UUID.Random(); s.Message = "Test Test Test"; s.Offline = InstantMessageOnline.Online; s.ParentEstateID = 1; s.Position = Vector3.One; s.RegionID = UUID.Random(); s.Timestamp = DateTime.UtcNow; s.ToAgentID = UUID.Random(); OSDMap map = s.Serialize(); ChatterBoxInvitationMessage t = new ChatterBoxInvitationMessage(); t.Deserialize(map); Assert.That(t.BinaryBucket, Is.EqualTo(s.BinaryBucket)); Assert.That(t.Dialog, Is.EqualTo(s.Dialog)); Assert.That(t.FromAgentID, Is.EqualTo(s.FromAgentID)); Assert.That(t.FromAgentName, Is.EqualTo(s.FromAgentName)); Assert.That(t.GroupIM, Is.EqualTo(s.GroupIM)); Assert.That(t.IMSessionID, Is.EqualTo(s.IMSessionID)); Assert.That(t.Message, Is.EqualTo(s.Message)); Assert.That(t.Offline, Is.EqualTo(s.Offline)); Assert.That(t.ParentEstateID, Is.EqualTo(s.ParentEstateID)); Assert.That(t.Position, Is.EqualTo(s.Position)); Assert.That(t.RegionID, Is.EqualTo(s.RegionID)); Assert.That(t.Timestamp, Is.EqualTo(s.Timestamp)); Assert.That(t.ToAgentID, Is.EqualTo(s.ToAgentID)); } [Test] public void ChatterboxSessionEventReplyMessage() { ChatterboxSessionEventReplyMessage s = new ChatterboxSessionEventReplyMessage { SessionID = UUID.Random(), Success = true }; OSDMap map = s.Serialize(); ChatterboxSessionEventReplyMessage t = new ChatterboxSessionEventReplyMessage(); t.Deserialize(map); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); Assert.That(t.Success, Is.EqualTo(s.Success)); } [Test] public void ChatterBoxSessionStartReplyMessage() { ChatterBoxSessionStartReplyMessage s = new ChatterBoxSessionStartReplyMessage { ModeratedVoice = true, SessionID = UUID.Random(), SessionName = "Test Session", Success = true, TempSessionID = UUID.Random(), Type = 1, VoiceEnabled = true }; OSDMap map = s.Serialize(); ChatterBoxSessionStartReplyMessage t = new ChatterBoxSessionStartReplyMessage(); t.Deserialize(map); Assert.That(t.ModeratedVoice, Is.EqualTo(s.ModeratedVoice)); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); Assert.That(t.SessionName, Is.EqualTo(s.SessionName)); Assert.That(t.Success, Is.EqualTo(s.Success)); Assert.That(t.TempSessionID, Is.EqualTo(s.TempSessionID)); Assert.That(t.Type, Is.EqualTo(s.Type)); Assert.That(t.VoiceEnabled, Is.EqualTo(s.VoiceEnabled)); } [Test] public void ChatterBoxSessionAgentListUpdatesMessage() { ChatterBoxSessionAgentListUpdatesMessage s = new ChatterBoxSessionAgentListUpdatesMessage { SessionID = UUID.Random(), Updates = new ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[1] }; ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block1 = new ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock { AgentID = UUID.Random(), CanVoiceChat = true, IsModerator = true, MuteText = true, MuteVoice = true, Transition = "ENTER" }; ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block2 = new ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock { AgentID = UUID.Random(), CanVoiceChat = true, IsModerator = true, MuteText = true, MuteVoice = true, Transition = "LEAVE" }; s.Updates[0] = block1; // s.Updates[1] = block2; OSDMap map = s.Serialize(); ChatterBoxSessionAgentListUpdatesMessage t = new ChatterBoxSessionAgentListUpdatesMessage(); t.Deserialize(map); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); for (int i = 0; i < t.Updates.Length; i++) { Assert.That(t.Updates[i].AgentID, Is.EqualTo(s.Updates[i].AgentID)); Assert.That(t.Updates[i].CanVoiceChat, Is.EqualTo(s.Updates[i].CanVoiceChat)); Assert.That(t.Updates[i].IsModerator, Is.EqualTo(s.Updates[i].IsModerator)); Assert.That(t.Updates[i].MuteText, Is.EqualTo(s.Updates[i].MuteText)); Assert.That(t.Updates[i].MuteVoice, Is.EqualTo(s.Updates[i].MuteVoice)); Assert.That(t.Updates[i].Transition, Is.EqualTo(s.Updates[i].Transition)); } } [Test] public void ViewerStatsMessage() { ViewerStatsMessage s = new ViewerStatsMessage { AgentFPS = 45.5f, AgentsInView = 1, SystemCPU = "Intel 80286", StatsDropped = 2, StatsFailedResends = 3, SystemGPU = "Vesa VGA+", SystemGPUClass = 4, SystemGPUVendor = "China", SystemGPUVersion = string.Empty, InCompressedPackets = 5000, InKbytes = 6000, InPackets = 22000, InSavings = 19, MiscInt1 = 5, MiscInt2 = 6, FailuresInvalid = 20, AgentLanguage = "en", AgentMemoryUsed = 12878728, MetersTraveled = 9999123, object_kbytes = 70001, FailuresOffCircuit = 201, SystemOS = "Palm OS 3.1", OutCompressedPackets = 8000, OutKbytes = 9000999, OutPackets = 21000210, OutSavings = 181, AgentPing = 135579, SystemInstalledRam = 4000000, RegionsVisited = 4579, FailuresResent = 9, AgentRuntime = 360023, FailuresSendPacket = 565, SessionID = UUID.Random(), SimulatorFPS = 454, AgentStartTime = new DateTime(1973, 1, 16, 5, 23, 33), MiscString1 = "Unused String", texture_kbytes = 9367498382, AgentVersion = "1", MiscVersion = 1, VertexBuffersEnabled = true, world_kbytes = 232344439 }; OSDMap map = s.Serialize(); ViewerStatsMessage t = new ViewerStatsMessage(); t.Deserialize(map); Assert.That(t.AgentFPS, Is.EqualTo(s.AgentFPS)); Assert.That(t.AgentsInView, Is.EqualTo(s.AgentsInView)); Assert.That(t.SystemCPU, Is.EqualTo(s.SystemCPU)); Assert.That(t.StatsDropped, Is.EqualTo(s.StatsDropped)); Assert.That(t.StatsFailedResends, Is.EqualTo(s.StatsFailedResends)); Assert.That(t.SystemGPU, Is.EqualTo(s.SystemGPU)); Assert.That(t.SystemGPUClass, Is.EqualTo(s.SystemGPUClass)); Assert.That(t.SystemGPUVendor, Is.EqualTo(s.SystemGPUVendor)); Assert.That(t.SystemGPUVersion, Is.EqualTo(s.SystemGPUVersion)); Assert.That(t.InCompressedPackets, Is.EqualTo(s.InCompressedPackets)); Assert.That(t.InKbytes, Is.EqualTo(s.InKbytes)); Assert.That(t.InPackets, Is.EqualTo(s.InPackets)); Assert.That(t.InSavings, Is.EqualTo(s.InSavings)); Assert.That(t.MiscInt1, Is.EqualTo(s.MiscInt1)); Assert.That(t.MiscInt2, Is.EqualTo(s.MiscInt2)); Assert.That(t.FailuresInvalid, Is.EqualTo(s.FailuresInvalid)); Assert.That(t.AgentLanguage, Is.EqualTo(s.AgentLanguage)); Assert.That(t.AgentMemoryUsed, Is.EqualTo(s.AgentMemoryUsed)); Assert.That(t.MetersTraveled, Is.EqualTo(s.MetersTraveled)); Assert.That(t.object_kbytes, Is.EqualTo(s.object_kbytes)); Assert.That(t.FailuresOffCircuit, Is.EqualTo(s.FailuresOffCircuit)); Assert.That(t.SystemOS, Is.EqualTo(s.SystemOS)); Assert.That(t.OutCompressedPackets, Is.EqualTo(s.OutCompressedPackets)); Assert.That(t.OutKbytes, Is.EqualTo(s.OutKbytes)); Assert.That(t.OutPackets, Is.EqualTo(s.OutPackets)); Assert.That(t.OutSavings, Is.EqualTo(s.OutSavings)); Assert.That(t.AgentPing, Is.EqualTo(s.AgentPing)); Assert.That(t.SystemInstalledRam, Is.EqualTo(s.SystemInstalledRam)); Assert.That(t.RegionsVisited, Is.EqualTo(s.RegionsVisited)); Assert.That(t.FailuresResent, Is.EqualTo(s.FailuresResent)); Assert.That(t.AgentRuntime, Is.EqualTo(s.AgentRuntime)); Assert.That(t.FailuresSendPacket, Is.EqualTo(s.FailuresSendPacket)); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); Assert.That(t.SimulatorFPS, Is.EqualTo(s.SimulatorFPS)); Assert.That(t.AgentStartTime, Is.EqualTo(s.AgentStartTime)); Assert.That(t.MiscString1, Is.EqualTo(s.MiscString1)); Assert.That(t.texture_kbytes, Is.EqualTo(s.texture_kbytes)); Assert.That(t.AgentVersion, Is.EqualTo(s.AgentVersion)); Assert.That(t.MiscVersion, Is.EqualTo(s.MiscVersion)); Assert.That(t.VertexBuffersEnabled, Is.EqualTo(s.VertexBuffersEnabled)); Assert.That(t.world_kbytes, Is.EqualTo(s.world_kbytes)); } [Test] public void ParcelVoiceInfoRequestMessage() { ParcelVoiceInfoRequestMessage s = new ParcelVoiceInfoRequestMessage { SipChannelUri = testURI, ParcelID = 1, RegionName = "Hooper" }; OSDMap map = s.Serialize(); ParcelVoiceInfoRequestMessage t = new ParcelVoiceInfoRequestMessage(); t.Deserialize(map); Assert.That(t.SipChannelUri, Is.EqualTo(s.SipChannelUri)); Assert.That(t.ParcelID, Is.EqualTo(s.ParcelID)); Assert.That(t.RegionName, Is.EqualTo(s.RegionName)); } [Test] public void ScriptRunningReplyMessage() { ScriptRunningReplyMessage s = new ScriptRunningReplyMessage { ItemID = UUID.Random(), Mono = true, Running = true, ObjectID = UUID.Random() }; OSDMap map = s.Serialize(); ScriptRunningReplyMessage t = new ScriptRunningReplyMessage(); t.Deserialize(map); Assert.That(t.ItemID, Is.EqualTo(s.ItemID)); Assert.That(t.Mono, Is.EqualTo(s.Mono)); Assert.That(t.ObjectID, Is.EqualTo(s.ObjectID)); Assert.That(t.Running, Is.EqualTo(s.Running)); } [Test] public void MapLayerMessage() { MapLayerReplyVariant s = new MapLayerReplyVariant { Flags = 1 }; MapLayerReplyVariant.LayerData[] blocks = new MapLayerReplyVariant.LayerData[2]; MapLayerReplyVariant.LayerData block = new MapLayerReplyVariant.LayerData { ImageID = UUID.Random(), Bottom = 1, Top = 2, Left = 3, Right = 4 }; blocks[0] = block; block.ImageID = UUID.Random(); block.Bottom = 5; block.Top = 6; block.Left = 7; block.Right = 9; blocks[1] = block; s.LayerDataBlocks = blocks; OSDMap map = s.Serialize(); MapLayerReplyVariant t = new MapLayerReplyVariant(); t.Deserialize(map); Assert.That(t.Flags, Is.EqualTo(s.Flags)); for (int i = 0; i < s.LayerDataBlocks.Length; i++) { Assert.That(t.LayerDataBlocks[i].ImageID, Is.EqualTo(s.LayerDataBlocks[i].ImageID)); Assert.That(t.LayerDataBlocks[i].Top, Is.EqualTo(s.LayerDataBlocks[i].Top)); Assert.That(t.LayerDataBlocks[i].Left, Is.EqualTo(s.LayerDataBlocks[i].Left)); Assert.That(t.LayerDataBlocks[i].Right, Is.EqualTo(s.LayerDataBlocks[i].Right)); Assert.That(t.LayerDataBlocks[i].Bottom, Is.EqualTo(s.LayerDataBlocks[i].Bottom)); } } [Test] // VARIANT A public void ChatSessionRequestStartConference() { ChatSessionRequestStartConference s = new ChatSessionRequestStartConference { SessionID = UUID.Random(), AgentsBlock = new UUID[2] }; s.AgentsBlock[0] = UUID.Random(); s.AgentsBlock[0] = UUID.Random(); OSDMap map = s.Serialize(); ChatSessionRequestStartConference t = new ChatSessionRequestStartConference(); t.Deserialize(map); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); Assert.That(t.Method, Is.EqualTo(s.Method)); for (int i = 0; i < t.AgentsBlock.Length; i++) { Assert.That(t.AgentsBlock[i], Is.EqualTo(s.AgentsBlock[i])); } } [Test] public void ChatSessionRequestMuteUpdate() { ChatSessionRequestMuteUpdate s = new ChatSessionRequestMuteUpdate { AgentID = UUID.Random(), RequestKey = "text", RequestValue = true, SessionID = UUID.Random() }; OSDMap map = s.Serialize(); ChatSessionRequestMuteUpdate t = new ChatSessionRequestMuteUpdate(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.Method, Is.EqualTo(s.Method)); Assert.That(t.RequestKey, Is.EqualTo(s.RequestKey)); Assert.That(t.RequestValue, Is.EqualTo(s.RequestValue)); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); } [Test] public void ChatSessionAcceptInvitation() { ChatSessionAcceptInvitation s = new ChatSessionAcceptInvitation { SessionID = UUID.Random() }; OSDMap map = s.Serialize(); ChatSessionAcceptInvitation t = new ChatSessionAcceptInvitation(); t.Deserialize(map); Assert.That(t.Method, Is.EqualTo(s.Method)); Assert.That(t.SessionID, Is.EqualTo(s.SessionID)); } [Test] public void RequiredVoiceVersionMessage() { RequiredVoiceVersionMessage s = new RequiredVoiceVersionMessage { MajorVersion = 1, MinorVersion = 0, RegionName = "Hooper" }; OSDMap map = s.Serialize(); RequiredVoiceVersionMessage t = new RequiredVoiceVersionMessage(); t.Deserialize(map); Assert.That(t.MajorVersion, Is.EqualTo(s.MajorVersion)); Assert.That(t.MinorVersion, Is.EqualTo(s.MinorVersion)); Assert.That(t.RegionName, Is.EqualTo(s.RegionName)); } [Test] public void CopyInventoryFromNotecardMessage() { CopyInventoryFromNotecardMessage s = new CopyInventoryFromNotecardMessage { CallbackID = 1, FolderID = UUID.Random(), ItemID = UUID.Random(), NotecardID = UUID.Random(), ObjectID = UUID.Random() }; OSDMap map = s.Serialize(); CopyInventoryFromNotecardMessage t = new CopyInventoryFromNotecardMessage(); t.Deserialize(map); Assert.That(t.CallbackID, Is.EqualTo(s.CallbackID)); Assert.That(t.FolderID, Is.EqualTo(s.FolderID)); Assert.That(t.ItemID, Is.EqualTo(s.ItemID)); Assert.That(t.NotecardID, Is.EqualTo(s.NotecardID)); Assert.That(t.ObjectID, Is.EqualTo(s.ObjectID)); } [Test] public void ProvisionVoiceAccountRequestMessage() { ProvisionVoiceAccountRequestMessage s = new ProvisionVoiceAccountRequestMessage { Username = "username", Password = "password" }; OSDMap map = s.Serialize(); ProvisionVoiceAccountRequestMessage t = new ProvisionVoiceAccountRequestMessage(); t.Deserialize(map); Assert.That(t.Password, Is.EqualTo(s.Password)); Assert.That(t.Username, Is.EqualTo(s.Username)); } [Test] public void UpdateAgentLanguageMessage() { UpdateAgentLanguageMessage s = new UpdateAgentLanguageMessage { Language = "en", LanguagePublic = false }; OSDMap map = s.Serialize(); UpdateAgentLanguageMessage t = new UpdateAgentLanguageMessage(); t.Deserialize(map); Assert.That(t.Language, Is.EqualTo(s.Language)); Assert.That(t.LanguagePublic, Is.EqualTo(s.LanguagePublic)); } [Test] public void ParcelPropertiesMessage() { ParcelPropertiesMessage s = new ParcelPropertiesMessage { AABBMax = Vector3.Parse("<1,2,3>"), AABBMin = Vector3.Parse("<2,3,1>"), AnyAVSounds = true, Area = 1024, AuctionID = uint.MaxValue, AuthBuyerID = UUID.Random(), Bitmap = Utils.EmptyBytes, Category = ParcelCategory.Educational, ClaimDate = new DateTime(2008, 12, 25, 3, 15, 22), ClaimPrice = 1000, Desc = "Test Description", GroupAVSounds = true, GroupID = UUID.Random(), GroupPrims = 50, IsGroupOwned = false, LandingType = LandingType.None, LocalID = 1, MaxPrims = 234, MediaAutoScale = false, MediaDesc = "Example Media Description", MediaHeight = 480, MediaID = UUID.Random(), MediaLoop = false, MediaType = "text/html", MediaURL = "http://www.openmetaverse.co", MediaWidth = 640, MusicURL = "http://scfire-ntc-aa04.stream.aol.com:80/stream/1075", // Yee Haw Name = "Test Name", ObscureMedia = false, ObscureMusic = false, OtherCleanTime = 5, OtherCount = 200, OtherPrims = 300, OwnerID = UUID.Random(), OwnerPrims = 0, ParcelFlags = ParcelFlags.AllowDamage | ParcelFlags.AllowGroupScripts | ParcelFlags.AllowVoiceChat, ParcelPrimBonus = 0f, PassHours = 1.5f, PassPrice = 10, PublicCount = 20, RegionDenyAgeUnverified = false, RegionDenyAnonymous = false, RegionPushOverride = true, RentPrice = 0, RequestResult = ParcelResult.Single, SalePrice = 9999, SeeAVs = true, SelectedPrims = 1, SelfCount = 2, SequenceID = -4000, SimWideMaxPrims = 937, SimWideTotalPrims = 117, SnapSelection = false, SnapshotID = UUID.Random(), Status = ParcelStatus.Leased, TotalPrims = 219, UserLocation = Vector3.Parse("<3,4,5>"), UserLookAt = Vector3.Parse("<5,4,3>") }; OSDMap map = s.Serialize(); ParcelPropertiesMessage t = new ParcelPropertiesMessage(); t.Deserialize(map); Assert.That(t.AABBMax, Is.EqualTo(s.AABBMax)); Assert.That(t.AABBMin, Is.EqualTo(s.AABBMin)); Assert.That(t.AnyAVSounds, Is.EqualTo(s.AnyAVSounds)); Assert.That(t.Area, Is.EqualTo(s.Area)); Assert.That(t.AuctionID, Is.EqualTo(s.AuctionID)); Assert.That(t.AuthBuyerID, Is.EqualTo(s.AuthBuyerID)); Assert.That(t.Bitmap, Is.EqualTo(s.Bitmap)); Assert.That(t.Category, Is.EqualTo(s.Category)); Assert.That(t.ClaimDate, Is.EqualTo(s.ClaimDate)); Assert.That(t.ClaimPrice, Is.EqualTo(s.ClaimPrice)); Assert.That(t.Desc, Is.EqualTo(s.Desc)); Assert.That(t.GroupAVSounds, Is.EqualTo(s.GroupAVSounds)); Assert.That(t.GroupID, Is.EqualTo(s.GroupID)); Assert.That(t.GroupPrims, Is.EqualTo(s.GroupPrims)); Assert.That(t.IsGroupOwned, Is.EqualTo(s.IsGroupOwned)); Assert.That(t.LandingType, Is.EqualTo(s.LandingType)); Assert.That(t.LocalID, Is.EqualTo(s.LocalID)); Assert.That(t.MaxPrims, Is.EqualTo(s.MaxPrims)); Assert.That(t.MediaAutoScale, Is.EqualTo(s.MediaAutoScale)); Assert.That(t.MediaDesc, Is.EqualTo(s.MediaDesc)); Assert.That(t.MediaHeight, Is.EqualTo(s.MediaHeight)); Assert.That(t.MediaID, Is.EqualTo(s.MediaID)); Assert.That(t.MediaLoop, Is.EqualTo(s.MediaLoop)); Assert.That(t.MediaType, Is.EqualTo(s.MediaType)); Assert.That(t.MediaURL, Is.EqualTo(s.MediaURL)); Assert.That(t.MediaWidth, Is.EqualTo(s.MediaWidth)); Assert.That(t.MusicURL, Is.EqualTo(s.MusicURL)); Assert.That(t.Name, Is.EqualTo(s.Name)); Assert.That(t.ObscureMedia, Is.EqualTo(s.ObscureMedia)); Assert.That(t.ObscureMusic, Is.EqualTo(s.ObscureMusic)); Assert.That(t.OtherCleanTime, Is.EqualTo(s.OtherCleanTime)); Assert.That(t.OtherCount, Is.EqualTo(s.OtherCount)); Assert.That(t.OtherPrims, Is.EqualTo(s.OtherPrims)); Assert.That(t.OwnerID, Is.EqualTo(s.OwnerID)); Assert.That(t.OwnerPrims, Is.EqualTo(s.OwnerPrims)); Assert.That(t.ParcelFlags, Is.EqualTo(s.ParcelFlags)); Assert.That(t.ParcelPrimBonus, Is.EqualTo(s.ParcelPrimBonus)); Assert.That(t.PassHours, Is.EqualTo(s.PassHours)); Assert.That(t.PassPrice, Is.EqualTo(s.PassPrice)); Assert.That(t.PublicCount, Is.EqualTo(s.PublicCount)); Assert.That(t.RegionDenyAgeUnverified, Is.EqualTo(s.RegionDenyAgeUnverified)); Assert.That(t.RegionDenyAnonymous, Is.EqualTo(s.RegionDenyAnonymous)); Assert.That(t.RegionPushOverride, Is.EqualTo(s.RegionPushOverride)); Assert.That(t.RentPrice, Is.EqualTo(s.RentPrice)); Assert.That(t.RequestResult, Is.EqualTo(s.RequestResult)); Assert.That(t.SalePrice, Is.EqualTo(s.SalePrice)); Assert.That(t.SeeAVs, Is.EqualTo(s.SeeAVs)); Assert.That(t.SelectedPrims, Is.EqualTo(s.SelectedPrims)); Assert.That(t.SelfCount, Is.EqualTo(s.SelfCount)); Assert.That(t.SequenceID, Is.EqualTo(s.SequenceID)); Assert.That(t.SimWideMaxPrims, Is.EqualTo(s.SimWideMaxPrims)); Assert.That(t.SimWideTotalPrims, Is.EqualTo(s.SimWideTotalPrims)); Assert.That(t.SnapSelection, Is.EqualTo(s.SnapSelection)); Assert.That(t.SnapshotID, Is.EqualTo(s.SnapshotID)); Assert.That(t.Status, Is.EqualTo(s.Status)); Assert.That(t.TotalPrims, Is.EqualTo(s.TotalPrims)); Assert.That(t.UserLocation, Is.EqualTo(s.UserLocation)); Assert.That(t.UserLookAt, Is.EqualTo(s.UserLookAt)); } [Test] public void ParcelPropertiesUpdateMessage() { ParcelPropertiesUpdateMessage s = new ParcelPropertiesUpdateMessage { AnyAVSounds = true, AuthBuyerID = UUID.Random(), Category = ParcelCategory.Gaming, Desc = "Example Description", GroupAVSounds = true, GroupID = UUID.Random(), Landing = LandingType.LandingPoint, LocalID = 160, MediaAutoScale = true, MediaDesc = "Example Media Description", MediaHeight = 600, MediaID = UUID.Random(), MediaLoop = false, MediaType = "image/jpeg", MediaURL = "http://www.openmetaverse.co/test.jpeg", MediaWidth = 800, MusicURL = "http://scfire-ntc-aa04.stream.aol.com:80/stream/1075", Name = "Example Parcel Description", ObscureMedia = true, ObscureMusic = true, ParcelFlags = ParcelFlags.AllowVoiceChat | ParcelFlags.ContributeWithDeed, PassHours = 5.5f, PassPrice = 100, SalePrice = 99, SeeAVs = true, SnapshotID = UUID.Random(), UserLocation = Vector3.Parse("<128,128,128>"), UserLookAt = Vector3.Parse("<256,256,256>") }; OSDMap map = s.Serialize(); ParcelPropertiesUpdateMessage t = new ParcelPropertiesUpdateMessage(); t.Deserialize(map); Assert.That(t.AnyAVSounds, Is.EqualTo(s.AnyAVSounds)); Assert.That(t.AuthBuyerID, Is.EqualTo(s.AuthBuyerID)); Assert.That(t.Category, Is.EqualTo(s.Category)); Assert.That(t.Desc, Is.EqualTo(s.Desc)); Assert.That(t.GroupAVSounds, Is.EqualTo(s.GroupAVSounds)); Assert.That(t.GroupID, Is.EqualTo(s.GroupID)); Assert.That(t.Landing, Is.EqualTo(s.Landing)); Assert.That(t.LocalID, Is.EqualTo(s.LocalID)); Assert.That(t.MediaAutoScale, Is.EqualTo(s.MediaAutoScale)); Assert.That(t.MediaDesc, Is.EqualTo(s.MediaDesc)); Assert.That(t.MediaHeight, Is.EqualTo(s.MediaHeight)); Assert.That(t.MediaID, Is.EqualTo(s.MediaID)); Assert.That(t.MediaLoop, Is.EqualTo(s.MediaLoop)); Assert.That(t.MediaType, Is.EqualTo(s.MediaType)); Assert.That(t.MediaURL, Is.EqualTo(s.MediaURL)); Assert.That(t.MediaWidth, Is.EqualTo(s.MediaWidth)); Assert.That(t.MusicURL, Is.EqualTo(s.MusicURL)); Assert.That(t.Name, Is.EqualTo(s.Name)); Assert.That(t.ObscureMedia, Is.EqualTo(s.ObscureMedia)); Assert.That(t.ObscureMusic, Is.EqualTo(s.ObscureMusic)); Assert.That(t.ParcelFlags, Is.EqualTo(s.ParcelFlags)); Assert.That(t.PassHours, Is.EqualTo(s.PassHours)); Assert.That(t.PassPrice, Is.EqualTo(s.PassPrice)); Assert.That(t.SalePrice, Is.EqualTo(s.SalePrice)); Assert.That(t.SeeAVs, Is.EqualTo(s.SeeAVs)); Assert.That(t.SnapshotID, Is.EqualTo(s.SnapshotID)); Assert.That(t.UserLocation, Is.EqualTo(s.UserLocation)); Assert.That(t.UserLookAt, Is.EqualTo(s.UserLookAt)); } [Test] public void EnableSimulatorMessage() { EnableSimulatorMessage s = new EnableSimulatorMessage { Simulators = new EnableSimulatorMessage.SimulatorInfoBlock[2] }; EnableSimulatorMessage.SimulatorInfoBlock block1 = new EnableSimulatorMessage.SimulatorInfoBlock { IP = testIP, Port = 3000, RegionHandle = testHandle }; s.Simulators[0] = block1; EnableSimulatorMessage.SimulatorInfoBlock block2 = new EnableSimulatorMessage.SimulatorInfoBlock { IP = testIP, Port = 3001, RegionHandle = testHandle }; s.Simulators[1] = block2; OSDMap map = s.Serialize(); EnableSimulatorMessage t = new EnableSimulatorMessage(); t.Deserialize(map); for (int i = 0; i < t.Simulators.Length; i++) { Assert.That(t.Simulators[i].IP, Is.EqualTo(s.Simulators[i].IP)); Assert.That(t.Simulators[i].Port, Is.EqualTo(s.Simulators[i].Port)); Assert.That(t.Simulators[i].RegionHandle, Is.EqualTo(s.Simulators[i].RegionHandle)); } } [Test] public void RemoteParcelRequestReply() { RemoteParcelRequestReply s = new RemoteParcelRequestReply { ParcelID = UUID.Random() }; OSDMap map = s.Serialize(); RemoteParcelRequestReply t = new RemoteParcelRequestReply(); t.Deserialize(map); Assert.That(t.ParcelID, Is.EqualTo(s.ParcelID)); } [Test] public void UpdateScriptTaskMessage() { UpdateScriptTaskUpdateMessage s = new UpdateScriptTaskUpdateMessage { TaskID = UUID.Random(), Target = "mono", ScriptRunning = true, ItemID = UUID.Random() }; OSDMap map = s.Serialize(); UpdateScriptTaskUpdateMessage t = new UpdateScriptTaskUpdateMessage(); t.Deserialize(map); Assert.That(t.ItemID, Is.EqualTo(s.ItemID)); Assert.That(t.ScriptRunning, Is.EqualTo(s.ScriptRunning)); Assert.That(t.Target, Is.EqualTo(s.Target)); Assert.That(t.TaskID, Is.EqualTo(s.TaskID)); } [Test] public void UpdateScriptAgentMessage() { UpdateScriptAgentRequestMessage s = new UpdateScriptAgentRequestMessage { ItemID = UUID.Random(), Target = "lsl2" }; OSDMap map = s.Serialize(); UpdateScriptAgentRequestMessage t = new UpdateScriptAgentRequestMessage(); t.Deserialize(map); Assert.That(t.ItemID, Is.EqualTo(s.ItemID)); Assert.That(t.Target, Is.EqualTo(s.Target)); } [Test] public void SendPostcardMessage() { SendPostcardMessage s = new SendPostcardMessage { FromEmail = "contact@openmetaverse.co", FromName = "Jim Radford", GlobalPosition = Vector3.One, Message = "Hello, How are you today?", Subject = "Postcard from the edge", ToEmail = "test1@example.com" }; OSDMap map = s.Serialize(); SendPostcardMessage t = new SendPostcardMessage(); t.Deserialize(map); Assert.That(t.FromEmail, Is.EqualTo(s.FromEmail)); Assert.That(t.FromName, Is.EqualTo(s.FromName)); Assert.That(t.GlobalPosition, Is.EqualTo(s.GlobalPosition)); Assert.That(t.Message, Is.EqualTo(s.Message)); Assert.That(t.Subject, Is.EqualTo(s.Subject)); Assert.That(t.ToEmail, Is.EqualTo(s.ToEmail)); } [Test] public void UpdateNotecardAgentInventoryMessage() { UpdateAgentInventoryRequestMessage s = new UpdateAgentInventoryRequestMessage { ItemID = UUID.Random() }; OSDMap map = s.Serialize(); UpdateAgentInventoryRequestMessage t = new UpdateAgentInventoryRequestMessage(); t.Deserialize(map); Assert.That(t.ItemID, Is.EqualTo(s.ItemID)); } [Test] public void LandStatReplyMessage() { LandStatReplyMessage s = new LandStatReplyMessage { ReportType = 22, RequestFlags = 44, TotalObjectCount = 2, ReportDataBlocks = new LandStatReplyMessage.ReportDataBlock[2] }; LandStatReplyMessage.ReportDataBlock block1 = new LandStatReplyMessage.ReportDataBlock { Location = Vector3.One, MonoScore = 99, OwnerName = "Profoky Neva", Score = 10, TaskID = UUID.Random(), TaskLocalID = 987341, TaskName = "Verbal Flogging", TimeStamp = new DateTime(2009, 5, 23, 4, 30, 0) }; s.ReportDataBlocks[0] = block1; LandStatReplyMessage.ReportDataBlock block2 = new LandStatReplyMessage.ReportDataBlock { Location = Vector3.One, MonoScore = 1, OwnerName = "Philip Linden", Score = 5, TaskID = UUID.Random(), TaskLocalID = 987342, TaskName = "Happy Ant", TimeStamp = new DateTime(2008, 4, 22, 3, 29, 55) }; s.ReportDataBlocks[1] = block2; OSDMap map = s.Serialize(); LandStatReplyMessage t = new LandStatReplyMessage(); t.Deserialize(map); Assert.That(t.ReportType, Is.EqualTo(s.ReportType)); Assert.That(t.RequestFlags, Is.EqualTo(s.RequestFlags)); Assert.That(t.TotalObjectCount, Is.EqualTo(s.TotalObjectCount)); for (int i = 0; i < t.ReportDataBlocks.Length; i++) { Assert.That(t.ReportDataBlocks[i].Location, Is.EqualTo(s.ReportDataBlocks[i].Location)); Assert.That(t.ReportDataBlocks[i].MonoScore, Is.EqualTo(s.ReportDataBlocks[i].MonoScore)); Assert.That(t.ReportDataBlocks[i].OwnerName, Is.EqualTo(s.ReportDataBlocks[i].OwnerName)); Assert.That(t.ReportDataBlocks[i].Score, Is.EqualTo(s.ReportDataBlocks[i].Score)); Assert.That(t.ReportDataBlocks[i].TaskID, Is.EqualTo(s.ReportDataBlocks[i].TaskID)); Assert.That(t.ReportDataBlocks[i].TaskLocalID, Is.EqualTo(s.ReportDataBlocks[i].TaskLocalID)); Assert.That(t.ReportDataBlocks[i].TaskName, Is.EqualTo(s.ReportDataBlocks[i].TaskName)); Assert.That(t.ReportDataBlocks[i].TimeStamp, Is.EqualTo(s.ReportDataBlocks[i].TimeStamp)); } } [Test] public void TelportFailedMessage() { TeleportFailedMessage s = new TeleportFailedMessage { AgentID = UUID.Random(), MessageKey = "Key", Reason = "Unable To Teleport for some unspecified reason", ExtraParams = string.Empty }; OSDMap map = s.Serialize(); TeleportFailedMessage t = new TeleportFailedMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.ExtraParams, Is.EqualTo(s.ExtraParams)); Assert.That(t.MessageKey, Is.EqualTo(s.MessageKey)); Assert.That(t.Reason, Is.EqualTo(s.Reason)); } [Test] public void UpdateAgentInformationMessage() { UpdateAgentInformationMessage s = new UpdateAgentInformationMessage { MaxAccess = "PG" }; OSDMap map = s.Serialize(); UpdateAgentInformationMessage t = new UpdateAgentInformationMessage(); t.Deserialize(map); Assert.That(t.MaxAccess, Is.EqualTo(s.MaxAccess)); } [Test] public void PlacesReplyMessage() { PlacesReplyMessage s = new PlacesReplyMessage { TransactionID = UUID.Random(), AgentID = UUID.Random(), QueryID = UUID.Random(), QueryDataBlocks = new PlacesReplyMessage.QueryData[2] }; PlacesReplyMessage.QueryData q1 = new PlacesReplyMessage.QueryData { ActualArea = 1024, BillableArea = 768, Description = "Test Description Q1", Dwell = 1435.4f, Flags = 1 << 6, GlobalX = 1, GlobalY = 2, GlobalZ = 3, Name = "Test Name Q1", OwnerID = UUID.Random(), Price = 1, ProductSku = "021", SimName = "Hooper", SnapShotID = UUID.Random() }; s.QueryDataBlocks[0] = q1; PlacesReplyMessage.QueryData q2 = new PlacesReplyMessage.QueryData { ActualArea = 512, BillableArea = 384, Description = "Test Description Q2", Dwell = 1, Flags = 1 << 4, GlobalX = 4, GlobalY = 5, GlobalZ = 6, Name = "Test Name Q2", OwnerID = UUID.Random(), Price = 2, ProductSku = "022", SimName = "Tethys", SnapShotID = UUID.Random() }; s.QueryDataBlocks[1] = q2; OSDMap map = s.Serialize(); PlacesReplyMessage t = new PlacesReplyMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.TransactionID, Is.EqualTo(s.TransactionID)); Assert.That(t.QueryID, Is.EqualTo(s.QueryID)); for (int i = 0; i < s.QueryDataBlocks.Length; i++) { Assert.That(t.QueryDataBlocks[i].ActualArea, Is.EqualTo(s.QueryDataBlocks[i].ActualArea)); Assert.That(t.QueryDataBlocks[i].BillableArea, Is.EqualTo(s.QueryDataBlocks[i].BillableArea)); Assert.That(t.QueryDataBlocks[i].Description, Is.EqualTo(s.QueryDataBlocks[i].Description)); Assert.That(t.QueryDataBlocks[i].Dwell, Is.EqualTo(s.QueryDataBlocks[i].Dwell)); Assert.That(t.QueryDataBlocks[i].Flags, Is.EqualTo(s.QueryDataBlocks[i].Flags)); Assert.That(t.QueryDataBlocks[i].GlobalX, Is.EqualTo(s.QueryDataBlocks[i].GlobalX)); Assert.That(t.QueryDataBlocks[i].GlobalY, Is.EqualTo(s.QueryDataBlocks[i].GlobalY)); Assert.That(t.QueryDataBlocks[i].GlobalZ, Is.EqualTo(s.QueryDataBlocks[i].GlobalZ)); Assert.That(t.QueryDataBlocks[i].Name, Is.EqualTo(s.QueryDataBlocks[i].Name)); Assert.That(t.QueryDataBlocks[i].OwnerID, Is.EqualTo(s.QueryDataBlocks[i].OwnerID)); Assert.That(t.QueryDataBlocks[i].Price, Is.EqualTo(s.QueryDataBlocks[i].Price)); Assert.That(t.QueryDataBlocks[i].ProductSku, Is.EqualTo(s.QueryDataBlocks[i].ProductSku)); Assert.That(t.QueryDataBlocks[i].SimName, Is.EqualTo(s.QueryDataBlocks[i].SimName)); Assert.That(t.QueryDataBlocks[i].SnapShotID, Is.EqualTo(s.QueryDataBlocks[i].SnapShotID)); } } [Test] public void DirLandReplyMessage() { DirLandReplyMessage s = new DirLandReplyMessage { AgentID = UUID.Random(), QueryID = UUID.Random(), QueryReplies = new DirLandReplyMessage.QueryReply[2] }; DirLandReplyMessage.QueryReply q1 = new DirLandReplyMessage.QueryReply { ActualArea = 1024, Auction = true, ForSale = true, Name = "For Sale Parcel Q1", ProductSku = "023", SalePrice = 2193, ParcelID = UUID.Random() }; s.QueryReplies[0] = q1; DirLandReplyMessage.QueryReply q2 = new DirLandReplyMessage.QueryReply { ActualArea = 512, Auction = true, ForSale = true, Name = "For Sale Parcel Q2", ProductSku = "023", SalePrice = 22193, ParcelID = UUID.Random() }; s.QueryReplies[1] = q2; OSDMap map = s.Serialize(); DirLandReplyMessage t = new DirLandReplyMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.QueryID, Is.EqualTo(s.QueryID)); for (int i = 0; i < s.QueryReplies.Length; i++) { Assert.That(t.QueryReplies[i].ActualArea, Is.EqualTo(s.QueryReplies[i].ActualArea)); Assert.That(t.QueryReplies[i].Auction, Is.EqualTo(s.QueryReplies[i].Auction)); Assert.That(t.QueryReplies[i].ForSale, Is.EqualTo(s.QueryReplies[i].ForSale)); Assert.That(t.QueryReplies[i].Name, Is.EqualTo(s.QueryReplies[i].Name)); Assert.That(t.QueryReplies[i].ProductSku, Is.EqualTo(s.QueryReplies[i].ProductSku)); Assert.That(t.QueryReplies[i].ParcelID, Is.EqualTo(s.QueryReplies[i].ParcelID)); Assert.That(t.QueryReplies[i].SalePrice, Is.EqualTo(s.QueryReplies[i].SalePrice)); } } #region Performance Testing private const int TEST_ITER = 100000; [Test] [Category("Benchmark")] public void ReflectionPerformanceRemoteParcelResponse() { DateTime messageTestTime = DateTime.UtcNow; for (int x = 0; x < TEST_ITER; x++) { RemoteParcelRequestReply s = new RemoteParcelRequestReply { ParcelID = UUID.Random() }; OSDMap map = s.Serialize(); RemoteParcelRequestReply t = new RemoteParcelRequestReply(); t.Deserialize(map); Assert.That(t.ParcelID, Is.EqualTo(s.ParcelID)); } TimeSpan duration = DateTime.UtcNow - messageTestTime; Console.WriteLine("RemoteParcelRequestReply: OMV Message System Serialization/Deserialization Passes: {0} Total time: {1}", TEST_ITER, duration); } [Test] [Category("Benchmark")] public void ReflectionPerformanceDirLandReply() { DateTime messageTestTime = DateTime.UtcNow; for (int x = 0; x < TEST_ITER; x++) { DirLandReplyMessage s = new DirLandReplyMessage { AgentID = UUID.Random(), QueryID = UUID.Random(), QueryReplies = new DirLandReplyMessage.QueryReply[2] }; DirLandReplyMessage.QueryReply q1 = new DirLandReplyMessage.QueryReply { ActualArea = 1024, Auction = true, ForSale = true, Name = "For Sale Parcel Q1", ProductSku = "023", SalePrice = 2193, ParcelID = UUID.Random() }; s.QueryReplies[0] = q1; DirLandReplyMessage.QueryReply q2 = new DirLandReplyMessage.QueryReply { ActualArea = 512, Auction = true, ForSale = true, Name = "For Sale Parcel Q2", ProductSku = "023", SalePrice = 22193, ParcelID = UUID.Random() }; s.QueryReplies[1] = q2; OSDMap map = s.Serialize(); DirLandReplyMessage t = new DirLandReplyMessage(); t.Deserialize(map); Assert.That(t.AgentID, Is.EqualTo(s.AgentID)); Assert.That(t.QueryID, Is.EqualTo(s.QueryID)); for (int i = 0; i < s.QueryReplies.Length; i++) { Assert.That(t.QueryReplies[i].ActualArea, Is.EqualTo(s.QueryReplies[i].ActualArea)); Assert.That(t.QueryReplies[i].Auction, Is.EqualTo(s.QueryReplies[i].Auction)); Assert.That(t.QueryReplies[i].ForSale, Is.EqualTo(s.QueryReplies[i].ForSale)); Assert.That(t.QueryReplies[i].Name, Is.EqualTo(s.QueryReplies[i].Name)); Assert.That(t.QueryReplies[i].ProductSku, Is.EqualTo(s.QueryReplies[i].ProductSku)); Assert.That(t.QueryReplies[i].ParcelID, Is.EqualTo(s.QueryReplies[i].ParcelID)); Assert.That(t.QueryReplies[i].SalePrice, Is.EqualTo(s.QueryReplies[i].SalePrice)); } } TimeSpan duration = DateTime.UtcNow - messageTestTime; Console.WriteLine("DirLandReplyMessage: OMV Message System Serialization/Deserialization Passes: {0} Total time: {1}", TEST_ITER, duration); } [Test] [Category("Benchmark")] public void ReflectionPerformanceDirLandReply2() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(DirLandReplyMessage)); DirLandReplyMessage s = new DirLandReplyMessage { AgentID = UUID.Random(), QueryID = UUID.Random(), QueryReplies = new DirLandReplyMessage.QueryReply[2] }; DirLandReplyMessage.QueryReply q1 = new DirLandReplyMessage.QueryReply { ActualArea = 1024, Auction = true, ForSale = true, Name = "For Sale Parcel Q1", ProductSku = "023", SalePrice = 2193, ParcelID = UUID.Random() }; s.QueryReplies[0] = q1; DirLandReplyMessage.QueryReply q2 = new DirLandReplyMessage.QueryReply { ActualArea = 512, Auction = true, ForSale = true, Name = "For Sale Parcel Q2", ProductSku = "023", SalePrice = 22193, ParcelID = UUID.Random() }; s.QueryReplies[1] = q2; System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch(); timer.Start(); for (int i = 0; i < TEST_ITER; ++i) { MemoryStream stream = new MemoryStream(); OSDMap map = s.Serialize(); byte[] jsonData = Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(map)); stream.Write(jsonData, 0, jsonData.Length); stream.Flush(); stream.Close(); } timer.Stop(); Console.WriteLine("OMV Message System Serialization/Deserialization Passes: {0} Total time: {1}", TEST_ITER, timer.Elapsed.TotalSeconds); timer.Reset(); timer.Start(); for (int i = 0; i < TEST_ITER; ++i) { MemoryStream stream = new MemoryStream(); xmlSerializer.Serialize(stream, s); stream.Flush(); stream.Close(); } timer.Stop(); Console.WriteLine(".NET BinarySerialization/Deserialization Passes: {0} Total time: {1}", TEST_ITER, timer.Elapsed.TotalSeconds); } [Test] [Category("Benchmark")] public void ReflectionPerformanceParcelProperties() { DateTime messageTestTime = DateTime.UtcNow; for (int x = 0; x < TEST_ITER; x++) { ParcelPropertiesMessage s = new ParcelPropertiesMessage { AABBMax = Vector3.Parse("<1,2,3>"), AABBMin = Vector3.Parse("<2,3,1>"), Area = 1024, AuctionID = uint.MaxValue, AuthBuyerID = UUID.Random(), Bitmap = Utils.EmptyBytes, Category = ParcelCategory.Educational, ClaimDate = new DateTime(2008, 12, 25, 3, 15, 22), ClaimPrice = 1000, Desc = "Test Description", GroupID = UUID.Random(), GroupPrims = 50, IsGroupOwned = false, LandingType = LandingType.None, LocalID = 1, MaxPrims = 234, MediaAutoScale = false, MediaDesc = "Example Media Description", MediaHeight = 480, MediaID = UUID.Random(), MediaLoop = false, MediaType = "text/html", MediaURL = "http://www.openmetaverse.co", MediaWidth = 640, MusicURL = "http://scfire-ntc-aa04.stream.aol.com:80/stream/1075", // Yee Haw Name = "Test Name", ObscureMedia = false, ObscureMusic = false, OtherCleanTime = 5, OtherCount = 200, OtherPrims = 300, OwnerID = UUID.Random(), OwnerPrims = 0, ParcelFlags = ParcelFlags.AllowDamage | ParcelFlags.AllowGroupScripts | ParcelFlags.AllowVoiceChat, ParcelPrimBonus = 0f, PassHours = 1.5f, PassPrice = 10, PublicCount = 20, RegionDenyAgeUnverified = false, RegionDenyAnonymous = false, RegionPushOverride = true, RentPrice = 0, RequestResult = ParcelResult.Single, SalePrice = 9999, SelectedPrims = 1, SelfCount = 2, SequenceID = -4000, SimWideMaxPrims = 937, SimWideTotalPrims = 117, SnapSelection = false, SnapshotID = UUID.Random(), Status = ParcelStatus.Leased, TotalPrims = 219, UserLocation = Vector3.Parse("<3,4,5>"), UserLookAt = Vector3.Parse("<5,4,3>") }; OSDMap map = s.Serialize(); ParcelPropertiesMessage t = new ParcelPropertiesMessage(); t.Deserialize(map); Assert.That(t.AABBMax, Is.EqualTo(s.AABBMax)); Assert.That(t.AABBMin, Is.EqualTo(s.AABBMin)); Assert.That(t.Area, Is.EqualTo(s.Area)); Assert.That(t.AuctionID, Is.EqualTo(s.AuctionID)); Assert.That(t.AuthBuyerID, Is.EqualTo(s.AuthBuyerID)); Assert.That(t.Bitmap, Is.EqualTo(s.Bitmap)); Assert.That(t.Category, Is.EqualTo(s.Category)); Assert.That(t.ClaimDate, Is.EqualTo(s.ClaimDate)); Assert.That(t.ClaimPrice, Is.EqualTo(s.ClaimPrice)); Assert.That(t.Desc, Is.EqualTo(s.Desc)); Assert.That(t.GroupID, Is.EqualTo(s.GroupID)); Assert.That(t.GroupPrims, Is.EqualTo(s.GroupPrims)); Assert.That(t.IsGroupOwned, Is.EqualTo(s.IsGroupOwned)); Assert.That(t.LandingType, Is.EqualTo(s.LandingType)); Assert.That(t.LocalID, Is.EqualTo(s.LocalID)); Assert.That(t.MaxPrims, Is.EqualTo(s.MaxPrims)); Assert.That(t.MediaAutoScale, Is.EqualTo(s.MediaAutoScale)); Assert.That(t.MediaDesc, Is.EqualTo(s.MediaDesc)); Assert.That(t.MediaHeight, Is.EqualTo(s.MediaHeight)); Assert.That(t.MediaID, Is.EqualTo(s.MediaID)); Assert.That(t.MediaLoop, Is.EqualTo(s.MediaLoop)); Assert.That(t.MediaType, Is.EqualTo(s.MediaType)); Assert.That(t.MediaURL, Is.EqualTo(s.MediaURL)); Assert.That(t.MediaWidth, Is.EqualTo(s.MediaWidth)); Assert.That(t.MusicURL, Is.EqualTo(s.MusicURL)); Assert.That(t.Name, Is.EqualTo(s.Name)); Assert.That(t.ObscureMedia, Is.EqualTo(s.ObscureMedia)); Assert.That(t.ObscureMusic, Is.EqualTo(s.ObscureMusic)); Assert.That(t.OtherCleanTime, Is.EqualTo(s.OtherCleanTime)); Assert.That(t.OtherCount, Is.EqualTo(s.OtherCount)); Assert.That(t.OtherPrims, Is.EqualTo(s.OtherPrims)); Assert.That(t.OwnerID, Is.EqualTo(s.OwnerID)); Assert.That(t.OwnerPrims, Is.EqualTo(s.OwnerPrims)); Assert.That(t.ParcelFlags, Is.EqualTo(s.ParcelFlags)); Assert.That(t.ParcelPrimBonus, Is.EqualTo(s.ParcelPrimBonus)); Assert.That(t.PassHours, Is.EqualTo(s.PassHours)); Assert.That(t.PassPrice, Is.EqualTo(s.PassPrice)); Assert.That(t.PublicCount, Is.EqualTo(s.PublicCount)); Assert.That(t.RegionDenyAgeUnverified, Is.EqualTo(s.RegionDenyAgeUnverified)); Assert.That(t.RegionDenyAnonymous, Is.EqualTo(s.RegionDenyAnonymous)); Assert.That(t.RegionPushOverride, Is.EqualTo(s.RegionPushOverride)); Assert.That(t.RentPrice, Is.EqualTo(s.RentPrice)); Assert.That(t.RequestResult, Is.EqualTo(s.RequestResult)); Assert.That(t.SalePrice, Is.EqualTo(s.SalePrice)); Assert.That(t.SelectedPrims, Is.EqualTo(s.SelectedPrims)); Assert.That(t.SelfCount, Is.EqualTo(s.SelfCount)); Assert.That(t.SequenceID, Is.EqualTo(s.SequenceID)); Assert.That(t.SimWideMaxPrims, Is.EqualTo(s.SimWideMaxPrims)); Assert.That(t.SimWideTotalPrims, Is.EqualTo(s.SimWideTotalPrims)); Assert.That(t.SnapSelection, Is.EqualTo(s.SnapSelection)); Assert.That(t.SnapshotID, Is.EqualTo(s.SnapshotID)); Assert.That(t.Status, Is.EqualTo(s.Status)); Assert.That(t.TotalPrims, Is.EqualTo(s.TotalPrims)); Assert.That(t.UserLocation, Is.EqualTo(s.UserLocation)); Assert.That(t.UserLookAt, Is.EqualTo(s.UserLookAt)); } TimeSpan duration = DateTime.UtcNow - messageTestTime; Console.WriteLine("ParcelPropertiesMessage: OMV Message System Serialization/Deserialization Passes: {0} Total time: {1}", TEST_ITER, duration); } #endregion } }