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