From f4ad99f89d4d04f71852e2ebadd36b9a993123f8 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 23 Oct 2008 19:08:54 +0000 Subject: * Introduce a basic udp circuit test for adding a client * Temporarily disabled assert because it just picked up an existing bug. Yay for tests! --- .../ClientStack/LindenUDP/Tests/TestLLUDPServer.cs | 66 +++++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs') diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs index 5e7cbca..bd5b282 100755 --- a/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/TestLLUDPServer.cs @@ -26,11 +26,13 @@ */ using System; +using System.Collections.Generic; using System.Net; +using OpenMetaverse.Packets; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; -namespace OpenSim.Region.ClientStack.LindenUDP +namespace OpenSim.Region.ClientStack.LindenUDP.Tests { /// /// This class enables synchronous testing of the LLUDPServer by allowing us to load our own data into the end @@ -38,6 +40,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// public class TestLLUDPServer : LLUDPServer { + /// + /// The chunks of data to pass to the LLUDPServer when it calls EndReceive + /// + protected Queue m_chunksToLoad = new Queue(); + protected override void BeginReceive() { // Do nothing @@ -45,10 +52,63 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected override bool EndReceive(out int numBytes, IAsyncResult result, ref EndPoint epSender) { - // TODO: Return a packet loaded in by a test numBytes = 0; + if (m_chunksToLoad.Count <= 0) + return false; + + ChunkSenderTuple tuple = m_chunksToLoad.Dequeue(); + RecvBuffer = tuple.Data; + numBytes = tuple.Data.Length; + epSender = tuple.Sender; + return true; } + + /// + /// 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)); + } + + /// + /// Calls the protected asynchronous result method + /// + /// + public void ReceiveData(IAsyncResult result) + { + OnReceivedData(result); + } + + /// + /// Has a circuit with the given code been established? + /// + /// + /// + public bool HasCircuit(uint circuitCode) + { + lock (clientCircuits_reverse) + { + return clientCircuits_reverse.ContainsKey(circuitCode); + } + } + } + + /// + /// Record the data and sender tuple + /// + public class ChunkSenderTuple + { + public byte[] Data; + public EndPoint Sender; + + public ChunkSenderTuple(byte[] data, EndPoint sender) + { + Data = data; + Sender = sender; + } } -} +} \ No newline at end of file -- cgit v1.1