* refactor: factor out test packet send method in client stack unit tests
parent
46492f3c11
commit
8477aab8e0
|
@ -112,6 +112,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
testLLUDPServer.ReceiveData(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build an object name packet for test purposes
|
||||
/// </summary>
|
||||
/// <param name="objectLocalId"></param>
|
||||
/// <param name="objectName"></param>
|
||||
protected ObjectNamePacket BuildTestObjectNamePacket(uint objectLocalId, string objectName)
|
||||
{
|
||||
ObjectNamePacket onp = new ObjectNamePacket();
|
||||
ObjectNamePacket.ObjectDataBlock odb = new ObjectNamePacket.ObjectDataBlock();
|
||||
odb.LocalID = objectLocalId;
|
||||
odb.Name = Utils.StringToBytes(objectName);
|
||||
onp.ObjectData = new ObjectNamePacket.ObjectDataBlock[] { odb };
|
||||
onp.Header.Zerocoded = false;
|
||||
|
||||
return onp;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test adding a client to the stack
|
||||
/// </summary>
|
||||
|
@ -209,19 +226,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
|
||||
// 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.LoadReceive(BuildTestObjectNamePacket(1, "helloooo"), testEp);
|
||||
testLLUDPServer.ReceiveData(null);
|
||||
|
||||
Assert.That(testLLPacketServer.GetTotalPacketsReceived(), Is.EqualTo(1));
|
||||
Assert.That(testLLPacketServer.GetPacketsReceivedFor(PacketType.ObjectName), Is.EqualTo(1));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test that the stack continues to work even if some client has caused a
|
||||
/// SocketException on Socket.BeginReceive()
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExceptionOnBeginReceive()
|
||||
{
|
||||
/*
|
||||
MockScene scene = new MockScene();
|
||||
|
||||
uint circuitCodeA = 130000;
|
||||
EndPoint epA = new IPEndPoint(IPAddress.Loopback, 1300);
|
||||
uint circuitCodeB = 130001;
|
||||
EndPoint epB = new IPEndPoint(IPAddress.Loopback, 1301);
|
||||
|
||||
TestLLUDPServer testLLUDPServer;
|
||||
TestLLPacketServer testLLPacketServer;
|
||||
AgentCircuitManager acm;
|
||||
SetupStack(scene, out testLLUDPServer, out testLLPacketServer, out acm);
|
||||
AddClient(circuitCodeA, epA, testLLUDPServer, acm);
|
||||
AddClient(circuitCodeB, epB, testLLUDPServer, acm);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
|
||||
protected override void BeginReceive()
|
||||
{
|
||||
// Do nothing
|
||||
if (m_chunksToLoad.Count > 0 && m_chunksToLoad.Peek().BeginReceiveException)
|
||||
{
|
||||
ChunkSenderTuple tuple = m_chunksToLoad.Dequeue();
|
||||
reusedEpSender = tuple.Sender;
|
||||
throw new SocketException();
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool EndReceive(out int numBytes, IAsyncResult result, ref EndPoint epSender)
|
||||
|
@ -71,6 +76,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
// Don't do anything just yet
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Signal that this chunk should throw an exception on Socket.BeginReceive()
|
||||
/// </summary>
|
||||
/// <param name="epSender"></param>
|
||||
public void LoadReceiveWithBeginException(EndPoint epSender)
|
||||
{
|
||||
ChunkSenderTuple tuple = new ChunkSenderTuple(epSender);
|
||||
tuple.BeginReceiveException = true;
|
||||
m_chunksToLoad.Enqueue(tuple);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load some data to be received by the LLUDPServer on the next receive call
|
||||
/// </summary>
|
||||
|
@ -118,14 +134,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
/// Record the data and sender tuple
|
||||
/// </summary>
|
||||
public class ChunkSenderTuple
|
||||
{
|
||||
{
|
||||
public byte[] Data;
|
||||
public EndPoint Sender;
|
||||
public bool BeginReceiveException;
|
||||
|
||||
public ChunkSenderTuple(byte[] data, EndPoint sender)
|
||||
{
|
||||
Data = data;
|
||||
Sender = sender;
|
||||
}
|
||||
|
||||
public ChunkSenderTuple(EndPoint sender)
|
||||
{
|
||||
Sender = sender;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue