From 5feaff8524845d3475c02d1ba96465925e65e34a Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Thu, 30 Oct 2008 22:32:23 +0000
Subject: test: Extend malformed packet test to actually check that a valid
packet can get through after the malformed ones have been sent
---
.../LindenUDP/Tests/BasicCircuitTests.cs | 47 +++++++++++---
.../ClientStack/LindenUDP/Tests/MockScene.cs | 21 +++++-
.../LindenUDP/Tests/TestLLPacketServer.cs | 74 ++++++++++++++++++++++
.../ClientStack/LindenUDP/Tests/TestLLUDPServer.cs | 5 +-
4 files changed, 134 insertions(+), 13 deletions(-)
create mode 100644 OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLPacketServer.cs
(limited to 'OpenSim/Region/ClientStack/LindenUDP/Tests')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs
index c75a5b3..352f697 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs
@@ -26,9 +26,9 @@
*/
using System.Net;
-//using System.Threading;
using log4net;
using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenSim.Framework;
@@ -60,9 +60,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
///
/// Add a client for testing
///
+ ///
///
+ ///
/// Agent circuit manager used in setting up the stack
- protected void SetupStack(out TestLLUDPServer testLLUDPServer, out AgentCircuitManager acm)
+ protected void SetupStack(
+ IScene scene, out TestLLUDPServer testLLUDPServer, out TestLLPacketServer testPacketServer,
+ out AgentCircuitManager acm)
{
ClientStackUserSettings userSettings = new ClientStackUserSettings();
testLLUDPServer = new TestLLUDPServer();
@@ -70,8 +74,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
uint port = 666;
testLLUDPServer.Initialise(null, ref port, 0, false, userSettings, null, acm);
- new LLPacketServer(testLLUDPServer, userSettings);
- testLLUDPServer.LocalScene = new MockScene();
+ testPacketServer = new TestLLPacketServer(testLLUDPServer, userSettings);
+ testLLUDPServer.LocalScene = scene;
}
///
@@ -117,8 +121,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
UUID mySessionUuid = UUID.Parse("00000000-0000-0000-0000-000000000002");
TestLLUDPServer testLLUDPServer;
+ TestLLPacketServer testLLPacketServer;
AgentCircuitManager acm;
- SetupStack(out testLLUDPServer, out acm);
+ SetupStack(new MockScene(), out testLLUDPServer, out testLLPacketServer, out acm);
AgentCircuitData acd = new AgentCircuitData();
acd.AgentID = myAgentUuid;
@@ -160,8 +165,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
uint myCircuitCode = 123457;
TestLLUDPServer testLLUDPServer;
+ TestLLPacketServer testLLPacketServer;
AgentCircuitManager acm;
- SetupStack(out testLLUDPServer, out acm);
+ SetupStack(new MockScene(), out testLLUDPServer, out testLLPacketServer, out acm);
AddClient(myCircuitCode, new IPEndPoint(IPAddress.Loopback, 1000), testLLUDPServer, acm);
testLLUDPServer.RemoveClientCircuit(myCircuitCode);
@@ -179,20 +185,41 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
public void TestMalformedPacketSend()
{
uint myCircuitCode = 123458;
- EndPoint testEp = new IPEndPoint(IPAddress.Loopback, 1001);
+ EndPoint testEp = new IPEndPoint(IPAddress.Loopback, 1001);
+ MockScene scene = new MockScene();
TestLLUDPServer testLLUDPServer;
+ TestLLPacketServer testLLPacketServer;
AgentCircuitManager acm;
- SetupStack(out testLLUDPServer, out acm);
+ SetupStack(scene, out testLLUDPServer, out testLLPacketServer, out acm);
AddClient(myCircuitCode, testEp, testLLUDPServer, acm);
-
+
byte[] data = new byte[] { 0x01, 0x02, 0x03, 0x04 };
-
+
+ // Send two garbled 'packets' in succession
+ testLLUDPServer.LoadReceive(data, testEp);
testLLUDPServer.LoadReceive(data, testEp);
testLLUDPServer.ReceiveData(null);
// Check that we are still here
Assert.IsTrue(testLLUDPServer.HasCircuit(myCircuitCode));
+ Assert.That(testLLPacketServer.GetTotalPacketsReceived(), Is.EqualTo(0));
+
+ // Check that sending a valid packet to same circuit still succeeds
+ Assert.That(scene.ObjectNameCallsReceived, Is.EqualTo(0));
+
+ ObjectNamePacket onp = new ObjectNamePacket();
+ ObjectNamePacket.ObjectDataBlock odb = new ObjectNamePacket.ObjectDataBlock();
+ odb.LocalID = 1;
+ odb.Name = Utils.StringToBytes("helloooo");
+ onp.ObjectData = new ObjectNamePacket.ObjectDataBlock[] { odb };
+ onp.Header.Zerocoded = false;
+
+ testLLUDPServer.LoadReceive(onp, testEp);
+ testLLUDPServer.ReceiveData(null);
+
+ Assert.That(testLLPacketServer.GetTotalPacketsReceived(), Is.EqualTo(1));
+ Assert.That(testLLPacketServer.GetPacketsReceivedFor(PacketType.ObjectName), Is.EqualTo(1));
}
}
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs
index 4981a1d..4c8ee9c 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs
@@ -36,6 +36,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
///
public class MockScene : SceneBase
{
+ public int ObjectNameCallsReceived
+ {
+ get { return m_objectNameCallsReceived; }
+ }
+ protected int m_objectNameCallsReceived;
+
public MockScene()
{
m_regInfo = new RegionInfo(1000, 1000, null, null);
@@ -44,9 +50,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
public override void Update() {}
public override void LoadWorldMap() {}
- public override void AddNewClient(IClientAPI client, bool child) {}
+
+ public override void AddNewClient(IClientAPI client, bool child)
+ {
+ client.OnObjectName += RecordObjectNameCall;
+ }
+
public override void RemoveClient(UUID agentID) {}
public override void CloseAllAgents(uint circuitcode) {}
public override bool OtherRegionUp(RegionInfo thisRegion) { return false; }
+
+ ///
+ /// Doesn't really matter what the call is - we're using this to test that a packet has actually been received
+ ///
+ protected void RecordObjectNameCall(IClientAPI remoteClient, uint localID, string message)
+ {
+ m_objectNameCallsReceived++;
+ }
}
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLPacketServer.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLPacketServer.cs
new file mode 100644
index 0000000..507fe82
--- /dev/null
+++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLPacketServer.cs
@@ -0,0 +1,74 @@
+/*
+ * 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.Collections.Generic;
+using OpenMetaverse;
+using OpenMetaverse.Packets;
+using OpenSim.Region.ClientStack.LindenUDP;
+
+namespace OpenSim.Region.ClientStack.LindenUDP.Tests
+{
+ public class TestLLPacketServer : LLPacketServer
+ {
+ ///
+ /// Record counts of packets received
+ ///
+ protected Dictionary m_packetsReceived = new Dictionary();
+
+ public TestLLPacketServer(ILLClientStackNetworkHandler networkHandler, ClientStackUserSettings userSettings)
+ : base(networkHandler, userSettings)
+ {}
+
+ public override void InPacket(uint circuitCode, Packet packet)
+ {
+ base.InPacket(circuitCode, packet);
+
+ if (m_packetsReceived.ContainsKey(packet.Type))
+ m_packetsReceived[packet.Type]++;
+ else
+ m_packetsReceived[packet.Type] = 1;
+ }
+
+ public int GetTotalPacketsReceived()
+ {
+ int totalCount = 0;
+
+ foreach (int count in m_packetsReceived.Values)
+ totalCount += count;
+
+ return totalCount;
+ }
+
+ public int GetPacketsReceivedFor(PacketType packetType)
+ {
+ if (m_packetsReceived.ContainsKey(packetType))
+ return m_packetsReceived[packetType];
+ else
+ return 0;
+ }
+ }
+}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs
index 95ee516..dd7afd3 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs
@@ -91,12 +91,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
}
///
- /// Calls the protected asynchronous result method
+ /// Calls the protected asynchronous result method. This fires out all data chunks currently queued for send
///
///
public void ReceiveData(IAsyncResult result)
{
- OnReceivedData(result);
+ while (m_chunksToLoad.Count > 0)
+ OnReceivedData(result);
}
///
--
cgit v1.1