Add basic request and send image regression tests for LLImageManager
parent
16d5ce16b6
commit
e90cfc17ca
|
@ -82,7 +82,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="packetsToSend">Maximum number of packets to send during this call</param>
|
/// <param name="packetsToSend">Maximum number of packets to send during this call</param>
|
||||||
/// <param name="packetsSent">Number of packets sent during this call</param>
|
/// <param name="packetsSent">Number of packets sent during this call</param>
|
||||||
/// <returns>True if the transfer completes at the current discard level, otherwise false</returns>
|
/// <returns>True if the transfer completes at the current discard level, otherwise false</returns>
|
||||||
public bool SendPackets(LLClientView client, int packetsToSend, out int packetsSent)
|
public bool SendPackets(IClientAPI client, int packetsToSend, out int packetsSent)
|
||||||
{
|
{
|
||||||
packetsSent = 0;
|
packetsSent = 0;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SendFirstPacket(LLClientView client)
|
private bool SendFirstPacket(IClientAPI client)
|
||||||
{
|
{
|
||||||
if (client == null)
|
if (client == null)
|
||||||
return false;
|
return false;
|
||||||
|
@ -247,7 +247,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SendPacket(LLClientView client)
|
private bool SendPacket(IClientAPI client)
|
||||||
{
|
{
|
||||||
if (client == null)
|
if (client == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -55,16 +55,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private bool m_shuttingdown;
|
private bool m_shuttingdown;
|
||||||
private AssetBase m_missingImage;
|
private AssetBase m_missingImage;
|
||||||
private LLClientView m_client; //Client we're assigned to
|
private IClientAPI m_client; //Client we're assigned to
|
||||||
private IAssetService m_assetCache; //Asset Cache
|
private IAssetService m_assetCache; //Asset Cache
|
||||||
private IJ2KDecoder m_j2kDecodeModule; //Our J2K module
|
private IJ2KDecoder m_j2kDecodeModule; //Our J2K module
|
||||||
private C5.IntervalHeap<J2KImage> m_priorityQueue = new C5.IntervalHeap<J2KImage>(10, new J2KImageComparer());
|
private C5.IntervalHeap<J2KImage> m_priorityQueue = new C5.IntervalHeap<J2KImage>(10, new J2KImageComparer());
|
||||||
private object m_syncRoot = new object();
|
private object m_syncRoot = new object();
|
||||||
|
|
||||||
public LLClientView Client { get { return m_client; } }
|
public IClientAPI Client { get { return m_client; } }
|
||||||
public AssetBase MissingImage { get { return m_missingImage; } }
|
public AssetBase MissingImage { get { return m_missingImage; } }
|
||||||
|
|
||||||
public LLImageManager(LLClientView client, IAssetService pAssetCache, IJ2KDecoder pJ2kDecodeModule)
|
public LLImageManager(IClientAPI client, IAssetService pAssetCache, IJ2KDecoder pJ2kDecodeModule)
|
||||||
{
|
{
|
||||||
m_client = client;
|
m_client = client;
|
||||||
m_assetCache = pAssetCache;
|
m_assetCache = pAssetCache;
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
/*
|
||||||
|
* 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 OpenSimulator 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.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net.Config;
|
||||||
|
using Nini.Config;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Packets;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.CoreModules.Agent.TextureSender;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
using OpenSim.Tests.Common.Mock;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class LLImageManagerTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestRequestAndSendImage()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
// XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
UUID imageId = TestHelpers.ParseTail(0x1);
|
||||||
|
string creatorId = TestHelpers.ParseTail(0x2).ToString();
|
||||||
|
UUID userId = TestHelpers.ParseTail(0x3);
|
||||||
|
|
||||||
|
J2KDecoderModule j2kdm = new J2KDecoderModule();
|
||||||
|
|
||||||
|
Scene scene = SceneHelpers.SetupScene();
|
||||||
|
SceneHelpers.SetupSceneModules(scene, j2kdm);
|
||||||
|
|
||||||
|
TestClient tc = new TestClient(SceneHelpers.GenerateAgentData(userId), scene);
|
||||||
|
LLImageManager llim = new LLImageManager(tc, scene.AssetService, j2kdm);
|
||||||
|
|
||||||
|
using (
|
||||||
|
Stream resource
|
||||||
|
= GetType().Assembly.GetManifestResourceStream(
|
||||||
|
"OpenSim.Region.ClientStack.LindenUDP.Tests.Resources.4-tile2.jp2"))
|
||||||
|
{
|
||||||
|
using (BinaryReader br = new BinaryReader(resource))
|
||||||
|
{
|
||||||
|
AssetBase asset = new AssetBase(imageId, "Test Image", (sbyte)AssetType.Texture, creatorId);
|
||||||
|
asset.Data = br.ReadBytes(99999999);
|
||||||
|
scene.AssetService.Store(asset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureRequestArgs args = new TextureRequestArgs();
|
||||||
|
args.RequestedAssetID = TestHelpers.ParseTail(0x1);
|
||||||
|
args.DiscardLevel = 0;
|
||||||
|
args.PacketNumber = 1;
|
||||||
|
args.Priority = 5;
|
||||||
|
args.requestSequence = 1;
|
||||||
|
|
||||||
|
llim.EnqueueReq(args);
|
||||||
|
llim.ProcessImageQueue(20);
|
||||||
|
|
||||||
|
Assert.That(tc.SentImageDataPackets.Count, Is.EqualTo(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
|
@ -344,7 +344,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
{
|
{
|
||||||
using (BinaryReader br = new BinaryReader(resource))
|
using (BinaryReader br = new BinaryReader(resource))
|
||||||
{
|
{
|
||||||
// FIXME: Use the inspector insteadthere are so many forums and lists already, though admittedly none of them are suitable for cross virtual-enivornemnt discussion
|
// FIXME: Use the inspector instead
|
||||||
soundData = br.ReadBytes(99999999);
|
soundData = br.ReadBytes(99999999);
|
||||||
UUID soundUuid = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
UUID soundUuid = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
||||||
string soundAssetFileName
|
string soundAssetFileName
|
||||||
|
|
|
@ -44,9 +44,6 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// Mock testing variables
|
|
||||||
public List<ImageDataPacket> sentdatapkt = new List<ImageDataPacket>();
|
|
||||||
public List<ImagePacketPacket> sentpktpkt = new List<ImagePacketPacket>();
|
|
||||||
EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing");
|
EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing");
|
||||||
|
|
||||||
// TODO: This is a really nasty (and temporary) means of telling the test client which scene to invoke setup
|
// TODO: This is a really nasty (and temporary) means of telling the test client which scene to invoke setup
|
||||||
|
@ -61,6 +58,9 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public List<UUID> ReceivedOnlineNotifications { get; private set; }
|
public List<UUID> ReceivedOnlineNotifications { get; private set; }
|
||||||
public List<UUID> ReceivedFriendshipTerminations { get; private set; }
|
public List<UUID> ReceivedFriendshipTerminations { get; private set; }
|
||||||
|
|
||||||
|
public List<ImageDataPacket> SentImageDataPackets { get; private set; }
|
||||||
|
public List<ImagePacketPacket> SentImagePacketPackets { get; private set; }
|
||||||
|
|
||||||
// disable warning: public events, part of the public API
|
// disable warning: public events, part of the public API
|
||||||
#pragma warning disable 67
|
#pragma warning disable 67
|
||||||
|
|
||||||
|
@ -451,6 +451,9 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
ReceivedOfflineNotifications = new List<UUID>();
|
ReceivedOfflineNotifications = new List<UUID>();
|
||||||
ReceivedOnlineNotifications = new List<UUID>();
|
ReceivedOnlineNotifications = new List<UUID>();
|
||||||
ReceivedFriendshipTerminations = new List<UUID>();
|
ReceivedFriendshipTerminations = new List<UUID>();
|
||||||
|
|
||||||
|
SentImageDataPackets = new List<ImageDataPacket>();
|
||||||
|
SentImagePacketPackets = new List<ImagePacketPacket>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -803,7 +806,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
im.ImageData.Data = ImageData;
|
im.ImageData.Data = ImageData;
|
||||||
im.ImageID.Codec = imageCodec;
|
im.ImageID.Codec = imageCodec;
|
||||||
im.Header.Zerocoded = true;
|
im.Header.Zerocoded = true;
|
||||||
sentdatapkt.Add(im);
|
SentImageDataPackets.Add(im);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendImageNextPart(ushort partNumber, UUID imageUuid, byte[] imageData)
|
public void SendImageNextPart(ushort partNumber, UUID imageUuid, byte[] imageData)
|
||||||
|
@ -813,7 +816,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
im.ImageID.Packet = partNumber;
|
im.ImageID.Packet = partNumber;
|
||||||
im.ImageID.ID = imageUuid;
|
im.ImageID.ID = imageUuid;
|
||||||
im.ImageData.Data = imageData;
|
im.ImageData.Data = imageData;
|
||||||
sentpktpkt.Add(im);
|
SentImagePacketPackets.Add(im);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendImageNotFound(UUID imageid)
|
public void SendImageNotFound(UUID imageid)
|
||||||
|
|
|
@ -3136,12 +3136,14 @@
|
||||||
<Reference name="OpenSim.Framework.Statistics"/>
|
<Reference name="OpenSim.Framework.Statistics"/>
|
||||||
<Reference name="OpenSim.Region.ClientStack"/>
|
<Reference name="OpenSim.Region.ClientStack"/>
|
||||||
<Reference name="OpenSim.Region.ClientStack.LindenUDP"/>
|
<Reference name="OpenSim.Region.ClientStack.LindenUDP"/>
|
||||||
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
<Reference name="OpenSim.Services.Interfaces"/>
|
<Reference name="OpenSim.Services.Interfaces"/>
|
||||||
<Reference name="OpenSim.Tests.Common"/>
|
<Reference name="OpenSim.Tests.Common"/>
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
<Match pattern="*.cs" recurse="false"/>
|
<Match pattern="*.cs" recurse="false"/>
|
||||||
|
<Match buildAction="EmbeddedResource" path="Resources" pattern="*"/>
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue