* Put the StandaloneTeleportTest in a new thread and call Thread.Join() inside a try/Catch (ThreadAbortException) to try and get around scene code aborting the testing thread. Use a Messenger class to report the results back to the test thread.
parent
2c20d60de6
commit
1b933c9116
|
@ -38,6 +38,7 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion;
|
|||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
using OpenSim.Tests.Common.Setup;
|
||||
using System.Threading;
|
||||
|
||||
namespace OpenSim.Region.Framework.Scenes.Tests
|
||||
{
|
||||
|
@ -55,56 +56,130 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
public void TestSimpleNotNeighboursTeleport()
|
||||
{
|
||||
TestHelper.InMethod();
|
||||
ThreadRunResults results = new ThreadRunResults();
|
||||
results.Result = false;
|
||||
results.Message = "Test did not run";
|
||||
TestRunning testClass = new TestRunning(results);
|
||||
|
||||
Thread testThread = new Thread(testClass.run);
|
||||
|
||||
try
|
||||
{
|
||||
// Seems kind of redundant to start a thread and then join it, however.. We need to protect against
|
||||
// A thread abort exception in the simulator code.
|
||||
testThread.Start();
|
||||
testThread.Join();
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
|
||||
}
|
||||
Assert.That(testClass.results.Result, Is.EqualTo(true), testClass.results.Message);
|
||||
// Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class ThreadRunResults
|
||||
{
|
||||
public bool Result = false;
|
||||
public string Message = string.Empty;
|
||||
}
|
||||
|
||||
public class TestRunning
|
||||
{
|
||||
public ThreadRunResults results;
|
||||
public TestRunning(ThreadRunResults t)
|
||||
{
|
||||
results = t;
|
||||
}
|
||||
public void run(object o)
|
||||
{
|
||||
|
||||
//results.Result = true;
|
||||
log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
|
||||
UUID sceneAId = UUID.Parse("00000000-0000-0000-0000-000000000100");
|
||||
UUID sceneBId = UUID.Parse("00000000-0000-0000-0000-000000000200");
|
||||
TestCommunicationsManager cm = new TestCommunicationsManager();
|
||||
|
||||
// shared module
|
||||
ISharedRegionModule interregionComms = new RESTInterregionComms();
|
||||
|
||||
|
||||
Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm);
|
||||
SceneSetupHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms);
|
||||
sceneA.RegisterRegionWithGrid();
|
||||
|
||||
|
||||
Scene sceneB = SceneSetupHelpers.SetupScene("sceneB", sceneBId, 1010, 1010, cm);
|
||||
SceneSetupHelpers.SetupSceneModules(sceneB, new IniConfigSource(), interregionComms);
|
||||
sceneB.RegisterRegionWithGrid();
|
||||
|
||||
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041");
|
||||
|
||||
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041");
|
||||
TestClient client = SceneSetupHelpers.AddRootAgent(sceneA, agentId);
|
||||
|
||||
|
||||
ICapabilitiesModule sceneACapsModule = sceneA.RequestModuleInterface<ICapabilitiesModule>();
|
||||
|
||||
results.Result = (sceneACapsModule.GetCapsPath(agentId) == client.CapsSeedUrl);
|
||||
|
||||
if (!results.Result)
|
||||
{
|
||||
results.Message = "Incorrect caps object path set up in sceneA";
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
Assert.That(
|
||||
sceneACapsModule.GetCapsPath(agentId),
|
||||
Is.EqualTo(client.CapsSeedUrl),
|
||||
sceneACapsModule.GetCapsPath(agentId),
|
||||
Is.EqualTo(client.CapsSeedUrl),
|
||||
"Incorrect caps object path set up in sceneA");
|
||||
|
||||
*/
|
||||
// FIXME: This is a hack to get the test working - really the normal OpenSim mechanisms should be used.
|
||||
client.TeleportTargetScene = sceneB;
|
||||
|
||||
|
||||
client.TeleportTargetScene = sceneB;
|
||||
client.Teleport(sceneB.RegionInfo.RegionHandle, new Vector3(100, 100, 100), new Vector3(40, 40, 40));
|
||||
|
||||
results.Result = (sceneB.GetScenePresence(agentId) != null);
|
||||
if (!results.Result)
|
||||
{
|
||||
results.Message = "Client does not have an agent in sceneB";
|
||||
return;
|
||||
}
|
||||
|
||||
//Assert.That(sceneB.GetScenePresence(agentId), Is.Not.Null, "Client does not have an agent in sceneB");
|
||||
|
||||
Assert.That(sceneB.GetScenePresence(agentId), Is.Not.Null, "Client does not have an agent in sceneB");
|
||||
Assert.That(sceneA.GetScenePresence(agentId), Is.Null, "Client still had an agent in sceneA");
|
||||
|
||||
//Assert.That(sceneA.GetScenePresence(agentId), Is.Null, "Client still had an agent in sceneA");
|
||||
|
||||
results.Result = (sceneA.GetScenePresence(agentId) == null);
|
||||
if (!results.Result)
|
||||
{
|
||||
results.Message = "Client still had an agent in sceneA";
|
||||
return;
|
||||
}
|
||||
|
||||
ICapabilitiesModule sceneBCapsModule = sceneB.RequestModuleInterface<ICapabilitiesModule>();
|
||||
|
||||
|
||||
|
||||
results.Result = ("http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort +
|
||||
"/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/" == client.CapsSeedUrl);
|
||||
if (!results.Result)
|
||||
{
|
||||
results.Message = "Incorrect caps object path set up in sceneB";
|
||||
return;
|
||||
}
|
||||
|
||||
// Temporary assertion - caps url construction should at least be doable through a method.
|
||||
/*
|
||||
Assert.That(
|
||||
"http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/",
|
||||
Is.EqualTo(client.CapsSeedUrl),
|
||||
"Incorrect caps object path set up in sceneB");
|
||||
|
||||
"http://" + sceneB.RegionInfo.ExternalHostName + ":" + sceneB.RegionInfo.HttpPort + "/CAPS/" + sceneBCapsModule.GetCapsPath(agentId) + "0000/",
|
||||
Is.EqualTo(client.CapsSeedUrl),
|
||||
"Incorrect caps object path set up in sceneB");
|
||||
*/
|
||||
// This assertion will currently fail since we don't remove the caps paths when no longer needed
|
||||
//Assert.That(sceneACapsModule.GetCapsPath(agentId), Is.Null, "sceneA still had a caps object path");
|
||||
|
||||
|
||||
// TODO: Check that more of everything is as it should be
|
||||
|
||||
|
||||
// TODO: test what happens if we try to teleport to a region that doesn't exist
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue