From ee3c61247e61d03ee252f373144d5c6bfecb9d6f Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Fri, 23 Jan 2009 17:32:38 +0000 Subject: * refactor: move scene setup code into common test code assembly --- .../Environment/Scenes/Tests/EntityManagerTests.cs | 6 +- .../Environment/Scenes/Tests/SceneObjectTests.cs | 39 ++-- .../Environment/Scenes/Tests/ScenePresenceTests.cs | 7 +- .../Environment/Scenes/Tests/SceneTestUtils.cs | 224 --------------------- .../Scenes/Tests/StandaloneTeleportTests.cs | 7 +- OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs | 224 +++++++++++++++++++++ 6 files changed, 254 insertions(+), 253 deletions(-) delete mode 100644 OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs create mode 100644 OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs (limited to 'OpenSim') diff --git a/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs b/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs index cc9cc03..0155966 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/EntityManagerTests.cs @@ -36,18 +36,16 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications; using OpenSim.Region.Environment.Scenes; +using OpenSim.Tests.Common.Setup; namespace OpenSim.Region.Environment.Scenes.Tests { - /// - /// Scene oriented tests - /// [TestFixture] public class EntityManagerTests { static public Random random; SceneObjectGroup found; - Scene scene = SceneTestUtils.SetupScene(); + Scene scene = SceneSetupHelpers.SetupScene(); [Test] public void T010_AddObjects() diff --git a/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs b/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs index e347e67..ae879bb 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs @@ -35,6 +35,7 @@ using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Communications.Local; using OpenSim.Region.Environment.Scenes; using OpenSim.Tests.Common.Mock; +using OpenSim.Tests.Common.Setup; namespace OpenSim.Region.Environment.Scenes.Tests { @@ -50,8 +51,8 @@ namespace OpenSim.Region.Environment.Scenes.Tests [Test] public void TestAddSceneObject() { - Scene scene = SceneTestUtils.SetupScene(); - SceneObjectPart part = SceneTestUtils.AddSceneObject(scene); + Scene scene = SceneSetupHelpers.SetupScene(); + SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene); SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); //System.Console.WriteLine("retrievedPart : {0}", retrievedPart); @@ -65,8 +66,8 @@ namespace OpenSim.Region.Environment.Scenes.Tests [Test] public void TestDeleteSceneObject() { - TestScene scene = SceneTestUtils.SetupScene(); - SceneObjectPart part = SceneTestUtils.AddSceneObject(scene); + TestScene scene = SceneSetupHelpers.SetupScene(); + SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene); scene.DeleteSceneObject(part.ParentGroup, false); SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); @@ -81,15 +82,15 @@ namespace OpenSim.Region.Environment.Scenes.Tests { UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001"); - TestScene scene = SceneTestUtils.SetupScene(); + TestScene scene = SceneSetupHelpers.SetupScene(); // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; sogd.Enabled = false; - SceneObjectPart part = SceneTestUtils.AddSceneObject(scene); + SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene); - IClientAPI client = SceneTestUtils.AddRootAgent(scene, agentId); + IClientAPI client = SceneSetupHelpers.AddRootAgent(scene, agentId); scene.DeRezObject(client, part.LocalId, UUID.Zero, DeRezAction.Delete, UUID.Zero); SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); @@ -105,10 +106,10 @@ namespace OpenSim.Region.Environment.Scenes.Tests { bool debugtest = false; - Scene scene = SceneTestUtils.SetupScene(); - SceneObjectPart part1 = SceneTestUtils.AddSceneObject(scene); + Scene scene = SceneSetupHelpers.SetupScene(); + SceneObjectPart part1 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp1 = part1.ParentGroup; - SceneObjectPart part2 = SceneTestUtils.AddSceneObject(scene); + SceneObjectPart part2 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp2 = part2.ParentGroup; @@ -178,14 +179,14 @@ namespace OpenSim.Region.Environment.Scenes.Tests { bool debugtest = false; - Scene scene = SceneTestUtils.SetupScene(); - SceneObjectPart part1 = SceneTestUtils.AddSceneObject(scene); + Scene scene = SceneSetupHelpers.SetupScene(); + SceneObjectPart part1 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp1 = part1.ParentGroup; - SceneObjectPart part2 = SceneTestUtils.AddSceneObject(scene); + SceneObjectPart part2 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp2 = part2.ParentGroup; - SceneObjectPart part3 = SceneTestUtils.AddSceneObject(scene); + SceneObjectPart part3 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp3 = part3.ParentGroup; - SceneObjectPart part4 = SceneTestUtils.AddSceneObject(scene); + SceneObjectPart part4 = SceneSetupHelpers.AddSceneObject(scene); SceneObjectGroup grp4 = part4.ParentGroup; @@ -310,21 +311,21 @@ namespace OpenSim.Region.Environment.Scenes.Tests UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001"); string myObjectName = "Fred"; - TestScene scene = SceneTestUtils.SetupScene(); - SceneObjectPart part = SceneTestUtils.AddSceneObject(scene, myObjectName); + TestScene scene = SceneSetupHelpers.SetupScene(); + SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene, myObjectName); Assert.That( scene.CommsManager.UserAdminService.AddUser( "Bob", "Hoskins", "test", "test@test.com", 1000, 1000, agentId), Is.EqualTo(agentId)); - IClientAPI client = SceneTestUtils.AddRootAgent(scene, agentId); + IClientAPI client = SceneSetupHelpers.AddRootAgent(scene, agentId); CachedUserInfo userInfo = scene.CommsManager.UserProfileCacheService.GetUserDetails(agentId); Assert.That(userInfo, Is.Not.Null); Assert.That(userInfo.RootFolder, Is.Not.Null); - SceneTestUtils.DeleteSceneObjectAsync(scene, part, DeRezAction.Take, userInfo.RootFolder.ID, client); + SceneSetupHelpers.DeleteSceneObjectAsync(scene, part, DeRezAction.Take, userInfo.RootFolder.ID, client); // Check that we now have the taken part in our inventory Assert.That(myObjectName, Is.EqualTo(userInfo.RootFolder.FindItemByPath(myObjectName).Name)); diff --git a/OpenSim/Region/Environment/Scenes/Tests/ScenePresenceTests.cs b/OpenSim/Region/Environment/Scenes/Tests/ScenePresenceTests.cs index 5ce78a3..5649b16 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/ScenePresenceTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/ScenePresenceTests.cs @@ -31,6 +31,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Environment.Scenes; using OpenSim.Tests.Common.Mock; +using OpenSim.Tests.Common.Setup; namespace OpenSim.Region.Environment.Scenes.Tests { @@ -46,7 +47,7 @@ namespace OpenSim.Region.Environment.Scenes.Tests [Test] public void TestAddRootAgent() { - Scene scene = SceneTestUtils.SetupScene(); + Scene scene = SceneSetupHelpers.SetupScene(); UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001"); string firstName = "testfirstname"; @@ -77,10 +78,10 @@ namespace OpenSim.Region.Environment.Scenes.Tests [Test] public void TestRemoveRootAgent() { - Scene scene = SceneTestUtils.SetupScene(); + Scene scene = SceneSetupHelpers.SetupScene(); UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001"); - SceneTestUtils.AddRootAgent(scene, agentId); + SceneSetupHelpers.AddRootAgent(scene, agentId); scene.RemoveClient(agentId); diff --git a/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs b/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs deleted file mode 100644 index 6fa918a..0000000 --- a/OpenSim/Region/Environment/Scenes/Tests/SceneTestUtils.cs +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System.Net; -using Nini.Config; -using OpenMetaverse; -using OpenSim.Framework; -using OpenSim.Framework.Communications; -using OpenSim.Framework.Communications.Cache; -using OpenSim.Framework.Servers; -using OpenSim.Region.Physics.Manager; -using OpenSim.Region.Environment; -using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Modules.Agent.Capabilities; -using OpenSim.Region.Environment.Scenes; -using OpenSim.Tests.Common.Mock; - -namespace OpenSim.Region.Environment.Scenes.Tests -{ - /// - /// Utilities for constructing and performing operations upon scenes. - /// - public class SceneTestUtils - { - /// - /// Set up a test scene - /// - /// - public static TestScene SetupScene() - { - return SetupScene("Unit test region", UUID.Random(), 1000, 1000, new TestCommunicationsManager()); - } - - /// - /// Set up a test scene - /// - /// Name of the region - /// ID of the region - /// X co-ordinate of the region - /// Y co-ordinate of the region - /// This should be the same if simulating two scenes within a standalone - /// - public static TestScene SetupScene(string name, UUID id, uint x, uint y, CommunicationsManager cm) - { - RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); - regInfo.RegionName = name; - regInfo.RegionID = id; - - AgentCircuitManager acm = new AgentCircuitManager(); - SceneCommunicationService scs = new SceneCommunicationService(cm); - - SQLAssetServer assetService = new SQLAssetServer(new TestAssetDataPlugin()); - AssetCache ac = new AssetCache(assetService); - - StorageManager sm = new StorageManager("OpenSim.Data.Null.dll", "", ""); - IConfigSource configSource = new IniConfigSource(); - - TestScene testScene = new TestScene( - regInfo, acm, cm, scs, ac, sm, null, false, false, false, configSource, null); - - IRegionModule capsModule = new CapabilitiesModule(); - capsModule.Initialise(testScene, new IniConfigSource()); - testScene.AddModule(capsModule.Name, capsModule); - testScene.SetModuleInterfaces(); - - testScene.LandChannel = new TestLandChannel(); - testScene.LoadWorldMap(); - - PhysicsPluginManager physicsPluginManager = new PhysicsPluginManager(); - physicsPluginManager.LoadPluginsFromAssembly("Physics/OpenSim.Region.Physics.BasicPhysicsPlugin.dll"); - testScene.PhysicsScene - = physicsPluginManager.GetPhysicsScene("basicphysics", "ZeroMesher", configSource, "test"); - - return testScene; - } - - /// - /// Generate some standard agent connection data. - /// - /// - /// - public static AgentCircuitData GenerateAgentData(UUID agentId) - { - string firstName = "testfirstname"; - - AgentCircuitData agentData = new AgentCircuitData(); - agentData.AgentID = agentId; - agentData.firstname = firstName; - agentData.lastname = "testlastname"; - agentData.SessionID = UUID.Zero; - agentData.SecureSessionID = UUID.Zero; - agentData.circuitcode = 123; - agentData.BaseFolder = UUID.Zero; - agentData.InventoryFolder = UUID.Zero; - agentData.startpos = Vector3.Zero; - agentData.CapsPath = "http://wibble.com"; - - return agentData; - } - - /// - /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test - /// - /// - /// - /// - public static TestClient AddRootAgent(Scene scene, UUID agentId) - { - return AddRootAgent(scene, GenerateAgentData(agentId)); - } - - /// - /// Add a root agent. - /// - /// - /// This function - /// - /// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the - /// userserver if grid) would give initial login data back to the client and separately tell the scene that the - /// agent was coming. - /// - /// 2) Connects the agent with the scene - /// - /// This function performs actions equivalent with notifying the scene that an agent is - /// coming and then actually connecting the agent to the scene. The one step missed out is the very first - /// - /// - /// - /// - public static TestClient AddRootAgent(Scene scene, AgentCircuitData agentData) - { - // We emulate the proper login sequence here by doing things in three stages - // Stage 1: simulate login by telling the scene to expect a new user connection - scene.NewUserConnection(agentData); - - // Stage 2: add the new client as a child agent to the scene - TestClient client = new TestClient(agentData, scene); - scene.AddNewClient(client); - - // Stage 3: Invoke agent crossing, which converts the child agent into a root agent (with appearance, - // inventory, etc.) - scene.AgentCrossing(agentData.AgentID, new Vector3(90, 90, 90), false); - - return client; - } - - /// - /// Add a test object - /// - /// - /// - public static SceneObjectPart AddSceneObject(Scene scene) - { - return AddSceneObject(scene, null); - } - - /// - /// Add a test object - /// - /// - /// - /// - public static SceneObjectPart AddSceneObject(Scene scene, string name) - { - SceneObjectGroup sceneObject = new SceneObjectGroup(); - SceneObjectPart part - = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); - - if (name != null) - part.Name = name; - - //part.UpdatePrimFlags(false, false, true); - part.ObjectFlags |= (uint)PrimFlags.Phantom; - sceneObject.SetRootPart(part); - - scene.AddNewSceneObject(sceneObject, false); - - return part; - } - - /// - /// Delete a scene object asynchronously - /// - /// - /// - /// - /// - /// - public static void DeleteSceneObjectAsync( - TestScene scene, SceneObjectPart part, DeRezAction action, UUID destinationId, IClientAPI client) - { - // Turn off the timer on the async sog deleter - we'll crank it by hand within a unit test - AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; - sogd.Enabled = false; - - scene.DeRezObject(client, part.LocalId, UUID.Zero, action, destinationId); - sogd.InventoryDeQueueAndDelete(); - } - } -} diff --git a/OpenSim/Region/Environment/Scenes/Tests/StandaloneTeleportTests.cs b/OpenSim/Region/Environment/Scenes/Tests/StandaloneTeleportTests.cs index 3bc8467..f1ad508 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/StandaloneTeleportTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/StandaloneTeleportTests.cs @@ -35,6 +35,7 @@ using OpenSim.Region.Environment; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Communications.REST; using OpenSim.Tests.Common.Mock; +using OpenSim.Tests.Common.Setup; namespace OpenSim.Region.Environment.Scenes.Tests { @@ -61,21 +62,21 @@ namespace OpenSim.Region.Environment.Scenes.Tests IRegionModule interregionComms = new RESTInterregionComms(); // TODO: Clean this up - Scene sceneA = SceneTestUtils.SetupScene("sceneA", sceneAId, 1000, 1000, cm); + Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm); interregionComms.Initialise(sceneA, new IniConfigSource()); sceneA.AddModule(interregionComms.Name, interregionComms); sceneA.SetModuleInterfaces(); sceneA.RegisterRegionWithGrid(); // TODO: Clean this up - Scene sceneB = SceneTestUtils.SetupScene("sceneB", sceneBId, 1010, 1010, cm); + Scene sceneB = SceneSetupHelpers.SetupScene("sceneB", sceneBId, 1010, 1010, cm); interregionComms.Initialise(sceneB, new IniConfigSource()); sceneB.AddModule(interregionComms.Name, interregionComms); sceneB.SetModuleInterfaces(); sceneB.RegisterRegionWithGrid(); UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000041"); - TestClient client = SceneTestUtils.AddRootAgent(sceneA, agentId); + TestClient client = SceneSetupHelpers.AddRootAgent(sceneA, agentId); ICapabilitiesModule sceneACapsModule = sceneA.RequestModuleInterface(); diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs new file mode 100644 index 0000000..11ebc86 --- /dev/null +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs @@ -0,0 +1,224 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Net; +using Nini.Config; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Framework.Communications; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Servers; +using OpenSim.Region.Physics.Manager; +using OpenSim.Region.Environment; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Modules.Agent.Capabilities; +using OpenSim.Region.Environment.Scenes; +using OpenSim.Tests.Common.Mock; + +namespace OpenSim.Tests.Common.Setup +{ + /// + /// Helpers for setting up scenes. + /// + public class SceneSetupHelpers + { + /// + /// Set up a test scene + /// + /// + public static TestScene SetupScene() + { + return SetupScene("Unit test region", UUID.Random(), 1000, 1000, new TestCommunicationsManager()); + } + + /// + /// Set up a test scene + /// + /// Name of the region + /// ID of the region + /// X co-ordinate of the region + /// Y co-ordinate of the region + /// This should be the same if simulating two scenes within a standalone + /// + public static TestScene SetupScene(string name, UUID id, uint x, uint y, CommunicationsManager cm) + { + RegionInfo regInfo = new RegionInfo(x, y, new IPEndPoint(IPAddress.Loopback, 9000), "127.0.0.1"); + regInfo.RegionName = name; + regInfo.RegionID = id; + + AgentCircuitManager acm = new AgentCircuitManager(); + SceneCommunicationService scs = new SceneCommunicationService(cm); + + SQLAssetServer assetService = new SQLAssetServer(new TestAssetDataPlugin()); + AssetCache ac = new AssetCache(assetService); + + StorageManager sm = new StorageManager("OpenSim.Data.Null.dll", "", ""); + IConfigSource configSource = new IniConfigSource(); + + TestScene testScene = new TestScene( + regInfo, acm, cm, scs, ac, sm, null, false, false, false, configSource, null); + + IRegionModule capsModule = new CapabilitiesModule(); + capsModule.Initialise(testScene, new IniConfigSource()); + testScene.AddModule(capsModule.Name, capsModule); + testScene.SetModuleInterfaces(); + + testScene.LandChannel = new TestLandChannel(); + testScene.LoadWorldMap(); + + PhysicsPluginManager physicsPluginManager = new PhysicsPluginManager(); + physicsPluginManager.LoadPluginsFromAssembly("Physics/OpenSim.Region.Physics.BasicPhysicsPlugin.dll"); + testScene.PhysicsScene + = physicsPluginManager.GetPhysicsScene("basicphysics", "ZeroMesher", configSource, "test"); + + return testScene; + } + + /// + /// Generate some standard agent connection data. + /// + /// + /// + public static AgentCircuitData GenerateAgentData(UUID agentId) + { + string firstName = "testfirstname"; + + AgentCircuitData agentData = new AgentCircuitData(); + agentData.AgentID = agentId; + agentData.firstname = firstName; + agentData.lastname = "testlastname"; + agentData.SessionID = UUID.Zero; + agentData.SecureSessionID = UUID.Zero; + agentData.circuitcode = 123; + agentData.BaseFolder = UUID.Zero; + agentData.InventoryFolder = UUID.Zero; + agentData.startpos = Vector3.Zero; + agentData.CapsPath = "http://wibble.com"; + + return agentData; + } + + /// + /// Add a root agent where the details of the agent connection (apart from the id) are unimportant for the test + /// + /// + /// + /// + public static TestClient AddRootAgent(Scene scene, UUID agentId) + { + return AddRootAgent(scene, GenerateAgentData(agentId)); + } + + /// + /// Add a root agent. + /// + /// + /// This function + /// + /// 1) Tells the scene that an agent is coming. Normally, the login service (local if standalone, from the + /// userserver if grid) would give initial login data back to the client and separately tell the scene that the + /// agent was coming. + /// + /// 2) Connects the agent with the scene + /// + /// This function performs actions equivalent with notifying the scene that an agent is + /// coming and then actually connecting the agent to the scene. The one step missed out is the very first + /// + /// + /// + /// + public static TestClient AddRootAgent(Scene scene, AgentCircuitData agentData) + { + // We emulate the proper login sequence here by doing things in three stages + // Stage 1: simulate login by telling the scene to expect a new user connection + scene.NewUserConnection(agentData); + + // Stage 2: add the new client as a child agent to the scene + TestClient client = new TestClient(agentData, scene); + scene.AddNewClient(client); + + // Stage 3: Invoke agent crossing, which converts the child agent into a root agent (with appearance, + // inventory, etc.) + scene.AgentCrossing(agentData.AgentID, new Vector3(90, 90, 90), false); + + return client; + } + + /// + /// Add a test object + /// + /// + /// + public static SceneObjectPart AddSceneObject(Scene scene) + { + return AddSceneObject(scene, null); + } + + /// + /// Add a test object + /// + /// + /// + /// + public static SceneObjectPart AddSceneObject(Scene scene, string name) + { + SceneObjectGroup sceneObject = new SceneObjectGroup(); + SceneObjectPart part + = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); + + if (name != null) + part.Name = name; + + //part.UpdatePrimFlags(false, false, true); + part.ObjectFlags |= (uint)PrimFlags.Phantom; + sceneObject.SetRootPart(part); + + scene.AddNewSceneObject(sceneObject, false); + + return part; + } + + /// + /// Delete a scene object asynchronously + /// + /// + /// + /// + /// + /// + public static void DeleteSceneObjectAsync( + TestScene scene, SceneObjectPart part, DeRezAction action, UUID destinationId, IClientAPI client) + { + // Turn off the timer on the async sog deleter - we'll crank it by hand within a unit test + AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; + sogd.Enabled = false; + + scene.DeRezObject(client, part.LocalId, UUID.Zero, action, destinationId); + sogd.InventoryDeQueueAndDelete(); + } + } +} -- cgit v1.1