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)
{
}