From 9dff38ca1427e73dbf297f095a1e4c63eb994020 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Tue, 13 Jan 2009 19:55:07 +0000 Subject: [PATCH] * Extended TextureSenderTests and modified TestClient.cs with new methods From: Arthur Rodrigo S Valadares --- .../TextureSender/Tests/TextureSenderTests.cs | 134 ++++++++++++++++-- OpenSim/Tests/Common/Mock/TestClient.cs | 60 +++++--- 2 files changed, 167 insertions(+), 27 deletions(-) diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs index 4049dfcb1c..c15bd46da1 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs @@ -25,9 +25,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; +using System.Collections; using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; using OpenMetaverse; using OpenSim.Framework; + using OpenSim.Tests.Common.Mock; namespace OpenSim.Region.Environment.Modules.Agent.TextureSender @@ -35,11 +39,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender [TestFixture] public class UserTextureSenderTests { - [Test] - /// - /// More a placeholder, really - /// - public void DummyTest() + public UUID uuid1; + public UUID uuid2; + public UUID uuid3; + public UUID uuid4; + public int npackets, testsize; + public TestClient client; + public TextureSender ts; + public static Random random = new Random(); + + [TestFixtureSetUp] + public void Init() { AgentCircuitData agent = new AgentCircuitData(); agent.AgentID = UUID.Random(); @@ -52,8 +62,116 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender agent.InventoryFolder = UUID.Zero; agent.startpos = Vector3.Zero; agent.CapsPath = "http://wibble.com"; - - new TextureSender(new TestClient(agent), 0, 0); + client = new TestClient(agent); + ts = new TextureSender(client, 0, 0); + testsize = random.Next(5000,15000); + npackets = CalculateNumPackets(testsize); + uuid1 = UUID.Random(); + uuid2 = UUID.Random(); + uuid3 = UUID.Random(); + uuid4 = UUID.Random(); + } + + /// + /// Test sending package + /// + [Test] + public void T010_SendPkg() + { + // Normal sending + AssetBase abase = new AssetBase(uuid1, "asset one"); + byte[] abdata = new byte[testsize]; + random.NextBytes(abdata); + abase.Data = abdata; + bool isdone = false; + ts.TextureReceived(abase); + for (int i = 0; i < npackets; i++) { + isdone = ts.SendTexturePacket(); + } + + Assert.That(isdone,Is.False); + isdone = ts.SendTexturePacket(); + Assert.That(isdone,Is.True); + } + + [Test] + public void T011_UpdateReq() + { + // Test packet number start + AssetBase abase = new AssetBase(uuid2, "asset two"); + byte[] abdata = new byte[testsize]; + random.NextBytes(abdata); + abase.Data = abdata; + + bool isdone = false; + ts.TextureReceived(abase); + ts.UpdateRequest(0,3); + + for (int i = 0; i < npackets-3; i++) { + isdone = ts.SendTexturePacket(); + } + + Assert.That(isdone,Is.False); + isdone = ts.SendTexturePacket(); + Assert.That(isdone,Is.True); + + // Test discard level + abase = new AssetBase(uuid3, "asset three"); + abdata = new byte[testsize]; + random.NextBytes(abdata); + abase.Data = abdata; + isdone = false; + ts.TextureReceived(abase); + ts.UpdateRequest(-1,0); + + Assert.That(ts.SendTexturePacket(),Is.True); + + abase = new AssetBase(uuid4, "asset four"); + abdata = new byte[testsize]; + random.NextBytes(abdata); + abase.Data = abdata; + isdone = false; + ts.TextureReceived(abase); + ts.UpdateRequest(0,5); + + for (int i = 0; i < npackets-5; i++) { + isdone = ts.SendTexturePacket(); + } + Assert.That(isdone,Is.False); + isdone = ts.SendTexturePacket(); + Assert.That(isdone,Is.True); + } + + [Test] + public void T999_FinishStatus() + { + // Of the 4 assets "sent", only 2 sent the first part. + Assert.That(client.sentdatapkt.Count,Is.EqualTo(2)); + + // Sum of all packets sent: + int totalpkts = (npackets) + (npackets - 2) + (npackets - 4); + Assert.That(client.sentpktpkt.Count,Is.EqualTo(totalpkts)); + } + /// + /// Calculate the number of packets that will be required to send the texture loaded into this sender + /// This is actually the number of 1000 byte packets not including an initial 600 byte packet... + /// Borrowed from TextureSender.cs + /// + /// + /// + private int CalculateNumPackets(int length) + { + int numPackets = 0; + + if (length > 600) + { + //over 600 bytes so split up file + int restData = (length - 600); + int restPackets = ((restData + 999) / 1000); + numPackets = restPackets; + } + + return numPackets; } } -} \ No newline at end of file +} diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index a9ee837291..428f5996e5 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs @@ -39,6 +39,10 @@ namespace OpenSim.Tests.Common.Mock { private Scene m_scene; + // Mock testing variables + public List sentdatapkt = new List(); + public List sentpktpkt = new List(); + // disable warning: public events, part of the public API #pragma warning disable 67 @@ -215,7 +219,7 @@ namespace OpenSim.Tests.Common.Mock public event ActivateGesture OnActivateGesture; public event DeactivateGesture OnDeactivateGesture; public event ObjectOwner OnObjectOwner; - + public event DirPlacesQuery OnDirPlacesQuery; public event DirFindQuery OnDirFindQuery; public event DirLandQuery OnDirLandQuery; @@ -229,7 +233,7 @@ namespace OpenSim.Tests.Common.Mock public event OfferCallingCard OnOfferCallingCard; public event AcceptCallingCard OnAcceptCallingCard; public event DeclineCallingCard OnDeclineCallingCard; - + public event SoundTrigger OnSoundTrigger; public event StartLure OnStartLure; @@ -284,7 +288,7 @@ namespace OpenSim.Tests.Common.Mock { get { return m_firstName; } } - private string m_firstName; + private string m_firstName; public virtual string LastName { @@ -359,7 +363,7 @@ namespace OpenSim.Tests.Common.Mock { myID = agentData.AgentID; m_firstName = agentData.firstname; - m_lastName = agentData.lastname; + m_lastName = agentData.lastname; } public virtual void ActivateGesture(UUID assetId, UUID gestureId) @@ -420,12 +424,12 @@ namespace OpenSim.Tests.Common.Mock public void SendInstantMessage(UUID fromAgent, string message, UUID toAgent, string fromName, byte dialog, uint timeStamp) { - + } public void SendInstantMessage(UUID fromAgent, string message, UUID toAgent, string fromName, byte dialog, uint timeStamp, UUID transactionID, bool fromGroup, byte[] binaryBucket) { - + } public void SendGenericMessage(string method, List message) @@ -563,7 +567,7 @@ namespace OpenSim.Tests.Common.Mock public virtual void SendBulkUpdateInventory(InventoryItemBase item) { } - + public void SendBulkUpdateInventory(InventoryFolderBase folderBase) {} @@ -590,7 +594,7 @@ namespace OpenSim.Tests.Common.Mock int PricePublicObjectDelete, int PriceRentLight, int PriceUpload, int TeleportMinPrice, float TeleportPriceExponent) { } - + public virtual void SendNameReply(UUID profileId, string firstname, string lastname) { } @@ -660,16 +664,34 @@ namespace OpenSim.Tests.Common.Mock public void SendImageFirstPart(ushort numParts, UUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec) { + ImageDataPacket im = new ImageDataPacket(); + im.Header.Reliable = false; + im.ImageID.Packets = numParts; + im.ImageID.ID = ImageUUID; + + if (ImageSize > 0) + im.ImageID.Size = ImageSize; + + im.ImageData.Data = ImageData; + im.ImageID.Codec = imageCodec; + im.Header.Zerocoded = true; + sentdatapkt.Add(im); } - + public void SendImageNextPart(ushort partNumber, UUID imageUuid, byte[] imageData) { + ImagePacketPacket im = new ImagePacketPacket(); + im.Header.Reliable = false; + im.ImageID.Packet = partNumber; + im.ImageID.ID = imageUuid; + im.ImageData.Data = imageData; + sentpktpkt.Add(im); } - + public void SendImageNotFound(UUID imageid) { } - + public void SendShutdownConnectionNotice() { } @@ -726,10 +748,10 @@ namespace OpenSim.Tests.Common.Mock public void SendSunPos(Vector3 sunPos, Vector3 sunVel, ulong time, uint dlen, uint ylen, float phase) { } - + public void SendViewerEffect(ViewerEffectPacket.EffectBlock[] effectBlocks) { - } + } public void SendViewerTime(int phase) { @@ -804,11 +826,11 @@ namespace OpenSim.Tests.Common.Mock public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) { } - + public void SendEstateCovenantInformation(UUID covenant) { } - + public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner) { } @@ -816,19 +838,19 @@ namespace OpenSim.Tests.Common.Mock public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) { } - + public void SendLandAccessListData(List avatars, uint accessFlag, int localLandID) { } - + public void SendForceClientSelectObjects(List objectIDs) { } - + public void SendLandObjectOwners(Dictionary ownersAndCount) { } - + public void SendLandParcelOverlay(byte[] data, int sequence_id) { }