From a89d097355526d4dc52a75a9734c6a02c3008ef4 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Mon, 9 Feb 2009 09:16:15 +0000 Subject: starting phase 2 of the OpenSim.Region.Environment commit: relocating OpenSim.Region.Environment.Modules.Agent en bloc to OpenSim.Region.CoreModules --- .../TextureSender/Tests/TextureSenderTests.cs | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 OpenSim/Region/CoreModules/Agent/TextureSender/Tests/TextureSenderTests.cs (limited to 'OpenSim/Region/CoreModules/Agent/TextureSender/Tests/TextureSenderTests.cs') diff --git a/OpenSim/Region/CoreModules/Agent/TextureSender/Tests/TextureSenderTests.cs b/OpenSim/Region/CoreModules/Agent/TextureSender/Tests/TextureSenderTests.cs new file mode 100644 index 0000000..f0587bb --- /dev/null +++ b/OpenSim/Region/CoreModules/Agent/TextureSender/Tests/TextureSenderTests.cs @@ -0,0 +1,177 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * 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. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project 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 DEVELOPERS ``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 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.Collections; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Tests.Common.Mock; + +namespace OpenSim.Region.CoreModules.Agent.TextureSender +{ + [TestFixture] + public class UserTextureSenderTests + { + 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(); + agent.firstname = "testfirstname"; + agent.lastname = "testlastname"; + agent.SessionID = UUID.Zero; + agent.SecureSessionID = UUID.Zero; + agent.circuitcode = 123; + agent.BaseFolder = UUID.Zero; + agent.InventoryFolder = UUID.Zero; + agent.startpos = Vector3.Zero; + agent.CapsPath = "http://wibble.com"; + client = new TestClient(agent, null); + 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; + } + } +} -- cgit v1.1