From 9356963bd36e5c3b8c2b27bfcc2efa60ffbd02d6 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 19 Jan 2012 19:00:11 +0000 Subject: [PATCH] Add basic request and send image regression tests for LLImageManager --- .../Region/ClientStack/Linden/UDP/J2KImage.cs | 6 +- .../ClientStack/Linden/UDP/LLImageManager.cs | 6 +- .../Linden/UDP/Tests/LLImageManagerTests.cs | 92 ++++++++++++++++++ .../Linden/UDP/Tests/Resources/4-tile2.jp2 | Bin 0 -> 24410 bytes .../World/Archiver/Tests/ArchiverTests.cs | 2 +- OpenSim/Tests/Common/Mock/TestClient.cs | 13 ++- prebuild.xml | 2 + 7 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs create mode 100644 OpenSim/Region/ClientStack/Linden/UDP/Tests/Resources/4-tile2.jp2 diff --git a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs index 185a909ecb..bbd2c43606 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs @@ -82,7 +82,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// Maximum number of packets to send during this call /// Number of packets sent during this call /// True if the transfer completes at the current discard level, otherwise false - public bool SendPackets(LLClientView client, int packetsToSend, out int packetsSent) + public bool SendPackets(IClientAPI client, int packetsToSend, out int packetsSent) { packetsSent = 0; @@ -212,7 +212,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - private bool SendFirstPacket(LLClientView client) + private bool SendFirstPacket(IClientAPI client) { if (client == null) return false; @@ -247,7 +247,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP return false; } - private bool SendPacket(LLClientView client) + private bool SendPacket(IClientAPI client) { if (client == null) return false; diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs index db428f1c35..30d3712550 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs @@ -55,16 +55,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private bool m_shuttingdown; 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 IJ2KDecoder m_j2kDecodeModule; //Our J2K module private C5.IntervalHeap m_priorityQueue = new C5.IntervalHeap(10, new J2KImageComparer()); 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 LLImageManager(LLClientView client, IAssetService pAssetCache, IJ2KDecoder pJ2kDecodeModule) + public LLImageManager(IClientAPI client, IAssetService pAssetCache, IJ2KDecoder pJ2kDecodeModule) { m_client = client; m_assetCache = pAssetCache; diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs new file mode 100644 index 0000000000..bdc9c7d9ea --- /dev/null +++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/LLImageManagerTests.cs @@ -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)); + } + } +} \ No newline at end of file diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/Resources/4-tile2.jp2 b/OpenSim/Region/ClientStack/Linden/UDP/Tests/Resources/4-tile2.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..8c631046e877a1532c045abc845ab23fb9f78557 GIT binary patch literal 24410 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 h=nDeX#3 sentdatapkt = new List(); - public List sentpktpkt = new List(); 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 @@ -61,6 +58,9 @@ namespace OpenSim.Tests.Common.Mock public List ReceivedOnlineNotifications { get; private set; } public List ReceivedFriendshipTerminations { get; private set; } + public List SentImageDataPackets { get; private set; } + public List SentImagePacketPackets { get; private set; } + // disable warning: public events, part of the public API #pragma warning disable 67 @@ -452,6 +452,9 @@ namespace OpenSim.Tests.Common.Mock ReceivedOfflineNotifications = new List(); ReceivedOnlineNotifications = new List(); ReceivedFriendshipTerminations = new List(); + + SentImageDataPackets = new List(); + SentImagePacketPackets = new List(); } /// @@ -804,7 +807,7 @@ namespace OpenSim.Tests.Common.Mock im.ImageData.Data = ImageData; im.ImageID.Codec = imageCodec; im.Header.Zerocoded = true; - sentdatapkt.Add(im); + SentImageDataPackets.Add(im); } public void SendImageNextPart(ushort partNumber, UUID imageUuid, byte[] imageData) @@ -814,7 +817,7 @@ namespace OpenSim.Tests.Common.Mock im.ImageID.Packet = partNumber; im.ImageID.ID = imageUuid; im.ImageData.Data = imageData; - sentpktpkt.Add(im); + SentImagePacketPackets.Add(im); } public void SendImageNotFound(UUID imageid) diff --git a/prebuild.xml b/prebuild.xml index 4ea47080d7..eebb9f92a5 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -3164,12 +3164,14 @@ + +