From 9dff38ca1427e73dbf297f095a1e4c63eb994020 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Tue, 13 Jan 2009 19:55:07 +0000
Subject: * Extended TextureSenderTests and modified TestClient.cs with new
 methods

From: Arthur Rodrigo S Valadares <arthursv@linux.vnet.ibm.com>

---
 .../TextureSender/Tests/TextureSenderTests.cs      | 134 +++++++++++++++++++--
 1 file changed, 126 insertions(+), 8 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs
index 4049dfc..c15bd46 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]
-        /// <summary>
-        /// More a placeholder, really
-        /// </summary>
-        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();
+        }
+
+        /// <summary>
+        /// Test sending package
+        /// </summary>
+        [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));
+        }
+        /// <summary>
+        /// 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
+        /// </summary>
+        /// <param name="length"></param>
+        /// <returns></returns>
+        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
+}
-- 
cgit v1.1