aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Tests
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Tests')
-rw-r--r--OpenSim/Tests/Common/Helpers/SceneHelpers.cs72
-rw-r--r--OpenSim/Tests/Common/Mock/TestClient.cs39
-rw-r--r--OpenSim/Tests/Common/TestHelpers.cs9
3 files changed, 106 insertions, 14 deletions
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
index 8e54707..dc24418 100644
--- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
@@ -58,6 +58,11 @@ namespace OpenSim.Tests.Common
58 /// </summary> 58 /// </summary>
59 public class SceneHelpers 59 public class SceneHelpers
60 { 60 {
61 /// <summary>
62 /// We need a scene manager so that test clients can retrieve a scene when performing teleport tests.
63 /// </summary>
64 public SceneManager SceneManager { get; private set; }
65
61 private AgentCircuitManager m_acm = new AgentCircuitManager(); 66 private AgentCircuitManager m_acm = new AgentCircuitManager();
62 private ISimulationDataService m_simDataService 67 private ISimulationDataService m_simDataService
63 = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null); 68 = OpenSim.Server.Base.ServerUtils.LoadPlugin<ISimulationDataService>("OpenSim.Tests.Common.dll", null);
@@ -76,6 +81,8 @@ namespace OpenSim.Tests.Common
76 81
77 public SceneHelpers(CoreAssetCache cache) 82 public SceneHelpers(CoreAssetCache cache)
78 { 83 {
84 SceneManager = new SceneManager();
85
79 m_assetService = StartAssetService(cache); 86 m_assetService = StartAssetService(cache);
80 m_authenticationService = StartAuthenticationService(); 87 m_authenticationService = StartAuthenticationService();
81 m_inventoryService = StartInventoryService(); 88 m_inventoryService = StartInventoryService();
@@ -186,6 +193,8 @@ namespace OpenSim.Tests.Common
186 testScene.LoginsDisabled = false; 193 testScene.LoginsDisabled = false;
187 testScene.RegisterRegionWithGrid(); 194 testScene.RegisterRegionWithGrid();
188 195
196 SceneManager.Add(testScene);
197
189 return testScene; 198 return testScene;
190 } 199 }
191 200
@@ -350,6 +359,7 @@ namespace OpenSim.Tests.Common
350 List<IRegionModuleBase> newModules = new List<IRegionModuleBase>(); 359 List<IRegionModuleBase> newModules = new List<IRegionModuleBase>();
351 foreach (object module in modules) 360 foreach (object module in modules)
352 { 361 {
362// Console.WriteLine("MODULE RAW {0}", module);
353 if (module is IRegionModule) 363 if (module is IRegionModule)
354 { 364 {
355 IRegionModule m = (IRegionModule)module; 365 IRegionModule m = (IRegionModule)module;
@@ -367,6 +377,7 @@ namespace OpenSim.Tests.Common
367 // for the new system, everything has to be initialised first, 377 // for the new system, everything has to be initialised first,
368 // shared modules have to be post-initialised, then all get an AddRegion with the scene 378 // shared modules have to be post-initialised, then all get an AddRegion with the scene
369 IRegionModuleBase m = (IRegionModuleBase)module; 379 IRegionModuleBase m = (IRegionModuleBase)module;
380// Console.WriteLine("MODULE {0}", m.Name);
370 m.Initialise(config); 381 m.Initialise(config);
371 newModules.Add(m); 382 newModules.Add(m);
372 } 383 }
@@ -426,6 +437,10 @@ namespace OpenSim.Tests.Common
426 /// <summary> 437 /// <summary>
427 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test 438 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
428 /// </summary> 439 /// </summary>
440 /// <remarks>
441 /// This can be used for tests where there is only one region or where there are multiple non-neighbour regions
442 /// and teleport doesn't take place.
443 /// </remarks>
429 /// <param name="scene"></param> 444 /// <param name="scene"></param>
430 /// <param name="agentId"></param> 445 /// <param name="agentId"></param>
431 /// <returns></returns> 446 /// <returns></returns>
@@ -435,6 +450,18 @@ namespace OpenSim.Tests.Common
435 } 450 }
436 451
437 /// <summary> 452 /// <summary>
453 /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test
454 /// </summary>
455 /// <param name="scene"></param>
456 /// <param name="agentId"></param>
457 /// <param name="sceneManager"></param>
458 /// <returns></returns>
459 public static ScenePresence AddScenePresence(Scene scene, UUID agentId, SceneManager sceneManager)
460 {
461 return AddScenePresence(scene, GenerateAgentData(agentId), sceneManager);
462 }
463
464 /// <summary>
438 /// Add a root agent. 465 /// Add a root agent.
439 /// </summary> 466 /// </summary>
440 /// <remarks> 467 /// <remarks>
@@ -454,6 +481,30 @@ namespace OpenSim.Tests.Common
454 /// <returns></returns> 481 /// <returns></returns>
455 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData) 482 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData)
456 { 483 {
484 return AddScenePresence(scene, agentData, null);
485 }
486
487 /// <summary>
488 /// Add a root agent.
489 /// </summary>
490 /// <remarks>
491 /// This function
492 ///
493 /// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the
494 /// userserver if grid) would give initial login data back to the client and separately tell the scene that the
495 /// agent was coming.
496 ///
497 /// 2) Connects the agent with the scene
498 ///
499 /// This function performs actions equivalent with notifying the scene that an agent is
500 /// coming and then actually connecting the agent to the scene. The one step missed out is the very first
501 /// </remarks>
502 /// <param name="scene"></param>
503 /// <param name="agentData"></param>
504 /// <param name="sceneManager"></param>
505 /// <returns></returns>
506 public static ScenePresence AddScenePresence(Scene scene, AgentCircuitData agentData, SceneManager sceneManager)
507 {
457 // We emulate the proper login sequence here by doing things in four stages 508 // We emulate the proper login sequence here by doing things in four stages
458 509
459 // Stage 0: login 510 // Stage 0: login
@@ -463,7 +514,7 @@ namespace OpenSim.Tests.Common
463 lpsc.m_PresenceService.LoginAgent(agentData.AgentID.ToString(), agentData.SessionID, agentData.SecureSessionID); 514 lpsc.m_PresenceService.LoginAgent(agentData.AgentID.ToString(), agentData.SessionID, agentData.SecureSessionID);
464 515
465 // Stages 1 & 2 516 // Stages 1 & 2
466 ScenePresence sp = IntroduceClientToScene(scene, agentData, TeleportFlags.ViaLogin); 517 ScenePresence sp = IntroduceClientToScene(scene, sceneManager, agentData, TeleportFlags.ViaLogin);
467 518
468 // Stage 3: Complete the entrance into the region. This converts the child agent into a root agent. 519 // Stage 3: Complete the entrance into the region. This converts the child agent into a root agent.
469 sp.CompleteMovement(sp.ControllingClient, true); 520 sp.CompleteMovement(sp.ControllingClient, true);
@@ -471,7 +522,20 @@ namespace OpenSim.Tests.Common
471 return sp; 522 return sp;
472 } 523 }
473 524
474 private static ScenePresence IntroduceClientToScene(Scene scene, AgentCircuitData agentData, TeleportFlags tf) 525 /// <summary>
526 /// Introduce an agent into the scene by adding a new client.
527 /// </summary>
528 /// <returns>The scene presence added</returns>
529 /// <param name='sceneManager'>
530 /// Scene manager. Can be null if there is only one region in the test or multiple regions that are not
531 /// neighbours and where no teleporting takes place.
532 /// </param>
533 /// <param name='scene'></param>
534 /// <param name='sceneManager></param>
535 /// <param name='agentData'></param>
536 /// <param name='tf'></param>
537 private static ScenePresence IntroduceClientToScene(
538 Scene scene, SceneManager sceneManager, AgentCircuitData agentData, TeleportFlags tf)
475 { 539 {
476 string reason; 540 string reason;
477 541
@@ -480,7 +544,7 @@ namespace OpenSim.Tests.Common
480 Console.WriteLine("NewUserConnection failed: " + reason); 544 Console.WriteLine("NewUserConnection failed: " + reason);
481 545
482 // Stage 2: add the new client as a child agent to the scene 546 // Stage 2: add the new client as a child agent to the scene
483 TestClient client = new TestClient(agentData, scene); 547 TestClient client = new TestClient(agentData, scene, sceneManager);
484 scene.AddNewClient(client, PresenceType.User); 548 scene.AddNewClient(client, PresenceType.User);
485 549
486 return scene.GetScenePresence(agentData.AgentID); 550 return scene.GetScenePresence(agentData.AgentID);
@@ -492,7 +556,7 @@ namespace OpenSim.Tests.Common
492 acd.child = true; 556 acd.child = true;
493 557
494 // XXX: ViaLogin may not be correct for child agents 558 // XXX: ViaLogin may not be correct for child agents
495 return IntroduceClientToScene(scene, acd, TeleportFlags.ViaLogin); 559 return IntroduceClientToScene(scene, null, acd, TeleportFlags.ViaLogin);
496 } 560 }
497 561
498 /// <summary> 562 /// <summary>
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index 6a7cb0a..8cedebb 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -46,12 +46,10 @@ namespace OpenSim.Tests.Common.Mock
46 46
47 EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing"); 47 EventWaitHandle wh = new EventWaitHandle (false, EventResetMode.AutoReset, "Crossing");
48 48
49 // TODO: This is a really nasty (and temporary) means of telling the test client which scene to invoke setup
50 // methods on when a teleport is requested
51 public Scene TeleportTargetScene;
52 private TestClient TeleportSceneClient; 49 private TestClient TeleportSceneClient;
53 50
54 private Scene m_scene; 51 private Scene m_scene;
52 private SceneManager m_sceneManager;
55 53
56 // Properties so that we can get at received data for test purposes 54 // Properties so that we can get at received data for test purposes
57 public List<UUID> ReceivedOfflineNotifications { get; private set; } 55 public List<UUID> ReceivedOfflineNotifications { get; private set; }
@@ -434,15 +432,29 @@ namespace OpenSim.Tests.Common.Mock
434 /// <summary> 432 /// <summary>
435 /// Constructor 433 /// Constructor
436 /// </summary> 434 /// </summary>
435 /// <remarks>
436 /// Can be used for a test where there is only one region or where there are multiple regions that are not
437 /// neighbours and where no teleporting takes place. In other situations, the constructor that takes in a
438 /// scene manager should be used.
439 /// </remarks>
437 /// <param name="agentData"></param> 440 /// <param name="agentData"></param>
438 /// <param name="scene"></param> 441 /// <param name="scene"></param>
439 public TestClient(AgentCircuitData agentData, Scene scene) 442 public TestClient(AgentCircuitData agentData, Scene scene) : this(agentData, scene, null) {}
443
444 /// <summary>
445 /// Constructor
446 /// </summary>
447 /// <param name="agentData"></param>
448 /// <param name="scene"></param>
449 /// <param name="sceneManager"></param>
450 public TestClient(AgentCircuitData agentData, Scene scene, SceneManager sceneManager)
440 { 451 {
441 m_agentId = agentData.AgentID; 452 m_agentId = agentData.AgentID;
442 m_firstName = agentData.firstname; 453 m_firstName = agentData.firstname;
443 m_lastName = agentData.lastname; 454 m_lastName = agentData.lastname;
444 m_circuitCode = agentData.circuitcode; 455 m_circuitCode = agentData.circuitcode;
445 m_scene = scene; 456 m_scene = scene;
457 m_sceneManager = sceneManager;
446 SessionId = agentData.SessionID; 458 SessionId = agentData.SessionID;
447 SecureSessionId = agentData.SecureSessionID; 459 SecureSessionId = agentData.SecureSessionID;
448 CapsSeedUrl = agentData.CapsPath; 460 CapsSeedUrl = agentData.CapsPath;
@@ -592,8 +604,16 @@ namespace OpenSim.Tests.Common.Mock
592 AgentCircuitData newAgent = RequestClientInfo(); 604 AgentCircuitData newAgent = RequestClientInfo();
593 605
594 // Stage 2: add the new client as a child agent to the scene 606 // Stage 2: add the new client as a child agent to the scene
595 TeleportSceneClient = new TestClient(newAgent, TeleportTargetScene); 607 uint x, y;
596 TeleportTargetScene.AddNewClient(TeleportSceneClient, PresenceType.User); 608 Utils.LongToUInts(neighbourHandle, out x, out y);
609 x /= Constants.RegionSize;
610 y /= Constants.RegionSize;
611
612 Scene neighbourScene;
613 m_sceneManager.TryGetScene(x, y, out neighbourScene);
614
615 TeleportSceneClient = new TestClient(newAgent, neighbourScene, m_sceneManager);
616 neighbourScene.AddNewClient(TeleportSceneClient, PresenceType.User);
597 } 617 }
598 618
599 public virtual void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, 619 public virtual void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint,
@@ -603,6 +623,13 @@ namespace OpenSim.Tests.Common.Mock
603 623
604 CapsSeedUrl = capsURL; 624 CapsSeedUrl = capsURL;
605 625
626 // We don't do this here so that the source region can complete processing first in a single-threaded
627 // regression test scenario. The test itself will have to call CompleteTeleportClientSide() after a teleport
628 // CompleteTeleportClientSide();
629 }
630
631 public void CompleteTeleportClientSide()
632 {
606 TeleportSceneClient.CompleteMovement(); 633 TeleportSceneClient.CompleteMovement();
607 //TeleportTargetScene.AgentCrossing(newAgent.AgentID, new Vector3(90, 90, 90), false); 634 //TeleportTargetScene.AgentCrossing(newAgent.AgentID, new Vector3(90, 90, 90), false);
608 } 635 }
diff --git a/OpenSim/Tests/Common/TestHelpers.cs b/OpenSim/Tests/Common/TestHelpers.cs
index 5030d4b..6744fca 100644
--- a/OpenSim/Tests/Common/TestHelpers.cs
+++ b/OpenSim/Tests/Common/TestHelpers.cs
@@ -46,7 +46,8 @@ namespace OpenSim.Tests.Common
46 <!-- A1 uses PatternLayout --> 46 <!-- A1 uses PatternLayout -->
47 <layout type=""log4net.Layout.PatternLayout""> 47 <layout type=""log4net.Layout.PatternLayout"">
48 <!-- Print the date in ISO 8601 format --> 48 <!-- Print the date in ISO 8601 format -->
49 <conversionPattern value=""%date [%thread] %-5level %logger %ndc - %message%newline"" /> 49 <!-- <conversionPattern value=""%date [%thread] %-5level %logger %ndc - %message%newline"" /> -->
50 <conversionPattern value=""%date %message%newline"" />
50 </layout> 51 </layout>
51 </appender> 52 </appender>
52 53
@@ -62,9 +63,9 @@ namespace OpenSim.Tests.Common
62 Encoding.UTF8.GetBytes( 63 Encoding.UTF8.GetBytes(
63 // "<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/><appender-ref ref=\"A1\"/></root></log4net></configuration>"))); 64 // "<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/><appender-ref ref=\"A1\"/></root></log4net></configuration>")));
64 //"<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>"))); 65 //"<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>")));
65 //"<configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>"))); 66// "<configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>"));
66 //"<configuration><log4net><root></root></log4net></configuration>"))); 67// "<configuration><log4net><root></root></log4net></configuration>")));
67 //"<configuration><log4net><root/></log4net></configuration>"))); 68// "<configuration><log4net><root/></log4net></configuration>"));
68 "<log4net><root/></log4net>")); 69 "<log4net><root/></log4net>"));
69 70
70 public static bool AssertThisDelegateCausesArgumentException(TestDelegate d) 71 public static bool AssertThisDelegateCausesArgumentException(TestDelegate d)