From 419775c72bcf0297e84ff3c74354a0aba523e1e2 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 30 Oct 2008 20:17:30 +0000 Subject: [PATCH] * test: Test that the client stack doesn't completely blow up if a client passes it malformed data --- .../LindenUDP/Tests/BasicCircuitTests.cs | 41 +++++++++++++++---- .../LindenUDP/Tests/TestLLUDPServer.cs | 12 +++++- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs index 07fbf55fe8..c75a5b3392 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/BasicCircuitTests.cs @@ -62,7 +62,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests /// /// /// Agent circuit manager used in setting up the stack - protected void SetupStack( out TestLLUDPServer testLLUDPServer, out AgentCircuitManager acm) + protected void SetupStack(out TestLLUDPServer testLLUDPServer, out AgentCircuitManager acm) { ClientStackUserSettings userSettings = new ClientStackUserSettings(); testLLUDPServer = new TestLLUDPServer(); @@ -78,9 +78,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests /// Set up a client for tests which aren't concerned with this process itself /// /// + /// /// /// - protected void AddClient(uint circuitCode, TestLLUDPServer testLLUDPServer, AgentCircuitManager acm) + protected void AddClient( + uint circuitCode, EndPoint epSender, TestLLUDPServer testLLUDPServer, AgentCircuitManager acm) { UUID myAgentUuid = UUID.Parse("00000000-0000-0000-0000-000000000001"); UUID mySessionUuid = UUID.Parse("00000000-0000-0000-0000-000000000002"); @@ -97,19 +99,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests uccpCcBlock.ID = myAgentUuid; uccpCcBlock.SessionID = mySessionUuid; uccp.CircuitCode = uccpCcBlock; - - EndPoint testEp = new IPEndPoint(IPAddress.Loopback, 999); - + acm.AddNewCircuit(circuitCode, acd); - testLLUDPServer.LoadReceive(uccp, testEp); + testLLUDPServer.LoadReceive(uccp, epSender); testLLUDPServer.ReceiveData(null); } - [Test] /// /// Test adding a client to the stack /// + [Test] public void TestAddClient() { uint myCircuitCode = 123456; @@ -151,10 +151,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests Assert.IsFalse(testLLUDPServer.HasCircuit(101)); } - [Test] /// /// Test removing a client from the stack /// + [Test] public void TestRemoveClient() { uint myCircuitCode = 123457; @@ -162,7 +162,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests TestLLUDPServer testLLUDPServer; AgentCircuitManager acm; SetupStack(out testLLUDPServer, out acm); - AddClient(myCircuitCode, testLLUDPServer, acm); + AddClient(myCircuitCode, new IPEndPoint(IPAddress.Loopback, 1000), testLLUDPServer, acm); testLLUDPServer.RemoveClientCircuit(myCircuitCode); Assert.IsFalse(testLLUDPServer.HasCircuit(myCircuitCode)); @@ -171,5 +171,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests testLLUDPServer.RemoveClientCircuit(101); Assert.IsFalse(testLLUDPServer.HasCircuit(101)); } + + /// + /// Make sure that the client stack reacts okay to malformed packets + /// + [Test] + public void TestMalformedPacketSend() + { + uint myCircuitCode = 123458; + EndPoint testEp = new IPEndPoint(IPAddress.Loopback, 1001); + + TestLLUDPServer testLLUDPServer; + AgentCircuitManager acm; + SetupStack(out testLLUDPServer, out acm); + AddClient(myCircuitCode, testEp, testLLUDPServer, acm); + + byte[] data = new byte[] { 0x01, 0x02, 0x03, 0x04 }; + + testLLUDPServer.LoadReceive(data, testEp); + testLLUDPServer.ReceiveData(null); + + // Check that we are still here + Assert.IsTrue(testLLUDPServer.HasCircuit(myCircuitCode)); + } } } diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs index 81701501d6..95ee516349 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs @@ -71,13 +71,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests // Don't do anything just yet } + /// + /// Load some data to be received by the LLUDPServer on the next receive call + /// + /// + /// + public void LoadReceive(byte[] data, EndPoint epSender) + { + m_chunksToLoad.Enqueue(new ChunkSenderTuple(data, epSender)); + } + /// /// Load a packet to be received by the LLUDPServer on the next receive call /// /// public void LoadReceive(Packet packet, EndPoint epSender) { - m_chunksToLoad.Enqueue(new ChunkSenderTuple(packet.ToBytes(), epSender)); + LoadReceive(packet.ToBytes(), epSender); } ///