From 134f86e8d5c414409631b25b8c6f0ee45fbd8631 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Thu, 3 Nov 2016 21:44:39 +1000
Subject: Initial update to OpenSim 0.8.2.1 source code.
---
.../Scenes/Tests/SceneObjectDeRezTests.cs | 111 ++++++++++++++++-----
1 file changed, 88 insertions(+), 23 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
index c1522e7..1c396ac 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
@@ -32,13 +32,13 @@ using Nini.Config;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
-using OpenSim.Framework.Communications;
+using OpenSim.Region.CoreModules.Framework.EntityTransfer;
using OpenSim.Region.CoreModules.Framework.InventoryAccess;
+using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
using OpenSim.Region.CoreModules.World.Permissions;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
using OpenSim.Tests.Common;
-using OpenSim.Tests.Common.Mock;
namespace OpenSim.Region.Framework.Scenes.Tests
{
@@ -52,6 +52,24 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[TestFixture]
public class SceneObjectDeRezTests : OpenSimTestCase
{
+ [TestFixtureSetUp]
+ public void FixtureInit()
+ {
+ // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
+ // This facility was added after the original async delete tests were written, so it may be possible now
+ // to not bother explicitly disabling their async (since everything will be running sync).
+ Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
+ // threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
+ // tests really shouldn't).
+ Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
+ }
+
///
/// Test deleting an object from a scene.
///
@@ -59,46 +77,96 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDeRezSceneObject()
{
TestHelpers.InMethod();
-// log4net.Config.XmlConfigurator.Configure();
UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001");
TestScene scene = new SceneHelpers().SetupScene();
- IConfigSource configSource = new IniConfigSource();
- IConfig config = configSource.AddConfig("Startup");
- config.Set("serverside_object_permissions", true);
- SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
- IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
+ SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
+ TestClient client = (TestClient)SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
// 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
- = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero);
- part.Name = "obj1";
- scene.AddNewSceneObject(new SceneObjectGroup(part), false);
+
+ SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, "so1", userId);
+ uint soLocalId = so.LocalId;
List localIds = new List();
- localIds.Add(part.LocalId);
+ localIds.Add(so.LocalId);
scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero);
// Check that object isn't deleted until we crank the sogd handle.
- SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
+ SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId);
Assert.That(retrievedPart, Is.Not.Null);
Assert.That(retrievedPart.ParentGroup.IsDeleted, Is.False);
sogd.InventoryDeQueueAndDelete();
- SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(part.LocalId);
- Assert.That(retrievedPart2, Is.Null);
+ SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId);
+ Assert.That(retrievedPart2, Is.Null);
+
+ Assert.That(client.ReceivedKills.Count, Is.EqualTo(1));
+ Assert.That(client.ReceivedKills[0], Is.EqualTo(soLocalId));
+ }
+
+ ///
+ /// Test that child and root agents correctly receive KillObject notifications.
+ ///
+ [Test]
+ public void TestDeRezSceneObjectToAgents()
+ {
+ TestHelpers.InMethod();
+// TestHelpers.EnableLogging();
+
+ SceneHelpers sh = new SceneHelpers();
+ TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000);
+ TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1000, 999);
+
+ // We need this so that the creation of the root client for userB in sceneB can trigger the creation of a child client in sceneA
+ LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule();
+ EntityTransferModule etmB = new EntityTransferModule();
+ IConfigSource config = new IniConfigSource();
+ IConfig modulesConfig = config.AddConfig("Modules");
+ modulesConfig.Set("EntityTransferModule", etmB.Name);
+ modulesConfig.Set("SimulationServices", lscm.Name);
+ SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
+ SceneHelpers.SetupSceneModules(sceneB, config, etmB);
+
+ // We need this for derez
+ SceneHelpers.SetupSceneModules(sceneA, new PermissionsModule());
+
+ UserAccount uaA = UserAccountHelpers.CreateUserWithInventory(sceneA, "Andy", "AAA", 0x1, "");
+ UserAccount uaB = UserAccountHelpers.CreateUserWithInventory(sceneA, "Brian", "BBB", 0x2, "");
+
+ TestClient clientA = (TestClient)SceneHelpers.AddScenePresence(sceneA, uaA).ControllingClient;
+
+ // This is the more long-winded route we have to take to get a child client created for userB in sceneA
+ // rather than just calling AddScenePresence() as for userA
+ AgentCircuitData acd = SceneHelpers.GenerateAgentData(uaB);
+ TestClient clientB = new TestClient(acd, sceneB);
+ List childClientsB = new List();
+ EntityTransferHelpers.SetupInformClientOfNeighbourTriggersNeighbourClientCreate(clientB, childClientsB);
+
+ SceneHelpers.AddScenePresence(sceneB, clientB, acd);
+
+ SceneObjectGroup so = SceneHelpers.AddSceneObject(sceneA);
+ uint soLocalId = so.LocalId;
+
+ sceneA.DeleteSceneObject(so, false);
+
+ Assert.That(clientA.ReceivedKills.Count, Is.EqualTo(1));
+ Assert.That(clientA.ReceivedKills[0], Is.EqualTo(soLocalId));
+
+ Assert.That(childClientsB[0].ReceivedKills.Count, Is.EqualTo(1));
+ Assert.That(childClientsB[0].ReceivedKills[0], Is.EqualTo(soLocalId));
}
///
/// Test deleting an object from a scene where the deleter is not the owner
///
- ///
+ ///
/// This test assumes that the deleter is not a god.
+ ///
[Test]
public void TestDeRezSceneObjectNotOwner()
{
@@ -109,10 +177,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001");
TestScene scene = new SceneHelpers().SetupScene();
- IConfigSource configSource = new IniConfigSource();
- IConfig config = configSource.AddConfig("Startup");
- config.Set("serverside_object_permissions", true);
- SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() });
+ SceneHelpers.SetupSceneModules(scene, new PermissionsModule());
IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
@@ -164,7 +229,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
UserAccount ua = UserAccountHelpers.CreateUserWithInventory(scene, agentId);
InventoryFolderBase folder1
- = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, ua.PrincipalID, "folder1");
+ = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, ua.PrincipalID, "folder1", false);
IClientAPI client = SceneHelpers.AddScenePresence(scene, agentId).ControllingClient;
scene.DeRezObjects(client, new List() { so.LocalId }, UUID.Zero, DeRezAction.Take, folder1.ID);
--
cgit v1.1